はじめに
本記事ではAmazon LexとAWS Lambdaを連携させて、入力に対してLambdaがレスポンスを返す簡単なBot的なものを作ります。Lexのチャットテスト画面から入力された値をLambdaで受け取り、LambdaからLexへレスポンスを返すところまで確認します。
ゴール
Lexのチャットテスト画面(テスト ドラフトバージョン)でテキストを入力後に、Lambdaから応答が返ってくる事を確認する。
環境
- Python:3.12
- Lex:v2
Lambda側の準備
Lexと連携させるLambda関数を作成します。
詳細はコメントアウトの通りです。
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
Lex側の準備
1. Botの構築
コンソール画面から Lex > ボットを作成を選択。
今回は下記の内容で作成。
- 作成方法:「空のボットを作成します」を選択。
- ボット名:testBot
- IAM アクセス許可:「基本的な Amazon Lex 権限~~」を選択。
- 児童オンラインプライバシー保護法 (COPPA):今回は対象外のため「いいえ」を選択。
ここまで設定できたら「次へ」をクリックし、「ボットに言語を追加」の画面に遷移。
「言語を選択」から「日本語」を選択して完了ボタンを選択し、LexのBotを作成します。
2. インテントの作成
サンプル発話に任意のワードを登録しておきます。
ここに登録しておいたワードがBotに入力されると、このインテントが選択されます。
インテントが選択された際にLambdaを呼ぶように「コードフック」にチェックを入れる。
3. Lambda関数の選択
Lexから呼ぶLambdaはLex > ボット > ボット名 > エイリアス > エイリアス名 から「言語」を選択。
ソースから対象のLambdaを選択する。
保存できたらインテントに戻り、画面右上の「Build」ボタンからBotをビルドします。少し待って正常に構築~と表示されれば成功です。
実行 & 結果
Lexのインテントを選択し、画面右上の「Test」ボタンから実際に値を入力し、Lambdaからのレスポンスが返ってくることを確認します。
入力する値は、先ほどインテントのサンプル発話に登録した内容のいずれかのワードを含む内容になります。
今回は「カレーの作り方」と入力してみると、レスポンスが返ってきている事が確認できました。
参考