

终止支持通知：2025年9月15日， AWS 我们将停止对Amazon Lex V1的支持。2025 年 9 月 15 日之后，您将无法再访问 Amazon Lex V1 控制台或 Amazon Lex V1 资源。如果您使用的是 Amazon Lex V2，请改为参阅 [Amazon Lex V2 指南](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 设置会话属性
<a name="context-mgmt-session-attribs"></a>

*会话属性*包含特定于应用程序的信息，于会话期间在机器人与客户端应用程序之间传递。Amazon Lex 向为机器人配置的所有 Lambda 函数传递会话属性。如果 Lambda 函数添加或更新会话属性，Amazon Lex 会将新信息返回给客户端应用程序。例如：
+ 在[练习 1：使用蓝图创建 Amazon Lex 机器人（控制台）](gs-bp.md)中，示例自动程序使用 `price` 会话属性维护鲜花价格。Lambda 函数根据所订购鲜花的类型设置此属性。有关更多信息，请参阅 [步骤 5 (可选)：查看信息流的详细信息 (控制台)](gs-bp-details-after-lambda.md)。
+ 在[预订旅程](ex-book-trip.md)中，示例自动程序使用 `currentReservation` 会话属性，在预订酒店或预订租车的对话中维护槽类型数据的副本。有关更多信息，请参阅 [信息流的详细信息](book-trip-detail-flow.md)。

在 Lambda 函数中使用会话属性来初始化机器人并自定义提示和响应卡。例如：
+ 初始化 — 在订购披萨机器人中，客户端应用程序在第一次调用 [PostContent](API_runtime_PostContent.md) 或 [PostText](API_runtime_PostText.md) 操作时传递用户位置作为会话属性。例如 `"Location": "111 Maple Street"`。Lambda 函数根据该信息查找最近的披萨店下订单。
+ 个性化提示 — 配置提示和响应卡，以引用会话属性。例如，“嘿 [FirstName]，你想要什么浇头？” 如果您传递该用户的名字作为会话属性 (`{"FirstName": "Jo"}`)，Amazon Lex 将用该名字替换占位符。然后，它会向该用户发送个性化提示，“Jo 您好，您想要什么配料？”

会话属性在会话持续时间内一直存在。Amazon Lex 将其存储在加密数据存储中，直到会话结束。客户端可以通过调用 [PostContent](API_runtime_PostContent.md) 或 [PostText](API_runtime_PostText.md) 操作同时为 `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 发送会话属性，您需要创建属性 string-to-string映射。下面显示了如何映射会话属性：

```
{
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

对于 `PostText` 操作，您可以使用 `sessionAttributes` 字段将映射插入请求正文中，如下所示：

```
"sessionAttributes": {
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

对于 `PostContent` 操作，您对映射进行 base64 编码，然后将其作为 `x-amz-lex-session-attributes` 标头发送。

如果要在会话属性中发送二进制或结构化数据，则必须先将该数据转换为简单字符串。有关更多信息，请参阅 [设置复杂属性](context-mgmt-complex-attributes.md)。