【发布时间】:2021-07-28 17:55:34
【问题描述】:
我正在使用一个外部 API,它会在 15 分钟内完成一些工作,完成后它将调用您在初始请求中定义的任何 URL 以将结果发送到。
dialogFlow 有可能在 15 分钟内接受这个结果吗? DialogFlow 中是否有类似内置的异步响应处理程序?
【问题讨论】:
标签: dialogflow-cx
我正在使用一个外部 API,它会在 15 分钟内完成一些工作,完成后它将调用您在初始请求中定义的任何 URL 以将结果发送到。
dialogFlow 有可能在 15 分钟内接受这个结果吗? DialogFlow 中是否有类似内置的异步响应处理程序?
【问题讨论】:
标签: dialogflow-cx
如果您通过 webhook 调用外部 API,则最长 webhook timeout limit 将受到 30 秒的限制。超过响应超时后,Dialogflow 会调用webhook error 或超时built-in event 并照常继续处理。因此,Dialogflow 将不再接受超过设置超时限制的 webhook 响应。
请注意,对话界面旨在设计为最终用户与应用程序/机器人之间的持续消息交换。如果您的 Web 服务需要更多时间在后台执行操作并且无法优化,请考虑重新设计对话流,使最终用户无需等待应用程序/机器人回复超过设置的 Webhook 超时限制.
如果您有自己的自定义应用程序(使用 APIs or Client Libraries 集成),则可以改为从自定义应用程序调用/调用需要 15 分钟工作的函数(我们称之为 function_1)。
这是一个基本设置:
用户从您的自定义应用程序界面输入查询。
您的自定义应用程序将带有 Detect Intent request 的用户查询发送到 Dialogflow 代理(使用 API 或客户端库)。
在您的自定义应用程序收到来自的 Detect Intent 响应后 代理,您可以创建代码来获取意图名称或事件名称 来自detectIntentResponse.queryResult.match.intent.displayName 或match.event响应json分别然后调用/调用 function_1 基于匹配的意图或事件。
function_1 完成处理后,您可以直接向 自定义应用程序界面中的用户或发送检测意图 向您的代理请求,使其与意图匹配并发送意图 响应您的自定义应用程序。
【讨论】:
不,不可能如您所描述的那样。调用外部服务的唯一方法是通过 webhook,但这些被认为是返回一个非常具体的对象的调用,然后 Dialogflow 直接将其作为答案返回给用户,因此它们本质上是同步的。
您可以做的是想一个解决方法。我不知道您正在调用什么服务的具体内容,但是您可以设置一个小型服务器来处理来自 dialogflow 的 webhook 响应,除了触发对外部 api 的调用以及当您获得回答您可以处理它(根据 Dialogflow 规范将相关内容放入“履行”对象中)并通过 dialogflow API 在您的代理中触发事件。
所以最终的过程可能看起来像这样。
当我刚开始时,我发现this 非常有用,可以帮助您了解平台希望您在与外部服务交互方面做什么,请看一下图表,尤其是我认为更清楚的图表
【讨论】: