

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

# Amazon Lex V2 ボットセッションについて
<a name="managing-sessions"></a>

ユーザーがボットとの会話を開始すると、Amazon Lex V2 は *セッション* を作成します。アプリケーションと Amazon Lex V2 の間で交換される情報は、会話のためのセッション状態を構成しています。リクエストを行うと、セッションは指定した識別子で識別されます。セッション識別子の詳細については、[RecognizeText](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeText.html) オペレーション、または [RecognizeUtterance](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_RecognizeUtterance.html) オペレーションの `sessionId` フィールドを参照してください。

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

セッションの状態を更新するには、3 つの方法があります。
+ `RecognizeText` オペレーション、または `RecognizeUtterance` オペレーションの呼び出しの一部として、セッション情報をインラインで渡します。
+ 会話の各順番の後に呼び出される `RecognizeText` オペレーション、または `RecognizeUtterance` オペレーションで Lambda 関数を使用します。詳細については、「[AWS Lambda関数を Amazon Lex V2 ボットに統合する](lambda.md)」を参照してください。もう 1 つの方法は、アプリケーションで Amazon Lex V2 のランタイム API を使用して、セッションの状態を変更することです。
+ ボットとの会話のセッション情報を管理できるオペレーションを使用します。オペレーションには、[PutSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_PutSession.html) オペレーション、[GetSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_GetSession.html) オペレーション、[DeleteSession](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_DeleteSession.html) オペレーションがあります。これらのオペレーションを使用して、ボットとのユーザーセッションの状態に関する情報を取得し、その状態をきめ細かく制御します。

セッションの現在の状態を取得するには、`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` に設定し、`fulfillmentState` を `ReadyForFulfillment` に設定して、フルフィルメントステップを再試行できます。

セッションオペレーションでは以下のことが可能です。
+ ユーザーを待たずにボットに会話を開始させる。
+ 会話中にインテントを切り替える。
+ 前のインテントに戻る。
+ 操作の途中で会話を開始または再開する。
+ スロット値を検証し、無効であればボットに値の再入力を求めさせる。

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

## 新しいセッションを開始する
<a name="session-start"></a>

ボットにユーザーとの会話を開始させる場合は、`PutSession` オペレーションを使用できます。
+ スロットのない挨拶のインテントと、ユーザーにインテントの指定を求める結びのメッセージを作成します。例えば、「ご注文は何になさいますか? 飲み物になさいますか、ピザになさいますか」とします。
+ `PutSession` 操作を呼び出します。インテント名を挨拶のインテントの名前に設定し、ダイアログアクションを `Delegate` に設定します。
+ Amazon Lex は、ユーザーとの会話を開始する挨拶のインテントのプロンプトで応答します。

## インテントの切り替えをする
<a name="session-switch"></a>

`PutSession` オペレーションを使用して、あるインテントから別のインテントに切り替えることができます。このオペレーションを使用して、前のインテントに戻ることもできます。`PutSession` オペレーションを使用して、新しいインテントのセッション属性またはスロット値を設定できます。
+ `PutSession` 操作を呼び出します。インテント名を新しいインテントの名前に設定し、ダイアログアクションを `Delegate` に設定します。新しいインテントに必要なスロット値またはセッション属性を設定することもできます。
+ Amazon Lex は、新しいインテントを使用してユーザーとの会話を開始します。

## 前のインテントを再開する
<a name="session-return"></a>

前のインテントを再開するには、`GetSession` オペレーションでインテントの状態を取得し、必要な対話を実行して、`PutSession` オペレーションでインテントを前の対話の状態に設定します。
+ `GetSession` 操作を呼び出します。インテントの状態を保存する
+ 別のインテントを満たすなど、別のインタラクションを実行します。
+ 前のインテントのために保存された情報を使って、`PutSession` オペレーションを呼び出します。これにより、ユーザーは会話内の同じ場所で前のインテントに戻ります。

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

セッションを再開するには、以下のような手順を使用します。
+ アプリケーションは、ユーザーがカスタマーサービス担当者と話す必要があると判断します。
+ `GetSession` オペレーションを使用して、インテントの現在のダイアログ状態を取得します。
+ カスタマーサービス担当者はユーザーと話し、問題を解決します。
+ `PutSession` オペレーションを使用して、インテントのダイアログ状態を設定します。さらに、スロット値やセッション属性の設定、インテントの変更を行う場合もあります。
+ ボットはユーザーとの会話を再開します。

## スロット値の検証をする
<a name="session-validation"></a>

クライアントアプリケーションを使用して、ボットへのレスポンスを検証できます。レスポンスが有効でない場合、`PutSession` オペレーションを使用してユーザーから新しいレスポンスを取得できます。例えば、花の注文ボットがチューリップ、バラ、ユリのみを販売できるとします。ユーザーがカーネーションを注文すると、アプリケーションは以下のことができます。
+ `PostText` または `PostContent` レスポンスから返されたスロット値を調べます。
+ スロット値が無効な場合は、`PutSession` オペレーションを呼び出します。アプリケーションはスロット値をクリアし、`slotToElicit` フィールドを設定して、`dialogAction.type` 値を `elicitSlot` に設定する必要があります。オプションで、Amazon Lex によってスロット値の誘発に使用されるメッセージを変更する場合は、`message` および `messageFormat` フィールドを設定できます。