ハンズオン#2-1:Lambda 関数の作成

Lambda 関数 “lex-ReservationBot_JP” の作成

AWS マネジメントコンソールで AWS Lambda のコンソールに移動し、右上の [関数の作成] ボタンを押します。

“関数の作成” 画面では以下を設定して、右下の [関数の作成] ボタンを押します。

  • オプション: 一から作成
  • 関数名: lex-ReservationBot_JP
  • ランタイム: Python3.9

関数が作成されたら、コードソースセクションまでスクロールし、以下のコードで lambda_function.py を上書きします。

import json
import random
import decimal 

def random_num():
    return(decimal.Decimal(random.randrange(1000, 9999)))

def get_slots(intent_request):
    return intent_request['sessionState']['intent']['slots']
    
def get_slot(intent_request, slotName):
    slots = get_slots(intent_request)
    if slots is not None and slotName in slots and slots[slotName] is not None:
        return slots[slotName]['value']['interpretedValue']
    else:
        return None    

def get_session_attributes(intent_request):
    sessionState = intent_request['sessionState']
    if 'sessionAttributes' in sessionState:
        return sessionState['sessionAttributes']

    return {}

def elicit_intent(intent_request, session_attributes, message):
    return {
        'sessionState': {
            'dialogAction': {
                'type': 'ElicitIntent'
            },
            'sessionAttributes': session_attributes
        },
        'messages': [ message ] if message != None else None,
        'requestAttributes': intent_request['requestAttributes'] if 'requestAttributes' in intent_request else None
    }


def close(intent_request, session_attributes, fulfillment_state, message):
    intent_request['sessionState']['intent']['state'] = fulfillment_state
    return {
        'sessionState': {
            'sessionAttributes': session_attributes,
            'dialogAction': {
                'type': 'Close'
            },
            'intent': intent_request['sessionState']['intent']
        },
        'messages': [message],
        'sessionId': intent_request['sessionId'],
        'requestAttributes': intent_request['requestAttributes'] if 'requestAttributes' in intent_request else None
    }

def getReservationNumber(intent_request):
    session_attributes = get_session_attributes(intent_request)
    slots = get_slots(intent_request)
    phoneNumber = get_slot(intent_request, 'PhoneNumber')
    print(phoneNumber)
    #4桁のランダムな整数を予約番号として返す
    reservationNumber = str(random_num())
    print(reservationNumber)
    text = "ありがとうございます。携帯電話番号 "+phoneNumber+", ご予約番号は "+reservationNumber+" でご予約を承りました。"
    message =  {
            'contentType': 'PlainText',
            'content': text
        }
    fulfillment_state = "Fulfilled"    
    return close(intent_request, session_attributes, fulfillment_state, message)       
    
def dispatch(intent_request):
    intent_name = intent_request['sessionState']['intent']['name']
    response = None
    # Dispatch to your bot's intent handlers
    if intent_name == 'Waitlist':
        return getReservationNumber(intent_request)

    raise Exception('Intent with name ' + intent_name + ' not supported')

def lambda_handler(event, context):
    print(event)
    response = dispatch(event)
    return response

コードを上書きしたら、 [Deploy] ボタンを押してセーブします。