初期化/検証またはフルフィルメントの AWS Lambda 関数を使用して Amazon Lex ボットのフローを変更したいと考えています。Amazon Lex コンソールを使用してこれを行うにはどうすればいいですか?
簡単な説明
初期化/検証またはフルフィルメントの AWS Lambda コードフックを使用して、Amazon Lex ボットのダイアログフローを変更できます。Amazon Lex コンソールには dialogAction フィールドが用意されています。このフィールドは、Amazon Lex がユーザーとの対話で次のアクションを実行するように指示します。このフィールドは、Amazon Lex がクライアントに応答を返した後にユーザーに何を期待するかを説明します。
type フィールドは、ボットの次のアクションを示します。また、Lambda 関数が dialogAction 値の一部として提供する必要のある他のフィールドも決定します。5 つのタイプがあります。
- ElicitIntent: 意図を含む発話でユーザーが応答することが期待されていることを Amazon Lex に通知します。
- ElicitSlot: ユーザーがレスポンスでスロット値を提供することが期待されていることを Amazon Lex に通知します。
- Close: ユーザーからの応答を期待しないように Amazon Lex に通知します。例えば、「ピザの注文が完了しました」は応答を必要としません。
- ConfirmIntent: 現在の意図を確認または拒否するために、ユーザーが「はい」または「いいえ」の回答をすることが期待されていることを Amazon Lex に通知します。
- Delegate: ボット設定に基づいて次のアクションを選択するように Amazon Lex に指示します
解決方法
注意:この記事の手順では、Amazon Lex コンソールの V2 を使用します。現在 V1 を使用している場合は、ナビゲーションペインで新しい Lex v2 コンソールに切り替えるを選択します。
Lambda 応答構文は、Amazon Lex が Lambda 関数からの応答を期待する形式を指定します。
応答フィールドに関する次の情報を確認します。
- sessionState – このフィールドは必須です。ユーザーとの会話の現在の状態が記述されます。構造の実際の内容は、ダイアログアクションのタイプによって異なります。
- dialogAction – このフィールドは、Amazon Lex が Lambda 関数に応答して実行するアクションのタイプを決定します。type フィールドは常に必須です。slotToElicit フィールドは、dialogAction.Type が ElicitSlot である場合にのみ必要です。
- intent — Amazon Lex が使用する意図の名前。dialogAction.type が Delegate または ElicitIntent の場合、このフィールドは不要です。
- state – このフィールドは必須です。dialogAction.type がデリゲートの場合にのみ、state が ReadyForFulfillment になります。
- messages – dialogAction.type が ElicitIntent の場合、このフィールドは必須です。会話の次のターンを実行するために Amazon Lex がお客様に表示する 1 つ以上のメッセージについて説明します。メッセージを指定しない場合、Amazon Lex はボットが作成されたときに定義した適切なメッセージを使用します。詳細については、Message データ型を参照してください。
- contentType — 使用するメッセージのタイプを記述します。
- content — メッセージタイプが PlainText、CustomPayload、または SSML の場合、このフィールドにはユーザーに送信するメッセージが含まれます。
- imageResponseCard — メッセージタイプが ImageResponseCard の場合、このフィールドにはユーザーに表示するレスポンスカードの定義が含まれます。詳細については、ImageResponseCard データ型を参照してください。
ElicitSlotタイプを使用してダイアログフローを変更する
ElicitSlot タイプを使用してダイアログフローを変更するには、Lambda コードフックからの応答を次の形式で渡します。
{
"sessionState": {
"dialogAction": {
"slotToElicit": "<slot-name-to-elicit>",
"type": "ElicitSlot"
},
"intent": {
"name": "<intent-name-to-elicit>",
"state": "<state>"
}
}
}
レスポンスを返した後、intent-name-to-elicit 意図に属する slot-name-to-elicit というスロットが Amazon Lex によって引き出されます。
ElicitIntent タイプを使用してダイアログフローを変更する
ElicitIntentタイプを使用してダイアログフローを変更するには、Lambdaコードフックからの応答を次の形式で渡します。
{
"sessionState": {
"dialogAction": {
"type": "ElicitIntent"
}
},
"messages": [{
"contentType": "<content-type>",
"content": "<message>"
}]
}
この応答が返されると、メッセージプレースホルダーで指定されたメッセージがユーザーに表示されます。次のユーザー入力は意図の発話と見なされ、nluConfidence スコアが最も高い意図を呼び出します。
関連情報
応答フォーマット
amazon-lex-v2-dialogation