动态选项
选项回复为客户提供了一系列可供选择的选项。 您可以使用动态设置,从每次都可能不同的选项中生成列表。
动态选项是根据变量中存储的数据生成的,提出问题的步骤必须可以使用这些数据。 源变量必须包含一个值数组,每个值代表将向客户展示的选项之一。 数组中的项目可以是字符串或数字(例如 "[ "Raleigh", "Boston", "New York" ])等简单值,也可以是复合 JSON 对象。
动态选项的一种常见情况是,数组从外部 API 返回,而你使用自定义扩展调用了该 API。 例如,您可以使用自定义扩展来检索与客户账户相关的信用卡列表。 然后,您可以使用动态选项询问客户在对话中使用哪种卡。 (有关自定义分机的更多信息, 请参阅“拨打自定义分机”。)
您的操作还可以使用表达式填充源变量。 例如,您可以使用会话变量建立一个购物车,其中包含客户决定购买的物品。 然后,从购物车中删除商品的操作可以使用动态选项来显示购物车中的商品,以便顾客选择要删除的商品。 (有关为变量值使用表达式的更多信息,请参阅使用表达式为会话变量赋值)
定义动态选项
定义动态选项客户响应:
在一个步骤中,单击 "定义客户回复"。
选择 "选项"响应类型。
单击动态切换。
在源变量字段中,选择包含定义动态选项的数组的变量(例如,包含上一步中调用的自定 义扩展的响应的变量)。
可选:在选项字段中,写一个表达式,将源数组中的项目映射到要列出的选项。 该表达式作为一个模板,可将数组中的每个项目转换为有意义的值,并显示给客户。 在此表达式中,使用动态变量 "
${item}表示项目。
在某些情况下,您不需要指定表达式:
如果数组中的项目是字符串或整数等简单数值,则每个项目的值都会自动显示为选项。 但是,如果您想对项目进行操作或重新格式化,使其更有意义,您可能仍然需要定义映射。 例如,您可以使用表达式 "
"Part #" + ${item}来显示格式为 "Part #12345的零件编号。如果数组中的项目是 JSON 对象,默认映射会查找名为 "
label的属性,并使用其值(如果存在)作为选项。 如果项目不包括 "label属性,或不想使用 "label属性的值作为选项,则必须编写表达式来指定映射。 您可以使用点符号,通过 JSON 路径来引用对象中的属性(例如,"${item}.name)。
可选:单击 "添加后备选项",如果选项不是客户想要的,可加入一个静态选项,如 "
None of the above。 然后,您可以添加一个以该静态选项为条件的步骤,以提供进一步的帮助。 要添加条件,请写一个表达式,如 "${step_id}.value == "None of the above"。
绘图示例
假设您想创建一个操作,显示可供领养的宠物列表,并提示客户选择一只宠物查看更多信息。 源变量包含一个自定义扩展名的数组,格式如下:
[
{
"id": "123",
"name": "Casey",
"breed": "Shetland sheepdog",
"age": 3
},
{
"id": "987",
"name": "Phoebe",
"breed": "chihuahua",
"age": 7
}
]
项目模式不包括 "label属性,因此默认映射不可用。 相反,您可以使用表达式来创建一个复杂的标签,其中包含从多个不同属性中提取的数据。 例如,可以使用表达式 "${item}.name + " (" + ${item}.breed + ", age " + ${item}.age + ")"来定义选项标签:

请记住,您可以使用表达式方法以各种方式操作源变量的值。 例如,客户可能会使用一个操作来选择信用卡付款,但出于安全考虑,您不希望显示整个卡号。 您可以编写一个表达式,使用 "substring()方法只包含每个卡号的最后四位数字(例如,""Card ending in " + ${item}.card_number.substring(16, 20) )。
参考所选项目
在客户选择了一个动态生成的选项后,您可能需要在后续步骤中引用所选项目。
如果引用代表客户回复的操作变量,默认情况下会使用所选选项的值。 但是,在某些情况下,您可能不想使用向客户显示选项时使用的相同值。 相反,你可能需要使用一个唯一标识符或其他属性来明确标识所选选项。
例如,如果客户选择要显示更多信息的宠物,您可能需要使用一个唯一标识符(在我们的示例中为 "id属性)来查询数据库,因为宠物的名称、年龄和品种可能不是唯一的。 或者,如果客户从只显示最后四位数字的选项中选择信用卡,则需要使用完整的信用卡号码才能访问账户详情或完成交易。
在这种情况下,可以编写一个表达式来访问所选项目的原始属性:
创建或编辑一个步骤,该步骤位于客户从动态选项中进行选择的步骤之后。
在变量值部分,编写一个表达式,为会话变量赋值。 (更多信息,请参阅使用表达式为会话变量赋值)
在表达式编辑器中输入一个美元符号(
$),然后选择客户选择动态选项的步骤。使用属性名称 "
item表示所选项目,并使用点符号访问其属性。 例如,下面的表达式可以访问上一步所选项目的 "id属性:
${step_331}.item.id
您可以使用复杂表达式,利用所选项目的多个属性构建一个值。 例如,您可以使用 "${step_123}.item.firstname + " " + ${step_123}.item.lastname这样的表达式来构建一个人的全名。 使用表达式以完成任何必要操作所需的任何格式定义值。