

支援終止通知：2025 年 9 月 15 日， AWS 將停止對 Amazon Lex 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)。

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

# 管理訊息
<a name="howitworks-manage-prompts"></a>

**Topics**
+ [訊息的類型](#msg-prompts-msg-types)
+ [用於設定訊息的內容](#msg-prompts-context-for-msgs)
+ [支援的訊息格式](#msg-prompts-formats)
+ [訊息群組](#message-groups)
+ [回應卡](#msg-prompts-resp-card)

當建立機器人時，您可以設定要它傳送給用戶端的釐清或資訊訊息。請考量下列範例：
+ 您可以使用以下釐清提示設定機器人：

  ```
  I don't understand. What would you like to do?
  ```

  如果不了解使用者的意圖，Amazon Lex 會將此訊息傳送給用戶端。

   
+ 假設您建立機器人來支援稱為 `OrderPizza` 的意圖。對於比薩訂單，您需要使用者提供如比薩大小、配料和餅皮種類等資訊。您可以設定以下提示：

  ```
  What size pizza do you want?
  What toppings do you want?
  Do you want thick or thin crust?
  ```

  Amazon Lex 判斷使用者訂購比薩的意圖後，會將這些訊息傳送給用戶端，以向使用者取得資訊。

本節說明在機器人組態中設計使用者互動。

## 訊息的類型
<a name="msg-prompts-msg-types"></a>

訊息可以是提示或陳述。
+ *提示*通常是問題並且預期使用者回應。
+ *陳述*是提供資訊。它不預期回應。

訊息可以包括槽、工作階段屬性和請求屬性的參考。在執行時間，Amazon Lex 會以實際值取代這些參考。

若要參考已設定的槽值，請使用下列語法：

```
{SlotName} 
```

若要參考工作階段屬性，請使用下列語法：

```
[SessionAttributeName] 
```

若要參考請求屬性，請使用下列語法：

```
((RequestAttributeName)) 
```

訊息可以同時包括槽值、工作階段屬性和請求屬性。

例如，假設您在機器人的 OrderPizza 意圖中設定以下訊息：

```
"Hey [FirstName], your {PizzaTopping} pizza will arrive in [DeliveryTime] minutes." 
```

此訊息會同時參考槽 (`PizzaTopping`) 和工作階段屬性 (`FirstName` 和 `DeliveryTime`)。在執行時間，Amazon Lex 會將這些預留位置取代為 值，並將下列訊息傳回給用戶端：

```
"Hey John, your cheese pizza will arrive in 30 minutes." 
```

若要在訊息中包含方括號 ([]) 或括號 (\$1\$1)，請使用反斜線 (\$1) 逸出字元。例如，以下訊息包含大括號和方括號：

```
\{Text\} \[Text\]
```

傳回給用戶端應用程式的文字看起來如下：

```
{Text} [Text]
```

如需有關會話屬性的資訊，請參閱執行時間 API 操作 [PostText](API_runtime_PostText.md) 和 [PostContent](API_runtime_PostContent.md)。如需範例，請參閱 [預訂行程](ex-book-trip.md)。

Lambda 函數也可以產生訊息，並將其傳回 Amazon Lex 以傳送給使用者。如果您在設定意圖時新增 Lambda 函數，則可以動態建立訊息。透過在設定機器人時提供訊息，您可以消除在 Lambda 函數中建構提示的需求。

## 用於設定訊息的內容
<a name="msg-prompts-context-for-msgs"></a>

建立機器人時，您可以在不同的內容中建立訊息，例如機器人中的釐清提示、槽值的提示，以及意圖的訊息。Amazon Lex 會在每個內容中選擇適當的訊息，以傳回給使用者。您可以針對每個內容提供一組訊息。如果您這樣做，Amazon Lex 會從群組隨機選擇一個訊息。您也可以指定訊息格式或將訊息群組在一起。如需詳細資訊，請參閱[支援的訊息格式](#msg-prompts-formats)。

如果您有與意圖相關聯的 Lambda 函數，您可以覆寫您在建置時設定的任何訊息。不過，使用其中任何訊息不需要 Lambda 函數。

### 機器人訊息
<a name="msg-prompts-bot"></a>

您可以使用釐清提示和工作階段結束訊息來設定機器人。在執行時間，如果 Amazon Lex 不了解使用者的意圖，則會使用釐清提示**。您可以在傳送工作階段結束訊息之前，設定 Amazon Lex 請求釐清的次數。您可以在 Amazon Lex 主控台的**錯誤處理**區段中設定機器人層級訊息，如下圖所示：

![\[主控台的編輯器索引標籤中的錯誤處理區段。可能會指定釐清提示和掛斷片語。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/how-works-20.png)


使用 API 時，您透過設定 `clarificationPrompt` 操作中的 `abortStatement` 和 [PutBot](API_PutBot.md) 欄位來設定訊息。

如果您使用具有意圖的 Lambda 函數，Lambda 函數可能會傳回指示 Amazon Lex 詢問使用者意圖的回應。如果 Lambda 函數不提供這類訊息，Amazon Lex 會使用釐清提示。

### 槽提示
<a name="msg-prompts-slots"></a>

您必須為意圖中每個必要的槽指定至少一個提示訊息。在執行時間，Amazon Lex 會使用其中一個訊息來提示使用者提供槽的值。例如，對於 `cityName` 槽，以下是有效的提示：

```
Which city would you like to fly to?
```

您可以使用主控台為每個槽設定一或多個提示。您也可以使用 [PutIntent](API_PutIntent.md) 操作建立提示群組。如需詳細資訊，請參閱[訊息群組](#message-groups)。

### 回應
<a name="msg-prompts-response"></a>

在主控台中，使用 **Responses (回應)** 區段為您的機器人建立動態、互動的對話。您可以針對一個回應建立一或多個訊息群組。在執行時間，Amazon Lex 會從每個訊息群組中選取一則訊息來建置回應。如需有關訊息群組的詳細資訊，請參閱[訊息群組](#message-groups)。

例如，您的第一個訊息群組可以包含不同的問候語：「哈囉」、「嗨」和「您好」。第二個訊息群組可以包含不同形式的簡介：「我是預約機器人」和「這是預約機器人。」 第三個訊息群組可以溝通機器人的功能：「我可以協助租車和飯店預訂」、「您可以租車與飯店預訂」和「我可以幫您租車和預訂飯店」。

Lex 會從每個訊息群組使用一則訊息，以動態方式在對談中建立回應。例如，一個互動可以是下列項目：

![\[與機器人進行可能的對話。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/default-response-10b.png)


另一個可以是下列項目：

![\[與機器人的另一個可能對話。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/default-response-20c.png)


在這兩種情況下，使用者可以新意圖加以回應，例如 `BookCar` 或 `BookHotel` 意圖。

您可以設定機器人在回應中詢問後續問題。例如，對於上述互動，您可以建立使用下列問題第四個訊息群組：「我可以協助租車或預訂飯店？」、「您想要現在預訂嗎？」和「有什麼我可以幫忙的地方嗎？」。對於包括「否」做為回應的訊息，您可以建立後續追蹤提示。下圖提供範例：

![\[與機器人對話中的後續提示。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/default-response-25a.png)


若要建立後續追蹤提示，請選擇 **Wait for user reply (等待使用者回覆)**。然後輸入當使用者說「否」時，您要傳送的訊息。當建立回應用作為後續追蹤提示時，您還必須在對陳述的回答為「否」時，指定適當的陳述。如需範例，請參閱下圖：

![\[當使用者說「否」時的訊息組態。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/default-response-30b.png)


若要使用 API 新增對意圖的回應，請使用 `PutIntent` 操作。若要指定回應，請在 `conclusionStatement` 請求中設定 `PutIntent` 欄位。若要設定後續追蹤提示，請設定 `followUpPrompt` 欄位，並包含當使用者表示「否」時要傳送的陳述。您無法同時在相同的意圖上設定 `conclusionStatement` 欄位和 `followUpPrompt` 欄位。

## 支援的訊息格式
<a name="msg-prompts-formats"></a>

當您使用 [PostText](API_runtime_PostText.md)操作，或當您將 [PostContent](API_runtime_PostContent.md)操作的`Accept`標頭設定為 時`text/plain;charset=utf8`，Amazon Lex 支援下列格式的訊息：
+ `PlainText`- 訊息包含純 UTF-8 文字。
+ `SSML`- 訊息包含語音輸出的文字格式。
+ `CustomPayload`- 訊息包含您為用戶端建立的自訂格式。您可以定義承載，以符合應用程式的需求。
+ `Composite`- 訊息是 訊息的集合，每個訊息群組各一個。如需有關訊息群組的詳細資訊，請參閱[訊息群組](#message-groups)。

根據預設，Amazon Lex 會傳回針對特定提示定義的任一訊息。例如，如果您定義五個訊息來引出槽值，Amazon Lex 會隨機選擇其中一個訊息並將其傳回給用戶端。

如果您希望 Amazon Lex 在執行時間請求中傳回特定類型的訊息給用戶端，請設定`x-amzn-lex:accept-content-types`請求參數。回應僅限於所請求的類型。如果有多個指定類型的訊息，Amazon Lex 會隨機傳回一個訊息。如需有關 `x-amz-lex:accept-content-types` 標頭的詳細資訊，請參閱[設定回應類型](context-mgmt-request-attribs.md#special-response)。

## 訊息群組
<a name="message-groups"></a>

*訊息群組* 是對特定提示的一組適當回應。當您希望機器人在對話中動態建置回應時，請使用訊息群組。當 Amazon Lex 傳回用戶端應用程式的回應時，會從每個群組隨機選擇一個訊息。您可以為每個回應建立最多 5 個訊息群組。每個群組最多可包含 5 個訊息。如需在主控台中建立訊息群組的範例，請參閱[回應](#msg-prompts-response)。

若要建立訊息群組，您可以使用主控台或使用 [PutBot](API_PutBot.md)、[PutIntent](API_PutIntent.md) 或 [PutSlotType](API_PutSlotType.md) 操作為訊息指派群組號碼。如果您未建立訊息群組，或只建立一個訊息群組，Amazon Lex 會在 `Message` 欄位中傳送單一訊息。用戶端應用程式只會在主控台中已建立多個訊息群組，或是當您使用 [PutIntent](API_PutIntent.md) 操作建立或更新意圖時建立多個訊息群組時，才會在回應中獲得多個訊息。

當 Amazon Lex 從群組傳送訊息時，回應的 `Message` 欄位包含包含訊息的逸出 JSON 物件。下例顯示當包含多個訊息時，`Message` 欄位的內容。

**注意**  
範例已經過格式化以利閱讀。回應不包含換行字元 (CR)。

```
{\"messages\":[
   {\"type\":\"PlainText\",\"group\":0,\"value\":\"Plain text\"},
   {\"type\":\"SSML\",\"group\":1,\"value\":\"SSML text\"},
   {\"type\":\"CustomPayload\",\"group\":2,\"value\":\"Custom payload\"}
]}
```

您可以設定訊息的格式。格式可為下列其中之一：
+ PlainText — 訊息為 UTF-8 純文字。
+ SSML — 訊息為語音合成標記語言 (SSML)。
+ CustomPayload — 訊息為您指定的自訂格式。

若要控制在 `PostContent` 欄位中 `PostText` 和 `Message` 操作所傳回的訊息格式，請設定 `x-amz-lex:accept-content-types` 請求屬性。例如，如果將標頭設定如下，您只會在回應中收到純文字和 SSML 訊息：

```
x-amz-lex:accept-content-types: PlainText,SSML
```

如果您要求特定的訊息格式，而訊息群組不包含具備該格式的訊息，您會收到 `NoUsableMessageException` 例外狀況。當使用訊息群組依類型將訊息分組時，請勿使用 `x-amz-lex:accept-content-types` 標頭。

如需有關 `x-amz-lex:accept-content-types` 標頭的詳細資訊，請參閱[設定回應類型](context-mgmt-request-attribs.md#special-response)。

## 回應卡
<a name="msg-prompts-resp-card"></a>

**注意**  
回應卡不適用於 Amazon Connect 聊天。不過，如需類似的功能，請參閱[將互動式訊息新增至聊天](https://docs.aws.amazon.com/connect/latest/adminguide/interactive-messages.html)。

* 回應卡*包含一組對提示適當的回應。使用回應卡透過減少文字互動中的輸入錯誤，可簡化使用者的互動，並提高機器人的準確性。您可以針對 Amazon Lex 傳送給用戶端應用程式的每個提示傳送回應卡。您可以搭配 Facebook Messenger、Slack、Twilio 和您自己的用戶端應用程式使用回應卡。

例如，在計程車應用程式中，您可以在回應卡中設定「家」的選項，並將值設定為使用者的住家地址。當使用者選取此選項時，Amazon Lex 會收到整個地址做為輸入文字。請參閱下圖：

![\[範例回應卡。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/resp-console-5.png)


您可以定義回應卡用於以下提示：
+ 結論陳述
+ 確認提示
+ 後續追蹤提示
+ 拒絕陳述
+ 槽類型表達用語

您只能為每個提示定義一個回應卡。

您是在設定意圖時建立回應卡。您可以在建置時間使用主控台或 [PutIntent](API_PutIntent.md) 操作定義靜態回應卡。或者，您可以在 Lambda 函數的執行時間定義動態回應卡。如果您同時定義靜態和動態回應卡，會以動態回應卡為優先。

Amazon Lex 會以用戶端了解的格式傳送回應卡。它會針對 Facebook Messenger、Slack 和 Twilio 轉換回應卡。對於其他用戶端，Amazon Lex 會在[PostText](API_runtime_PostText.md)回應中傳送 JSON 結構。例如，如果用戶端是 Facebook Messenger，Amazon Lex 會將回應卡轉換為一般範本。如需有關 Facebook Messenger 一般範本的詳細資訊，請參閱 Facebook 網站上的[一般範本](https://developers.facebook.com/docs/messenger-platform/send-api-reference/generic-template)。如需使用 JSON 結構的範例，請參閱[動態產生回應卡](#msg-prompts-resp-card-dynamic)。

您只能搭配 [PostText](API_runtime_PostText.md) 操作使用回應卡。您無法搭配 [PostContent](API_runtime_PostContent.md) 操作使用回應卡。

### 定義靜態回應卡
<a name="msg-prompts-resp-card-static"></a>

當您建立意圖時，使用 [PutBot](API_PutBot.md)操作或 Amazon Lex 主控台定義靜態回應卡。靜態回應卡是與意圖同時定義。請在回應為固定時使用靜態回應卡。假設您要建立具有一個意圖的機器人，當中有個口味的槽。您在定義口味槽時指定提示，如以下主控台螢幕擷取畫面所示：

![\[在主控台中的意圖編輯器。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/resp-console-10a.png)


定義提示時，您可以選擇將回應卡與 [PutBot](API_PutBot.md)操作建立關聯，並在 Amazon Lex 主控台中定義詳細資訊，如下列範例所示：

![\[主控台顯示回應卡編輯器。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/resp-console-20a.png)


現在，假設您已將機器人與 Facebook Messenger 整合。使用者可以按一下按鈕來選擇口味，如下圖所示：

![\[Facebook Messenger 中的回應卡。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/resp-fb-exampleA.png)


若要自訂回應卡的內容，您可以參考工作階段屬性。在執行時間，Amazon Lex 會將這些參考取代為工作階段屬性的適當值。如需詳細資訊，請參閱[設定工作階段屬性](context-mgmt-session-attribs.md)。如需範例，請參閱 [使用回應卡](ex-resp-card.md)。

### 動態產生回應卡
<a name="msg-prompts-resp-card-dynamic"></a>

若要在執行時間動態產生回應卡，請使用初始化和驗證 Lambda 函數做為意圖。在 Lambda 函數的執行時間決定回應時，請使用動態回應卡。為了回應使用者輸入，Lambda 函數會產生回應卡，並在回應的 `dialogAction`區段中傳回它。如需詳細資訊，請參閱[回應格式](lambda-input-response-format.md#using-lambda-response-format)。

以下是來自 Lambda 函數的部分回應，顯示 `responseCard`元素。它產生與前一節所示的使用者體驗類似。

```
responseCard: {
  "version": 1,
  "contentType": "application/vnd.amazonaws.card.generic",
  "genericAttachments": [
    {
      "title": "What Flavor?",
      "subtitle": "What flavor do you want?",
      "imageUrl": "Link to image",
      "attachmentLinkUrl": "Link to attachment",
      "buttons": [
        {
          "text": "Lemon",
          "value": "lemon"
        },
        {
          "text": "Raspberry",
          "value": "raspberry"
        },
        {
          "text": "Plain",
          "value": "plain"
        }
      ]
    }
  ]
}
```

如需範例，請參閱 [排程預約](ex1-sch-appt.md)。