如果您使用的是 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 函數使用此信息來查找最接近的比薩店下訂單。 -
Personalize 提示 — 配置提示和回應卡以參考工作階段屬性。例如,「嘿 [FirstName],你想要什麼澆頭?」 如果您將使用者的名字作為工作階段屬性 (
{"FirstName": "Jo"}
) 傳遞,Amazon Lex 會取代預留位置的名稱。它接著會傳送個人化提示給使用者、「Jo 你好,你想要什麼配料?」
工作階段屬性會在工作階段期間內持續存在。Amazon Lex 將它們存放在加密的資料存放區中,直到工作階段結束為止 用戶端可以透過呼叫 PostContent 或 PostText 操作並將 sessionAttributes
欄位設定為值,在請求中建立工作階段屬性。Lambda 函數可以在響應中創建會話屬性。在用戶端或 Lambda 函數建立工作階段屬性之後,只要用戶端應用程式未在 Amazon Lex 的請求中包含sessionAttribute
欄位,就會使用儲存的屬性值。
例如,假設您有兩個工作階段屬性,{"x":
"1", "y": "2"}
。如果用戶端在未指定sessionAttributes
欄位的情況下呼叫PostContent
或PostText
作業,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" }
對於 PostText
操作,您使用 sessionAttributes
欄位將對應插入請求的本文,如下所示:
"sessionAttributes": { "attributeName": "attributeValue", "attributeName": "attributeValue" }
對於 PostContent
操作,您用 base64 來編碼對應,然後將其做為 x-amz-lex-session-attributes
標頭傳送。
如果您在工作階段屬性中傳送二進位或結構化資料,必須先將資料轉換為簡單的字串。如需詳細資訊,請參閱設定複雜屬性。