Amazon Lex API を使用したセッションの管理 - Amazon Lex V1

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

 

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

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

Amazon Lex API を使用したセッションの管理

ユーザーがボットとの会話を開始すると、Amazon Lex によりセッションが作成されます。アプリケーションと Amazon Lex 間で交換される情報は、会話のセッション状態を構成します。リクエストを行うと、セッションはボット名と指定したユーザー識別子の組み合わせによって識別されます。ユーザー識別子の詳細については、PostContent または PostText オペレーションの「userId」フィールドを参照してください。

セッションオペレーションからのレスポンスには、ユーザーとの特定のセッションを識別する一意のセッション識別子が含まれます。この識別子はテスト中やボットのトラブルシューティングに使用できます。

アプリケーションとボット間で送信されるセッション状態を変更できます。例えば、セッションに関するカスタム情報を含むセッション属性を作成および変更できます。また、次の発話を解釈するダイアログコンテキストを設定することで、会話のフローを変更できます。

セッション状態を更新する方法は 2 つあります。最初の方法は、会話の各ターンの後に呼び出される PostContent または PostText オペレーションで Lambda 関数を使用することです。詳細については、「Lambda 関数を使用する」を参照してください。もう 1 つの方法は、アプリケーションでセッション状態を変更する Amazon Lex ランタイム API を使用することです。

Amazon Lex ランタイム API は、ボットとの会話のセッション情報を管理できるオペレーションを提供します。これらのオペレーションは PutSessionGetSessionDeleteSession です。これらのオペレーションを使用して、ボットとのユーザーセッションの状態に関する情報を取得し、その状態をきめ細かく制御します。

セッションの現在の状態を取得するには、GetSession オペレーションを使用します。このオペレーションは、ユーザーとのダイアログの状態、設定されているセッション属性、ユーザーが操作した最後の 3 つのインテントのスロット値など、セッションの現在の状態を返します。

PutSession オペレーションにより、現在のセッション状態を直接操作できます。ボットによって次に実行されるダイアログアクションのタイプを設定できます。これにより、ボットとの会話のフローを制御できます。ダイアログアクションの type フィールドを Delegate に設定して、Amazon Lex にボットの次のアクションを決定させます。

PutSession オペレーションを使用して、ボットとの新しいセッションを作成し、ボットが開始されるインテントを設定できます。PutSession オペレーションを使用して、あるインテントから別のインテントに変更することもできます。セッションの作成時またはインテントの変更時に、スロット値やセッション属性などのセッション状態を設定することもできます。新しいインテントが終了したら、前のインテントを再開するオプションがあります。GetSession オペレーションを使用して、前のインテントのダイアログ状態を Amazon Lex から取得し、その情報を使用してインテントのダイアログ状態を設定できます。

PutSession オペレーションからのレスポンスには、PostContent オペレーションと同じ情報が含まれます。PostContent オペレーションからのレスポンスの場合と同様に、この情報を使用して、ユーザーに次の情報を求めることができます。

DeleteSession オペレーションを使用して既存のセッションを削除し、新しいセッションからやり直します。例えば、ボットをテストするときは、DeleteSession オペレーションを使用してボットからテストセッションを削除できます。

セッションオペレーションはフルフィルメント Lambda 関数と連携します。例えば、Lambda 関数がフルフィルメント状態として Failed を返す場合、PutSession オペレーションを使用してダイアログアクションタイプを close に設定し、fulfillmentStateReadyForFulfillment に設定して、フルフィルメントステップを再試行できます。

セッションオペレーションでは以下のことが可能です。

  • ユーザーを待たずにボットに会話を開始させる。

  • 会話中にインテントを切り替える。

  • 前のインテントに戻る。

  • 操作の途中で会話を開始または再開する。

  • スロット値を検証し、無効であればボットに値の再入力を求めさせる。

これらのそれぞれについて、以下で詳しく説明します。

インテントの切り替え

PutSession オペレーションを使用して、あるインテントから別のインテントに切り替えることができます。このオペレーションを使用して、前のインテントに戻ることもできます。PutSession オペレーションを使用して、新しいインテントのセッション属性またはスロット値を設定できます。

  • PutSession オペレーションを呼び出します。インテント名を新しいインテントの名前に設定し、ダイアログアクションを Delegate に設定します。新しいインテントに必要なスロット値またはセッション属性を設定することもできます。

  • Amazon Lex は、新しいインテントを使用してユーザーとの会話を開始します。

前のインテントの再開

前のインテントを再開するには、GetSession オペレーションを使用してインテントの要約を取得してから、PutSession オペレーションを使用してインテントを前のダイアログ状態に設定します。

  • GetSession オペレーションを呼び出します。このオペレーションからのレスポンスには、ユーザーが操作した最後の 3 つのインテントのダイアログ状態の要約が含まれます。

  • インテントの要約からの情報を使用して、PutSession オペレーションを呼び出します。これにより、ユーザーは会話内の同じ場所で前のインテントに戻ります。

場合によっては、ユーザーのボットとの会話を再開する必要があります。例えば、カスタマーサービスボットを作成したとします。アプリケーションは、ユーザーがカスタマーサービス担当者と話す必要があると判断します。ユーザーと話した後、担当者は収集した情報を使用して会話をボットに戻すことができます。

セッションを再開するには、以下のような手順を使用します。

  • アプリケーションは、ユーザーがカスタマーサービス担当者と話す必要があると判断します。

  • GetSession オペレーションを使用して、インテントの現在のダイアログ状態を取得します。

  • カスタマーサービス担当者はユーザーと話し、問題を解決します。

  • PutSession オペレーションを使用して、インテントのダイアログ状態を設定します。さらに、スロット値やセッション属性の設定、インテントの変更を行う場合もあります。

  • ボットはユーザーとの会話を再開します。

PutSession オペレーションの checkpointLabel パラメータを使用してインテントにラベルを付け、後で検索することができます。例えば、顧客に情報を求めるボットは、顧客が情報を収集している間に Waiting インテントに入ることがあります。ボットは、現在のインテントのチェックポイントラベルを作成し、Waiting インテントを開始します。顧客が戻ると、ボットはチェックポイントラベルを使用して以前のインテントを見つけ、元に戻すことができます。

インテントは、GetSession オペレーションによって返される recentIntentSummaryView 構造体に存在する必要があります。GetSession オペレーションリクエストでチェックポイントラベルを指定すると、そのチェックポイントラベルを持つ最大 3 つのインテントが返されます。

  • GetSession オペレーションを使用して、セッションの現在の状態を取得します。

  • PutSession オペレーションを使用して、最後のインテントにチェックポイントラベルを追加します。必要に応じて、この PutSession 呼び出しを使用して別のインテントに切り替えることができます。

  • ラベル付けされたインテントに戻るときは、GetSession オペレーションを呼び出して最近のインテントリストを返します。checkpointLabelFilter パラメータを使用し、指定したチェックポイントラベルを持つインテントのみを Amazon Lex で返すことができます。

新しいセッションの開始

ボットにユーザーとの会話を開始させる場合は、PutSession オペレーションを使用できます。

  • スロットのない挨拶のインテントと、ユーザーにインテントの指定を求める結びのメッセージを作成します。例えば、「ご注文は何になさいますか? 飲み物になさいますか、ピザになさいますか」とします。

  • PutSession オペレーションを呼び出します。インテント名を挨拶のインテントの名前に設定し、ダイアログアクションを Delegate に設定します。

  • Amazon Lex は、ユーザーとの会話を開始する挨拶のインテントのプロンプトで応答します。

スロット値の検証

クライアントアプリケーションを使用して、ボットへのレスポンスを検証できます。レスポンスが有効でない場合、PutSession オペレーションを使用してユーザーから新しいレスポンスを取得できます。例えば、花の注文ボットがチューリップ、バラ、ユリのみを販売できるとします。ユーザーがカーネーションを注文すると、アプリケーションは以下のことができます。

  • PostText または PostContent レスポンスから返されたスロット値を調べます。

  • スロット値が無効な場合は、PutSession オペレーションを呼び出します。アプリケーションはスロット値をクリアし、slotToElicit フィールドを設定して、dialogAction.type 値を elicitSlot に設定する必要があります。オプションで、Amazon Lex によってスロット値の引き出しに使用されるメッセージを変更する場合は、message および messageFormat フィールドを設定できます。