0

我有一个 API.ai 代理将请求(来自用户)发送到需要大量处理(超过 5 秒)才能获得答案的 webhook。据我所知,没有办法增加 API.ai 中的响应超时

所以,我创建了 2 个意图。第一个会调用我的 webhook 开始处理结果,同时 webhook 会回复用户,“您的请求正在处理中......”。第二个意图有一个事件和动作。新事件的目的只是向用户显示结果。一旦结果准备好,我的后端应用程序将发送一个 curl 语句以触发第二个意图中的事件,并进行必要的参数修改,如 sessionID、v 和时区等。

我从 API.AI 收到了以下 JSON(我创建了一个示例来简化我的案例):

{   "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 中尝试了代理。他们都没有向我(作为用户)显示指定的响应。

我不确定我是否做错了什么? 第二个意图的屏幕截图

4

1 回答 1

1

API.AI 并不是真的要处理事件驱动的活动。它旨在成为对话中的中介 - 所以正常模式是:

  1. 用户说了些什么
  2. API.AI 可能使用 webhook 来处理这个,并发送响应。

诸如 Google Home 之类的设备无法获得通知,因此除非用户说了什么(第 1 步),否则您将永远无法进入第 2 步。

当您尝试手动触发它时,API.AI 将您的触发器视为第 1 步,它正在回复您的触发器。它无法将该回复发送回助手,因为此时它没有与助手进行对话——它正在与你进行对话,但是你手动触发了它。

现在没有真正的好方法来做你想做的事。我们知道智能助理最终会收到通知(在 2017 年 I/O 大会上宣布),但我们不知道它是否会有 API 或者它会是什么样子。Transaction API 确实有通知作为它的一部分,但 Transactions 是为您购买或预订某物的活动而设计的。如果需要,您可以使用 Firebase Cloud Messaging 之类的工具让您的用户知道他们可以要求结果,但这是一种次优体验。

于 2017-09-27T23:52:18.340 回答