如何通过 Python 中的 Dialogflow fulfillment 从 google 助手发送推送通知
How to send push notification from google assistant through Dialogflow fulfilment in Python
我正在 google Dialogflow 中开发聊天机器人以获得 google 帮助,我已经关注了这个 Documentation for showing Push notifications。我已请求许可,但现在我停留在该文档的最后一步 (Exchange the key for an access token and send a notification
)。
谁能帮我做一下。我应该从我的 Python 履行代码发送哪个 JSON 响应?
试试这个:
import io
import json
import requests
from google.oauth2 import service_account
import google.auth.transport.requests
PATH_TO_SERVICE_ACCOUNT = 'path/to/json/service/account'
REQUIRED_SCOPE = 'https://www.googleapis.com/auth/actions.fulfillment.conversation'
# Get access token
with io.open(PATH_TO_SERVICE_ACCOUNT, 'r', encoding='utf-8') as json_fi:
credentials_info = json.load(json_fi)
credentials = service_account.Credentials.from_service_account_info(
credentials_info, scopes=[REQUIRED_SCOPE])
request = google.auth.transport.requests.Request()
credentials.refresh(request)
headers = {
'Authorization': 'Bearer: ' + credentials.token
}
payload = {'customPushMessage': {
'userNotification': {
'title': '<NOTIFICATION_TITLE>',
},
'target': {
'userId': '<USER_ID>',
'intent': '<INTENT>',
# Expects a IETF BCP-47 language code (i.e. en-US)
'locale': '<LOCALE>'
},
}
}
r = requests.get('https://actions.googleapis.com/v2/conversations:send', json=payload, headers=headers)
print(str(r.status_code) + ': ' + r.text)
终于,问题解决了。 @matthewayne 发布的代码有一些错误,例如请求必须是 "POST" 方法并且需要更改 payload 和 header 中的一些参数,因此它有效!,这里我更改了一些代码并尝试请求并收到通知!
我提到了this documentation to make it worked!
import io
import json
import requests
from google.oauth2 import service_account
import google.auth.transport.requests
PATH_TO_SERVICE_ACCOUNT = 'path/to/json/service/account'
REQUIRED_SCOPE = 'https://www.googleapis.com/auth/actions.fulfillment.conversation'
# Get access token
with io.open(PATH_TO_SERVICE_ACCOUNT, 'r', encoding='utf-8') as json_fi:
credentials_info = json.load(json_fi)
credentials = service_account.Credentials.from_service_account_info(
credentials_info, scopes=[REQUIRED_SCOPE])
request = google.auth.transport.requests.Request()
credentials.refresh(request)
headers = {
'Authorization': 'Bearer ' + credentials.token
}
payload = {
'customPushMessage': {
'userNotification': {
'title': 'Notification title',
'text': 'Simple Text'
},
'target': {
'userId': '<USER_ID>',
'intent': '<INTENT>',
# Expects a IETF BCP-47 language code (i.e. en-US)
'locale': 'en-US'
}
}
}
r = requests.request("POST", 'https://actions.googleapis.com/v2/conversations:send', data=json.dumps(payload), headers=headers)
print(str(r.status_code) + ': ' + r.text)
我正在 google Dialogflow 中开发聊天机器人以获得 google 帮助,我已经关注了这个 Documentation for showing Push notifications。我已请求许可,但现在我停留在该文档的最后一步 (Exchange the key for an access token and send a notification
)。
谁能帮我做一下。我应该从我的 Python 履行代码发送哪个 JSON 响应?
试试这个:
import io
import json
import requests
from google.oauth2 import service_account
import google.auth.transport.requests
PATH_TO_SERVICE_ACCOUNT = 'path/to/json/service/account'
REQUIRED_SCOPE = 'https://www.googleapis.com/auth/actions.fulfillment.conversation'
# Get access token
with io.open(PATH_TO_SERVICE_ACCOUNT, 'r', encoding='utf-8') as json_fi:
credentials_info = json.load(json_fi)
credentials = service_account.Credentials.from_service_account_info(
credentials_info, scopes=[REQUIRED_SCOPE])
request = google.auth.transport.requests.Request()
credentials.refresh(request)
headers = {
'Authorization': 'Bearer: ' + credentials.token
}
payload = {'customPushMessage': {
'userNotification': {
'title': '<NOTIFICATION_TITLE>',
},
'target': {
'userId': '<USER_ID>',
'intent': '<INTENT>',
# Expects a IETF BCP-47 language code (i.e. en-US)
'locale': '<LOCALE>'
},
}
}
r = requests.get('https://actions.googleapis.com/v2/conversations:send', json=payload, headers=headers)
print(str(r.status_code) + ': ' + r.text)
终于,问题解决了。 @matthewayne 发布的代码有一些错误,例如请求必须是 "POST" 方法并且需要更改 payload 和 header 中的一些参数,因此它有效!,这里我更改了一些代码并尝试请求并收到通知!
我提到了this documentation to make it worked!
import io
import json
import requests
from google.oauth2 import service_account
import google.auth.transport.requests
PATH_TO_SERVICE_ACCOUNT = 'path/to/json/service/account'
REQUIRED_SCOPE = 'https://www.googleapis.com/auth/actions.fulfillment.conversation'
# Get access token
with io.open(PATH_TO_SERVICE_ACCOUNT, 'r', encoding='utf-8') as json_fi:
credentials_info = json.load(json_fi)
credentials = service_account.Credentials.from_service_account_info(
credentials_info, scopes=[REQUIRED_SCOPE])
request = google.auth.transport.requests.Request()
credentials.refresh(request)
headers = {
'Authorization': 'Bearer ' + credentials.token
}
payload = {
'customPushMessage': {
'userNotification': {
'title': 'Notification title',
'text': 'Simple Text'
},
'target': {
'userId': '<USER_ID>',
'intent': '<INTENT>',
# Expects a IETF BCP-47 language code (i.e. en-US)
'locale': 'en-US'
}
}
}
r = requests.request("POST", 'https://actions.googleapis.com/v2/conversations:send', data=json.dumps(payload), headers=headers)
print(str(r.status_code) + ': ' + r.text)