0
0
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

Lexで作ったbotをLambdaを使用してフリーインプット形式に対応させる

Posted at

やりたい事

インテントのサンプル発話に登録されたワード以外の文言が入力されても、LambdaからのレスポンスをLexのチャットに表示させたい。

課題

Lexのサンプル発話に登録した内容が入力されると指定したLambdaを呼ぶようにできるが、これだけでは特定のワードが入力された際にしかLambdaを呼ぶことができない。

結論

FallbackIntent に落ちてもLambdaを呼ぶように設定すると、LambdaからのレスポンスをLexのチャットボットのレスポンスとして表示させる事ができる。

環境

  • Python:3.12
  • Lex:v2

FallbackIntent の設定

FallbackIntent のコードフックにチェックを入れておきます。

image.png

Lexの準備

次の記事と同様の構成でLexのbotを作成します。

Lambdaの準備

オウム返しに近い内容ですが、「ユーザの入力値+について問い合わせありがとうございます。」という形でLexにレスポンスを返します。

lambda_function.py
def lambda_handler(event, context):

    # インテント名を取得
    intent_name = event['sessionState']['intent']['name']
    # スロットを取得
    slots = event['sessionState']['intent']['slots']
    # ユーザーの入力テキストを取得
    user_input = event['inputTranscript']
    # レスポンスとして返す文言を作成
    response_text = f"{user_input}について問い合わせありがとうございます。"
    
    # レスポンスを作成
    response = {
        'messages': [{'contentType': 'PlainText', 'content': response_text}],
        'sessionState': {
            'dialogAction': {
                'type': 'Close',
            },
            'intent': {
                'name': intent_name,
                'slots': slots,
                'state': 'Fulfilled'
            }
        }
    }
    
    # Lambda 関数のレスポンスを返す
    return response

実行結果

インテントのサンプル発話に登録していない文言を入力してみます。
今回は「うどんの具」と入力してみましたがLambdaから返ってきたレスポンスを表示できることが確認できました。

image.png

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0