Amazon Lex V2 を使用している場合は、代わりに Amazon Lex V2 ガイドを参照してください。
Amazon Lex V1 を使用している場合は、ボットを Amazon Lex V2 にアップグレードすることをお勧めします。V1 には新機能を追加されませんので、すべての新しいボットには V2 を使用することを強くお勧めします。
翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
予約のスケジュール
この演習のボット例では、歯科医院の予約を行います。この例では、レスポンスカードを使用してボタンでユーザー入力を取得する方法も示しています。具体的には、この例では、実行時に動的にレスポンスカードを生成しています。
ビルド時にレスポンスカード (静的レスポンスカードとも呼ばれます) を設定したり、 AWS Lambda 関数で動的に生成したりできます。この例のボットでは、以下のレスポンスカードを使用します。
-
予約タイプのボタンをリストするレスポンスカード。例については、次の画像を参照してください。
-
予約日付のボタンをリストするレスポンスカード。例については、次の画像を参照してください。
-
提示された予約時刻を確認するボタンをリストするレスポンスカード。例については、次の画像を参照してください。
予約できる日付と時刻は変わるため、実行時にレスポンスカードを作成する必要があります。 AWS Lambda 関数を使用して、これらのレスポンスカードを動的に生成します。Lambda 関数は、Amazon Lex へのレスポンス内でレスポンスカードを返します。Amazon Lex は、クライアントへのレスポンス内にレスポンスカードを含めます。
クライアント (例えば、Facebook Messenger) でレスポンスカードがサポートされている場合、ユーザーはボタンのリストから選択するか、またはレスポンスを入力します。サポートされていない場合、ユーザーはレスポンスを入力します。
前の例で示されているボタンに加えて、イメージ、添付ファイル、およびその他の役立つ情報をレスポンスカードに表示することもできます。レスポンスカードに関する情報については、「レスポンスカード」を参照してください。
この演習では、以下のことを行います。
-
( ScheduleAppointment ブループリントを使用して) ボットを作成してテストします。この演習では、ボットの設計図を使用して、迅速にボットをセットアップし、テストします。使用可能な設計図の一覧については、「Amazon Lex および AWS Lambda の設計図」を参照してください。このボットには 1 つのインテント (
MakeAppointment
) が事前設定されています。 -
Lambda 関数を作成してテストします lex-make-appointment-python (Lambda が提供する設計図を使用)。その Lambda 関数をコードフックとして使用して初期化、検証、およびフルフィルメント (達成) タスクを実行するように、
MakeAppointment
インテントを設定します。注記
提供されている Lambda 関数の例では、歯科医予約のモックアップの予約可能日時に基づいて動的な会話を示しています。実際のアプリケーションでは、実際のカレンダーを使用して予定を設定できます。
-
その Lambda 関数をコードフックとして使用するように、
MakeAppointment
インテント設定を更新します。次に、 end-to-end エクスペリエンスをテストします。 -
作動中のレスポンスカードを確認できるように、そのスケジュール予約ボットを Facebook Messenger に公開します (Amazon Lex コンソール内のクライアントではレスポンスカードは現在サポートされていません)。
以下のセクションでは、この演習で使用する設計図に関する概要情報を示しています。
トピック
Bot Blueprint の概要 (ScheduleAppointment)
この演習でボットの作成に使用する ScheduleAppointment ブループリントには、以下の設定が事前設定されています。
-
スロットタイプ – 1 つのカスタムスロットタイプ (
AppointmentTypeValue
) と列挙値 (root canal
、cleaning
、whitening
)。 -
インテント – 1 つのインテント (
MakeAppointment
)。次のように事前設定されています。-
スロット – このインテントでは以下のスロットが設定されています。
-
スロット
AppointmentType
:AppointmentTypes
カスタムタイプ -
スロット
Date
:AMAZON.DATE
組み込みタイプ -
スロット
Time
:AMAZON.TIME
組み込みタイプ
-
-
発話 – このインテントでは以下の発話が事前設定されています。
-
「予約をお願いします」
-
「予約します」
-
「{AppointmentType} を予約する」
ユーザーがこのいずれかを発声すると、Amazon Lex は
MakeAppointment
がインテントであると判断し、プロンプトを使用してスロットデータを引き出します。 -
-
プロンプト – このインテントでは以下のプロンプトが事前設定されています。
-
AppointmentType
スロットのプロンプト –「どのタイプを予約なさいますか?」 -
Date
スロットのプロンプト –「{AppointmentType} はいつスケジュールすべきですか?」 -
Time
スロットのプロンプト –「{AppointmentType} を何時にスケジュールしますか?」 また、「{Date} の何時になさいますか?」
-
確認プロンプト –「{Time} は予約できますが、この時刻で予約してよろしいでしょうか?」
-
キャンセルメッセージ –「かしこまりました、予約は行いません。」
-
-
Lambda 関数設計図の概要 (lex-make-appointment-python)
Lambda 関数ブループリント (lex-make-appointment-python) は、ボットブループリントを使用して作成する ScheduleAppointment ボットのコードフックです。
この Lambda 関数の設計図のコードは、初期化/検証とフルフィルメントタスクの両方を実行できます。
-
この Lambda 関数のコードは、歯科医予約のサンプル予約可能日時に基づいた動的会話を示しています (実際のアプリケーションではカレンダーを使用できます)。ユーザーが指定した曜日または日付について、このコードは次のように設定されています。
-
予約可能な時間がない場合、Lambda 関数は、ユーザーに別の曜日または日付の入力を求めるように Amazon Lex に指示するレスポンスを返します (
dialogAction
タイプをElicitSlot)
に設定)。詳細については、「レスポンスの形式」を参照してください。 -
指定された曜日または日付で予約可能な時間が 1 つだけの場合、Lambda 関数はその予約可能な時間をレスポンスで提示し、レスポンス内の
dialogAction
をConfirmIntent
に設定することで、ユーザーに確認するように Amazon Lex に指示します。これは、予約可能な時間を積極的に提示することでユーザーエクスペリエンスを改善する方法を示しています。 -
予約可能な時間が複数ある場合、Lambda 関数は予約可能な時間のリストを Amazon Lex へのレスポンスで返します。Amazon Lex は、Lambda 関数からのメッセージを付けたレスポンスをクライアントに返します。
-
-
フルフィルメントコードフックとして、Lambda 関数は予約が行われた (つまり、インテントが達成された) ことを示す概要メッセージを返します。
注記
この例ではレスポンスカードの使用方法を示しています。Lambda 関数はレスポンスカードを構築して Amazon Lex に返します。レスポンスカードには、予約可能な日付と時刻がボタンとしてリストされていて、そのリストから選択できます。Amazon Lex コンソールで提供されているクライアントを使用してボットをテストする場合は、レスポンスカードを確認できません。レスポンスカードを確認するには、ボットを Facebook Messenger などのメッセージングプラットフォームと連携する必要があります。手順については、Amazon Lex ボットと Facebook Messenger の統合 を参照してください。レスポンスカードの詳細情報については、「メッセージの管理 」を参照してください。
Amazon Lex は Lambda 関数を呼び出す際にイベントデータを入力として渡します。イベントフィールドの 1 つは invocationSource
であり、Lambda 関数はこのイベントフィールドを使用して入力検証とフルフィルメントのいずれかのアクティビティを選択します。詳細については、「入力イベントの形式」を参照してください。