Amazon Lex

Hands-On

Demo

In this demo, we will:

  1. Create a Lex bot for pizza ordering
  2. Define intents and configure slot types
  3. Add sample utterances and train the bot
  4. Create a Lambda function for order processing
  5. Configure bot fulfillment with Lambda
  6. Test the conversational flow
  7. Clean up resources

Agenda

Create bot

Configure bot settings

PizzaOrderBot

Bot configuration

A bot to take pizza orders

IAM permissions

Bot error logging

Children's Online Privacy Protection Act (COPPA)

Idle session timeout

Advanced settings - optional

Add language to bot

Slots

Add slot type

Add blank slot type

PizzaSize

Add blank slot type

Slot type details

PizzaSize
Available pizza sizes

Slot value resolution

small
medium
large

Slot type values

Add a 2nd blank slot type

PizzaType

Add blank slot type

Available pizza types

Slot type details

Slot type values

margherita
pepperoni
vegetarian
hawaiian

Add intent

Add empty intent

Add empty intent

OrderPizza
Intent to order a pizza

Intent details

Contexts - optional

I want to order a pizza
I'd like a {PizzaSize} {PizzaType} pizza
Can I get a {PizzaType} pizza
I want a {PizzaSize} pizza
Order a {PizzaType} pizza please
I'd like to order a {PizzaSize} {PizzaType}
Get me a pizza
Pizza order
Can I order a {PizzaType}
I need a {PizzaSize} {PizzaType} pizza

Sample utterances

Add slot 

What type of pizza would you like?
PizzaType

Add slot

Add slot

PizzaSize
What size would you like?

Add slot

Quantity
How many pizzas would you like?

Slots

Confirmation

You want to order {Quantity} {PizzaSize} {PizzaType} pizza(s). Is that correct?
Okay, let's start over. What would you like to order?

Fulfillment & Closing response

Save intent

Create Lambda function

PizzaOrderProcessor

Permissions

Additional configurations

import json
import random
import string

def lambda_handler(event, context):
    # Extract intent name
    intent_name = event['sessionState']['intent']['name']
    
    # Extract slot values
    slots = event['sessionState']['intent']['slots']
    
    if intent_name == 'OrderPizza':
        pizza_type = slots['PizzaType']['value']['interpretedValue']
        pizza_size = slots['PizzaSize']['value']['interpretedValue']
        quantity = slots['Quantity']['value']['interpretedValue']
        
        # Generate order number
        order_number = ''.join(random.choices(string.ascii_uppercase + string.digits, k=8))
        
        # Calculate price (simplified pricing)
        size_prices = {'small': 10, 'medium': 15, 'large': 20}
        base_price = size_prices.get(pizza_size, 15)
        total_price = base_price * int(quantity)
        
        # Prepare fulfillment message
        fulfillment_message = (
            f"Great! Your order has been placed. "
            f"Order #{order_number}: {quantity} {pizza_size} {pizza_type} pizza(s). "
            f"Total: ${total_price}. "
            f"Your order will be ready in 30-40 minutes."
        )
        
        response = {
            "sessionState": {
                "dialogAction": {
                    "type": "Close"
                },
                "intent": {
                    "name": intent_name,
                    "state": "Fulfilled"
                }
            },
            "messages": [
                {
                    "contentType": "PlainText",
                    "content": fulfillment_message
                }
            ]
        }
    else:
        response = {
            "sessionState": {
                "dialogAction": {
                    "type": "Close"
                },
                "intent": {
                    "name": intent_name,
                    "state": "Failed"
                }
            },
            "messages": [
                {
                    "contentType": "PlainText",
                    "content": "Sorry, I couldn't process your request."
                }
            ]
        }
    
    return response

TestBotAlias

Alias: TestBotAlias

Languages

Add Lambda function

Go to Intents

Fulfillment

Fulfillment Lambda code hook

Build the Intent 

Successfully built language English (US) in bot: PizzaOrderBot

I want to order large pepperoni
pizzas
2
yes

1 more test run

I want to order a pizza
Vegetarian
Medium
1
Yes
Yes

Clean Up

Delete Lambda function

Delete Bot

Delete bot PizzaOrderBot?

Delete Lambda Execution Role

Pizza

Delete PizzaOrderProcessor-role-Oacc4y6z?

Delete Lex IAM Service Role

Lex

Delete Lex IAM Service Role

🙏

Thanks

for

Watching