初期化/検証またはフルフィルメントの AWS Lambda 関数を使用して Amazon Lex ボットのフローを変更したいと考えています。
解決策
注:この記事の例では、Amazon Lex コンソールのバージョン 2 を使用します。バージョン 1 を使用している場合は、ナビゲーションペインで新しい Lex v2 コンソールに切り替えるを選択します。
ラムダ応答構文は、Amazon Lex が Lambda 関数からの応答を期待する形式を指定します。応答には必須フィールドを必ず含めてください。
ElicitSlot タイプを使用してダイアログフローを変更する
ElicitSlot タイプを使用してダイアログフローを変更するには、Lambda コードフックからの応答を次の形式で渡します。
{
"sessionState": {
"dialogAction": {
"slotToElicit": "<slot-name-to-elicit>",
"type": "ElicitSlot"
},
"intent": {
"name": "<intent-name-to-elicit>",
"state": "InProgress"
}
}
}
レスポンスを返した後、intent-name-to-elicit インテントに属する slot-name-to-elicit というスロットが Amazon Lex によって引き出されます。
例えば、ユーザー名の入力を求めるスロットを持つインテント CreateUser があるとします。Lambda 関数を使用して、ユーザー名がすでに存在するかどうかを確認します。ユーザー名が存在する場合は、同じインテントに対してユーザー名スロットを再度引き出します。
ElicitIntent タイプを使用してダイアログフローを変更する
ElicitIntent タイプを使用してダイアログフローを変更するには、Lambda コードフックからの応答を次の形式で渡します。
{
"sessionState": {
"dialogAction": {
"type": "ElicitIntent"
}
},
"messages": [{
"contentType": "<content-type>",
"content": "<message>"
}]
}
Amazon Lex が応答を返すと、メッセージプレースホルダーで指定されたメッセージがユーザーに表示されます。次のユーザー入力はインテントの発話として受け取られ、nluConfidence スコアが最も高いインテントが呼び出します。
例えば、ボットがユーザーのインテントを満たしている場合は、ボットをリッスン状態にします。その後、ユーザーは別の発話を入力して別のインテントを呼び出すことができます。
デリゲートタイプを使用してダイアログフローを変更する
新しいインテントを指定するときに、デリゲートタイプを使用してインテントの開始を変更できます。デリゲートタイプを使用するには、Lambda コードフックからの応答を次の形式で渡します。
{
'sessionState': {
'dialogAction': {
'type': 'Delegate'
},
'intent': {
'name': '<intent-name-to-elicit>',
'state': 'InProgress'
}
}
}
例えば、ボットにはインテント **A **、B、C があります。ユーザーがインテント A のスロットに応答した場合、Lambda 関数はユーザー入力をチェックします。次に、関数はインテント B または C のいずれかを呼び出します。
関連情報
GitHub ウェブサイトのamazon-lex-v2-ダイアロゲーション