自定义事件是指您定义的事件。它们用于处理与最终用户对话之外发生的事情。例如,最终用户点击了某个按钮、经过了一定的时间、可用广告资源在对话期间发生了变化等。
您可以使用 fulfillment 或 API 来调用这些事件。
使用 API 调用事件
Sessions
类型 detectIntent
调用的请求包含 queryInput.event
字段,该字段用于调用事件。该字段的类型为 EventInput
,其中包含事件名称、可选参数和语言代码字段。
向检测意图调用提供事件时,您不会提供其他数据,例如最终用户表述。该调用的唯一目的是调用事件并触发意图。
使用 fulfillment 调用事件
您可以设置 WebhookResponse
的 followupEventInput
字段,以通过 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 会忽略 fulfillmentText
、fulfillmentMessages
和 payload
字段。此外,followupEventInput.languageCode
字段是必填字段,但 Dialogflow 会忽略此字段,因为语言已在发起的检测 intent 请求中定义。
当 Dialogflow 收到包含事件的 webhook 响应时,它会立即触发相应的意图,该意图定义了响应中包含的事件。
以下流程介绍了详细步骤:
- 最终用户输入或说出表达内容。
- Dialogflow 将最终用户表述与 Intent-1 进行匹配,该意图已配置 fulfillment。
- Dialogflow 向您的服务器发送网络钩子请求。
- 服务器使用包含后续事件的 webhook 响应进行响应。
- Dialogflow 不会响应用户 Intent-1 是否匹配,而是触发 Intent-2,后者已配置了上述事件。
- Dialogflow 继续进行处理,就像最终用户发起了 Intent-2 匹配一样,然后根据 Intent-2 的配置处理所需的参数和 fulfillment。
使用网络钩子响应事件对意图匹配进行链式处理
您可以对意图匹配和网络钩子响应事件进行链式处理。在上述流程中,Intent-2 也可以配置 fulfillment。如果服务器的网络钩子响应提供另一个事件,Dialogflow 将继续匹配 Intent-3(已配置该事件),而不为最终用户响应 Intent-2 是否匹配。
在链式处理结束之前,Dialogflow 不会响应最终用户。以这种方式对意图进行链式匹配时,每个网络钩子响应都必须在超时限制规定的时间内发送。