Attach an AWS Lambda function to a bot using API operations
You must first attach a Lambda function to your bot alias before you can invoke it. You can only associate one Lambda function with each bot alias. Perform these steps to attach the Lambda function using API operations.
If you are creating a new bot alias, use the CreateBotAlias operation to attach a Lambda function. To attach
a Lambda function to an existing bot alias, use the UpdateBotAlias operation. Modify the botAliasLocaleSettings
field to contain the correct settings:
{ "botAliasLocaleSettings" : {
locale
: { "codeHookSpecification": { "lambdaCodeHook": { "codeHookInterfaceVersion": "1.0", "lambdaARN": "arn:aws:lambda:region
:account-id
:function:function-name
" } }, "enabled": true }, ... } }
-
The
botAliasLocaleSettings
field maps to an object whose keys are the locales in which you want to attach the Lambda function. See Supported languages and locales for a list of supported locales and the codes that are valid keys. -
To find the
lambdaARN
for a Lambda function, open the AWS Lambda console at https://console.aws.amazon.com/lambda/home, select Functions in the left sidebar, and select the function to associate with the bot alias. On the right side of the Function overview, find the lambdaARN
under Function ARN. It should contain a region, account ID, and the name of the function. -
To allow Amazon Lex V2 to invoke the Lambda function for the alias, set the
enabled
field totrue
.
Setting a intent to invoke a Lambda function using API operations
To set up the Lambda function invocation during an intent, use the CreateIntent operation
if you are creating a new intent, or the UpdateIntent operation if you are invoking the
function in an existing intent. The fields that control the Lambda function invocation in the
intent operations are dialogCodeHook
, initialResponseSetting
, intentConfirmationSetting
,
and fulfillmentCodeHook
.
If you invoke the function during the elicitation of a slot, use the CreateSlot operation if
you are creating a new slot, or the UpdateSlot operation to invoke the function in an existing slot.
The field that controls the Lambda function invocation in the slot operations is the slotCaptureSetting
of the valueElicitationSetting
object.
-
To set the Lambda dialog code hook to run after every turn of the conversation, set the
enabled
field of the following DialogCodeHookSettings object in thedialogCodeHook
field totrue
:"dialogCodeHook": { "enabled":
boolean
} -
Alternatively, you can set the Lambda dialog code hook to run only at specific points in the conversations by modifying the
codeHook
and/orelicitationCodeHook
field within the structures that correspond to the conversation stages at which you want to invoke the function. To use the Lambda dialog code hook for intent fulfillment, use thefulfillmentCodeHook
field in the CreateIntent or UpdateIntent operation. The structures and uses of these three types of code hooks are as follows:
The codeHook
field defines the settings for the code hook to run at a given stage in the conversation. It is a DialogCodeHookInvocationSetting object with the following structure:
"codeHook": { "active":
boolean
, "enableCodeHookInvocation":boolean
, "invocationLabel":string
, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }
-
Change the
active
field totrue
for Amazon Lex V2 to call the code hook at that point in the conversation. -
Change the
enableCodeHookInvocation
field totrue
for Amazon Lex V2 to allow the code hook to run normally. If you mark itfalse
, Amazon Lex V2 acts as if the code hook returned successfully. -
The
invocationLabel
indicates the dialog step from which the code hook is invoked. -
Use the
postCodeHookSpecification
field to specify the actions and messages that occur after the code hook succeeds, fails, or times out.
The elicitationCodeHook
field defines the settings for the code hook to run in the event that a slot or slots need to be re-elicited. This scenario may occur if slot elicitation fails or intent confirmation is denied. The elicitationCodeHook
field is an ElicitationCodeHookInvocationSetting object with the following structure:
"elicitationCodeHook": { "enableCodeHookInvocation":
boolean
, "invocationLabel":string
}
-
Change the
enableCodeHookInvocation
field totrue
for Amazon Lex V2 to allow the code hook to run normally. If you mark itfalse
, Amazon Lex V2 acts as if the code hook returned successfully. -
The
invocationLabel
indicates the dialog step from which the code hook is invoked.
The fulfillmentCodeHook
field defines the settings for the code hook to run to fulfill the intent. It maps to the following FulfillmentCodeHookSettings object:
"fulfillmentCodeHook": { "active":
boolean
, "enabled":boolean
, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }
-
Change the
active
field totrue
for Amazon Lex V2 to call the code hook at that point in the conversation. -
Change the
enabled
field totrue
for Amazon Lex V2 to allow the code hook to run normally. If you mark itfalse
, Amazon Lex V2 acts as if the code hook returned successfully. -
Use the
fulfillmentUpdatesSpecification
field to specify the messages that appear to update the user during fulfillment of the intent and the timing associated with them. -
Use the
postFulfillmentStatusSpecification
field to specify the messages and actions that occur after the code hook succeeds, fails, or times out.
You can invoke the Lambda code hook at the following points in a conversation by setting the active
and enableCodeHookInvocation
/enabled
fields to true
:
To invoke the Lambda function in the initial response after the intent is recognized, use the codeHook
structure in the initialResponse
field of the CreateIntent or UpdateIntent operation. The initialResponse
field maps to the following InitialResponseSetting object:
"initialResponse": { "codeHook": { "active":
boolean
, "enableCodeHookInvocation":boolean
, "invocationLabel":string
, "postCodeHookSpecification": PostDialogCodeHookInvocationSpecification object, }, "initialResponse": FulfillmentUpdatesSpecification object, "nextStep": PostFulfillmentStatusSpecification object, "conditional": ConditionalSpecification object }
To invoke the Lambda function after eliciting a slot value, use the slotCaptureSetting
field within the valueElicitation
field of the CreateSlot or UpdateSlot operation. The slotCaptureSetting
field maps to the following SlotCaptureSetting object:
"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 }
-
To invoke the Lambda function after slot elicitation is successful, use the
codeHook
field. -
To invoke the Lambda function after slot elicitation fails and Amazon Lex V2 attempts to retry slot elicitation, use the
elicitationCodeHook
field.
To invoke the Lambda function when confirming an intent, use the intentConfirmationSetting
field of the CreateIntent or UpdateIntent operation. The intentConfirmation
field maps to the following IntentConfirmationSetting object:
"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 }
-
To invoke the Lambda function after the user confirms the intent and its slots, use the
codeHook
field. -
To invoke the Lambda function after the user denies the intent confirmation and Amazon Lex V2 attempts to retry slot elicitation, use the
elicitationCodeHook
field.
To invoke the Lambda function to fulfill an intent, use the fulfillmentCodeHook
field in the CreateIntent or UpdateIntent operation. The fulfillmentCodeHook
field maps to the following FulfillmentCodeHookSettings object:
{ "active":
boolean
, "enabled":boolean
, "fulfillmentUpdatesSpecification": FulfillmentUpdatesSpecification object, "postFulfillmentStatusSpecification": PostFulfillmentStatusSpecification object }
3. Once you set the conversation stages at which to invoke the Lambda function, use the BuildBotLocale
operation to
rebuild the bot in order to test the function.