自定义事件

自定义事件是指您定义的事件。它们用于处理与最终用户的对话之外发生的事件。例如,最终用户点击了某个按钮、已经过了一段时间、可用商品目录在对话期间发生了变化,等等。

您可以使用 fulfillmentAPI 调用这些事件。

使用 API 调用事件

Sessions 类型 detectIntent 调用的请求包含 queryInput.event 字段,该字段用于调用事件。该字段的类型为 EventInput,其中包含事件名称、可选参数和语言代码字段。

向检测意图调用提供事件时,您不会提供其他数据,例如最终用户表述。该调用的唯一目的是调用事件并触发意图。

使用 fulfillment 调用事件

您可以设置 WebhookResponsefollowupEventInput 字段,以通过 fulfillment 调用事件。您也可以选择设置 followupEventInput.parameters 字段,以为意图提供参数

例如:

{
  "followupEventInput": {
    "name": "event-name",
    "parameters": {
      "parameter-name-1": "parameter-value-1",
      "parameter-name-2": "parameter-value-2"
    },
    "languageCode": "en-US"
  }
}

如果为 WebhookResponse 设置了 followupEventInput 参数,Dialogflow 会忽略 fulfillmentTextfulfillmentMessagespayload 字段。此外,followupEventInput.languageCode 字段是必填字段,但 Dialogflow 会忽略此字段,因为原始检测意图请求中已定义了该语言。

当 Dialogflow 收到包含事件的网络钩子响应时,它会立即触发相应的意图,该意图定义了响应中包含的事件。

以下流程介绍了详细步骤:

  1. 最终用户输入或说出表达内容。
  2. Dialogflow 将最终用户表述与 Intent-1 进行匹配,该意图已配置 fulfillment。
  3. Dialogflow 向您的服务器发送网络钩子请求。
  4. 服务器使用包含后续事件的 webhook 响应进行响应。
  5. Dialogflow 不会响应用户 Intent-1 是否匹配,而是触发 Intent-2,后者已配置了上述事件。
  6. Dialogflow 继续进行处理,就像最终用户发起了 Intent-2 匹配一样,然后根据 Intent-2 的配置处理所需的参数和 fulfillment。

使用网络钩子响应事件对意图匹配进行链式处理

您可以对意图匹配和网络钩子响应事件进行链式处理。在上述流程中,Intent-2 也可以配置 fulfillment。如果服务器的网络钩子响应提供另一个事件,Dialogflow 将继续匹配 Intent-3(已配置该事件),而不为最终用户响应 Intent-2 是否匹配。

在链式处理结束之前,Dialogflow 不会响应最终用户。以这种方式对意图进行链式匹配时,每个网络钩子响应都必须在超时限制规定的时间内发送。