2017-09-27 98 views
0

我有一个API.ai代理,它将请求(来自用户)发送到需要大量处理(超过5秒)以获取答案的webhook。据我所知,没有办法增加API中的响应超时。因此,我创建了2个意图。第一个人只是打电话给我的webhook开始处理结果,同时webhook会回复用户,“你的请求正在处理中......”。 第二个意图有一个事件和行动。新事件的目的仅仅是将结果显示给用户。 一旦结果准备就绪后,我的后端应用程序将发送一个curl语句以第二个intent中的事件触发事件,并进行必要的参数修改,如会话ID,v和时区...等。API.AI中的请求超时

我收到以下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代理中添加了第二个intent的截图。

注意:我在开发人员控制台WebDemo和Slack中尝试了代理。他们没有向我(作为用户)显示指定的响应。

我不知道我是否做错了什么? screenshot of the second intent

回答

1

API.AI并不真正用于处理事件驱动的活动。它的目的是在交谈的中介 - 所以正常模式是:

  1. 用户说了什么
  2. API.AI处理此,可能与网络挂接,并发送响应。

设备,如谷歌主页没有办法得到一个通知,所以除非用户说了什么(步骤1),那么你将永远不会得到步骤2

当您尝试触发它手动执行,API.AI将您的触发器视为第1步,并且它正在回复您的触发器。它无法将答复发回给助理,因为它当时没有与助理进行对话 - 它正在与您手动触发它的对话。

没有一个真正的好方法来做你想要的东西。我们知道通知最终会提交给助手(它在2017年I/O会上宣布),但我们不知道它是否会有API或它的外观。交易API确实有通知作为其中的一部分,但交易适用于您正在购买或保留某些内容的活动。如果需要,可以使用Firebase云消息传递等功能让用户知道他们可以询问结果,但这是次优的体验。

+0

他们很快就会添加此功能吗? – Maghaj

+0

再一次,我所知道的是我在回答中所说的 - 他们在2017年I/O上宣布了通知,但没有说明何时,是否会有API,或者该API的外观。 – Prisoner