Тайм-аут запроса в 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 на самом деле не предназначен для обработки событийных действий. Предполагается, что он является посредником в разговоре, поэтому нормальная схема такова:

  1. Пользователь что-то говорит
  2. API.AI обрабатывает это, возможно, с помощью webhook, и отправляет ответ.

На таких устройствах, как Google Home, нет способа получить уведомление, поэтому, если пользователь не скажет что-либо (шаг 1), вы никогда не перейдете к шагу 2.

Когда вы пытаетесь запустить его вручную, API.AI обрабатывает ваш триггер как шаг 1 и отвечает на ваш триггер. Он не может отправить этот ответ обратно помощнику, потому что в данный момент он не разговаривает с помощником - он разговаривает с вами, однако вы вызвали его вручную.

На самом деле сейчас нет хорошего способа сделать то, что вы хотите. Мы знаем, что в конечном итоге уведомления приходят к Ассистенту (об этом было объявлено на I/O 2017), но мы не знаем, будет ли у него API или как он будет выглядеть. В Transaction API есть уведомления, но транзакции предназначены для операций, в которых вы что-то покупаете или бронируете. Если вам нужно, вы можете использовать что-то вроде Firebase Cloud Messaging, чтобы ваш пользователь знал, что он может запросить результат, но это неоптимальный опыт.

Другие вопросы по тегам