はじめに
本記事では、Lexのslotに設定された値を Code hooks
で呼ばれたLambdaで受け取る処理を実装していきます。
環境
- Python:3.12
- Lex:v2
ゴール
Code hooksで呼ばれたLambdaでLexのslotに設定された値を受け取る
Lex
本記事では下記のようにslotが1つあるLex Botを想定してます。
何でもよいですが今回は日付入力を想定して、Slot typeをAMAZON.Date
にしておきます。
- SLots
- Name:get_date
- SLot type:AMAZON.Date
- Prompts:hoge
- Sample utterances
- {get_date}
Lambda
イベントオブジェクトからスロットの値を取得します。
lambda_function.py
def lambda_handler(event, context):
intent_name = event['sessionState']['intent']['name']
slots = event['sessionState']['intent']['slots']
# スロットの値を取得
inputed_date = slots['get_date']['value']['originalValue']
# 例:入力された日付: 10/05
print(f"入力された日付: {inputed_date}")
# Lex Botへのレスポンス
return {
'sessionState': {
'dialogAction': {
'type': 'Close'
},
'intent': {
'name': intent_name,
'state': 'Fulfilled'
}
},
'messages': [{
'contentType': 'PlainText',
'content': f'入力された日付は {inputed_date} です。'
}]
}
実行
マネジメントコンソール > 対象のLex Bot > Intents から Test
を押下し、試しに日付を入力してみます。
上記画像の inspect
を押下すると、RequestとResponseの内容を確認できます。
日付を入力すると 入力された日付は 10/05 です。
というようにLambda側で作成したメッセージが返ってきました。
Lambdaのイベントオブジェクトの中のslotsは次のようになっておりました。
~~~
"slots": {
"get_date": {
"shape": "Scalar",
"value": {
"originalValue": "10/05",
"resolvedValues": [
"2024-10-05"
],
"interpretedValue": "2024-10-05"
}
}
},
~~~
- interpretedValue、originalValue、resolvedValues:
https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_Value.html
参考
- https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_SessionState.html
- https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_Intent.html
- https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_Slot.html
- https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_Value.html
- https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/lexv2-runtime/client/get_session.html