如果您使用的是 Amazon Lex V2,请改为参阅 Amazon Lex V2 指南。
如果您使用的是 Amazon Lex V1,我们建议您将机器人升级到 Amazon Lex V2。我们不再向 V1 添加新功能,强烈建议使用 V2 以获得全新的机器人。
本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
设置会话属性
会话属性包含特定于应用程序的信息,于会话期间在机器人与客户端应用程序之间传递。Amazon Lex 向为机器人配置的所有 Lambda 函数传递会话属性。如果 Lambda 函数添加或更新会话属性,Amazon Lex 会将新信息返回给客户端应用程序。例如:
-
在练习 1:使用蓝图创建 Amazon Lex 机器人(控制台)中,示例自动程序使用
price
会话属性维护鲜花价格。Lambda 函数根据所订购鲜花的类型设置此属性。有关更多信息,请参阅步骤 5 (可选):查看信息流的详细信息 (控制台)。 -
在预订旅程中,示例自动程序使用
currentReservation
会话属性,在预订酒店或预订租车的对话中维护槽类型数据的副本。有关更多信息,请参阅信息流的详细信息。
在 Lambda 函数中使用会话属性来初始化机器人并自定义提示和响应卡。例如:
-
初始化 — 在订购披萨机器人中,客户端应用程序在第一次调用 PostContent 或 PostText 操作时传递用户位置作为会话属性。例如,
"Location": "111 Maple Street"
。Lambda 函数根据该信息查找最近的披萨店下订单。 -
个性化提示 — 配置提示和响应卡,以引用会话属性。例如,“[FirstName] 您好,您想要什么配料?” 如果您传递该用户的名字作为会话属性 (
{"FirstName": "Jo"}
),Amazon Lex 将用该名字替换占位符。然后,它会向该用户发送个性化提示,“Jo 您好,您想要什么配料?”
会话属性在会话持续时间内一直存在。Amazon Lex 将其存储在加密数据存储中,直到会话结束。客户端可以通过调用 PostContent 或 PostText 操作同时为 sessionAttributes
字段设置值来创建会话属性。Lambda 函数可以在响应中创建会话属性。在客户端或 Lambda 函数创建会话属性后,每当客户端应用程序在发给 Amazon Lex 的请求中不包括 sessionAttribute
字段时,都会使用存储的属性值。
例如,假设您有两个会话属性 {"x":
"1", "y": "2"}
。如果客户端调用 PostContent
或 PostText
操作而未指定 sessionAttributes
字段,Amazon Lex 通过存储的会话属性 ({"x": 1, "y": 2}
) 调用 Lambda 函数。如果 Lambda 函数未返回会话属性,Amazon Lex 会将存储的会话属性返回给客户端应用程序。
如果客户端应用程序或 Lambda 函数传递会话属性,Amazon Lex 将更新存储的会话属性。传递现有值 (例如 {"x": 2}
) 将更新存储的值。如果您传递一组新的会话属性(如 {"z": 3}
),将删除现有值而只保留新值。当传递空映射 {}
时,将擦除存储的值。
要向 Amazon Lex 发送会话属性,您要创建属性的字符串到字符串映射。下面显示了如何映射会话属性:
{ "attributeName": "attributeValue", "attributeName": "attributeValue" }
对于 PostText
操作,您可以使用 sessionAttributes
字段将映射插入请求正文中,如下所示:
"sessionAttributes": { "attributeName": "attributeValue", "attributeName": "attributeValue" }
对于 PostContent
操作,您对映射进行 base64 编码,然后将其作为 x-amz-lex-session-attributes
标头发送。
如果要在会话属性中发送二进制或结构化数据,则必须先将该数据转换为简单字符串。有关更多信息,请参阅设置复杂属性。