Я пытаюсь выяснить, как инициировать push-уведомление с помощью DialogFlow / Google Actions.Я собрал некоторый тестовый код, но когда я тестирую его, я получаю ответ «403 Forbidden».Может кто-нибудь предоставить мне хороший пример того, как сделать это с помощью Python 3.
`
import urllib.request
import json
notification = {
'userNotification': {
'title': 'Test Notification',
},
'target': {
'userId': 'user-id here',
'intent': 'Notification Intent',
'locale': 'en-US',
}
}
my_url = 'https://actions.googleapis.com/v2/conversations:send'
access_token = 'access token here'
request = urllib.request.Request(my_url)
request.add_header('Content-Type', 'application/json; charset=utf-8')
payload = { 'auth': { 'bearer': access_token },
'json': 'true',
'body': { 'customPushMessage': notification, 'isInSandbox':
'true' } };
jsondata = json.dumps(payload)
jsondataasbytes = jsondata.encode('utf-8')
response = urllib.request.urlopen(request, jsondataasbytes)
`
Может кто-нибудь дать какие-либо предложения о том, как получить эторабота?
==================================================================
Обновление: я изменил заголовок auth, как предложено, и теперь я получаю '401: Unauthorized'.Я не уверен, правильно ли я создаю токен доступа.Вот как я это делаю:
Я создал закрытый ключ RSA256 на веб-сайте консоли Google.Я использую этот ключ для кодирования JWT, содержащего следующие поля:
{
"iss": [
"My Service Name",
"\"my_service-account@service_name.iam.gserviceaccount.com\""
],
"iat": 1544018697,
"exp": 1544019898,
"aud":
"https://www.googleapis.com/auth/actions.fulfillment.conversation\"",
"sub": [
"Push Notification",
"\"my-service-account@service_name.iam.gserviceaccount.com\""
]
}
Я не знаю, правильно ли это: документацию для всего этого сложно собрать.
ОБНОВЛЕНИЕ2:
Я изменил код, предложенный Prisoner, и теперь я могу получить то, что кажется действительным access_token.Это модифицированный код:
from oauth2client.client import GoogleCredentials
service_account_file = 'path-to-service_account_file'
credentials = GoogleCredentials.from_stream(SERVICE_ACCOUNT_FILE)
access_token = credentials.get_access_token().access_token
Когда я пытаюсь использовать токен доступа, я по-прежнему получаю ответ «401 Unauthorized».Кто-нибудь на самом деле сделал это?Если да, можете ли вы дать мне некоторые подробности о правильном URL-адресе и о том, как отформатировать сообщение urllib.request?