Я хочу создать чат-бота с Dialogflow и Google Assistant вместе с API транзакций Google, чтобы пользователь мог заказать шоколадную коробку.На данный момент мой агент содержит следующие четыре намерения:
Default Welcome Intent
(текстовый ответ: Здравствуйте, вы хотите купить шоколадную коробку?) Default Fallback Intent
Int1
(обучающая фраза: да, я хочу, выполнение: включен вызов веб-крюка) Int2
(событие: actions_intent_TRANSACTION_REQUIREMENTS_CHECK)
Вместо этого я использую Dialogflow JsonNode.js, чтобы связать моего агента с API транзакций.Я хочу проверить, соответствует ли пользователь требованиям транзакции (при заказе шоколадной коробки) с помощью действия actions.intent.TRANSACTION_REQUIREMENTS_CHECK
действий Google.По этой причине, следуя документам Google, при запуске Int1
я использую веб-крючок, который подключает Google Assistant к следующему скрипту на Python (бэкэнд):
from flask import Flask, render_template, request, jsonify
from flask_cors import CORS
import requests
app = Flask(__name__)
CORS(app)
@app.route("/", methods=['POST'])
def index():
data = request.get_json()
intent = data["queryResult"]["intent"]["displayName"]
if (intent == 'Int1'):
return jsonify({ "data": {
"google": {
"expectUserResponse": True,
"isSsml": False,
"noInputPrompts": [],
"systemIntent": {
"data": {
"@type": "type.googleapis.com/google.actions.v2.TransactionRequirementsCheckSpec",
"paymentOptions": {
"actionProvidedOptions": {
"displayName": "VISA-1234",
"paymentType": "PAYMENT_CARD"
}
}
},
"intent": "actions.intent.TRANSACTION_REQUIREMENTS_CHECK"
}
}
}
})
else:
return jsonify({'message': 'HERE'})
if __name__== "__main__":
app.run(debug=True)
json, который я возвращаю выше, когдаintent = 'Int1'
- это значение, указанное в документации Google для «Проверка требований с помощью собственного метода оплаты».Согласно Google Docs, это должно быть сделано следующим образом:
Получение результата проверки требований
После того, как помощник выполнит намерение, он отправит ваше выполнение запрос с действиями.намерение intent.TRANSACTION_REQUIREMENTS_CHECK с результатом проверки.
Чтобы правильно обработать этот запрос, объявите намерение Dialogflow, которое вызывается событием actions_intent_TRANSACTION_REQUIREMENTS_CHECK.
По этой причине я определил Int2
и как его событие actions_intent_TRANSACTION_REQUIREMENTS_CHECK
.
Тем не менее, я не получаю ничего на моем бэк-энде, как результат проверки, и поэтому я не знаю, является ли действие actions.intent.TRANSACTION_REQUIREMENTS_CHECK
действительно срабатывает.Почему это происходит?
В общем, как я могу вызвать одно actions.intent.INTENT_NAME
намерение из моего webhook / back-end?
Когда я используюверсия Dialogflow v2, я получаю следующую информацию / сообщение о веб-крюке в Dialogflow при запуске Int1
:
"webhookStatus": {
"code": 3,
"message": "Webhook call failed. Error: Failed to parse webhook JSON response: Cannot find field: data in message google.cloud.dialogflow.v2.WebhookResponse."
}
В этом же случае я получаю следующую информацию / сообщение оwebhook в симуляторе Google Assistant при срабатывании Int1
:
"responseMetadata": {
"status": {
"code": 14,
"message": "Webhook error (206)"
}
Наконец, позвольте мне упомянуть, что я тестирую все это с Python
и ngrok
на моем локальном компьютере, поэтому, возможно, это создает проблемупотому что в начале Google Docs упоминается следующее:
Предупреждение. Веб-симулятор Actions не следует использовать для тестирования приложения с транзакциями.Пожалуйста, используйте устройство Android или iOS с поддержкой Assistant для точного тестирования вашего приложения во время разработки.