2. 从对话框节点编辑视图中,单击自定义,然后选择插槽复选框。
图 10. 新增插槽 1
3. 为每个单位的所需信息添加一个插槽。
对于每一个插槽,需要指定如下信息
图 11. 新增插槽 1
Check for:确定要从用户对插槽提示符的响应中提取的信息类型。 在大多数情况下,您检查实体值,但您也可以检查一个意图。 您可以在此处使用 AND 和 OR 运算来定义更复杂的条件。
注意:避免检查上下文变量值。 检查值首先用作条件,然后成为在另存为字段中命名的上下文变量的值。 如果在条件中使用上下文变量,则在上下文中使用时可能会导致意外的行为。
Save as :提供用于将用户响应中感兴趣的值存储到插槽提示的上下文变量的名称。 不要指定对话框中较早使用的上下文变量,因此可能有一个值。 只有当插槽的上下文变量为空时才显示插槽的提示。
Prompt:写一个声明,从用户那里引出你需要的信息。 显示此提示后,会话暂停,服务等待用户响应。
如果您编辑插槽,您还可以定义响应以在用户响应插槽提示后显示。
FOUND: 在用户提供预期信息后执行。
NOT FOUND: 如果您希望收集的信息不是按预期的方式提供给用户,则执行。 您在此处指定的文本可以更明确地说明用户需要提供的信息类型。
此表显示了帮助用户放置比萨订单的节点的示例插槽值。
Information Check for Save as Prompt Follow-up if found Follow-up if not found Size @size $size "What size pizza would you like?" "$size it is." "What size did you want? We have small, medium, and large." DeliverBy @sys-time $time "When do you need the pizza by?" "For delivery by $time." "What time did you want it delivered? We need at least a half hour to prepare it." Optional slots:如果要添加捕获信息但可选的插槽,请不要为其指定提示。
例如,您可以添加一个捕获饮食限制信息的插槽,以防用户指定任何信息。 但是,您不想向所有用户询问膳食信息,因为在大多数情况下,这些信息是无关紧要的。
Information Check for Save as Wheat restriction @dietary $dietary 当您没有提示时添加插槽时,服务将该插槽视为可选。
注意:如果您选择一个插槽,则只能在节点级别的响应文本中引用其上下文变量,如果您可以将其设置为字母,即使没有为该插槽提供值也是有意义的。 例如,你可以这样写一个简短的陈述,"我订购一个$ size $的膳食比萨饼在$时间交货。" 如果没有提供膳食限制信息,例如无麸质或无乳制品,"所得的文字仍然是有道理的,"我在下午 3:00 订购大型比萨饼送货。" 4. 使用户可追踪:您可以选择定义提供响应的节点级处理程序,用户在交互期间可能会询问与问题目的相关的问题。
例如,用户可能会问一下关于番茄酱食谱或您的成分的地方。 要处理这种分歧,请单击管理处理程序链接,并为每个预期问题添加条件和响应。
图 12. 示例
在回应后,显示与当前空插槽相关联的提示。
如果用户在对话节点流动期间随时提供与处理程序条件匹配的输入,直到显示节点级响应,则触发此条件。
5. 添加节点级响应:在所有需要的插槽被填满之后,才执行这个节点级的响应。 您可以添加一个总结您收集的信息的响应。 例如,"A$sizepizza is scheduled for delivery at$time. Enjoy!"
6. 添加重置插槽上下文变量的逻辑。
当您从每个插槽的用户处收集答案时,它们将保存在上下文变量中。 您可以使用上下文变量将信息传递到另一个节点或应用程序或外部服务以供使用。 但是,传递信息后,您必须将上下文变量设置为 null 以重置节点,以便可以重新开始收集信息。 您不能将当前节点中的上下文变量置空,因为在填充所需的插槽之前,服务将不会退出节点。 相反,请考虑使用以下方法之一:
向外部应用程序添加空值变量的处理。
添加一个将变量置空的子节点。
插入一个使节点变空的父节点,然后跳转到具有插槽的节点。
使用插槽的提示
Ask for everything at once:包括整个节点的初始提示,清楚地告诉用户您希望他们提供哪些信息单位。显示此提示首先为用户提供了一次性提供所有详细信息的机会,而不必一次等待每一条信息的提示。
Information Check for Save as Prompt Follow-up if found Follow-up if not found Toppings @toppings.values $toppings Any toppings on that? "Great addition." "What toppings would you like? We offer ..." 要稍后引用用户指定的浇头,请使用<? $ entity-name.join(',')?>语法来列出 toppings 数组中的每个项目,并用逗号分隔值。 例如,"我订购了一个$ size 的比萨饼,这个比例是<?$ toppings.join(',')?
Information Check for Save as Prompt Follow-up if found Follow-up if not found Confirmation #yes $confirmation "I'm going to order you a$sizepizza for delivery at$time. Should I go ahead?" "Your pizza is on its way!" see below 因为用户可能会在对话框中的其他时间包含肯定的语句(哦,是的,我们希望在下午 5 点之前发布比萨饼),使用 slot_in_focus 属性可以在插槽条件中清楚您正在为此提示输入"是"响应 插槽。
图 14. 使用属性