API.AI 后请求超时
Request timeout in API.AI
我有一个 API.ai 代理将请求(来自用户)发送到需要大量处理(超过 5 秒)才能获得答案的 webhook。据我所知,没有办法增加 API.ai
中的响应超时
所以,我创建了 2 个意图。第一个简单地调用我的 webhook 开始处理结果,同时 webhook 将回复用户,"Your request is under processing..."。
第二个意图有一个事件和动作。新事件的目的只是向用户显示结果。
一旦结果准备好,我的后端应用程序将发送一个 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 中尝试了代理。 None 向我(作为用户)显示了指定的响应。
我不确定我是否做错了什么?
screenshot of the second intent
API.AI 并不是真的要处理事件驱动的活动。它旨在成为对话中的中介 - 所以正常模式是:
- 用户说了些什么
- API.AI 处理这个(可能使用网络钩子)并发送响应。
GoogleHome 等设备无法获得通知,因此除非用户说些什么(第 1 步),否则您将永远无法进入第 2 步。
当您尝试手动触发时,API.AI 会将您的触发器视为第 1 步,并且会回复您的触发器。它无法将该回复发送回智能助理,因为它当时没有与智能助理进行对话 - 它正在与您手动触发它的任何人进行对话。
现在没有真正好的方法来做你想做的事。我们知道通知最终会到达智能助理(它是在 I/O 2017 年宣布的),但我们不知道它是否会有 API 或者它会是什么样子。交易 API 确实包含通知,但交易适用于您购买或预订某物的活动。如果需要,您可以使用 Firebase Cloud Messaging 之类的东西让您的用户知道他们可以询问结果,但这是一种次优体验。
我有一个 API.ai 代理将请求(来自用户)发送到需要大量处理(超过 5 秒)才能获得答案的 webhook。据我所知,没有办法增加 API.ai
中的响应超时所以,我创建了 2 个意图。第一个简单地调用我的 webhook 开始处理结果,同时 webhook 将回复用户,"Your request is under processing..."。 第二个意图有一个事件和动作。新事件的目的只是向用户显示结果。 一旦结果准备好,我的后端应用程序将发送一个 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 中尝试了代理。 None 向我(作为用户)显示了指定的响应。
我不确定我是否做错了什么? screenshot of the second intent
API.AI 并不是真的要处理事件驱动的活动。它旨在成为对话中的中介 - 所以正常模式是:
- 用户说了些什么
- API.AI 处理这个(可能使用网络钩子)并发送响应。
GoogleHome 等设备无法获得通知,因此除非用户说些什么(第 1 步),否则您将永远无法进入第 2 步。
当您尝试手动触发时,API.AI 会将您的触发器视为第 1 步,并且会回复您的触发器。它无法将该回复发送回智能助理,因为它当时没有与智能助理进行对话 - 它正在与您手动触发它的任何人进行对话。
现在没有真正好的方法来做你想做的事。我们知道通知最终会到达智能助理(它是在 I/O 2017 年宣布的),但我们不知道它是否会有 API 或者它会是什么样子。交易 API 确实包含通知,但交易适用于您购买或预订某物的活动。如果需要,您可以使用 Firebase Cloud Messaging 之类的东西让您的用户知道他们可以询问结果,但这是一种次优体验。