Я пытался отправить push-уведомление помощнику Google, вызвав действия api "https://actions.googleapis.com/v2/conversations:send". Я получаю 403. У вызывающего абонента нет ошибки разрешения.
Я выполнил действия, указанные вдокументация push-уведомлений. "https://developers.google.com/actions/assistant/updates/notifications#java".
Создан ключ учетной записи службы и назначена роль в качестве владельца проекта.
String token = getAccessToken();
HttpPost request = new HttpPost("https://actions.googleapis.com/v2/conversations:send");
request.setHeader("Content-type", "application/json");
request.setHeader("Authorization", "Bearer " + token);
StringEntity entity = new StringEntity("{\n" +
" \"customPushMessage\": {\n" +
" \"target\": {\n" +
" \"userId\": \"id of user\",\n" +
" \"intent\": \"intent name\",\n" +
" \"locale\": \"en-US\"\n" +
" },\n" +
" \"userNotification\": {\n" +
" \"title\": \"title\",\n" +
" \"text\": \"test msg\"\n" +
" }\n" +
" }\n" +
"}");
entity.setContentType(ContentType.APPLICATION_JSON.getMimeType());
request.setEntity(entity);
HttpClient httpClient = HttpClientBuilder.create().build();
HttpResponse res = httpClient.execute(request);
private String getAccessToken() throws IOException {
AccessToken token = loadCredentials().refreshAccessToken();
return token.getTokenValue();
}
private ServiceAccountCredentials loadCredentials() throws IOException {
String actionsApiServiceAccountFile =
this.getClass().getClassLoader().getResource("/serviceaccountkey.json").getFile();
InputStream actionsApiServiceAccount = new FileInputStream(actionsApiServiceAccountFile);
ServiceAccountCredentials serviceAccountCredentials =
ServiceAccountCredentials.fromStream(actionsApiServiceAccount);
return (ServiceAccountCredentials)
serviceAccountCredentials.createScoped(
Collections.singleton(
"https://www.googleapis.com/auth/actions.fulfillment.conversation"));
}
Ожидаемые действия API для отправки push-уведомления пользователю.
Но появляется ошибка:
{"error": {"code": 403, "message": "У вызывающей стороны нет разрешения", "status": "PERMISSION_DENIED"}}