使用 API 作業 - Amazon Lex

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

使用 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 函數的能,請在 https://console.aws.amazon.com/lambda/home 開啟AWS Lambda主控台,選取左側邊列中的函數,然後選取要與機器人別名建立關聯的函數。lambdaARN功能概述的右側,找到功能 ARN lambdaARN 下的。它應該包含一個地區,帳戶 ID 和函數的名稱。

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

設定意圖以叫用 Lambda 函數

若要在意圖期間設定 Lambda 函數叫用,請在建立新意圖時使用CreateIntentUpdateIntent業;如果要在現有意圖中叫用函數,請使用作業。控制意圖作業中 Lambda 函數叫用的欄位為dialogCodeHookinitialResponseSettingintentConfirmationSetting、和fulfillmentCodeHook

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

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

    "dialogCodeHook": { "enabled": boolean }
  2. 或者,您可以將 Lambda 對話方塊程式碼掛接設定為僅在交談中的特定點執行,方法是修改與您要叫用函數之交談階段對應的結構內的codeHook和/或elicitationCodeHook欄位。若要使用 Lambda 對話方塊程式碼掛接來實現意圖,請使用CreateIntentUpdateIntent作業中的fulfillmentCodeHook欄位。這三種類型的代碼掛接的結構和用法如下:

codeHook欄位會定義程式碼掛接的設定,以便在交談中的指定階段執行。它是具有以下結構的DialogCodeHookInvocationSetting對象:

"codeHook": { "active": boolean, "enableCodeHookInvocation": boolean, "invocationLabel": string, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }
  • 將 Amazon Lex V2 trueactive欄位變更為,以呼叫交談中該點的程式碼勾點。

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

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

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

elicitationCodeHook欄位定義程式碼掛接的設定,以便在需要重新引導一個或多個插槽時執行。如果插槽引出失敗或意圖確認被拒絕,則可能會發生這種情況。該elicitationCodeHook字段是具有以下結構的ElicitationCodeHookInvocationSetting對象:

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

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

fulfillmentCodeHook欄位定義程式碼掛接要執行以達成意圖的設定。它會對應至下列FulfillmentCodeHookSettings物件:

"fulfillmentCodeHook": { "active": boolean, "enabled": boolean, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }
  • 將 Amazon Lex V2 trueactive欄位變更為,以呼叫交談中該點的程式碼勾點。

  • 將 Amazon Lex V2 trueenabled欄位變更為,以允許程式碼掛接正常執行。如果您加上標記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 函數,請使用slotCaptureSettingCreateSlotUpdateSlot作業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欄位。

  • 若要在使用者拒絕意圖確認後呼叫 Lambda 函數,而 Amazon Lex V2 嘗試重試插槽引出,請使用欄位。elicitationCodeHook

若要叫用 Lambda 函數來達成意圖,請在CreateIntentUpdateIntent作業中使用fulfillmentCodeHook欄位。該fulfillmentCodeHook字段映射到以下FulfillmentCodeHookSettings對象:

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

3. 設定要呼叫 Lambda 函數的交談階段後,請使用BuildBotLocale作業重建機器人以測試函數。