本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 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, }
-
將
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 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 操作之 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 函數,請使用 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
操作來重建機器人,以測試函數。