Тайм-аут запроса в API.AI

У меня есть агент API.ai, который отправляет запрос (исходит от пользователя) на веб-хук, который требует много обработки (более 5 секунд), чтобы получить ответ. Насколько я знаю, что нет возможности увеличить время ожидания ответа в API.ai

Итак, я создал 2 намерения. Первый просто вызовет мой вебхук, чтобы начать обработку результата, и в то же время вебхук ответит пользователю: "Ваш запрос находится в обработке...". Второе намерение имеет событие и действие. Цель нового события — просто отобразить результат пользователю. Как только результат будет готов, мое серверное приложение отправит оператор 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. Ни один из них не показал мне (как пользователю) указанный ответ.

Я не уверен, что я сделал что-то не так? скриншот второго намерения


person Maghaj    schedule 27.09.2017    source источник


Ответы (1)


API.AI на самом деле не предназначен для обработки действий, управляемых событиями. Он предназначен быть посредником в разговоре, поэтому нормальная схема такова:

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

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

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

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

person Prisoner    schedule 27.09.2017
comment
Они собираются добавить эту функцию в ближайшее время? - person Maghaj; 30.09.2017
comment
Опять же, все, что я знаю, это то, что я сказал в своем ответе: они объявили об уведомлениях на I/O 2017, но не сказали, когда, будет ли у него API или как этот API будет выглядеть. - person Prisoner; 30.09.2017