

サポート終了通知: 2025 年 9 月 15 日、 AWS は Amazon Lex V1 のサポートを終了します。 V1 2025 年 9 月 15 日を過ぎると、Amazon Lex V1 コンソールまたは Amazon Lex V1 リソースにはアクセスできなくなります。Amazon Lex V2 を使用している場合は、代わりに [Amazon Lex V2 ガイド](https://docs.aws.amazon.com/lexv2/latest/dg/what-is.html)を参照してください。

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

# Amazon Lex API を使用したセッションの管理
<a name="how-session-api"></a>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

前のインテントを再開するには、`GetSession` オペレーションを使用してインテントの要約を取得してから、`PutSession` オペレーションを使用してインテントを前のダイアログ状態に設定します。
+ `GetSession` 操作を呼び出します。このオペレーションからのレスポンスには、ユーザーが操作した最後の 3 つのインテントのダイアログ状態の要約が含まれます。
+ インテントの要約からの情報を使用して、`PutSession` オペレーションを呼び出します。これにより、ユーザーは会話内の同じ場所で前のインテントに戻ります。

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

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

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

インテントは、`GetSession` オペレーションによって返される `recentIntentSummaryView` 構造体に存在する必要があります。`GetSession` オペレーションリクエストでチェックポイントラベルを指定すると、そのチェックポイントラベルを持つ最大 3 つのインテントが返されます。
+ `GetSession` オペレーションを使用して、セッションの現在の状態を取得します。
+ `PutSession` オペレーションを使用して、最後のインテントにチェックポイントラベルを追加します。必要に応じて、この `PutSession` 呼び出しを使用して別のインテントに切り替えることができます。
+ ラベル付けされたインテントに戻るときは、`GetSession` オペレーションを呼び出して最近のインテントリストを返します。`checkpointLabelFilter` パラメータを使用し、指定したチェックポイントラベルを持つインテントのみを Amazon Lex で返すことができます。

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

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

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

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