我想使用初始化/驗證或履行 AWS Lambda 函數來變更 Amazon Lex 機器人的對話流程。
解決方法
注意:本文中的範例會使用 Amazon Lex 主控台第 2 版。如果您使用第 1 版,則請在導覽窗格中選擇切換到新的 Lex 第 2 版主控台。
Lambda 回應語法會指定 Amazon Lex 預期 Lambda 函數回應的格式。請確定包含回應中必要的欄位。
使用 ElicitSlot 類型來變更對話方塊流程
若要使用 ElicitSlot 類型來變更對話方塊流程,請使用下列格式來傳遞 Lambda 程式碼勾點的回應:
{
"sessionState": {
"dialogAction": {
"slotToElicit": "<slot-name-to-elicit>",
"type": "ElicitSlot"
},
"intent": {
"name": "<intent-name-to-elicit>",
"state": "InProgress"
}
}
}
傳回回應之後,Amazon Lex 會引發稱為 slot-name-to-elicit 的插槽,該插槽屬於 intent-name-to-elicit 意圖。
例如,您有 CreateUser 意圖,該意圖具有提示使用者名稱的插槽。使用 Lambda 函數檢查使用者名稱是否已存在。如果使用者名稱存在,則為相同的意圖再次引發使用者名稱插槽。
使用 ElicitIntent 類型來變更對話方塊流程
若要使用 ElicitIntent 類型來變更對話方塊流程,請使用下列格式來傳遞 Lambda 程式碼勾點的回應:
{
"sessionState": {
"dialogAction": {
"type": "ElicitIntent"
}
},
"messages": [{
"contentType": "<content-type>",
"content": "<message>"
}]
}
Amazon Lex 傳回回應後,使用者會看到訊息預留位置中指定的訊息。將下一個使用者輸入視為意圖言論,並調用最高 nluConfidence 分數的意圖。
例如,如果您的機器人實現了使用者的意圖,則會將機器人置於接聽狀態。然後,使用者可以提供另一個言論來調用另一種意圖。
使用委派類型來變更對話方塊流程
當您指定新意圖時,您可以使用委派類型來變更意圖的起點。若要使用委派類型,請使用下列格式來傳遞 Lambda 程式碼勾點的回應:
{
'sessionState': {
'dialogAction': {
'type': 'Delegate'
},
'intent': {
'name': '<intent-name-to-elicit>',
'state': 'InProgress'
}
}
}
例如,您的機器人有意圖 A、B 和 C。如果使用者對意圖 A 中的插槽提供回應,則 Lambda 函數會檢查使用者輸入。然後,該函數會調用意圖 B 或 C。
相關資訊
GitHub 網站上的 amazon-lex-v2-dialogation