

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定 Lex V2 機器人的工作階段屬性
<a name="context-mgmt-session-attribs"></a>

*工作階段屬性*包含在工作階段期間在機器人和用戶端應用程式之間傳遞的應用程式特定資訊。Amazon Lex V2 會將工作階段屬性傳遞給為機器人設定的所有 Lambda 函數。如果 Lambda 函數新增或更新工作階段屬性，Amazon Lex V2 會將新資訊傳遞回用戶端應用程式。

在 Lambda 函數中使用工作階段屬性來初始化機器人，並自訂提示和回應卡。例如：
+ 初始化：在比薩訂購機器人中，用戶端應用程式會在第一次呼叫 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 或 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 操作時，將使用者的位置傳遞為工作階段屬性。例如 `"Location": "111 Maple Street"`。Lambda 函數會使用此資訊來尋找最接近的比薩來下訂單。
+ 個人化提示 — 設定提示和回應卡以參考工作階段屬性。例如，「[FirstName] 你好，想要什麼配料？」 如果您以工作階段屬性 (`{"FirstName": "Vivian"}`) 傳遞使用者的名字，Amazon Lex 會取代預留位置的名稱。然後，它會傳送個人化提示給使用者「嘿，Vivian，您想要哪些配料？」

工作階段屬性會在工作階段期間保留。Amazon Lex V2 會將它們存放在加密的資料存放區中，直到工作階段結束為止。用戶端可以透過呼叫 [RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) 或 [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) 操作，將 `sessionAttributes` 欄位設定為 值，在請求中建立工作階段屬性。Lambda 函數可以在回應中建立工作階段屬性。在用戶端或 Lambda 函數建立工作階段屬性之後，只要用戶端應用程式在對 Amazon Lex V2 的請求中不包含 `sessionAttribute` 欄位，就會使用儲存的屬性值。

例如，假設您有兩個工作階段屬性，`{"x": "1", "y": "2"}`。如果用戶端在未指定 `sessionAttributes` 欄位的情況下呼叫 `RecognizeText`或 `RecognizeUtterance`操作，Amazon Lex V2 會使用儲存的工作階段屬性 () 呼叫 Lambda 函數`{"x": 1, "y": 2}`。如果 Lambda 函數未傳回工作階段屬性，Amazon Lex V2 會將儲存的工作階段屬性傳回至用戶端應用程式。

如果用戶端應用程式或 Lambda 函數傳遞工作階段屬性，Amazon Lex V2 會更新儲存的工作階段屬性。傳遞現有的值，例如 ` {"x": 2}`，會更新儲存的值。如果您傳送一組新的工作階段屬性，例如 `{"z": 3}`，現有的值會被移除，只保留新值。當傳遞空白對應 `{}` 時，會清除儲存的值。

若要將工作階段屬性傳送至 Amazon Lex V2，您可以建立屬性的string-to-string映射。以下說明如何對應工作階段屬性：

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

對於 `RecognizeText`操作，您可以使用 `sessionState`結構的 `sessionAttributes` 欄位將映射插入請求的內文，如下所示：

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

對於 `RecognizeUtterance`操作，您可以對映射進行 base64 編碼，然後將其作為 `x-amz-lex-session-state` 標頭的一部分傳送。

如果您在工作階段屬性中傳送二進位或結構化資料，必須先將資料轉換為簡單的字串。如需詳細資訊，請參閱[在 Lex V2 機器人中設定複雜的屬性](context-mgmt-complex-attributes.md)。