Fulfillment

每轮对话过程中,代理必须通过回答问题,询问信息或终止会话来响应最终用户。您的代理可能还需要与您的服务联系,以生成动态响应或执行操作。Fulfillment 用于完成所有这些操作。

fulfillment 可能包含以下任一选项:

  • 静态响应消息。
  • 用于动态响应和/或执行操作的网络钩子调用。
  • 用于设置或替换参数值的参数预设。

在代理每轮对话期间,系统可以(且有时需要)调用多个 fulfillment,每个 fulfillment 都可以生成响应消息。Dialogflow CX 会将这些回答保存在回答队列中。 代理的回合结束后,Dialogflow CX 会将有序回答发送给最终用户。

Fulfillment 用例

通过 fulfillment,您可以在以下位置提供回复消息:

对于上述每种用例,控制台都会打开一个执行方式修改窗格。

Fulfillment 屏幕截图

代理回答(对话选项)

在创建执行方式时,在设计时定义代理回答消息。在运行时,这些响应会添加到响应队列中。

响应消息有多种类型,以下各小节对此进行了介绍。使用控制台时,执行方式面板会有一个初始代理对话卡片,但您可以点击添加对话响应,为其他响应消息类型添加更多卡片。

静态文本响应

静态文本回复消息可向用户提供文本对话。如果您的检测 intent API 调用或集成调用使用语音合成,则此文本会生成音频内容。对于这些消息,提供的文本使用语音合成标记语言 (SSML)。

您可以定义多个文本回答卡片,并在每个卡片中定义多个文本回答。如果您定义了多张卡片,系统会在运行时将它们串联起来,形成一个回答。如果您在卡片中定义了多个回答,系统会在运行时随机选择卡片中的一条消息。

这些短信可以包含参数引用和内嵌系统函数。

自定义负载

某些集成支持自定义载荷响应,以处理富响应。这些自定义载荷必须以集成文档中定义的 JSON 格式提供。例如,请参阅 Dialogflow CX Messenger 自定义载荷格式。

您可以在自定义载荷 JSON 中添加参数引用。请用英文双引号将其括起来,以便将其视为 JSON 字符串值。例如:

{
  "someField": "$session.params.date"
}

自定义载荷 JSON 的深度不得超过 24 层。

您还可以向您开发的集成发送自定义载荷。Dialogflow CX 不会处理该事件,因此您必须在自己的业务逻辑中处理该事件。

如需了解详情,请参阅自定义载荷模板。

在线客服人员交接

此响应会向 intent 检测 API 调用方发出信号,表明应将对话转接给人工客服。Dialogflow CX 仅使用此信号来识别为衡量目的而移交的对话;它不会更改会话状态。

您的系统或集成可以使用此信号来执行交接对话所需的任何操作。由于 Dialogflow CX 不会对此数据施加结构,因此您可以选择适合您系统的任何结构。

对话成功元数据

此响应向检测意图 API 调用方表明,与 Dialogflow CX 智能体的对话已成功。Dialogflow CX 会使用此信号来识别成功的对话,以便进行衡量,并且不会以任何方式更改会话状态。

您的系统或集成可以使用此信号来执行任何必要的操作。Dialogflow CX 不会对此数据施加任何结构,因此您可以选择适合您系统的任何结构。

播放预先录制的音频

此响应会为支持此功能的集成播放音频文件。

不同集成的音频文件格式要求可能会有所不同。例如,请参阅 Dialogflow CX 电话网关的要求。

对于合作伙伴电话集成,音频文件的网址必须可供合作伙伴访问。合作伙伴始终可以访问公开网址,例如 Cloud Storage 中的公开文件。合作伙伴还可能对音频文件设置访问权限限制。如需了解详情,请参阅合作伙伴文档。

输出音频文本

此响应类似于文本响应,但仅适用于语音合成。如果您的代理可以同时处理文本和语音会话,则可以使用唯一的文本和输出音频文本响应,为文本和语音创建不同的用户体验。如果为语音会话提供了输出音频文本,则系统会忽略纯文本回答。

如果您的代理同时处理文本和语音会话,并且您希望使用相同的响应消息,请对文本和语音会话使用文本响应。

输出音频文本的串联方式与文本回答类似。如果输出音频文本回答是文本和 SSML 的混合,则串联结果将被视为 SSML。理想情况下,您应始终使用文本或 SSML。

条件式响应

此响应类型提供条件响应:

基本格式为:

if [condition]
  [response]
elif [condition]
  [response]
elif [condition]
  [response]
else
  [response]
endif

其中:

  • [condition] 使用与路由条件相同的格式。
  • [response] 是文本回答。
  • elif 和 else 块是可选的。

例如:

if $session.params.user-age >= 21
  Ok, you may enter.
else
  Sorry, you cannot enter.
endif

[condition] 和 [response] 都可以在对话期间使用内嵌系统函数生成动态值。如需了解详情,请参阅系统函数和路由条件。[condition] 会根据执行开始时的会话状态进行解析。如果 [response] 依赖于会话状态,则会根据执行结束时更新的会话状态进行解析。

对于多语言代理,[condition] 对于所有语言都是通用的,而 [response] 是特定于语言的。当您在控制台中更改一种语言的 [condition] 时,此部分会在代理的所有语言中更新。由于它会成为新条件,因此除了您在更新 [condition] 时选择的语言之外,所有其他语言的 [response] 都会被清除。

电话呼叫转接

通话转接仅适用于 Dialogflow CX 电话网关。

对于某些手机集成,您可以指定一个美国境内的手机号码用于转接。在运行时,当 Dialogflow CX 智能体触发具有呼叫转移的 fulfillment 时,呼叫会转移到指定号码,并且智能体处理会暂停。

数据存储区工具响应

此回答类型用于配置从关联的数据存储区工具返回的智能体回答。如果您在此执行方式中配置了数据存储区工具,系统会自动填充数据存储区工具响应卡片。

  • 来源链接:设置在回答后向用户返回的引用数量上限。引用是指向数据存储区中信息来源的链接,呈现为按钮。默认值为 1。
  • 内嵌引用:限制每句话返回的内嵌引用数量,而不是在回答后列出链接。
  • 生成式后备:将智能体配置为在数据存储区返回空结果时尝试 AI 生成的回答。如果失败,代理会使用静态回答。
  • 静态回答:在最后一个字段中输入静态文本回答,以逐字发送给用户。

渠道专用响应消息

定义 fulfillment 时,您可以创建特定于渠道的响应消息,以便为文本聊天、语音、短信或支持渠道的特定集成创建有针对性的响应。不特定于渠道的任何响应消息都称为默认响应消息。

在运行时,如果检测 intent 请求指定了渠道,Dialogflow CX 会选择默认响应消息或特定于渠道的响应消息。最佳实践是,即使您使用的是渠道专用响应消息,也应定义默认响应消息。当您的系统无法提供有效渠道时,默认响应消息会作为后备。

频道名称是一个自定义字段,您可以将其设置为任何文本。如果您直接使用 Dialogflow CX API 进行运行时调用,则可以使用您喜欢的任何频道名称。如果您使用现有集成,则必须使用该集成可识别的渠道名称。

在设计时设置渠道专用响应消息

如需在使用控制台时为 fulfillment 提供特定于渠道的响应消息,请执行以下操作:

  • 添加默认回复消息后,点击添加渠道以添加特定于渠道的回复消息。再次点击添加频道,以添加更多频道。

使用 API 时,如需为执行方式提供渠道专用响应消息,请执行以下操作:

  • 将每个回复消息的 Fulfillment.messages[i].channel 字段设置为所选渠道。如果未设置此字段,则响应会被视为默认响应消息。

在运行时利用渠道专属响应消息

如果您使用的是支持渠道的现有集成,则集成实现会执行这些步骤。

如需接收特定于渠道的响应消息,您必须在检测 intent 请求消息中指定渠道。请参阅 Sessions 类型的 detectIntent 方法中的 queryParams.channel 字段。

选择会话引用的协议和版本:

协议 V3 V3beta1
REST 会话资源 会话资源
RPC 会话接口 会话接口
C++ SessionsClient 不可用
C# SessionsClient 不可用
Go SessionsClient 不可用
Java SessionsClient SessionsClient
Node.js SessionsClient SessionsClient
PHP 不可用 不可用
Python SessionsClient SessionsClient
Ruby 不可用 不可用

如果请求未定义渠道,或者 fulfillment 未找到匹配的渠道,Dialogflow CX 会返回默认响应消息。

自定义载荷模板

如果您经常使用自定义载荷,请使用自定义载荷模板。自定义载荷有时很大且很复杂,因此使用模板可以简化代理创建过程。

在代理设置中提供这些模板,以便在为代理创建 fulfillment 时可供选择。

例如,“是”和“否”按钮的 JSON 载荷可以定义为自定义载荷模板。创建需要这些按钮的 fulfillment 时,请在创建 fulfillment 时选择该模板。

当您为 fulfillment 自定义载荷选择模板时,模板的内容会插入到载荷中。然后,您可以根据需要修改载荷。

如果您更改模板,更改不会自动传播到引用该模板的所有 fulfillment 载荷。

如需创建自定义载荷模板,请参阅代理常规设置。

如需在创建 fulfillment 时选择自定义载荷模板,请在创建 fulfillment 自定义载荷时点击选择模板。

网络钩子调用

当 fulfillment 触发 Webhook 时,代理会向您的服务发送请求。您的网络钩子可以执行操作、提供动态响应消息、替换参数值以及更改当前页面。

下面介绍了用于执行方式的 webhook 设置:

X 项
启用 webhook 这会为 fulfillment 启用 webhook。
网络钩子 选择 webhook 资源。
标记 您在此处提供的文本标记将填充到发送至网络钩子服务的网络钩子请求的 WebhookRequest.fulfillmentInfo.tag 字段中。这可用于以特定于执行的方式控制 webhook 行为。
返回部分回答 允许取消只答完一部分的回答的播放。如需了解详情,请参阅高级语音设置。

参数预设

使用 fulfillment 提供预设,以设置或替换当前参数值。这些预设会在解析静态响应消息或调用 webhook 之前应用。

您还可以使用系统函数将参数预设为动态生成的值。

以下是一些示例:

  • 将参数 now 设置为当前时间:

    参数 值
    现在 $sys.func.NOW()
  • 将现有参数 counter 递增 1:

    参数 值
    计数器 $sys.func.ADD($session.params.counter, 1)
  • 将参数 new-cost 设置为 other-cost 参数值,同时保留完整的复合对象值:

    参数 值
    new-cost $sys.func.IDENTITY($session.params.other-cost)

数据存储区工具

如需详细了解此功能,请参阅数据存储区工具文档。

高级语音设置

这些高级语音设置可以替换页面语音设置、流语音设置和代理语音设置。

响应队列

在代理的回合中,您可以调用多个执行方式,每个执行方式都可能会生成一条响应消息。Dialogflow CX 会在响应队列中维护这些响应。

流式传输 API 的部分响应

默认情况下,Dialogflow CX 仅在代理的回合结束后向最终用户发送有序回答。您还可以在 fulfillment 中启用返回部分回答选项,以便在使用流式传输 API 时将已加入队列的回答作为部分回答返回。如需了解详情,请参阅页面的生命周期。

例如,如果您的 webhook 可能会运行很长时间,您可以在 fulfillment 中添加静态回答并启用只答完一部分的回答。这会导致 Dialogflow CX 在调用 webhook 之前清空响应队列,并将所有消息作为部分响应发送。

以下各项不支持只答完一部分的回答:

如需在模拟器中测试此功能,请启用只答完一部分的回答。

模拟器中的部分响应的屏幕截图

在以下示例中,假设您的 webhook 需要 5 秒才能完成,并且您未启用部分回答。在网络钩子完成之前,Dialogflow CX 智能体的对话轮次不会结束。在这 5 秒的轮次中,回答会在等待 webhook 时排队,并且在轮次完成之前不会返回给最终用户。这会导致糟糕的用户体验。

未启用部分响应。

如果您在第一个执行方式中启用了只答完一部分的回答,Dialogflow CX 会快速返回第一个执行方式消息并调用网络钩子。网络钩子完成后,Dialogflow CX 会返回最终回答。这种情况可以改善最终用户体验,因为系统会告知最终用户需要等待一小段时间。此外,Webhook 调用与发送给最终用户的响应同时执行。

启用了部分响应。

语音合成标记语言 (SSML)

您可以在文本或输出音频文本执行字段中使用语音合成标记语言 (SSML)。这样,您就可以通过提供有关暂停以及首字母缩写词、日期、时间、缩写或应予以屏蔽的文本的音频格式等详细信息,来自定义音频响应。

如需了解语法详情,请参阅 Text-to-Speech SSML 文档。