动态选项
options 响应向客户提供可供选择的选项列表。 您可以使用 动态 设置从每次可能不同的选项生成列表。
动态选项是根据存储在变量中的数据生成的,该变量必须可用于提问的步骤。 源变量必须包含值的数组,每个值都表示将向客户提供的选项之一。 数组中的项可以是简单值,例如,字符串或数字 (例如,[ "Raleigh", "Boston", "New York" ]
) 或复合 JSON 对象。
动态选项的常见场景是从使用定制扩展调用的外部 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
) 来构造人员的全名。 使用表达式以完成任何必需操作所需的任何格式定义值。