拥有序列实体后,您就可以创建意图以从最终用户收集序列。您至少需要三个具有以下责任的意图:
- 头意图“序列”
- 捕获启动序列集合的话语。
- 由后续事件调用以继续捕获序列,直到最终用户表示其已完成。
- 上下文意图“序列 - 修改”
- 捕获更正所收集的最后一个序列的话语。
- 以编程方式回送至“序列”意图以收集已更正的序列。
- 上下文意图“序列 - 完成”
- 捕获指示序列已完成的话语。
在下一部分中,您将了解网络钩子将如何关联所有这些内容,但首先我们来设置意图。
创建“序列”意图
这是收集序列的主要意图。您可以按如下方式对其进行配置:
- 将输入上下文留空,以便最终用户可以在调用开始时触发此意图。
- 添加一个输出上下文“collecting-sequence”。我们将使用此上下文在流中实现更正和完成意图。
- 添加一个输出上下文“editing-sequence”,并将有效期设置为 0。我们将在下一个部分中使用“序列 - 修改”意图中的有效期来激活此上下文,因此请务必清除此处的上下文,以便在触发“修改”意图后立即激活“editing-sequence”上下文。
添加一个事件“continue-sequence”,以便您的网络钩子可以循环调用该意图以收集所有部分序列。
添加训练短语,以便最终用户可以触发此意图以启动流。该示例使用“what's my order status”、“track my order”、“where is my order”等短语。
添加操作名称“handle-sequence”,以便网络钩子知道何时触发。完成设置所有意图后,您将在本教程的下一部分中为该网络钩子进行编码。
使用您创建的正则表达式实体添加必要的参数“new_sequence”,以在上一部分中收集部分序列。将实体类型设置为“@alphanumeric”,并将值设置为“$new_sequence”。
添加一个值为“#continue-sequence.existing_sequence”的可选参数“existing_sequence”,以便从事件中提取新的现有序列。您可以将实体类型留空。
添加值为“#continue-sequence.previous_sequence”的可选参数“previous_sequence”,以便从事件中提取上一个序列。您可以将实体类型留空。
为此意图启用网络钩子调用,并为槽位填充启用网络钩子调用。
创建“序列 - 修改”意图
此意图会侦听指示代理听错了前一序列的话语。请按如下方式进行设置:
- 添加输入上下文“collect-sequence”,以便仅在序列流中时才调用此意图。这与“序列”意图激活的上下文相同。
- 添加输出上下文“editing-sequence”,以供 fulfillment 网络钩子引用。激活此意图时,网络钩子将 Dialogflow 回送至主“序列”意图以收集下一个序列。“序列”意图的槽位填充的网络钩子将检查是否存在活跃的“editing-sequence”上下文,以便为最终用户提供对称“重试”响应。
添加训练短语,如“no”、“that's not right”等。
添加操作名称“handle-sequence”。此操作与“序列”意图相同,以便我们可以使用相同的网络钩子逻辑。
添加一个值为“#collecting-sequence.previous_sequence”的参数“new_sequence”,以便从上下文中提取上一个序列,从而有效地撤消上一条话语。我们不在此处添加“existing_sequence”参数,以便网络钩子用前一个序列覆盖现有序列。
为此意图启用网络钩子调用。
创建“序列 - 完成”意图。
- 添加一个输入上下文“collecting-sequence”
- 添加输出上下文“collecting-sequence”,并将有效期设置为 0 以清除上下文。清除上下文操作会阻止“修改”和“完成”意图再次触发,因为代理已完成收集序列。
添加训练短语,如“that's it”、“all done”等。
添加值为“#collecting-sequence.existing_sequence”的参数“sequence”,以便从上下文中提取最终序列。
为此意图启用网络钩子调用。
通过网络钩子关联意图
至此,您已具备对这些意图逻辑进行编码所需的一切。在下一部分中,您将了解如何为网络钩子编写代码,以使用所有这些上下文、操作、参数和事件来完成序列验证流。