やりたい事
インテントのサンプル発話に登録されたワード以外の文言が入力されても、LambdaからのレスポンスをLexのチャットに表示させたい。
課題
Lexのサンプル発話に登録した内容が入力されると指定したLambdaを呼ぶようにできるが、これだけでは特定のワードが入力された際にしかLambdaを呼ぶことができない。
結論
FallbackIntent に落ちてもLambdaを呼ぶように設定すると、LambdaからのレスポンスをLexのチャットボットのレスポンスとして表示させる事ができる。
環境
- Python:3.12
- Lex:v2
FallbackIntent の設定
FallbackIntent のコードフックにチェックを入れておきます。
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から返ってきたレスポンスを表示できることが確認できました。
参考