Тайм-аут запроса в API.AI
У меня есть агент API.ai, который отправляет запрос (исходит от пользователя) на веб-крючок, который требует большой обработки (более 5 секунд), чтобы получить ответ. Насколько я знаю, в API.ai нельзя увеличить время ожидания ответа.
Итак, я создал 2 намерения. Первый просто вызовет мой webhook, чтобы начать обработку результата, и в то же время webhook ответит пользователю: "Ваш запрос обрабатывается...". Второе намерение имеет событие и действие. Цель нового события - просто показать результат пользователю. Как только результат будет готов, мое внутреннее приложение отправит оператор curl, чтобы вызвать событие во втором намерении с необходимыми изменениями параметров, такими как sessionID, v, часовой пояс и т. Д.
Я получил следующий JSON от API.AI (я создал пример, чтобы упростить мой случай):
{ "id": "de31ee96-c42f-4f2d-8461-ee39279ec2ed", "timestamp": "2017-09-27T13:39:46.932Z", "lang": "en", "result": {
"source": "agent",
"resolvedQuery": "custom_event",
"action": "test",
"actionIncomplete": false,
"parameters": {
"user_name": "Sam"
},
"contexts": [
{
"name": "welcoming-followup",
"parameters": {
"name.original": "",
"user_name": "Sam",
"name": "",
"user_name.original": ""
},
"lifespan": 2
}
],
"metadata": {
"intentId": "c196a388-16ac-4966-b55c-7cd999a7d680",
"webhookUsed": false,
"webhookForSlotFillingUsed": "false",
"intentName": "Welcoming"
},
"fulfillment": {
"speech": "Hello Sam",
"messages": [
{
"type": 0,
"speech": "Hello Sam"
}
]
},
"score": 1.0 }, "status": {
"code": 200,
"errorType": "success" }, "sessionId": "67cb28fd-6871-750c-d668-d0b736b763ec" }
Вот заявление curl, которое было отправлено моим бэкэндом.
The curl statement is: curl -X POST -H "Content-Type: application/json; charset=utf-8" -H "Authorization: Bearer I INSERTED THE CORRECT CODE HERE" --data "{'event':{ 'name': 'custom_event', 'data': {'name': 'Sam'}}, 'timezone':'America/New_York', 'lang':'en', 'sessionId':'a6ac2555-4b19-40f8-92ec-397f6a042dde'}" "https://api.api.ai/v1/query?v=20150910"
Как видно из приведенного выше JSON, агент API.ai получил триггер успешно. Но ответ, который я указал в разделе "Ответ", не показывается пользователю.
Я приложил скриншот для второго намерения в агенте API.ai.
Примечание: я попробовал агент в консоли разработчика, WebDemo и Slack. Ни один из них не показывал мне (как пользователю) указанный ответ.
Я не уверен, что сделал что-то не так? скриншот второго намерения
1 ответ
API.AI на самом деле не предназначен для обработки событийных действий. Предполагается, что он является посредником в разговоре, поэтому нормальная схема такова:
- Пользователь что-то говорит
- API.AI обрабатывает это, возможно, с помощью webhook, и отправляет ответ.
На таких устройствах, как Google Home, нет способа получить уведомление, поэтому, если пользователь не скажет что-либо (шаг 1), вы никогда не перейдете к шагу 2.
Когда вы пытаетесь запустить его вручную, API.AI обрабатывает ваш триггер как шаг 1 и отвечает на ваш триггер. Он не может отправить этот ответ обратно помощнику, потому что в данный момент он не разговаривает с помощником - он разговаривает с вами, однако вы вызвали его вручную.
На самом деле сейчас нет хорошего способа сделать то, что вы хотите. Мы знаем, что в конечном итоге уведомления приходят к Ассистенту (об этом было объявлено на I/O 2017), но мы не знаем, будет ли у него API или как он будет выглядеть. В Transaction API есть уведомления, но транзакции предназначены для операций, в которых вы что-то покупаете или бронируете. Если вам нужно, вы можете использовать что-то вроде Firebase Cloud Messaging, чтобы ваш пользователь знал, что он может запросить результат, но это неоптимальный опыт.