本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
設定 Lex V2 機器人的工作階段屬性
工作階段屬性包含在工作階段期間在機器人和用戶端應用程式之間傳遞的應用程式特定資訊。Amazon Lex 會將工作階段屬性傳遞給為機器人設定的所有 Lambda 函數。如果 Lambda 函數新增或更新工作階段屬性,Amazon Lex 會將新資訊傳遞回用戶端應用程式。
在 Lambda 函數中使用工作階段屬性來初始化機器人,以及自訂提示和回應卡。例如:
-
初始化:在披薩訂購機器人中,用戶端應用程式會在第一次呼叫 RecognizeText 或 RecognizeUtterance 操作時,將使用者的位置做為工作階段屬性傳遞給使用者。例如:
"Location": "111 Maple Street"
。Lambda 函數會使用此資訊尋找最近的披薩店來下訂單。 -
個人化提示 — 設定提示和回應卡以參考工作階段屬性。例如,「[FirstName] 你好,想要什麼配料?」 如果您以工作階段屬性 (
{"FirstName": "Vivian"}
) 傳遞使用者的名字,Amazon Lex 會取代預留位置的名稱。然後,它會傳送個人化的提示給使用者「嘿,Vivian,您想要哪些配料?」
工作階段屬性會在工作階段期間保留。Amazon Lex 會將它們存放在加密的資料存放區中,直到工作階段結束為止。用戶端可以透過呼叫 RecognizeText 或 RecognizeUtterance 操作,將 sessionAttributes
欄位設定為 值,在請求中建立工作階段屬性。Lambda 函數可以在回應中建立工作階段屬性。在用戶端或 Lambda 函數建立工作階段屬性後,只要用戶端應用程式在向 Amazon Lex 提出的請求中未包含sessionAttribute
欄位,就會使用儲存的屬性值。
例如,假設您有兩個工作階段屬性,{"x":
"1", "y": "2"}
。如果用戶端呼叫 RecognizeText
或 RecognizeUtterance
操作,但未指定 sessionAttributes
欄位,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 機器人中設定複雜的屬性。