メニュー
Amazon Lex
開発者ガイド

ボットの例: ScheduleAppointment

この演習のボット例では、歯科医院の予約を行います。この例では、レスポンスカードを使用してボタンでユーザー入力を取得する方法も示しています。具体的には、この例では、実行時に動的にレスポンスカードを生成しています。

構築時にレスポンスカードを設定するか (静的レスポンスカードとも呼ばれる)、または AWS Lambda 関数内で動的にレスポンスカードを生成できます。この例のボットでは、以下のレスポンスカードを使用します。

  • 予約タイプのボタンをリストするレスポンスカード。(例:

  • 予約日付のボタンをリストするレスポンスカード。(例:

  • 提示された予約時刻を確認するボタンをリストするレスポンスカード。(例:

予約できる日付と時刻は変わるため、実行時にレスポンスカードを作成する必要があります。AWS Lambda 関数を使用してこれらのレスポンスカードを動的に生成します。Lambda 関数は、Amazon Lex へのレスポンス内でレスポンスカードを返します。Amazon Lex は、クライアントへのレスポンス内にレスポンスカードを含めます。

クライアント (たとえば、Facebook Messenger) でレスポンスカードがサポートされている場合、ユーザーはボタンのリストから選択するか、またはレスポンスを入力します。サポートされていない場合、ユーザーはレスポンスを入力します。

前の例で示されているボタンに加えて、イメージ、添付ファイル、およびその他の役立つ情報をレスポンスカードに表示することもできます。レスポンスカードに関する情報については、「レスポンスカード」を参照してください。

この演習では、以下のことを行います。

  • ボット (ScheduleAppointment 設計図を使用) を作成してテストします。この演習では、ボットの設計図を使用して、迅速にボットをセットアップし、テストします。使用可能な設計図の一覧については、「Amazon Lex と AWS Lambda の設計図」を参照してください。このボットには 1 つのインテント (MakeAppointment) が事前設定されています。

     

  • Lambda 関数を作成してテストします (Lambda で提供されている lex-make-appointment-python 設計図を使用)。その Lambda 関数をコードフックとして使用して初期化、検証、およびフルフィルメント (達成) タスクを実行するように、MakeAppointment インテントを設定します。

    注記

    提供されている Lambda 関数の例では、歯科医予約のモックアップの予約可能日時に基づいて動的な会話を示しています。実際のアプリケーションでは、実際のカレンダーを使用して予定を設定できます。

  • その Lambda 関数をコードフックとして使用するように、MakeAppointment インテント設定を更新します。次に、エンドツーエンドエクスペリエンスをテストします。

  • 作動中のレスポンスカードを確認できるように、そのスケジュール予約ボットを Facebook Messenger に公開します (Amazon Lex コンソール内のクライアントではレスポンスカードは現在サポートされていません)。

以下のセクションでは、この演習で使用する設計図に関する概要情報を示しています。

ボット設計図 (ScheduleAppointment) の概要

この演習でボットの作成に使用する ScheduleAppointment 設計図は以下のように事前設定されています。

  • スロットタイプ – 1 つのカスタムスロットタイプ (AppointmentTypeValue) と列挙値 (root canalcleaningwhitening)。

  • インテント – 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 関数はその予約可能な時間をレスポンスで提示し、レスポンス内の dialogActionConfirmIntent に設定することで、ユーザーに確認するように 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 関数はこのイベントフィールドを使用して入力検証とフルフィルメントのいずれかのアクティビティを選択します。詳細については、「入力イベントの形式」を参照してください。

次のステップ

ステップ 1: Amazon Lex ボットを作成する