0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

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

0
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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?