

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS LambdaLex V2 的回應格式
<a name="lambda-response-format"></a>

將 Lambda 函數整合至 Amazon Lex V2 機器人的第二個步驟是了解 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) 如需結構的詳細資訊，請參閱 。此欄位一律為必要欄位。

## messages
<a name="lambda-response-messages"></a>

Amazon Lex V2 傳回給客戶的訊息清單，以供下次對話使用。如果您`contentType`提供的 是 `PlainText`、 `CustomPayload`或 `SSML`，請在 `content` 欄位中寫入您要傳回給客戶的訊息。如果您`contentType`提供的 是 `ImageResponseCard`，請在 `imageResponseCard` 欄位中提供卡片的詳細資訊。如果您未提供訊息，Amazon Lex V2 會使用建立機器人時定義的適當訊息。

如果 `dialogAction.type`是 `ElicitIntent`或 ，則 `messages` 欄位為必要`ConfirmIntent`。

清單中的每個項目都是以下格式的結構，其中包含要傳回給使用者的訊息相關資訊。請見此處範例：

```
{
    "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` – 包含語音合成標記語言的字串，用於自訂音訊回應。
+ **內容** – 要傳送給使用者的訊息。如果訊息類型為 `PlainText`、 或 `CustomPayload`，請使用此欄位`SSML`。
+ **imageResponseCard** – 包含要向使用者顯示的回應卡定義。如果訊息類型為 ，請使用此欄位`ImageResponseCard`。映射至包含下列欄位的結構：
  + **title** – 回應卡的標題。
  + **字幕** – 提示使用者選擇按鈕。
  + **imageUrl** – 卡片影像的連結。
  + **按鈕** – 包含按鈕相關資訊的結構清單。每個結構都包含一個`text`欄位，其中包含要顯示的文字，以及如果客戶選取該按鈕，則包含要傳送至 Amazon Lex V2 之值`value`的欄位。您最多可以包含三個按鈕。

## 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>

**委派**可讓 Amazon Lex V2 決定下一個步驟。不需要其他欄位。

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

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

**ElicitIntent** 會提示客戶表達意圖。您必須在 `messages` 欄位中包含至少一個訊息，以提示引出意圖。

```
{
    "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` 欄位中包含至少一個訊息，以要求使用者確認槽值。您的訊息應提示「是」或「否」回應。如果使用者回應「是」，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?"
        }
    ]
}
```

### Close (關閉)
<a name="lambda-response-close"></a>

**關閉**會結束意圖的履行程序，並指出預期使用者不會進一步回應。您必須在 `sessionState` 物件`intent`中包含 `state`的 `name`和 。相容意圖狀態為 `Failed`、 `Fulfilled`和 `InProgress`。

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