ステップ 2b (オプション): 入力による情報フローの詳細を確認する (コンソール) - Amazon Lex V1

Amazon Lex V2 を使用している場合は、代わりに Amazon Lex V2 ガイドを参照してください。

 

Amazon Lex V1 を使用している場合は、ボットを Amazon Lex V2 にアップグレードすることをお勧めします。V1 には新機能を追加されませんので、すべての新しいボットには V2 を使用することを強くお勧めします。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ステップ 2b (オプション): 入力による情報フローの詳細を確認する (コンソール)

このセクションでは、クライアントが PostText API を使用してリクエストを送信する場合の、クライアントと Amazon Lex の間の情報のフローについて説明します。詳細については、「PostText」を参照してください。

  1. ユーザーの入力: 「花を注文したい」

    1. クライアント (コンソール) は以下の PostText リクエストを Amazon Lex に送信します。

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "I would like to order some flowers", "sessionAttributes": {} }

      リクエストの URI と本文の両方で Amazon Lex に情報が提供されています。

      • リクエスト URI – ボット名 (OrderFlowers)、ボットのエイリアス ($LATEST)、およびユーザー名 (ユーザーを識別するランダムな文字列) を提供します。末尾の text では、これが PostText API リクエストである (PostContent ではない) ことが示されています。

         

      • リクエストボディ – ユーザー入力 (inputText) と空の sessionAttributes が含まれています。クライアントが最初のリクエストを行うときにはセッション属性はありません。Lambda 関数は後でセッション属性を使用します。

    2. inputText から、Amazon Lex はインテント (OrderFlowers) を検出します。このインテントには、ユーザー入力の初期化と検証、あるいはフルフィルメントを行うためのコードフック (Lambda 関数) がありません。

      Amazon Lex は、値を引き出すインテントのスロットのいずれか (この場合は FlowerType) を選択します。また、そのスロットの値を引き出すプロンプトの 1 つ (すべてインテント設定の一部) を選択し、以下のレスポンスをクライアントに返します。コンソールに、ユーザーへのレスポンスのメッセージが表示されます。

      
                                    クライアントに送信された JSON データのメッセージ。

      クライアントはレスポンス内のメッセージを表示しています。

  2. ユーザーの入力: 「バラ」

    1. クライアント (コンソール) は以下の PostText リクエストを Amazon Lex に送信します。

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "roses", "sessionAttributes": {} }

      リクエストボディの inputText は、ユーザー入力を示します。sessionAttributes は空のままです。

    2. Amazon Lex はまず、現在のインテントのコンテキストの inputText を解釈します (このサービスでは FlowerType スロットに関する情報を特定のユーザーに求めていたことが記憶されています)。Amazon Lex は現在のインテントのスロット値を更新し、別のスロット (PickupDate) をそのスロットのプロンプトメッセージの 1 つ (「何日にバラをピックアップなさいますか?」) と共に選択します。

      次に、Amazon Lex は以下のレスポンスを返します。

      
                                    FlowerType スロットのリクエストにレスポンスとして送信される JSON データ。

      クライアントはレスポンス内のメッセージを表示しています。

  3. ユーザーの入力: 「明日」

    1. クライアント (コンソール) は以下の PostText リクエストを Amazon Lex に送信します。

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "tomorrow", "sessionAttributes": {} }

      リクエストボディの inputText は、ユーザー入力を示します。sessionAttributes は空のままです。

    2. Amazon Lex はまず、現在のインテントのコンテキストの inputText を解釈します (このサービスでは PickupDate スロットに関する情報を特定のユーザーに求めていたことが記憶されています)。Amazon Lex は現在のインテントのスロット (PickupDate) の値を更新します。値を引き出す別のスロット (PickupTime) を選択します。値を引き出すプロンプトの 1 つ (2017 年 1 月 5 日の何時にバラを配達しますか? ) がクライアントに返されます。

      次に、Amazon Lex は以下のレスポンスを返します。

      
                                    PickupDate スロットの確認後に返される JSON メッセージ。

      クライアントはレスポンス内のメッセージを表示しています。

  4. ユーザーの入力: 「午後 6 時」

    1. クライアント (コンソール) は以下の PostText リクエストを Amazon Lex に送信します。

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "6 pm", "sessionAttributes": {} }

      リクエストボディの inputText は、ユーザー入力を示します。sessionAttributes は空のままです。

    2. Amazon Lex はまず、現在のインテントのコンテキストの inputText を解釈します (このサービスでは PickupTime スロットに関する情報を特定のユーザーに求めていたことが記憶されています)。Amazon Lex はまず現在のインテントのスロット値を更新します。ここで、Amazon Lex はすべてのスロットのデータがそろっていることを検出します。

      OrderFlowers インテントには確認メッセージが設定されています。そのため、Amazon Lex はインテントの達成に進む前に、ユーザーからの明示的な確認を必要とします。Amazon Lex は、花を注文する前に確認を要求する以下のメッセージをクライアントに送信します。

      
                                    花の注文の確認を求める JSON データのメッセージ。

      クライアントはレスポンス内のメッセージを表示しています。

  5. ユーザーの入力: 「はい」

    1. クライアント (コンソール) は以下の PostText リクエストを Amazon Lex に送信します。

      POST /bot/OrderFlowers/alias/$LATEST/user/4o9wwdhx6nlheferh6a73fujd3118f5w/text "Content-Type":"application/json" "Content-Encoding":"amz-1.0" { "inputText": "Yes", "sessionAttributes": {} }

      リクエストボディの inputText は、ユーザー入力を示します。sessionAttributes は空のままです。

    2. Amazon Lex は、現在のインテントの確認のコンテキストで inputText を解釈して、注文を進めることをユーザーが望んでいることを理解します。OrderFlowers インテントには、フルフィルメントアクティビティとして ReturnIntent が設定されています (インテントを達成するための Lambda 関数はありません)。したがって、Amazon Lex は次のスロットデータをクライアントに返します。

      
                                    会話が完了し、注文処理の準備が完了したときに送信される JSON データ。

      Amazon Lex は dialogStateReadyForFulfillment に設定します。これで、クライアントはインテントを達成できます。

  6. ここで、ボットをもう一度テストします。そのためには、コンソールで [Clear] リンクを選択して、新しい (ユーザー) コンテキストを確立する必要があります。ここで、花の注文のデータを提供するときに、無効なデータを指定してみます。例:

    • 花の種類として「Jasmine」 (サポートされている花の種類ではない)

    • 花をピックアップする日付として「昨日」

    ボットではこれらの値が受け付けられることがわかります。これは、ユーザーデータを初期化/検証するコードがないためです。次のセクションでは、その処理を行う Lambda 関数を追加します。Lambda 関数について、以下の点に注意してください。

    • Lambda 関数はユーザー入力のたびにスロットデータを検証します。インテントは最後に達成されます。つまり、ボットはスロットデータをクライアントに返すだけではなく、花の注文を処理してユーザーにメッセージを返します。詳細については、「Lambda 関数を使用する」を参照してください。

    • Lambda 関数はセッション属性も設定します。セッション属性の詳細については、「PostText」を参照してください。

      ご利用開始のセクションを完了したら、その他の演習 (その他の例: Amazon Lex ボットの作成) を行うことができます。旅行を予約する は、セッション属性を使用してクロスインテント情報を共有し、ユーザーと動的に会話します。

次のステップ

ステップ 3: Lambda 関数を作成する (コンソール)