如何解决在 Google DialogFlow CX 中,是否可以调用外部 API,然后在 15 分钟后获得回调响应?
我正在使用一个 exteranl API,它会做一些工作 15 分钟,当它完成时,它将调用您在初始请求中定义的任何 URL 以将结果发送到。
dialogFlow 有可能在 15 分钟内接受这个结果吗? DialogFlow 中是否有内置的异步响应处理程序?
解决方法
不,正如您所描述的那样,这是不可能的。调用外部服务的唯一方法是通过 webhooks,但这些被认为是返回一个非常具体的对象的调用,然后 Dialogflow 直接将其作为回答返回给用户,因此它们本质上是同步的。
你可以做的是想一个解决方法。我不知道您正在调用的服务的具体内容,但是您可以设置一个小型服务器来处理来自 dialogflow 的 webhook 响应,除了触发对外部 api 的调用之外,它什么都不做,并且当您获得回答您可以处理它(根据 Dialogflow 规范将相关内容放入“履行”对象中)并通过 dialogflow API 在您的代理中触发事件。
所以最终的过程可能看起来像这样。
- 用户要求例如“pizza”:触发正确的意图,该意图的路由调用 webhook 服务器
- 您的 webhook 服务器接收来自 dialogflow 的调用,并调用外部 api 来询问曾经创建的所有比萨饼的列表。它向服务器返回一个空的履行
- 当 webhook 服务器在 15 分钟后收到响应时,它会在代理中触发 event(查看您选择的编程语言的 dialogflow api:python、node、java)并在请求中注入一些参数,然后您可以使用它在代理中形成一个句子
当我刚开始时,我发现 this 非常有用,可以帮助您了解平台在与外部服务交互方面希望您做什么,请查看图表,尤其是我认为可以做到的图表更清晰
,如果您通过 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 或客户端库)。
-
在您的自定义应用程序收到来自 代理,您可以创建代码来获取意图名称或事件名称 来自 detectIntentResponse.queryResult.match.intent.displayName 或 match.event 分别响应 json 然后调用/调用 function_1 基于匹配的意图或事件。
-
function_1 处理完毕后,您可以直接向 用户在您的自定义应用程序的界面或发送检测意图 向您的代理发出请求,使其与 Intent 匹配并发送 Intent 响应您的自定义应用程序。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。