本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
附加 AWS Lambda 使用API操作功能的機器人
您必須先將 Lambda 函數附加至機器人別名,然後才能叫用它。您只能將一個 Lambda 函數與每個機器人別名建立關聯。執行這些步驟以使用API作業連接 Lambda 函數。
如果您要建立新的機器人別名,請使用此CreateBotAlias作業連接 Lambda 函數。若要將 Lambda 函數附加至現有的機器人別名,請使用此UpdateBotAlias作業。修改botAliasLocaleSettings
欄位以包含正確的設定:
{ "botAliasLocaleSettings" : {
locale
: { "codeHookSpecification": { "lambdaCodeHook": { "codeHookInterfaceVersion": "1.0", "lambdaARN": "arn:aws:lambda:region
:account-id
:function:function-name
" } }, "enabled": true }, ... } }
-
此
botAliasLocaleSettings
欄位會對應至物件,其索引鍵為您要附加 Lambda 函數的地區設定。支援的語言和地區設定如需支援的地區設定清單,以及有效金鑰的代碼,請參閱。 -
若要尋找 Lambda 函數,
lambdaARN
請開啟 AWS Lambda 在https://console.aws.amazon.com/lambda/家中控制台,選擇左側邊欄中的功能,然後選擇與機器人別名關聯的功能。在功能概述的右側,找到功能 lambdaARN
下的ARN。它應該包含一個地區,帳戶 ID 和函數的名稱。 -
若要允許 Amazon Lex V2 叫用別名的 Lambda 函數,請將
enabled
欄位設定為true
。
設定使用作業叫用 Lambda 函API數的意圖
若要在意圖期間設定 Lambda 函數叫用,請在建立新意圖時使用CreateIntent作UpdateIntent業;如果要在現有意圖中叫用函數,請使用作業。在意圖作業中控制 Lambda 函數叫用的欄位為dialogCodeHook
initialResponseSetting
、intentConfirmationSetting
、和fulfillmentCodeHook
。
如果您在插槽引出期間呼叫函數,請在建立新插槽時使用此CreateSlot作業,或者在現有插槽中叫用函數的UpdateSlot作業。控制插槽作業中 Lambda 函數叫用的欄位是valueElicitationSetting
物件slotCaptureSetting
的欄位。
-
若要將 Lambda 對話方塊程式碼掛接設定為在每次交談後執行,請將
enabled
欄位中下列DialogCodeHookSettings物件的dialogCodeHook
欄位設定為true
:"dialogCodeHook": { "enabled":
boolean
} -
或者,您可以將 Lambda 對話方塊程式碼掛接設定為僅在交談中的特定點執行,方法是修改與您要叫用函數之交談階段對應的結構內的
codeHook
和/或elicitationCodeHook
欄位。若要使用 Lambda 對話方塊程式碼掛接來實現意圖,請使用CreateIntent或UpdateIntent作業中的fulfillmentCodeHook
欄位。這三種類型的代碼掛接的結構和用法如下:
此codeHook
欄位會定義程式碼掛接的設定,以便在交談中的指定階段執行。它是具有以下結構的DialogCodeHookInvocationSetting對象:
"codeHook": { "active":
boolean
, "enableCodeHookInvocation":boolean
, "invocationLabel":string
, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }
-
將 Amazon Lex V2
true
的active
欄位變更為,以便在交談中呼叫該點的程式碼勾點。 -
將 Amazon Lex V2
true
的enableCodeHookInvocation
欄位變更為,以允許程式碼掛接正常執行。如果您加上標記false
,Amazon Lex V2 就會像程式碼掛接成功傳回一樣。 -
invocationLabel
指示從中叫用程式碼掛接的對話方塊步驟。 -
使用此
postCodeHookSpecification
欄位可指定程式碼掛接成功、失敗或逾時後所發生的動作和訊息。
此elicitationCodeHook
欄位定義程式碼掛接的設定,以便在需要重新引導一個或多個插槽時執行。如果插槽引出失敗或意圖確認被拒絕,則可能會發生這種情況。該elicitationCodeHook
字段是具有以下結構的ElicitationCodeHookInvocationSetting對象:
"elicitationCodeHook": { "enableCodeHookInvocation":
boolean
, "invocationLabel":string
}
-
將 Amazon Lex V2
true
的enableCodeHookInvocation
欄位變更為,以允許程式碼掛接正常執行。如果您加上標記false
,Amazon Lex V2 就會像程式碼掛接成功傳回一樣。 -
invocationLabel
指示從中叫用程式碼掛接的對話方塊步驟。
此fulfillmentCodeHook
欄位定義程式碼掛接要執行以達成意圖的設定。它會對應至下列FulfillmentCodeHookSettings物件:
"fulfillmentCodeHook": { "active":
boolean
, "enabled":boolean
, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }
-
將 Amazon Lex V2
true
的active
欄位變更為,以便在交談中呼叫該點的程式碼勾點。 -
將 Amazon Lex V2
true
的enabled
欄位變更為,以允許程式碼掛接正常執行。如果您加上標記false
,Amazon Lex V2 就會像程式碼掛接成功傳回一樣。 -
使用此
fulfillmentUpdatesSpecification
欄位可指定在完成意圖期間顯示為更新使用者的訊息,以及與使用者相關聯的時間。 -
使用此
postFulfillmentStatusSpecification
欄位可指定程式碼掛接成功、失敗或逾時後發生的訊息和動作。
您可以將active
和enableCodeHookInvocation
/欄位設定為,在交談中的下列enabled
位置叫用 Lambda 程式碼掛接true
:
若要在辨識出意圖之後在初始回應中叫用 Lambda 函數,請使用CreateIntent或UpdateIntent作業initialResponse
欄位中的codeHook
結構。該initialResponse
字段映射到以下InitialResponseSetting對象:
"initialResponse": { "codeHook": { "active":
boolean
, "enableCodeHookInvocation":boolean
, "invocationLabel":string
, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }, "initialResponse": FulfillmentUpdatesSpecification object, "nextStep": PostFulfillmentStatusSpecification object, "conditional": ConditionalSpecification object }
若要在引出插槽值之後叫用 Lambda 函數,請使用slotCaptureSetting
CreateSlot或UpdateSlot作業valueElicitation
欄位內的欄位。該slotCaptureSetting
字段映射到以下SlotCaptureSetting對象:
"slotCaptureSetting": { "captureConditional": ConditionalSpecification object, "captureNextStep": DialogState object, "captureResponse": ResponseSpecification object, "codeHook": { "active":
true
, "enableCodeHookInvocation":true
, "invocationLabel":string
, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }, "elicitationCodeHook": { "enableCodeHookInvocation":boolean
, "invocationLabel":string
}, "failureConditional": ConditionalSpecification object, "failureNextStep": DialogState object, "failureResponse": ResponseSpecification object }
-
若要在插槽引出成功之後叫用 Lambda 函數,請使用欄位
codeHook
。 -
若要在插槽引出失敗且 Amazon Lex V2 嘗試重試插槽引出後呼叫 Lambda 函數,請使用欄位。
elicitationCodeHook
若要在確認意圖時叫用 Lambda 函數,請使用CreateIntent或UpdateIntent作業的intentConfirmationSetting
欄位。該intentConfirmation
字段映射到以下IntentConfirmationSetting對象:
"intentConfirmationSetting": { "active":
boolean
, "codeHook": { "active":boolean
, "enableCodeHookInvocation":boolean
, "invocationLabel":string
, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }, "confirmationConditional": ConditionalSpecification object, "confirmationNextStep": DialogState object, "confirmationResponse": ResponseSpecification object, "declinationConditional": ConditionalSpecification object, "declinationNextStep": FulfillmentUpdatesSpecification object, "declinationResponse": PostFulfillmentStatusSpecification object, "elicitationCodeHook": { "enableCodeHookInvocation":boolean
, "invocationLabel":string
, }, "failureConditional": ConditionalSpecification object, "failureNextStep": DialogState object, "failureResponse": ResponseSpecification object, "promptSpecification": PromptSpecification object }
-
若要在使用者確認意圖及其插槽之後叫用 Lambda 函數,請使用
codeHook
欄位。 -
若要在使用者拒絕意圖確認後呼叫 Lambda 函數,而 Amazon Lex V2 嘗試重試插槽引出,請使用欄位。
elicitationCodeHook
若要叫用 Lambda 函數來達成意圖,請在CreateIntent或UpdateIntent作業中使用fulfillmentCodeHook
欄位。該fulfillmentCodeHook
字段映射到以下FulfillmentCodeHookSettings對象:
{ "active":
boolean
, "enabled":boolean
, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }
3. 設定要呼叫 Lambda 函數的交談階段後,請使用BuildBotLocale
作業重建機器人以測試函數。