

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

# AWS LambdaLex V2 のレスポンス形式
<a name="lambda-response-format"></a>

Lambda 関数を Amazon Lex V2 ボットに統合する 2 番目のステップは、Lambda 関数応答のフィールドを理解し、操作するパラメータを決定することです。次の JSON オブジェクトは、Amazon Lex V2 に返される一般的な形式の Lambda レスポンスを示しています。

```
{
    "sessionState": {
        // see セッション状態 for details about the structure
    },
    "messages": [
        {
            "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
            "content": string,
            "imageResponseCard": {
                "title": string,
                "subtitle": string,
                "imageUrl": string,
                "buttons": [
                    {
                        "text": string,
                        "value": string
                    },
                    ...
                ]
            }
        },
        ...
    ],
    "requestAttributes": {
        string: string,
        ...
    }
}
```

応答の各フィールドは次の通りです。

## sessionState
<a name="lambda-response-sessionstate"></a>

ユーザーと返したい Amazon Lex V2 ボット間の会話の状態。構造の詳細については、「[セッション状態](lambda-common-structures.md#lambda-session-state)」を参照してください。このフィールドは常に必須です。

## メッセージ
<a name="lambda-response-messages"></a>

会話の次のターンに Amazon Lex V2 が返すメッセージのリスト。提供する `contentType` が `PlainText`、`CustomPayload`、または `SSML` の場合、顧客に返すメッセージを `content` フィールドに書き込みます。提供する `contentType` が `ImageResponseCard` の場合、`imageResponseCard` フィールドにカードの詳細を入力します。メッセージを指定しない場合、Amazon Lex V2 はボットの作成時に定義された適切なメッセージを使用します。

`dialogAction.type` が `ElicitIntent` または `ConfirmIntent` の場合、`messages` フィールドは必須です。

リスト内の各項目は次の形式の構造であり、ユーザーに返すメッセージに関する情報が含まれています。以下がその例です。

```
{
    "contentType": "CustomPayload | ImageResponseCard | PlainText | SSML",
    "content": string,
    "imageResponseCard": {
        "title": string,
        "subtitle": string,
        "imageUrl": string,
        "buttons": [
            {
                "text": string,
                "value": string
            },
            ...
        ]
    }
}
```

各フィールドの説明を以下に示します。
+ [**ContentType**] — 使用するメッセージのタイプ。

  `CustomPayload` — アプリケーションのデータまたはメタデータを含むようにカスタマイズできる応答文字列。

  `ImageResponseCard` — ユーザーが選択できるボタン付きの画像。詳細については、「[ImageResponseCard](https://docs.aws.amazon.com/lexv2/latest/APIReference/API_runtime_ImageResponseCard.html)」を参照してください。

  `PlainText` — プレーンテキスト文字列。

  `SSML` — 音声応答をカスタマイズするための音声合成マークアップ言語を含む文字列。
+ **content** – ユーザーに送信するメッセージ。メッセージタイプが `PlainText`、`CustomPayload`、または `SSML` の場合、このフィールドを使用してください。
+ **imageResponseCard** — ユーザーに表示する応答カードの定義が含まれます。メッセージタイプが `ImageResponseCard` の場合、このフィールドを使用してください。次のフィールドを含む構造にマップします。
  + **title** — レスポンスカードのタイトル。
  + **subtitle** — ボタンを選択するようユーザーに求めるプロンプト。
  + **imageUrl** — カードの画像へのリンク。
  + **buttons** — ボタンに関する情報を含む構造のリスト。各構造には、表示するテキストを含む `text` フィールドと、顧客がそのボタンを選択した場合に Amazon Lex V2 に送信される値を含む `value` フィールドが含まれます。最大 3 つのボタンを含めることができます。

## requestAttributes
<a name="lambda-response-requestattributes"></a>

顧客への応答に必要な要求固有の属性を含む構造。詳細については「[Lex V2 ボットのリクエスト属性の設定](context-mgmt-request-attribs.md)」を参照してください。このフィールドはオプションです。

## 応答内の必須フィールド
<a name="lambda-response-required"></a>

最低でも、Lambda 応答には `sessionState` オブジェクトを含める必要があります。その中で、`dialogAction` オブジェクトを提供し、`type` フィールドを指定します。提供する `dialogAction` の `type` によっては、Lambda 応答に他の必須フィールドがある場合があります。これらの要件は、最小限の実例とともに次のように説明されています。

### 受任者
<a name="lambda-response-delegate"></a>

**Delegate** は、Amazon Lex V2 が次のアクションを決定できるようにします。その他に必須フィールドはありません。

```
{
    "sessionState": {
        "dialogAction": {
            "type": "Delegate"
    }
}
```

### ElicitIntent
<a name="lambda-response-elicitintent"></a>

**ElicitIntent** は、顧客にインテントを表明するよう促します。インテントを誘発するには、`messages` フィールドに少なくとも 1 つのメッセージを含める必要があります。

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ElicitIntent"
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "How can I help you?"
        }
    ]
}
```

### ElicitSlot
<a name="lambda-response-elicitslot"></a>

**ElicitSlot** は、顧客にスロット値を入力するよう求めます。`dialogAction` オブジェクトの `slotToElicit` フィールドにはスロットの名前を含める必要があります。`sessionState` オブジェクトには `intent` の `name` も含める必要があります。

```
{`
    "sessionState": {
        "dialogAction": {
            "slotToElicit": "OriginCity",
            "type": "ElicitSlot"
        },
        "intent": {
            "name": "BookFlight"
        }
    }
}
```

### ConfirmIntent
<a name="lambda-response-confirmintent"></a>

**ConfirmIntent** は、顧客のスロット値と、そのインテントを達成する準備ができているかどうかを確認します。`sessionState` オブジェクトの `intent` の `name` と、確認する `slots` を含める必要があります。また、`messages` フィールドには、ユーザーにスロット値の確認を求めるメッセージを少なくとも 1 つ含める必要があります。メッセージに「はい」か「いいえ」の応答を求める必要があります。ユーザーの応答が「はい」であった場合、Amazon Lex V2 はインテントの `confirmationState` を `Confirmed` に設定します。ユーザーの応答が「いいえ」であった場合、Amazon Lex V2 はインテントの `confirmationState` を `Denied` に設定します。

```
{
    "sessionState": {
        "dialogAction": {
            "type": "ConfirmIntent"
        },
        "intent": {
            "name": "BookFlight",
            "slots": {
                "DepartureDate": {
                    "value": {
                        "originalValue": "tomorrow",
                        "interpretedValue": "2023-05-09",
                        "resolvedValues": [
                            "2023-05-09"
                    ]
                 }
                },
                "DestinationCity": {
                    "value": {
                        "originalValue": "sf",
                        "interpretedValue": "sf",
                        "resolvedValues": [
                            "sf"
                        ]
                    }
                },
                "OriginCity": {
                    "value": {
                        "originalValue": "nyc",
                        "interpretedValue": "nyc",
                        "resolvedValues": [
                            "nyc"
                        ]
                    }
                }
            }
        }
    },
    "messages": [
        {
            "contentType": PlainText,
            "content": "Okay, you want to fly from {OriginCity} to \
            {DestinationCity} on {DepartureDate}. Is that correct?"
        }
    ]
}
```

### 閉じる
<a name="lambda-response-close"></a>

**Close** は、インテントのフルフィルメントプロセスを終了し、これ以上ユーザーからの応答が予想されないことを通知します。`sessionState` オブジェクトには `intent` の `name` と `state` を含める必要があります。互換性のあるインテントステートは`Failed`、`Fulfilled`、および `InProgress`です。

```
"sessionState": {
    "dialogAction": {
        "type": "Close"
    },
    "intent": {
        "name": "BookFlight",
        "state": "Failed | Fulfilled | InProgress"
    }
}
```