How can I change the flow of my Amazon Lex bot using an initialization/validation or fulfillment AWS Lambda function?

Last updated: 2022-05-27

I want to change the flow of my Amazon Lex bot using an initialization/validation or fulfillment AWS Lambda function. How can I do this using the Amazon Lex console?

Short description

You can use initialization/validation or fulfillment AWS Lambda code hooks to make changes to the dialog flow of your Amazon Lex bot. Amazon Lex console provides the dialogAction field, which directs Amazon Lex in the next course of action to take in its interaction with your users. This field describes to Amazon Lex what to expect from a user after it returns a response to the client.

The type field indicates the next course of action for the bot. It also determines the other fields that the Lambda function must provide as part of the dialogAction value. There are five types:

  1. ElicitIntent: Informs Amazon Lex that the user is expected to respond with an utterance that includes an intent.
  2. ElicitSlot: Informs Amazon Lex that the user is expected to provide a slot value in the response.
  3. Close: Informs Amazon Lex not to expect a response from the user. For example, "Your pizza order has been placed" does not require a response.
  4. ConfirmIntent: Informs Amazon Lex that the user is expected to give a yes or no answer to confirm or deny the current intent.
  5. Delegate: Directs Amazon Lex to choose the next course of action based on the bot configuration

Resolution

Note: The steps in this article use V2 of the Amazon Lex console. If you are currently using V1, choose Switch to the new Lex v2 console in the navigation pane.

Lambda response syntax specifies the format in which Amazon Lex expects a response from your Lambda function.

Review the following information about the response fields:

  • sessionState – This field is required. It describes the current state of the conversation with the user. The actual contents of the structure depends on the type of dialog action.
  • dialogAction – This field determines the type of action that Amazon Lex should take in response to the Lambda function. The type field is always required. The slotToElicit field is required only when dialogAction.type is ElicitSlot.
  • intent – The name of the intent that Amazon Lex uses. This field is not required when dialogAction.type is Delegate or ElicitIntent.
  • state – This field is required. The state can only be ReadyForFulfillment if dialogAction.type is Delegate.
  • messages – This field is required if dialogAction.type is ElicitIntent. It describes one or more messages that Amazon Lex shows to the customer to perform the next turn of the conversation. If you don't supply messages, then Amazon Lex uses an appropriate message that you defined when the bot was created. For more information, see the Message data type.
  • contentType – This describes the type of message to use.
  • content – If the message type is PlainText, CustomPayload, or SSML, then this field contains the message to send to the user.
  • imageResponseCard – If the message type is ImageResponseCard, then this field contains the definition of the response card to show to the user. For more information, see the ImageResponseCard data type.

Change dialog flow using the ElicitSlot type

To change dialog flow using ElicitSlot type, pass the response from the Lambda code hook in this format:

{
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "<slot-name-to-elicit>",
            "type": "ElicitSlot"
        },
        "intent": {
            "name": "<intent-name-to-elicit>",
            "state": "<state>"
        }
    }
}

After returning the response, a slot called slot-name-to-elicit belonging to the intent-name-to-elicit intent is elicited by Amazon Lex.

Change dialog flow using the ElicitIntent type

To change dialog flow using ElicitIntent type, pass the response from the Lambda code hook in this format:

   {
     "sessionState": {
         "dialogAction": {
             "type": "ElicitIntent"
         }
     },
     "messages": [{
         "contentType": "<content-type>",
         "content": "<message>"
     }]
 }

After returning this response, the message specified in the message placeholder is displayed to the user. The next user input is taken as an intent utterance, which invokes the intent with the highest nluConfidence score.


Did this article help?


Do you need billing or technical support?