本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 API 操作將 AWS Lambda 函數連接至機器人
您必須先將 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的 ,請在 https://https://console.aws.amazon.com/lambda/home開啟 AWS Lambda 主控台,選取左側邊欄中的函數,然後選取要與機器人別名建立關聯的函數。在函數概觀的右側,尋找函數 ARN lambdaARN下的 。它應該包含區域、帳戶 ID 和函數的名稱。 -
若要允許 Amazon Lex V2 叫用別名的 Lambda 函數,請將
enabled欄位設定為true。
設定使用 API 操作叫用 Lambda 函數的意圖
若要在意圖期間設定 Lambda 函數叫用,如果您要建立新的意圖,請使用 CreateIntent 操作;如果您在現有意圖中叫用函數,請使用 UpdateIntent 操作。在意圖操作中控制 Lambda 函數調用的欄位為 dialogCodeHook、intentConfirmationSetting、 initialResponseSetting和 fulfillmentCodeHook。
如果您在引發槽時叫用 函數,如果您要建立新的槽,請使用 CreateSlot 操作,或 UpdateSlot 操作來叫用現有槽中的函數。在槽操作中控制 Lambda 函數調用的欄位是 valueElicitationSetting 物件slotCaptureSetting的 。
-
若要將 Lambda 對話方塊程式碼掛鉤設定為在每次對話後執行,請將
enabled欄位中下列 DialogCodeHookSettings 物件的dialogCodeHook欄位設定為true:"dialogCodeHook": { "enabled":boolean} -
或者,您也可以修改結構中對應至您要叫用函數之對話階段的
codeHook和/或elicitationCodeHook欄位,將 Lambda 對話方塊程式碼掛勾設定為僅在對話中的特定時間點執行。若要使用 Lambda 對話方塊程式碼掛勾進行意圖履行,請使用 CreateIntent 或 UpdateIntent 操作中的fulfillmentCodeHook欄位。這三種類型的程式碼掛鉤的結構和用途如下所示:
codeHook 欄位定義程式碼掛接在對話中指定階段執行的設定。這是具有下列結構的 DialogCodeHookInvocationSetting 物件:
"codeHook": { "active":boolean, "enableCodeHookInvocation":boolean, "invocationLabel":string, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }
-
將
activeAmazon Lex V2true的欄位變更為 ,以在對話中的該時間點呼叫程式碼掛勾。 -
將
enableCodeHookInvocationAmazon Lex V2true的欄位變更為 ,以允許程式碼掛鉤正常執行。如果您標記false,Amazon Lex V2 就像成功傳回程式碼掛鉤一樣。 -
invocationLabel指出從中叫用程式碼掛鉤的對話方塊步驟。 -
使用
postCodeHookSpecification欄位指定程式碼掛鉤成功、失敗或逾時之後發生的動作和訊息。
elicitationCodeHook 欄位定義程式碼掛鉤在需要重新引出插槽時要執行的設定。如果槽引出失敗或意圖確認遭拒,可能會發生這種情況。elicitationCodeHook 欄位是具有下列結構的 ElicitationCodeHookInvocationSetting 物件:
"elicitationCodeHook": { "enableCodeHookInvocation":boolean, "invocationLabel":string}
-
將
enableCodeHookInvocationAmazon Lex V2true的欄位變更為 ,以允許程式碼掛鉤正常執行。如果您標記false,Amazon Lex V2 就像成功傳回程式碼掛鉤一樣。 -
invocationLabel指出從中叫用程式碼掛鉤的對話方塊步驟。
fulfillmentCodeHook 欄位定義要執行的程式碼掛鉤設定,以滿足意圖。它映射到下列 FulfillmentCodeHookSettings 物件:
"fulfillmentCodeHook": { "active":boolean, "enabled":boolean, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }
-
將
activeAmazon Lex V2true的欄位變更為 ,以在對話中的該時間點呼叫程式碼掛勾。 -
將
enabledAmazon Lex V2true的欄位變更為 ,以允許程式碼掛鉤正常執行。如果您標記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 函數,請使用 CreateSlot 或 UpdateSlot 操作的 valueElicitation 欄位中的 slotCaptureSetting 欄位。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欄位。 -
若要在使用者拒絕意圖確認且 Amazon Lex V2 嘗試重試槽引出後叫用 Lambda 函數,請使用
elicitationCodeHook欄位。
若要叫用 Lambda 函數以滿足意圖,請使用 CreateIntent 或 UpdateIntent 操作中的 fulfillmentCodeHook 欄位。fulfillmentCodeHook 欄位對應至下列 FulfillmentCodeHookSettings 物件:
{ "active":boolean, "enabled":boolean, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }
3. 設定叫用 Lambda 函數的對話階段後,請使用 BuildBotLocale操作重建機器人,以測試函數。