在Google DialogFlow CX 中,是否可以调用外部API,然后在15 分钟后得到回调响应?

In Google DialogFlow CX, is it possible to call on an external API, then get the callback response after 15min?

我正在使用一个 exteranl API 做一些工作 15 分钟,完成后它将调用您在初始请求中定义的任何 URL 以将结果发送到。

dialogFlow 是否有可能在 15 分钟内接受这个结果? DialogFlow 中是否有内置的异步响应处理程序?

不,不可能像你描述的那样。调用外部服务的唯一方法是通过 webhook,但这些被认为是调用 return 一个非常具体的对象,Dialogflow 然后 return 直接作为对用户的回答,因此它们本质上是同步的。

你可以做的是想一个变通办法。我不知道你调用的具体服务是什么,但你可以设置一个小型服务器来处理来自 dialogflow 的 webhook 响应,它除了触发对外部 api 的调用外什么都不做,并且当你得到答案时,你可以处理它(根据 Dialogflow 规范将相关内容放入“fulfilment”对象中)并通过 dialogflow API.

在你的代理中触发一个事件

所以最后的过程可能看起来像这样。

  1. 用户要求例如“pizza”:正确的意图被触发并且该意图的路由调用 webhook 服务器
  2. 您的 webhook 服务器接收到来自 dialogflow 的调用并调用外部 api 请求所有创建的比萨饼的列表。它 return 是对服务器的空履行
  3. 当 webhook 服务器在 15 分钟后收到响应时,它会在代理中触发 event(查看对话流 api 以选择您选择的编程语言:python,节点, java) 并在请求中注入一些参数,然后您可以使用这些参数在代理中形成一个句子

当我刚开始的时候,我发现 this 非常有助于了解平台希望您在与外部服务交互方面做什么,特别是看一下我认为的图表更清晰

如果您通过 webhook, it would be subject to the maximum webhook timeout limit of 30 seconds. After the response timeout is exceeded, Dialogflow invokes a webhook error or timeout built-in event 调用外部 API 并继续照常处理。因此,Dialogflow 将不再接受超过设置的超时限制的 webhook 响应。

请注意,对话界面旨在设计为最终用户与 app/bot 之间的持续消息交换。如果您的 Web 服务需要更多时间在后台执行操作并且无法优化,请考虑重新设计对话流程,使最终用户不会等待 app/bot 回复超过设置的 webhook超时限制。

如果您有自己的自定义应用程序(使用 APIs or Client Libraries 集成),您可以改为 call/invoke 需要 15 分钟工作的函数(我们称之为 function_1) 来自您的自定义应用程序。

这是一个基本设置:

  1. 用户从您的自定义应用程序界面输入查询。

  2. 您的自定义应用程序发送带有 Detect Intent 的用户查询 向 Dialogflow 代理请求(使用 API 或客户端库)。

  3. 在您的自定义应用程序收到来自 代理,您可以创建代码来获取意图名称或事件名称 来自 detectIntentResponse.queryResult.match.intent.displayNamematch.event 分别响应 json 然后 call/invoke function_1 基于匹配的意图或事件。

  4. 一旦 function_1 完成处理,您可以直接向 自定义应用程序界面中的用户或发送检测意图 向您的代理发出请求,使其与 Intent 匹配并发送 Intent 回复您的自定义应用程序。