使用 API 操作將 AWS Lambda 函數連接至機器人 - Amazon Lex

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 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 }, ... } }
  1. botAliasLocaleSettings 欄位會映射到物件,其索引鍵是您要連接 Lambda 函數的地區設定。支援的語言和地區設定 如需支援的地區設定清單和有效金鑰的代碼,請參閱 。

  2. 若要尋找 Lambda 函數lambdaARN的 ,請在 https://https://console.aws.amazon.com/lambda/home 開啟 AWS Lambda 主控台,選取左側邊欄中的函數,然後選取要與機器人別名建立關聯的函數。在函數概觀的右側,找到函數 ARN lambdaARN下的 。它應該包含區域、帳戶 ID 和函數的名稱。

  3. 若要允許 Amazon Lex V2 叫用別名的 Lambda 函數,請將 enabled 欄位設定為 true

設定使用 API 操作叫用 Lambda 函數的意圖

若要在意圖期間設定 Lambda 函數叫用,如果您要建立新的意圖,請使用 CreateIntent 操作;如果您在現有意圖中叫用函數,請使用 UpdateIntent 操作。在意圖操作中控制 Lambda 函數叫用的欄位為 dialogCodeHookintentConfirmationSettinginitialResponseSettingfulfillmentCodeHook

如果您在引出插槽期間叫用 函數,如果您要建立新的插槽,請使用 CreateSlot 操作,或 UpdateSlot 操作來叫用現有插槽中的函數。在槽操作中控制 Lambda 函數叫用的欄位是 valueElicitationSetting 物件slotCaptureSetting的 。

  1. 若要將 Lambda 對話方塊程式碼掛鉤設定為在每次對話回合後執行,請將 enabled 欄位中下列 DialogCodeHookSettings 物件的 dialogCodeHook 欄位設定為 true

    "dialogCodeHook": { "enabled": boolean }
  2. 或者,您也可以修改結構中的 codeHook和/或 elicitationCodeHook 欄位,以對應至您要叫用函數的對話階段,將 Lambda 對話方塊程式碼掛鉤設定為僅在對話中的特定時間點執行。若要使用 Lambda 對話方塊程式碼掛勾進行意圖履行,請使用 CreateIntentUpdateIntent 操作中的 fulfillmentCodeHook 欄位。這三種類型的程式碼掛鉤的結構和用途如下:

codeHook 欄位定義程式碼掛鉤在對話中指定階段執行的設定。這是具有下列結構的 DialogCodeHookInvocationSetting 物件:

"codeHook": { "active": boolean, "enableCodeHookInvocation": boolean, "invocationLabel": string, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }
  • active 欄位變更為true適用於 Amazon Lex V2 的 ,以在對話中的該時間點呼叫程式碼掛勾。

  • 將 Amazon Lex V2 enableCodeHookInvocation 的欄位變更為 true ,以允許程式碼掛鉤正常執行。如果您標記 false,Amazon Lex V2 就像成功傳回程式碼掛鉤一樣。

  • invocationLabel 指出從中叫用程式碼掛鉤的對話方塊步驟。

  • 使用 postCodeHookSpecification 欄位指定程式碼掛鉤成功、失敗或逾時之後發生的動作和訊息。

elicitationCodeHook 欄位定義程式碼掛鉤在需要重新引出插槽時要執行的設定。如果槽引出失敗或意圖確認遭拒,可能會發生這種情況。elicitationCodeHook 欄位是具有下列結構的 ElicitationCodeHookInvocationSetting 物件:

"elicitationCodeHook": { "enableCodeHookInvocation": boolean, "invocationLabel": string }
  • 將 Amazon Lex V2 enableCodeHookInvocation 的欄位變更為 true ,以允許程式碼掛鉤正常執行。如果您標記 false,Amazon Lex V2 就像成功傳回程式碼掛鉤一樣。

  • invocationLabel 指出從中叫用程式碼掛鉤的對話方塊步驟。

fulfillmentCodeHook 欄位定義要執行的程式碼掛鉤設定,以滿足意圖。它映射到下列 FulfillmentCodeHookSettings 物件:

"fulfillmentCodeHook": { "active": boolean, "enabled": boolean, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }
  • active 欄位變更為true適用於 Amazon Lex V2 的 ,以在對話中的該時間點呼叫程式碼掛勾。

  • enabled Amazon Lex V2 true 的欄位變更為 ,以允許程式碼掛鉤正常執行。如果您標記 false,Amazon Lex V2 就像成功傳回程式碼掛鉤一樣。

  • 使用 fulfillmentUpdatesSpecification 欄位來指定在滿足意圖期間似乎更新使用者的訊息,以及與其相關聯的時間。

  • 使用 postFulfillmentStatusSpecification 欄位指定程式碼掛鉤成功、失敗或逾時後發生的訊息和動作。

您可以將 activeenableCodeHookInvocation/enabled 欄位設定為 ,在對話中的下列時間點叫用 Lambda 程式碼掛勾true

若要在辨識意圖後於初始回應中叫用 Lambda 函數,請使用 CreateIntentUpdateIntent 操作的 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 函數,請使用 CreateSlotUpdateSlot 操作之 slotCaptureSetting 欄位中的 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 函數,請使用 CreateIntentUpdateIntent 操作的 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 函數以滿足意圖,請使用 CreateIntentUpdateIntent 操作中的 fulfillmentCodeHook 欄位。fulfillmentCodeHook 欄位對應至下列 FulfillmentCodeHookSettings 物件:

{ "active": boolean, "enabled": boolean, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }

3. 設定叫用 Lambda 函數的對話階段後,請使用 BuildBotLocale操作來重建機器人,以測試函數。