Amazon Lex V2 API によるセッションの管理をする  - Amazon Lex

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

Amazon Lex V2 API によるセッションの管理をする 

ユーザーがボットとの会話を開始すると、Amazon Lex V2 は セッション を作成します。アプリケーションと Amazon Lex V2 の間で交換される情報は、会話のためのセッション状態を構成しています。リクエストを行うと、セッションは指定した識別子で識別されます。セッション識別子の詳細については、RecognizeText オペレーション、または RecognizeUtterance オペレーションの sessionId フィールドを参照してください。

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

セッションの状態を更新するには、3 つの方法があります。

  • RecognizeText オペレーション、または RecognizeUtterance オペレーションの呼び出しの一部として、セッション情報をインラインで渡します。

  • 会話の各順番の後に呼び出される RecognizeText オペレーション、または RecognizeUtterance オペレーションで Lambda 関数を使用します。詳細については、「AWS Lambda 関数によるカスタムロジックの有効化」を参照してください。もう 1 つの方法は、アプリケーションで Amazon Lex V2 のランタイム API を使用して、セッションの状態を変更することです。

  • ボットとの会話のセッション情報を管理できるオペレーションを使用します。オペレーションには、PutSession オペレーション、GetSession オペレーション、DeleteSession オペレーションがあります。これらのオペレーションを使用して、ボットとのユーザーセッションの状態に関する情報を取得し、その状態をきめ細かく制御します。

セッションの現在の状態を取得するには、GetSession オペレーションを使用します。このオペレーションは、ユーザーとの対話の状態、現在のインテントのために設定されたセッション属性とスロット値、Amazon Lex V2 がユーザーの発話と一致する可能性のあるインテントとして特定した他のインテントを含む、セッションの現在の状態を返します。

PutSession オペレーションにより、現在のセッション状態を直接操作できます。ボットが次に実行するダイアログアクションの種類や、Amazon Lex V2 がユーザーに送信するメッセージなど、セッションを設定することができます。これにより、ボットとの会話のフローを制御できます。Amazon Lex V2 がボットの次のアクションを決定するように、ダイアログアクション type フィールドを Delegate に設定します。

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

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

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

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

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

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

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

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

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

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

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

新しいセッションを開始する

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

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

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

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

インテントの切り替えをする

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

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

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

前のインテントを再開する

前のインテントを再開するには、GetSession オペレーションでインテントの状態を取得し、必要な対話を実行して、PutSession オペレーションでインテントを前の対話の状態に設定します。

  • GetSession オペレーションを呼び出します。インテントの状態を保存する

  • 別のインテントを満たすなど、別のインタラクションを実行します。

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

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

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

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

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

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

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

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

スロット値の検証をする

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

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

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