設定 Lex V2 機器人的工作階段屬性 - Amazon Lex

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

設定 Lex V2 機器人的工作階段屬性

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

在 Lambda 函數中使用工作階段屬性來初始化機器人,並自訂提示和回應卡。例如:

  • 初始化 — 在薄餅訂購機器人中,用戶端應用程式會在第一次呼叫RecognizeTextRecognizeUtterance作業時,將使用者的位置做為工作階段屬性傳遞。例如:"Location": "111 Maple Street"。Lambda 函數使用此信息來查找最接近的比薩店下訂單。

  • Personalize 提示 — 配置提示和回應卡以參考工作階段屬性。例如,「嘿 [FirstName],你想要什麼澆頭?」 如果您將使用者的名字作為工作階段屬性 ({"FirstName": "Vivian"}) 傳遞,Amazon Lex 會取代預留位置的名稱。然後,它會向用戶發送個性化提示,「嘿 Vivian,您想要哪種澆頭?」

工作階段屬性會在工作階段期間持續保留。Amazon Lex 將它們存放在加密的資料存放區中,直到工作階段結束為止 用戶端可以在要求中建立工作階段屬性,方法是呼叫RecognizeTextRecognizeUtterance作業,並將sessionAttributes欄位設定為值。Lambda 函數可以在響應中創建會話屬性。用戶端或 Lambda 函數建立工作階段屬性後,只要用戶端應用程式未在 Amazon Lex 的請求中包含sessionAttribute欄位,就會使用儲存的屬性值。

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

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

若要將工作階段屬性傳送至 Amazon Lex,您必須建 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 機器人中設定複雜的屬性