

支援終止通知：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)。

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

# Amazon Lex：運作方式
<a name="how-it-works"></a>

Amazon Lex 可讓您使用採用與 Amazon Alexa 相同技術的語音或文字界面來建置應用程式。以下是您在使用 Amazon Lex 時執行的一般步驟：

1. 建立機器人並使用您想要支援的一或多個意圖進行設定。設定機器人讓它可以了解使用者的目標 (意圖)，與使用者進行對話以引出資訊，並滿足使用者的意圖。

1. 測試機器人。您可以使用 Amazon Lex 主控台提供的測試時段用戶端。

1. 發佈版本並建立別名。

1. 部署機器人。您可以將機器人部署在如行動應用程式等平台或簡訊平台上，例如 Facebook Messenger。

開始之前，請先熟悉下列 Amazon Lex 核心概念和術語：
+ **機器人** – 機器人會執行自動化任務，例如訂購比薩、預訂飯店、訂購花等。Amazon Lex 機器人採用自動語音辨識 (ASR) 和自然語言理解 (NLU) 功能。每個機器人在您的帳戶中都必須具有唯一的名稱。

   

  Amazon Lex 機器人可以了解以文字或語音提供的使用者輸入，並以自然語言交談。您可以建立 Lambda 函數，並將其新增為意圖組態中的程式碼掛勾，以執行使用者資料驗證和履行任務。

   
+ **意圖** – 意圖代表使用者想要執行的動作。您建立機器人來支援一或多個相關的意圖。例如，您可以建立一個訂購比薩和飲料的機器人。對於每個意圖，您提供以下必要的資訊：

   
  + **意圖名稱** – 意圖的描述性名稱。例如 **OrderPizza**。意圖名稱在您的帳戶中必須是唯一的。
  + **表達用語範例** – 使用者如何傳達意圖。例如，使用者可能會說「我能否訂購比薩」或「我想要訂購比薩」。
  + **如何實現意圖** – 在使用者提供必要資訊後，您希望如何實現意圖 （例如，向當地比薩店下訂單）。我們建議您建立 Lambda 函數來滿足意圖。

     

     您可以選擇性地設定意圖，讓 Amazon Lex 直接將資訊傳回用戶端應用程式，以執行必要的履行。

     

  除了訂購比薩等自訂意圖之外，Amazon Lex 還提供內建意圖，以快速設定您的機器人。如需詳細資訊，請參閱[內建意圖和槽類型](howitworks-builtins.md)。

   
+ **槽** – 意圖可能需要零個或多個槽或參數。您將槽新增為意圖組態的一部分。在執行時間，Amazon Lex 會提示使用者輸入特定的槽值。使用者必須提供*所有必要*插槽的值，Amazon Lex 才能實現意圖。

   

  例如，`OrderPizza` 意圖需要如比薩大小、餅皮種類和數量等槽。您在意圖組態中新增這些槽。對於每個插槽，您提供槽類型和提示，讓 Amazon Lex 傳送給用戶端以從使用者引出資料。使用者可以使用包含其他單字的槽值來回覆，例如「請大比薩」或「用小寫貼圖」。Amazon Lex 仍然可以了解預期的槽值。

   
+ **槽類型** – 每個槽都有一個類型。您可以建立自訂槽類型或使用內建槽類型。每個槽類型在您的帳戶中都必須具有唯一的名稱。例如，您可以建立和使用以下 `OrderPizza` 意圖的槽類型：

   
  + 大小 – 使用列舉值 `Small`、`Medium` 以及 `Large`。
  + 餅皮 – 使用列舉值 `Thick` 和 `Thin`。

   

  

  Amazon Lex 也提供內建插槽類型。例如，`AMAZON.NUMBER` 是您可以用於訂購的比薩數量的內建槽類型。如需詳細資訊，請參閱[內建意圖和槽類型](howitworks-builtins.md)。

如需可使用 Amazon Lex 的 AWS 區域清單，請參閱《*Amazon Web Services 一般參考*》中的 [AWS 區域和端點](https://docs.aws.amazon.com/general/latest/gr/rande.html#lex_region)。

下列主題提供額外的資訊。我們建議您依序檢閱，然後探索[Amazon Lex 入門](getting-started.md) 練習。

**Topics**
+ [Amazon Lex 支援的語言](how-it-works-language.md)
+ [程式設計模型](programming-model.md)
+ [管理訊息](howitworks-manage-prompts.md)
+ [管理對話內容](context-mgmt.md)
+ [使用可信度分數](confidence-scores.md)
+ [對話日誌](conversation-logs.md)
+ [使用 Amazon Lex API 管理工作階段](how-session-api.md)
+ [機器人部署選項](chatbot-service.md)
+ [內建意圖和槽類型](howitworks-builtins.md)
+ [自訂槽類型](howitworks-custom-slots.md)
+ [槽混淆](how-obfuscate.md)
+ [情緒分析](sentiment-analysis.md)
+ [標記您的 Amazon Lex 資源](how-it-works-tags.md)

# Amazon Lex 支援的語言
<a name="how-it-works-language"></a>

Amazon Lex V1 支援各種語言和地區設定。下表列出支援的語言和支援這些語言的功能。

Amazon Lex V2 支援其他語言，請參閱 [Amazon Lex V2 支援的語言](https://docs.aws.amazon.com/lexv2/latest/dg/how-languages.html)

<a name="topiclist"></a>

## 支援的語言和地區
<a name="supported-languages-and-locales"></a>

Amazon Lex V1 支援下列語言和地區設定。


| Code | 語言和地區設定 | 
| --- | --- | 
| de-DE | 德文 （德文） | 
| en-AU | 英文 (澳洲) | 
| en-GB | 英文 (英國) | 
| en-IN | 英文 (印度) | 
| zh-TW | 英文 (美國) | 
| es-419 | 西班牙文 （拉丁美洲） | 
| es-ES | 西班牙文 (西班牙) | 
| es-US | 西班牙文 (美國) | 
| fr-CA | 法文 (加拿大) | 
| fr-FR | 法文 (法國) | 
| it-IT | 義大利文 (義大利) | 
| ja-JP | 日文 (日本) | 
| ko-KR | 韓文 (韓國) | 

## Amazon Lex 功能支援的語言和地區
<a name="supported-languages-features"></a>

所有語言和地區都支援所有 Amazon Lex 功能，除非此表格列出。


| 功能 | 支援的語言和地區設定 | 
| --- | --- | 
| [設定意圖內容](context-mgmt-active-context.md) | 英文 (美國) (en-US) | 

# 程式設計模型
<a name="programming-model"></a>

*機器人*是 Amazon Lex 中的主要資源類型。Amazon Lex 中的其他資源類型包括*意圖*、*槽類型*、*別名*和*機器人管道關聯*。

您可以使用 Amazon Lex 主控台或模型建置 API 來建立機器人。主控台提供圖形化使用者界面，您可用來為應用程式建立生產就緒的機器人。如果您願意，可以透過 AWS CLI 或自己的自訂程式使用模型建置 API 來建立機器人。

建立機器人之後，您將其部署在其中一個[支援的平台](https://docs.aws.amazon.com/lex/latest/dg/chatbot-service.html)，或將它整合到您自己的應用程式。當使用者與機器人互動時，用戶端應用程式會使用 Amazon Lex 執行時間 API 將請求傳送至機器人。例如，當使用者說「我想要訂購比薩」時，您的用戶端會使用其中一個執行時間 API 操作將此輸入傳送至 Amazon Lex。使用者可以語音或文字的形式提供輸入。

您也可以建立 Lambda 函數，並將其用於 意圖。使用這些 Lambda 函數程式碼掛勾來執行執行時間活動，例如初始化、驗證使用者輸入和意圖履行。下列各節提供了額外的資訊。

**Topics**
+ [模型建置 API 操作](#programming-model-build-time-api)
+ [執行時間 API 操作](#programming-model-runtime-api)
+ [Lambda 函數做為程式碼掛鉤](#prog-model-lambda)

## 模型建置 API 操作
<a name="programming-model-build-time-api"></a>

要透過程式設計方式建立機器人、意圖和槽類型，請使用模型建置 API 操作。您也可以使用模型建置 API 來管理、更新和刪除機器人的資源。模型建置 API 操作包括：
+ [PutBot](API_PutBot.md)、[PutBotAlias](API_PutBotAlias.md)、[PutIntent](API_PutIntent.md) 和 [PutSlotType](API_PutSlotType.md) 分別會建立和更新機器人、機器人別名、意圖和槽類型。
+ [CreateBotVersion](API_CreateBotVersion.md)、[CreateIntentVersion](API_CreateIntentVersion.md) 和 [CreateSlotTypeVersion](API_CreateSlotTypeVersion.md) 分別會建立和發佈機器人版本、意圖和槽類型。
+ [GetBot](API_GetBot.md) 和 [GetBots](API_GetBots.md) 分別會取得您已建立的特定機器人或機器人清單。
+ [GetIntent](API_GetIntent.md) 和 [GetIntents](API_GetIntents.md) 分別會取得您已建立的特定意圖或意圖清單。
+ [GetSlotType](API_GetSlotType.md) 和 [GetSlotTypes](API_GetSlotTypes.md) 分別會取得您已建立的特定槽類型或槽類型清單。
+ [GetBuiltinIntent](API_GetBuiltinIntent.md)[GetBuiltinIntents](API_GetBuiltinIntents.md)、 和 [GetBuiltinSlotTypes](API_GetBuiltinSlotTypes.md)分別取得 Amazon Lex 內建意圖、Amazon Lex 內建意圖清單，或您可以在機器人中使用的內建槽類型清單。
+ [GetBotChannelAssociation](API_GetBotChannelAssociation.md) 和 [GetBotChannelAssociations](API_GetBotChannelAssociations.md) 分別會取得機器人與簡訊平台之間的關聯，或機器人與簡訊平台之間的關聯清單。
+ [DeleteBot](API_DeleteBot.md)、[DeleteBotAlias](API_DeleteBotAlias.md)、[DeleteBotChannelAssociation](API_DeleteBotChannelAssociation.md)、[DeleteIntent](API_DeleteIntent.md) 和 [DeleteSlotType](API_DeleteSlotType.md) 會移除您帳戶中不需要的資源。

您可以使用模型建置 API 來建立自訂工具，以管理您的 Amazon Lex 資源。舉例來說，槽、意圖和槽類型各有 100 個版本的限制。您可以使用模型建置 API 來建置工具，在機器人接近限制時自動刪除舊版本。

為了確保一次只有一個操作更新資源，Amazon Lex 會使用檢查總和。當您使用 `Put` API[PutBot](API_PutBot.md) [PutBotAlias](API_PutBotAlias.md) 操作 —[PutIntent](API_PutIntent.md)、 或 [PutSlotType](API_PutSlotType.md)— 來更新資源時，您必須在請求中傳遞資源的目前檢查總和。如果同時有兩個工具嘗試更新資源，兩個都會提供相同的目前檢查總和。到達 Amazon Lex 的第一個請求符合資源的目前檢查總和。等到第二個請求抵達時，檢查總和已不同。第二個工具會收到 `PreconditionFailedException` 例外狀況，並且更新會終止。

`Get` 操作 [GetBot](API_GetBot.md)-[GetIntent](API_GetIntent.md)、 和 [GetSlotType](API_GetSlotType.md)- 最終一致。如果您在使用其中一個 `Get` 操作建立或修改資源之後立即使用 `Put` 操作，可能不會傳回變更。在 `Get` 操作傳回最新的更新之後，在資源再度經過修改之前，它一律會傳回更新過的資源。您可以查看檢查總和來判斷傳回的是否為更新的資源。

## 執行時間 API 操作
<a name="programming-model-runtime-api"></a>

 用戶端應用程式使用以下執行時間 API 操作與 Amazon Lex 通訊：
+ [PostContent](API_runtime_PostContent.md) – 接受語音或文字輸入，並傳回意圖資訊和要傳達給使用者的文字或語音訊息。Amazon Lex 目前支援以下音訊格式：

   

  輸入音訊格式 – LPCM 和 Opus 

  輸出音訊格式 – MPEG、OGG 和 PCM

   

  `PostContent` 操作支援 8 kHz 和 16 kHz 的音訊輸入。最終使用者透過電話與 Amazon Lex 交談的應用程式，例如自動呼叫中心，可以直接傳遞 8 kHz 音訊。

   
+ [PostText](API_runtime_PostText.md) – 接受文字輸入並傳回意圖資訊和文字訊息，以傳達給使用者。

您的用戶端應用程式使用執行時間 API 呼叫特定的 Amazon Lex 機器人來處理表達用語：使用者文字或語音輸入。例如，假設使用者說「我要訂購比薩」。用戶端會使用其中一個 Amazon Lex 執行時間 API 操作，將此使用者輸入傳送至機器人。從使用者輸入，Amazon Lex 會辨識使用者請求是用於機器人中定義的`OrderPizza`意圖。Amazon Lex 會與使用者進行對話，以收集所需資訊或槽資料，例如比薩大小、配料和比薩數量。使用者提供所有必要的槽資料後，Amazon Lex 會叫用 Lambda 函數程式碼掛勾以滿足意圖，或根據意圖的設定，將意圖資料傳回給用戶端。

當機器人使用語音輸入時，使用 [PostContent](API_runtime_PostContent.md) 操作。例如，自動呼叫中心應用程式可以將語音傳送至 Amazon Lex 機器人，而不是客服人員來處理客戶查詢。您可以使用 8 kHz 音訊格式，直接從電話將音訊傳送至 Amazon Lex。

Amazon Lex 主控台中的測試視窗使用 [PostContent](API_runtime_PostContent.md) API 將文字和語音請求傳送至 Amazon Lex。您可以在[Amazon Lex 入門](getting-started.md) 練習中使用此測試視窗。

## Lambda 函數做為程式碼掛鉤
<a name="prog-model-lambda"></a>

您可以設定 Amazon Lex 機器人以叫用 Lambda 函數做為程式碼掛勾。程式碼掛勾有多個用途：
+ 自訂使用者互動 - 例如，當 Joe 要求可用的比薩配料時，您可以使用先前對 Joe 選擇的知識來顯示配料的子集。
+ 驗證使用者的輸入 - 假設 Jen 想要在幾小時後挑選花。您可以驗證 Jen 輸入的時間並傳送適當的回應。
+ 滿足使用者的意圖 - 在 Joe 提供其比薩訂單的所有資訊之後，Amazon Lex 可以叫用 Lambda 函數來使用本機比薩來下訂單。

當您設定意圖時，您可以在下列位置將 Lambda 函數指定為程式碼掛勾：
+ 用於初始化和驗證的對話方塊程式碼掛勾 - 每個使用者輸入都會叫用此 Lambda 函數，假設 Amazon Lex 了解使用者意圖。
+ 履行程式碼掛勾 - 在使用者提供滿足意圖所需的所有槽資料之後，就會叫用此 Lambda 函數。

您可以選擇意圖，並在 Amazon Lex 主控台中設定程式碼掛勾，如下列螢幕擷取畫面所示：

![\[顯示 Lambda 函數程式碼掛勾的 Amazon Lex 主控台。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/how-works-10.png)


您也可以在 `dialogCodeHook` 操作中使用 `fulfillmentActivity` 和 [PutIntent](API_PutIntent.md) 欄位來設定程式碼掛勾。

一個 Lambda 函數可以執行初始化、驗證和履行。Lambda 函數接收的事件資料具有 欄位，可將發起人識別為對話方塊或履行程式碼掛勾。您可以使用此資訊來執行程式碼的適當部分。

您可以使用 Lambda 函數來建置可導覽複雜對話方塊的機器人。您可以使用 Lambda 函數回應中的 `dialogAction` 欄位，指示 Amazon Lex 採取特定動作。例如，您可以使用`ElicitSlot`對話方塊動作，指示 Amazon Lex 向使用者要求不需要的槽值。如果您已定義釐清提示，則可以在使用者完成前一個意圖時，使用 `ElicitIntent` 對話方塊動作來引出新的意圖。

如需詳細資訊，請參閱[使用 Lambda 函數](using-lambda.md)。

# 管理訊息
<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)。

# 管理對話內容
<a name="context-mgmt"></a>

*對話內容*是使用者、您的應用程式或 Lambda 函數提供給 Amazon Lex 機器人以滿足意圖的資訊。對話內容包括使用者提供的槽資料、用戶端應用程式設定的請求屬性，以及用戶端應用程式和 Lambda 函數建立的工作階段屬性。

**Topics**
+ [設定意圖內容](context-mgmt-active-context.md)
+ [使用預設槽值](context-mgmt-default.md)
+ [設定工作階段屬性](context-mgmt-session-attribs.md)
+ [設定請求屬性](context-mgmt-request-attribs.md)
+ [設定工作階段逾時](context-mgmt-session-timeout.md)
+ [在意圖之間共享資訊](context-mgmt-cross-intent.md)
+ [設定複雜屬性](context-mgmt-complex-attributes.md)

# 設定意圖內容
<a name="context-mgmt-active-context"></a>

您可以根據*內容*讓 Amazon Lex 觸發意圖。*內容*是狀態變數，可在您定義機器人時與意圖建立關聯。

當您使用主控台或使用 [PutIntent](API_PutIntent.md)操作建立意圖時，您可以設定意圖的內容。您只能在英文 (US) (en-US) 地區設定中使用內容，而且只有在您使用 [PutBot](API_PutBot.md)操作建立機器人`true`時，才將 `enableModelImprovements` 參數設定為 。

內容、輸出內容和輸入內容有兩種關係類型。滿足相關聯的意圖時，*輸出內容*會變成作用中。輸出內容會在來自 [PostText](API_runtime_PostText.md)或 [PostContent](API_runtime_PostContent.md)操作的回應中傳回至您的應用程式，並針對目前工作階段進行設定。啟用內容後，它會在定義內容時設定的轉彎次數或時間限制內保持作用中狀態。

*輸入內容*會指定可辨識意圖的條件。只有當所有輸入內容都處於作用中狀態時，才能在對話期間辨識意圖。沒有輸入內容的意圖一律符合辨識資格。

Amazon Lex 會透過使用輸出內容滿足意圖，自動管理已啟用內容的生命週期。您也可以在呼叫 `PostContent`或 `PostText`操作時設定作用中內容。

您也可以針對意圖使用 Lambda 函數來設定對話的內容。來自 Amazon Lex 的輸出內容會傳送至 Lambda 函數輸入事件。Lambda 函數可以在回應中傳送內容。如需詳細資訊，請參閱[Lambda 函數輸入事件和回應格式](lambda-input-response-format.md)。

例如，假設您有意預訂已設定為傳回名為 "book\$1car\$1fulfilled" 的輸出內容的租車。滿足意圖時，Amazon Lex 會設定輸出內容變數 "book\$1car\$1fulfilled"。由於 "book\$1car\$1fulfilled" 是作用中內容，只要使用者表達用語被識別為嘗試引出該意圖，「book\$1car\$1fulfilled」內容集為輸入內容的意圖現在就會視為辨識。您可以將此用於預訂租車後才有意義的意圖，例如透過電子郵件傳送收據或修改保留。

## 輸出內容
<a name="context-output"></a>

Amazon Lex 會在滿足意圖時啟用意圖的輸出內容。您可以使用輸出內容來控制符合追蹤目前意圖資格的意圖。

每個內容都有在工作階段中維護的參數清單。這些參數是已滿足意圖的槽值。您可以使用這些參數來預先填入其他意圖的槽值。如需詳細資訊，請參閱 [使用預設槽值](context-mgmt-default.md)。

當您使用主控台或 [PutIntent](API_PutIntent.md)操作建立意圖時，您可以設定輸出內容。您可以使用多個輸出內容來設定意圖。滿足意圖時，所有輸出內容都會啟用，並在 [PostText](API_runtime_PostText.md)或 [PostContent](API_runtime_PostContent.md)回應中傳回。

以下顯示使用主控台將輸出內容指派給意圖。

![\[輸出標籤標記 order_complete，存留時間為 5 圈或 90 秒。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/context-output.png)


當您定義輸出內容時，您也會定義其*存留時間*、內容包含在 Amazon Lex 回應中的時間長度或周轉次數。*轉*彎是從您的應用程式到 Amazon Lex 的一個請求。一旦輪換次數或時間過期，內容就不再處於作用中狀態。

您的應用程式可以視需要使用輸出內容。例如，您的應用程式可以使用輸出內容來：
+ 根據內容變更應用程式的行為。例如，旅遊應用程式的內容 "book\$1car\$1fulfilled" 可能具有與 "rental\$1function\$1fulfilled" 不同的動作。
+ 將輸出內容傳回 Amazon Lex，做為下一個表達式的輸入內容。如果 Amazon Lex 將表達用語視為嘗試引出意圖，則會使用內容來限制可以傳回給具有指定內容的意圖。

## 輸入內容
<a name="context-input"></a>

您可以設定輸入內容來限制對話中辨識意圖的點。沒有輸入內容的意圖一律符合辨識資格。

您可以使用 主控台或 `PutIntent`操作來設定意圖回應的輸入內容。意圖可以有多個輸入內容。以下顯示使用主控台將輸入內容指派給意圖。

![\[標記為 order_complete 的輸入標籤。\]](http://docs.aws.amazon.com/zh_tw/lex/latest/dg/images/context-input.png)


對於具有多個輸入內容的意圖，所有內容都必須處於作用中狀態，才能觸發意圖。您可以在呼叫 [PostText](API_runtime_PostText.md)、 [PostContent](API_runtime_PostContent.md)或 [PutSession](API_runtime_PutSession.md)操作時設定輸入內容。

您可以在 中設定槽，以從目前作用中內容取得預設值。當 Amazon Lex 辨識新意圖但未收到槽值時，會使用預設值。當您定義槽`#context-name.parameter-name`時，請以 形式指定內容名稱和槽名稱。如需詳細資訊，請參閱[使用預設槽值](context-mgmt-default.md)。

# 使用預設槽值
<a name="context-mgmt-default"></a>

當您使用預設值時，您可以指定當使用者輸入未提供槽時，要為新意圖填入的槽值來源。此來源可以是先前的對話方塊、請求或工作階段屬性，或是您在建置時間設定的固定值。

您可以使用下列 做為預設值的來源。
+ 上一個對話方塊 （內容） – \$1context-name.parameter-name
+ 工作階段屬性 – 【attribute-name】
+ 請求屬性 – <attribute-name>
+ 固定值 – 任何不符合先前值的值

當您使用 [PutIntent](API_PutIntent.md)操作將插槽新增至意圖時，您可以新增預設值清單。預設值會依列出的順序使用。例如，假設您的意圖具有具有下列定義的槽：

```
"slots": [
    {
        "name": "reservation-start-date",
        "defaultValueSpec": {
            "defaultValueList": [
                {
                    "defaultValue": "#book-car-fulfilled.startDate"
                },
                {  
                    "defaultValue": "[reservationStartDate]"
                }
            ]
        },
        Other slot configuration settings
    }
]
```

辨識意圖時，名為 "reservation-start-date" 的槽會將其值設定為下列其中一項。

1. 如果 "book-car-fulfilled" 內容處於作用中狀態，則會使用 "startDate" 參數的值做為預設值。

1. 如果「book-car-fulfilled」內容未啟用，或未設定「startDate」參數，則會使用「reservationStartDate」工作階段屬性的值做為預設值。

1. 如果未使用前兩個預設值，則槽沒有預設值，Amazon Lex 會照常引出值。

如果槽使用預設值，即使需要，也不會引出槽。

# 設定工作階段屬性
<a name="context-mgmt-session-attribs"></a>

*工作階段屬性*包含在工作階段期間在機器人和用戶端應用程式之間傳遞的應用程式特定資訊。Amazon Lex 會將工作階段屬性傳遞給為機器人設定的所有 Lambda 函數。如果 Lambda 函數新增或更新工作階段屬性，Amazon Lex 會將新資訊傳遞回用戶端應用程式。例如：
+ 在[練習 1：使用藍圖建立 Amazon Lex 機器人 （主控台）](gs-bp.md) 中，範例機器人使用 `price` 工作階段屬性，來維持花朵的價格。Lambda 函數會根據排序的花朵類型來設定此屬性。如需詳細資訊，請參閱[步驟 5 (選用)：檢閱資訊流程的詳細資訊 (主控台)](gs-bp-details-after-lambda.md)。
+ 在[預訂行程](ex-book-trip.md) 中，範例機器人使用 `currentReservation` 工作階段屬性在預訂飯店或預訂租車的對話期間，維持槽類型資料的副本。如需詳細資訊，請參閱[資訊流程的詳細資訊](book-trip-detail-flow.md)。

在 Lambda 函數中使用工作階段屬性來初始化機器人，並自訂提示和回應卡。例如：
+ 初始化 — 在比薩訂購機器人中，用戶端應用程式會在第一次呼叫 [PostContent](API_runtime_PostContent.md)或 [PostText](API_runtime_PostText.md)操作時，以工作階段屬性的形式傳遞使用者的位置。例如 `"Location": "111 Maple Street"`。Lambda 函數會使用此資訊來尋找最接近的比薩來下訂單。
+ 個人化提示 — 設定提示和回應卡以參考工作階段屬性。例如，「[FirstName] 你好，想要什麼配料？」 如果您以工作階段屬性 (`{"FirstName": "Jo"}`) 傳遞使用者的名字，Amazon Lex 會取代預留位置的名稱。它接著會傳送個人化提示給使用者、「Jo 你好，你想要什麼配料？」

工作階段屬性會在工作階段期間保留。Amazon Lex 會將它們存放在加密的資料存放區中，直到工作階段結束為止。用戶端可以透過呼叫 [PostContent](API_runtime_PostContent.md) 或 [PostText](API_runtime_PostText.md) 操作並將 `sessionAttributes` 欄位設定為值，在請求中建立工作階段屬性。Lambda 函數可以在回應中建立工作階段屬性。在用戶端或 Lambda 函數建立工作階段屬性之後，只要用戶端應用程式在對 Amazon Lex 的請求中不包含`sessionAttribute`欄位，就會使用儲存的屬性值。

例如，假設您有兩個工作階段屬性，`{"x": "1", "y": "2"}`。如果用戶端在未指定 `sessionAttributes` 欄位的情況下呼叫 `PostContent`或 `PostText`操作，Amazon Lex 會使用儲存的工作階段屬性 () 呼叫 Lambda 函數`{"x": 1, "y": 2}`。如果 Lambda 函數未傳回工作階段屬性，Amazon Lex 會將儲存的工作階段屬性傳回至用戶端應用程式。

如果用戶端應用程式或 Lambda 函數傳遞工作階段屬性，Amazon Lex 會更新儲存的工作階段屬性。傳遞現有的值，例如 ` {"x": 2}`，會更新儲存的值。如果您傳送一組新的工作階段屬性，例如 `{"z": 3}`，現有的值會被移除，只保留新值。當傳遞空白對應 `{}` 時，會清除儲存的值。

若要將工作階段屬性傳送至 Amazon Lex，您可以建立屬性的string-to-string映射。以下說明如何對應工作階段屬性：

```
{
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

對於 `PostText` 操作，您使用 `sessionAttributes` 欄位將對應插入請求的本文，如下所示：

```
"sessionAttributes": {
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

對於 `PostContent` 操作，您用 base64 來編碼對應，然後將其做為 `x-amz-lex-session-attributes` 標頭傳送。

如果您在工作階段屬性中傳送二進位或結構化資料，必須先將資料轉換為簡單的字串。如需詳細資訊，請參閱[設定複雜屬性](context-mgmt-complex-attributes.md)。

# 設定請求屬性
<a name="context-mgmt-request-attribs"></a>

*請求屬性*包含請求特定的資訊並且僅適用於目前的請求。用戶端應用程式會將此資訊傳送至 Amazon Lex。使用請求屬性來傳遞不需要在整個工作階段內保留的資訊。您可以建立自己的請求屬性，也可以使用預先定義的屬性。若要傳送請求屬性，請在 `x-amz-lex-request-attributes` 中使用 [PostContent](API_runtime_PostContent.md) 標頭，或在 `requestAttributes` 請求中使用 [PostText](API_runtime_PostText.md) 欄位。請求屬性並不像工作階段屬性會在請求之間保留，因此 `PostContent` 或 `PostText` 回應中不會傳回請求屬性。

**注意**  
若要傳送在請求之間保留的資訊，請使用工作階段屬性。

命名空間 `x-amz-lex:` 是預留給預先定義的請求屬性。請勿建立以 `x-amz-lex:` 為字首的請求屬性。

## 設定預先定義的請求屬性
<a name="context-mgmt-special"></a>

Amazon Lex 提供預先定義的請求屬性，以管理其處理傳送至機器人的資訊的方式。該屬性不會在整個工作階段內保留，因此您必須在每個請求中傳送預先定義的屬性。預先定義的屬性全都位於 `x-amz-lex:` 命名空間中。

除了下列預先定義的屬性之外，Amazon Lex 還提供訊息平台的預先定義屬性。如需該些屬性的清單，請參閱[在訊息平台上部署 Amazon Lex 機器人](example1.md)。

### 設定回應類型
<a name="special-response"></a>

如果您有兩個具有不同功能的用戶端應用程式，可能需要限制回應中的訊息格式。例如，您可能想要將傳送到 Web 用戶端的訊息限制為純文字，但是讓行動用戶端可以同時使用純文字和語音合成標記語言 (SSML)。若要設定 [PostContent](API_runtime_PostContent.md) 和 [PostText](API_runtime_PostText.md) 操作傳回的訊息格式，請使用 `x-amz-lex:accept-content-types"` 請求屬性。

您可以將屬性設定為以下訊息類型的任何組合：
+ `PlainText`- 訊息包含純 UTF-8 文字。
+ `SSML`- 訊息包含語音輸出的文字格式。
+ `CustomPayload`- 訊息包含您為用戶端建立的自訂格式。您可以定義承載，以符合應用程式的需求。

Amazon Lex 只會在回應的 `Message` 欄位中傳回具有指定類型的訊息。您可以用逗號分隔各值來設定多個值。如果您使用訊息群組，那麼每個訊息群組都必須至少包含一個指定類型的訊息。否則，您會收到 `NoUsableMessageException` 錯誤。如需詳細資訊，請參閱[訊息群組](howitworks-manage-prompts.md#message-groups)。

**注意**  
`x-amz-lex:accept-content-types` 請求屬性不會影響 HTML 本文的內容。`PostText` 操作回應的內容一律是 UTF-8 純文字。`PostContent` 操作回應的本文在請求中包含的資料具備 `Accept` 標頭中所設定的格式。

### 設定偏好的時區
<a name="special-time-zone"></a>

若要設定用於解析日期的時區，以便與使用者的時區相關，請使用 `x-amz-lex:time-zone` 請求屬性。如果您在 `x-amz-lex:time-zone` 屬性中沒有指定時區，預設值會依您使用機器人的區域而定。


| 區域 | 預設時區 | 
| --- | --- | 
| 美國東部 (維吉尼亞北部) |  America/New\$1York  | 
| 美國西部 (奧勒岡) |  America/Los\$1Angeles  | 
| 亞太地區 (新加坡) |  Asia/Singapore  | 
| 亞太地區 (雪梨) |  Australia/Sydney  | 
| 亞太地區 (東京) |  Asia/Tokyo  | 
| 歐洲 (法蘭克福) |  Europe/Berlin  | 
| 歐洲 (愛爾蘭) |  Europe/Dublin  | 
| 歐洲 (倫敦) |  Europe/London  | 

例如，如果使用者回應「您希望包裹在哪一天遞送？」`tomorrow`的提示。套件的實際交付*日期*取決於使用者的時區。例如，紐約的 9 月 16 日 01:00 是洛杉磯 9 月 15 日的 22:00。如果您的服務在美國東部 （維吉尼亞北部） 區域執行，而洛杉磯的人使用預設時區訂購了「明天」要交付的套件，則該套件將於 17 號而非 16 號交付。不過，如果您將 `x-amz-lex:time-zone` 請求屬性設定為 `America/Los_Angeles`，則包裹會在 16 日送達。

您可以將屬性設定為任何網際網路號碼分配局 (IANA) 時區名稱。如需時區名稱的清單，請參閱 Wikipedia 上的 [tz 資料庫時區清單](https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)。

## 設定使用者定義的請求屬性
<a name="context-mgmt-user"></a>

*使用者定義的請求屬性*是您在每個請求中傳送給機器人的資料。您在 `amz-lex-request-attributes` 請求中的 `PostContent` 標頭，或在 `requestAttributes` 請求中 `PostText` 欄位傳送資訊。

若要將請求屬性傳送至 Amazon Lex，您可以建立屬性的string-to-string映射。以下說明如何對應請求屬性：

```
{
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

對於 `PostText` 操作，您使用 `requestAttributes` 欄位將對應插入請求的本文，如下所示：

```
"requestAttributes": {
   "attributeName": "attributeValue",
   "attributeName": "attributeValue"
}
```

對於 `PostContent` 操作，您用 base64 來編碼對應，然後將其做為 `x-amz-lex-request-attributes` 標頭傳送。

如果您在請求屬性中傳送二進位或結構化資料，必須先將資料轉換為簡單的字串。如需詳細資訊，請參閱[設定複雜屬性](context-mgmt-complex-attributes.md)。

# 設定工作階段逾時
<a name="context-mgmt-session-timeout"></a>

Amazon Lex 會保留內容資訊 - 槽資料和工作階段屬性 - 直到對話工作階段結束為止。若要控制機器人的工作階段可持續多久的時間，請設定工作階段逾時。在預設情況下，工作階段持續時間為 5 分鐘，但是您可以指定介於 0 到 1,440 分鐘 (24 小時) 的任何持續時間。

例如，假設您建立一個 `ShoeOrdering` 機器人來支援如 `OrderShoes` 和 `GetOrderStatus` 的意圖。當 Amazon Lex 偵測到使用者的意圖是訂購鞋子時，它會要求槽資料。例如，它會要求鞋子尺寸、顏色、品牌等。如果使用者提供一些槽資料，但未完成購買鞋子，Amazon Lex 會記住整個工作階段的所有槽資料和工作階段屬性。如果使用者在工作階段過期之前返回工作階段，可提供其餘的槽資料，並完成購買。

在 Amazon Lex 主控台中，您可以在建立機器人時設定工作階段逾時。透過 AWS 命令列界面 (AWS CLI) 或 API，您在使用 [PutBot](API_PutBot.md) 操作建立或更新機器人時，透過設定 [idleSessionTTLInSeconds](https://docs.aws.amazon.com/lex/latest/dg/API_PutBot.html#lex-PutBot-request-idleSessionTTLInSeconds) 欄位來設定逾時。

# 在意圖之間共享資訊
<a name="context-mgmt-cross-intent"></a>

Amazon Lex 支援在意圖之間共用資訊。若要在意圖之間共享，請使用工作階段屬性。

例如，`ShoeOrdering` 機器人的使用者開始訂購鞋子。機器人會與使用者進行對話，例如，收集鞋子尺寸、顏色和品牌等槽資料。當使用者下訂單時，履行訂單的 Lambda 函數會設定`orderNumber`工作階段屬性，其中包含訂單號碼。為了取得訂單狀態，使用者使用 `GetOrderStatus` 意圖。機器人可以要求使用者提供槽資料，例如訂單號碼和訂單日期。當機器人擁有所需的資訊時，便會傳回訂單狀態。

如果您認為使用者可能會在同一個工作階段期間切換意圖，可以設計機器人傳回最近的訂單狀態。與其再次要求使用者提供訂單資訊，您可以使用 `orderNumber` 工作階段屬性跨意圖共享資訊，並滿足 `GetOrderStatus` 意圖。機器人可傳回使用者最後一個訂單的狀態來達到此目的。

如需跨意圖資訊共享的範例，請參閱[預訂行程](ex-book-trip.md)。

# 設定複雜屬性
<a name="context-mgmt-complex-attributes"></a>

工作階段和請求屬性是屬性與值的字串至字串對應。在許多情況下，您可以使用字串對應在用戶端應用程式與機器人之間傳輸屬性值。不過，在某些情況下，您可能需要傳輸無法輕易轉換為字串對應的二進位資料或複雜架構。例如，以下 JSON 物件代表美國三個最熱門的城市陣列：

```
{
   "cities": [
      {
         "city": {
            "name": "New York",
            "state": "New York",
            "pop": "8537673"
         }
      },
      {
         "city": {
            "name": "Los Angeles",
            "state": "California",
            "pop": "3976322"
         }
      },
      {
         "city": {
            "name": "Chicago",
            "state": "Illinois",
            "pop": "2704958"
         }
      }
   ]
}
```

這個資料陣列不會妥當地轉譯為字串至字串對應。在這種情況下，您可以將物件轉換成簡單的字串，讓您可以透過 [PostContent](API_runtime_PostContent.md) 和 [PostText](API_runtime_PostText.md) 操作將其傳送到機器人。

例如，如果您使用 JavaScript，可以使用 `JSON.stringify` 操作將物件轉換成 JSON，以及使用 `JSON.parse` 操作將 JSON 文字轉換成 JavaScript 物件：

```
// To convert an object to a string.
var jsonString = JSON.stringify(object, null, 2);
// To convert a string to an object.
var obj = JSON.parse(JSON string);
```

若要透過 `PostContent` 操作傳送工作階段屬性，您必須先以 base64 編碼後再將其新增至請求標頭，如以下 JavaScript 程式碼所示：

```
var encodedAttributes = new Buffer(attributeString).toString("base64");
```

您可以先將資料轉換成以 base64 編碼的字串，然後將該字串當做值在工作階段屬性中傳送，藉此將二進位資料傳送到 `PostContent` 和 `PostText` 操作：

```
"sessionAttributes" : {
   "binaryData": "base64 encoded data"
}
```

# 使用可信度分數
<a name="confidence-scores"></a>

當使用者表達表達表達的話，Amazon Lex 會使用自然語言理解 (NLU) 來了解使用者的請求並傳回適當的意圖。根據預設，Amazon Lex 會傳回機器人定義的最可能意圖。

在某些情況下，Amazon Lex 可能很難判斷最可能的意圖。例如，使用者可能會說出含糊不清的話語，或者可能有兩個相似的意圖。為了協助判斷適當的意圖，您可以將您的網域知識與替代意圖清單的*可信度分數*結合。可信度分數是 Amazon Lex 提供的評分，顯示意圖是正確意圖的可信度。

若要判斷兩種替代意圖之間的差異，您可以比較其可信度分數。例如，如果一個意圖的可信度分數為 0.95，而另一個意圖的可信度分數為 0.65，則第一個意圖可能是正確的。不過，如果一個意圖的分數為 0.75，而另一個意圖的分數為 0.72，則兩個意圖之間存在模棱兩可的情況，您可能可以在應用程式中使用網域知識來區分。

您也可以使用可信度分數來建立測試應用程式，以判斷意圖表達用語的變更是否會對機器人的行為產生影響。例如，您可以使用一組表達式取得機器人意圖的可信度分數，然後使用新的表達式更新意圖。然後，您可以檢查可信度分數，查看是否有改善。

Amazon Lex 傳回的可信度分數是比較值。您不應依賴它們做為絕對分數。這些值可能會根據 Amazon Lex 的改進而變更。

當您使用可信度分數時，Amazon Lex 會傳回最可能的意圖和最多 4 個替代意圖，以及每個回應中的相關分數。如果所有可信度分數都低於閾值，則 Amazon Lex 會包含 `AMAZON.FallbackIntent`、 `AMAZON.KendraSearchIntent`或兩者，如果您已設定這些分數。您可以使用預設閾值，也可以設定自己的閾值。

下列 JSON 程式碼顯示 [PostText](API_runtime_PostText.md)操作回應中的 `alternativeIntents` 欄位。

```
   "alternativeIntents": [ 
      { 
         "intentName": "string",
         "nluIntentConfidence": { 
            "score": number
         },
         "slots": { 
            "string" : "string" 
         }
      }
   ],
```

建立或更新機器人時設定閾值。您可以使用 API 或 Amazon Lex 主控台。對於下列區域，您需要選擇加入，才能啟用準確性改善和可信度分數。在 主控台的**進階選項**區段中選擇可信度分數。使用 API，在呼叫 [PutBot](API_PutBot.md)操作時設定 `enableModelImprovements` 參數。：
+ 美國東部 (維吉尼亞北部) (us-east-1)
+ 美國西部 (奧勒岡) (us-west-2)
+ 亞太區域 (雪梨) (ap-southeast-2)
+ 歐洲 (愛爾蘭) (eu-west-1)

在所有其他區域中，依預設提供準確性改善和可信度分數支援。

若要變更可信度閾值，請在主控台或使用 [PutBot](API_PutBot.md)操作進行設定。閾值必須是介於 1.00 和 0.00 之間的數字。

若要使用 主控台，請在建立或更新機器人時設定可信度閾值。

**在建立機器人時設定可信度閾值 （主控台）**
+ 在**建立機器人**上，在**可信度分數閾值**欄位中輸入值。

**更新可信度閾值 （主控台）**

1. 從機器人清單中，選擇要更新的機器人。

1. 選擇 **Settings** (設定) 標籤。

1. 在左側導覽中，選擇**一般**。

1. 更新**可信度分數閾值**欄位中的值。

**設定或更新可信度閾值 (SDK)**
+ 設定 [PutBot](API_PutBot.md)操作的 `nluIntentConfidenceThreshold` 參數。下列 JSON 程式碼顯示要設定的參數。

  ```
     "nluIntentConfidenceThreshold": 0.75,
  ```

## 工作階段管理
<a name="confidence-scores-session-management"></a>

若要變更 Amazon Lex 在與 使用者的對話中使用的意圖，您可以使用對話方塊程式碼勾點 Lambda 函數的回應，也可以在自訂應用程式中使用工作階段管理 APIs。

### 使用 Lambda 函數
<a name="session-management-lambda"></a>

當您使用 Lambda 函數時，Amazon Lex 會使用包含函數輸入內容的 JSON 結構來呼叫它。JSON 結構包含一個名為 的欄位`currentIntent`，其中包含 Amazon Lex 識別為使用者表達詞最可能意圖的意圖。JSON 結構也包含一個`alternativeIntents`欄位，其中包含最多四個額外的意圖，可滿足使用者的意圖。每個意圖都包含一個名為 的欄位`nluIntentConfidenceScore`，其中包含 Amazon Lex 指派給意圖的可信度分數。

若要使用替代意圖，請在 `ConfirmIntent`或 Lambda 函數的`ElicitSlot`對話方塊動作中指定它。

如需詳細資訊，請參閱[使用 Lambda 函數](using-lambda.md)。

### 使用工作階段管理 API
<a name="session-management-API"></a>

若要使用與目前意圖不同的意圖，請使用 [PutSession](API_runtime_PutSession.md)操作。例如，如果您決定第一個替代方案優於 Amazon Lex 選擇的意圖，您可以使用 `PutSession`操作來變更意圖，以便使用者與之互動的下一個意圖是您選擇的意圖。

如需詳細資訊，請參閱[使用 Amazon Lex API 管理工作階段](how-session-api.md)。

# 對話日誌
<a name="conversation-logs"></a>

您可以啟用「對話日誌」**來存放機器人互動。您可以使用這些日誌來檢閱機器人的效能，以及疑難排解對話的問題。您可以記錄 [PostText](API_runtime_PostText.md) 操作的文字。您可以同時記錄 [PostContent](API_runtime_PostContent.md) 操作的文字和音訊。透過啟用對話日誌，您可以詳細檢視使用者與您機器人的對話。

例如，具有您機器人的工作階段有一個工作階段 ID。您可以使用此 ID 來取得對話的記錄，包括使用者表達用語和對應的機器回應。您還可以取得中繼資料，例如表達用語的意圖名稱和槽值。

**注意**  
由於受到兒童線上隱私保護法案 (COPPA) 的限制，您無法搭配機器人使用對話日誌。

對話日誌是針對別名設定的。每個別名都可以對其文字和音訊日誌具有不同的設定。您可以為每個別名啟用文字日誌、音訊日誌或兩者。文字日誌會將文字輸入、音訊輸入的文字記錄和相關聯的中繼資料儲存在 CloudWatch Logs 中。音訊日誌將音訊輸入儲存在 Amazon S3 中。您可以使用 AWS KMS 客戶受管 CMKs 啟用文字和音訊日誌的加密。

若要設定記錄，請使用主控台或 [PutBotAlias](API_PutBotAlias.md) 操作。您無法記錄機器人`$LATEST`別名或 Amazon Lex 主控台中可用測試機器人的對話。啟用別名的對話日誌後，[PostContent](API_runtime_PostContent.md)或該別名[PostText](API_runtime_PostText.md)的操作會將文字或音訊表達用語記錄在設定的 CloudWatch Logs 日誌群組或 S3 儲存貯體中。

**Topics**
+ [對話日誌的 IAM 政策](conversation-logs-policies.md)
+ [設定對話日誌](conversation-logs-configure.md)
+ [加密對話日誌](conversation-logs-encrypting.md)
+ [在 Amazon CloudWatch Logs 中檢視文字日誌](conversation-logs-cw.md)
+ [在 Amazon S3 中存取音訊日誌](conversation-logs-s3.md)
+ [使用 CloudWatch 指標監控對話日誌狀態](conversation-logs-monitoring.md)

# 對話日誌的 IAM 政策
<a name="conversation-logs-policies"></a>

根據您選取的記錄類型，Amazon Lex 需要使用 Amazon CloudWatch Logs 和 Amazon Simple Storage Service (S3) 儲存貯體來存放日誌的許可。您必須建立 AWS Identity and Access Management 角色和許可，才能讓 Amazon Lex 存取這些資源。

## 建立對話日誌的 IAM 角色和政策
<a name="conversation-logs-role-and-policy"></a>

若要啟用對話日誌，您必須授予 CloudWatch Logs 和 Amazon S3 的寫入許可。如果您為 S3 物件啟用物件加密，則需要將存取許可授予用於加密物件的 AWS KMS 金鑰。

您可以使用 IAM AWS 管理主控台、IAM API 或 AWS Command Line Interface 來建立角色和政策。這些指示使用 AWS CLI 來建立角色和政策。如需有關使用主控台建立政策的資訊，請參閱《*AWS Identity and Access Management 使用者指南*》中的[在 JSON 標籤上建立政策](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_create-console.html#access_policies_create-json-editor)。

**注意**  
下列程式碼是針對 Linux 和 MacOS 格式化的。若為 Windows，請將接續字元 (\$1) 取代為插入符號 (^)。



**為對話日誌建立 IAM 角色**

1. 在稱為 **LexConversationLogsAssumeRolePolicyDocument.json** 的目前目錄中建立一個文件、將下列程式碼新增至其中，然後儲存它。此政策文件會將 Amazon Lex 新增為角色的信任實體。這可讓 Lex 擔任將日誌傳遞至專為對話日誌設定的資源角色。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "lex.amazonaws.com"
         },
         "Action": "sts:AssumeRole"
       }
     ]
   }
   ```

------

1. 在 中 AWS CLI，執行下列命令來建立對話日誌的 IAM 角色。

   ```
   aws iam create-role \
       --role-name role-name \
       --assume-role-policy-document file://LexConversationLogsAssumeRolePolicyDocument.json
   ```

接著，建立政策並將其連接至 角色，讓 Amazon Lex 能夠寫入 CloudWatch Logs。

**建立將對話文字記錄到 CloudWatch Logs 的 IAM 政策**

1. 在名為 的目前目錄中建立文件**LexConversationLogsCloudWatchLogsPolicy.json**，將下列 IAM 政策新增至其中，然後儲存它。

1. 在 中 AWS CLI，建立將寫入許可授予 CloudWatch Logs 日誌群組的 IAM 政策。

   ```
   aws iam create-policy \
       --policy-name cloudwatch-policy-name \
       --policy-document file://LexConversationLogsCloudWatchLogsPolicy.json
   ```

1. 將政策連接至您為對話日誌建立的 IAM 角色。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::account-id:policy/cloudwatch-policy-name \
       --role-name role-name
   ```

如果您要將音訊記錄到 S3 儲存貯體，請建立可讓 Amazon Lex 寫入儲存貯體的政策。

**建立 IAM 政策以將音訊記錄到 S3 儲存貯體**

1. 在稱為 **LexConversationLogsS3Policy.json** 的目前目錄中建立一個文件、將下列政策新增至其中，然後儲存它。

------
#### [ JSON ]

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
         {
             "Effect": "Allow",
             "Action": [
                 "s3:PutObject"
             ],
             "Resource": "arn:aws:s3:::bucket-name/*"
         }
     ]
   }
   ```

------

1. 在 中 AWS CLI，建立將寫入許可授予 S3 儲存貯體的 IAM 政策。

   ```
   aws iam create-policy \
       --policy-name s3-policy-name \
       --policy-document file://LexConversationLogsS3Policy.json
   ```

1. 將此政策附加到您為對話日誌建立的角色。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::account-id:policy/s3-policy-name \
       --role-name role-name
   ```

## 授予許可以傳遞 IAM 角色
<a name="conversation-logs-pass-role"></a>

當您使用 主控台 AWS Command Line Interface、 或 AWS 開發套件來指定用於對話日誌的 IAM 角色時，指定對話日誌的使用者 IAM 角色必須具有將角色傳遞給 Amazon Lex 的許可。若要允許使用者將角色傳遞給 Amazon Lex，您必須將`PassRole`許可授予使用者、角色或群組。

下列政策會定義授予使用者、角色或群組的許可。您可以使用 `iam:AssociatedResourceArn` 和 `iam:PassedToService` 條件金鑰來限制許可的範圍。如需詳細資訊，請參閱《 *AWS Identity and Access Management 使用者指南*》中的[授予使用者將角色傳遞至 AWS 服務和 IAM 和條件內容金鑰的許可](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_passrole.html)。 [AWS STS](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html)

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/role-name",
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "lex.amazonaws.com"
                },
                "StringLike": {
                    "iam:AssociatedResourceARN": "arn:aws:lex:region:123456789012:bot:bot-name:bot-alias"
                }
            }
        }
    ]
}
```

------

# 設定對話日誌
<a name="conversation-logs-configure"></a>

您可以使用主控台或 `PutBotAlias` 操作的 `conversationLogs` 欄位，啟用和停用對話日誌。您可以開啟或關閉音訊日誌、文字日誌或兩者。記錄會在新的機器人工作階段開始。對於作用中的工作階段，不會反映日誌設定的變更。

若要存放文字日誌，請在 AWS 您的帳戶中使用 Amazon CloudWatch Logs 日誌群組。您可以使用任何有效的日誌群組。日誌群組必須與 Amazon Lex 機器人位於相同的區域。如需建立 CloudWatch Logs 日誌群組的詳細資訊，請參閱《*Amazon CloudWatch Logs 使用者指南》中的*[使用日誌群組和日誌串流](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)。

若要存放音訊日誌，請在 AWS 您的帳戶中使用 Amazon S3 儲存貯體。您可以使用任何有效的 S3 儲存貯體。儲存貯體必須與 Amazon Lex 機器人位於相同的區域。如需建立 S3 儲存貯體的詳細資訊，請參閱《*Amazon Simple Storage Service 入門指南*》中的[建立儲存貯體](https://docs.aws.amazon.com/AmazonS3/latest/gsg/CreatingABucket.html)。

您必須為 IAM 角色提供政策，讓 Amazon Lex 能夠寫入已設定的日誌群組或儲存貯體。如需詳細資訊，請參閱[建立對話日誌的 IAM 角色和政策](conversation-logs-policies.md#conversation-logs-role-and-policy)。

如果您使用 建立服務連結角色 AWS Command Line Interface，則必須使用 `custom-suffix`選項將自訂尾碼新增至角色，如下所示：

```
aws iam create-service-linked-role \
    --aws-service-name lex.amazon.aws.com \
    --custom-suffix suffix
```

您用來啟用對話日誌的 IAM 角色必須具有 `iam:PassRole`許可。下列政策應連接至角色。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/role"
        }
    ]
}
```

------

## 啟用對話日誌
<a name="conversation-logs-enable"></a>

**使用主控台開啟日誌**

1. 開啟 Amazon Lex 主控台 https：//[https://console.aws.amazon.com/lex](https://console.aws.amazon.com/lex)。

1. 從清單中選擇一個機器人。

1. 選擇 **Settings (設定)** 標籤，然後從左側功能表中選擇 **Conversation logs (對話日誌)**。

1. 在別名清單中，為您要設定對話日誌的別名選擇設定圖示。

1. 選取要記錄文字、音訊或兩者。

1. 針對文字記錄，輸入 Amazon CloudWatch Logs 日誌群組名稱。

1. 若要記錄音訊，請輸入 S3 儲存貯體資訊。

1. 選用。若要加密音訊日誌，請選擇用於加密的 AWS KMS 金鑰。

1. 選擇具有必要許可的 IAM 角色。

1. 選擇 **Save (儲存)** 以開始記錄對話。

**使用 API 開啟文字日誌**

1. 使用 `conversationLogs` 欄位的 `logSettings` 成員中的項目呼叫 [PutBotAlias](API_PutBotAlias.md) 操作
   + 將 `destination` 成員設定為 `CLOUDWATCH_LOGS`
   + 將 `logType` 成員設定為 `TEXT`
   + 將`resourceArn`成員設定為 CloudWatch Logs 日誌群組的 Amazon Resource Name (ARN)，這是日誌的目的地

1. 將 `conversationLogs` 欄位`iamRoleArn`的成員設定為 IAM 角色的 Amazon Resource Name (ARN)，該角色具有在指定資源上啟用對話日誌所需的許可。

**使用 API 開啟音訊日誌**

1. 使用 `conversationLogs` 欄位的 `logSettings` 成員中的項目呼叫 [PutBotAlias](API_PutBotAlias.md) 操作
   + 將 `destination` 成員設定為 `S3`
   + 將 `logType` 成員設定為 `AUDIO`
   + 將 `resourceArn` 成員設定為音訊日誌儲存所在之 Amazon S3 儲存貯體的 ARN
   + 選用。若要使用特定 AWS KMS 金鑰加密音訊日誌，請設定用於加密之金鑰的 ARN `kmsKeyArn`成員。

1. 將 `conversationLogs` 欄位`iamRoleArn`的成員設定為 IAM 角色的 Amazon Resource Name (ARN)，該角色具有在指定資源上啟用對話日誌所需的許可。

## 停用對話日誌
<a name="conversation-logs-disable"></a>

**使用主控台關閉日誌**

1. 開啟 Amazon Lex 主控台 https：//[https://console.aws.amazon.com/lex](https://console.aws.amazon.com/lex)。

1. 從清單中選擇一個機器人。

1. 選擇 **Settings (設定)** 標籤，然後從左側功能表中選擇 **Conversation logs (對話日誌)**。

1. 在別名清單中，為您要設定對話日誌的別名選擇設定圖示。

1. 清除文字、音訊或兩者的核取方塊以關閉記錄。

1. 選擇 **Save (儲存)** 以停止記錄對話。

**使用 API 關閉日誌**
+ 呼叫沒有 `conversationLogs` 欄位的 `PutBotAlias` 操作。

**使用 API 關閉文字日誌**
+ 
  + 如果您是記錄音訊
    + 呼叫只對 `AUDIO` 具有 `logSettings` 項目的 [PutBotAlias](API_PutBotAlias.md) 操作。
    + 對 `PutBotAlias` 操作的呼叫必須沒有 `TEXT` 的 `logSettings` 項目。
  + 如果您不是記錄音訊
    + 呼叫沒有 `conversationLogs` 欄位的 [PutBotAlias](API_PutBotAlias.md) 操作。

**使用 API 關閉音訊日誌**
+ 
  + 如果您是記錄文字
    + 呼叫只對 `TEXT` 具有 `logSettings` 項目的 [PutBotAlias](API_PutBotAlias.md) 操作。
    + 對 `PutBotAlias` 操作的呼叫必須沒有 `AUDIO` 的 `logSettings` 項目。
  + 如果您不是記錄文字
    + 呼叫沒有 `conversationLogs` 欄位的 [PutBotAlias](API_PutBotAlias.md) 操作。

# 加密對話日誌
<a name="conversation-logs-encrypting"></a>

您可以使用加密來協助保護對話日誌的內容。對於文字和音訊日誌，您可以使用 AWS KMS 客戶受管 CMKs 來加密 CloudWatch Logs 日誌群組和 S3 儲存貯體中的資料。

**注意**  
Amazon Lex 僅支援對稱 CMKs。請不要使用非對稱 CMK 來加密資料。

您可以在 Amazon Lex 用於文字日誌的 CloudWatch Logs 日誌群組上使用 AWS KMS 金鑰啟用加密。您無法在日誌設定中提供 AWS KMS 金鑰來啟用日誌群組的 AWS KMS 加密。如需詳細資訊，請參閱《Amazon [ CloudWatch Logs 使用者指南》中的使用 加密 CloudWatch Logs AWS KMS](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/encrypt-log-data-kms.html)中的日誌資料。 *Amazon CloudWatch *

對於音訊日誌，您可以在 S3 儲存貯體上使用預設加密，或指定 AWS KMS 金鑰來加密音訊物件。即使您的 S3 儲存貯體使用預設加密，您仍然可以指定不同的 AWS KMS 金鑰來加密音訊物件。如需詳細資訊，請參閱[《Amazon S3 Simple Storage Service 開發人員指南》中的適用於 S3 儲存貯體的 Amazon S3 預設加密](https://docs.aws.amazon.com/AmazonS3/latest/dev/bucket-encryption.html)。 **

如果您選擇加密音訊日誌，Amazon Lex 需要 AWS KMS 許可。您需要將其他政策連接至用於對話日誌的 IAM 角色。如果您在 S3 儲存貯體上使用預設加密，您的政策必須授予對該儲存貯體所設定 AWS KMS 金鑰的存取權。如果您在音訊日誌設定中指定 AWS KMS 金鑰，則必須授予該金鑰的存取權。

如果您未建立對話日誌的角色，請參閱[對話日誌的 IAM 政策](conversation-logs-policies.md)。

**使用 AWS KMS 金鑰來加密音訊日誌，以建立 IAM 政策**

1. 在稱為 **LexConversationLogsKMSPolicy.json** 的目前目錄中建立一個文件、將下列政策新增至其中，然後儲存它。

1. 在 中 AWS CLI，建立授予許可的 IAM 政策，以使用 AWS KMS 金鑰來加密音訊日誌。

   ```
   aws iam create-policy \
       --policy-name kms-policy-name \
       --policy-document file://LexConversationLogsKMSPolicy.json
   ```

1. 將此政策附加到您為對話日誌建立的角色。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::account-id:policy/kms-policy-name \
       --role-name role-name
   ```

# 在 Amazon CloudWatch Logs 中檢視文字日誌
<a name="conversation-logs-cw"></a>

Amazon Lex 會將對話的文字日誌儲存在 Amazon CloudWatch Logs 中。若要檢視日誌，您可以使用 CloudWatch Logs 主控台或 API。如需詳細資訊，請參閱《Amazon CloudWatch Logs 使用者指南》中的[使用篩選條件模式搜尋日誌資料](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/SearchDataFilterPattern.html)和 CloudWatch Logs Insights 查詢語法。 [CloudWatch ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/CWL_QuerySyntax.html) *Amazon CloudWatch *

**使用 Amazon Lex 主控台檢視日誌**

1. 開啟 Amazon Lex 主控台 https：//[https://console.aws.amazon.com/lex](https://console.aws.amazon.com/lex)。

1. 從清單中選擇一個機器人。

1. 選擇 **Settings (設定)** 標籤，然後從左側功能表中選擇 **Conversation logs (對話日誌)**。

1. 選擇**文字日誌**下方的連結，以在 CloudWatch 主控台中檢視別名的日誌。

您也可以使用 CloudWatch 主控台或 API 來檢視您的日誌項目。若要尋找日誌項目，請導覽至您針對別名設定的日誌群組。您可以在 Amazon Lex 主控台或使用 [GetBotAlias](API_GetBotAlias.md)操作找到日誌的日誌串流字首。

使用者表達用語的日誌項目位於多個日誌串流中。對話中的表達用語在其中一個日誌串流中具有指定前綴的項目。日誌串流中的項目包含下列資訊。

```
{
   "messageVersion": "1.0",
   "botName": "bot name",
   "botAlias": "bot alias",
   "botVersion": "bot version",
   "inputTranscript": "text used to process the request",
   "botResponse": "response from the bot",
   "intent": "matched intent",
   "nluIntentConfidence": "number",
   "slots": {
       "slot name": "slot value",
       "slot name": null,
       "slot name": "slot value"
       ...
   },
   "alternativeIntents": [
       {
           "name": "intent name",
           "nluIntentConfidence": "number",
           "slots": {
               "slot name": slot value,
               "slot name": null,
               "slot name": slot value
               ...
           }
       },
       {
           "name": "intent name",
           "nluIntentConfidence": number,
           "slots": {}
       }
   ],
   "developerOverride": "true" | "false",
   "missedUtterance": true | false,
   "inputDialogMode": "Text" | "Speech",
   "requestId": "request ID",
   "s3PathForAudio": "S3 path to audio file",
   "userId": "user ID",
   "sessionId": "session ID",
   "sentimentResponse": {
       "sentimentScore": "{Positive: number, Negative: number, Neutral: number, Mixed: number}",
       "sentimentLabel": "Positive" | "Negative" | "Neutral" | "Mixed"
   },
   "slotToElicit": "slot name",
   "dialogState": "ElicitIntent" | "ConfirmIntent" | "ElicitSlot" | "Fulfilled" | "ReadyForFulfillment" | "Failed",
   "responseCard": {
       "genericAttachments": [
           ...
       ],
       "contentType": "application/vnd.amazonaws.card.generic",
       "version": 1
    },
   "locale": "locale",
   "timestamp": "ISO 8601 UTC timestamp",
   "kendraResponse": {
      "totalNumberOfResults": number,
      "resultItems": [
          {
              "id": "query ID",
              "type": "DOCUMENT" | "QUESTION_ANSWER" | "ANSWER",
              "additionalAttributes": [
                  {
                     ...
                  }
              ],
              "documentId": "document ID",
              "documentTitle": {
                  "text": "title",
                  "highlights": null
              },
              "documentExcerpt": {
                  "text": "text",
                  "highlights": [
                      {
                          "beginOffset": number,
                          "endOffset": number,
                          "topAnswer": true | false
                      }
                  ]
              },
              "documentURI": "URI",
              "documentAttributes": []
          }  
      ],
      "facetResults": [],
      "sdkResponseMetadata": {
          "requestId": "request ID"
      },
      "sdkHttpMetadata": {
          "httpHeaders": {
              "Content-Length": "number",
              "Content-Type": "application/x-amz-json-1.1",
              "Date": "date and time",
              "x-amzn-RequestId": "request ID"
          },
          "httpStatusCode": 200
      },
      "queryId": "query ID"
   },
   "sessionAttributes": {
       "attribute name": "attribute value"
       ...
    },
   "requestAttributes": {
       "attribute name": "attribute value"
       ...
    }
}
```

日誌項目的內容取決於交易的結果以及機器人和請求的組態。
+ 若 `missedUtterance` 欄位是 `true`，則 `intent`、`slots` 和 `slotToElicit` 不會顯示在輸入中。
+ 如果音訊日誌已停用或 `inputDialogMode` 欄位是 `Text`，則 `s3PathForAudio` 欄位不會出現。
+ 只有在您為機器人定義回應卡片時，才會顯示 `responseCard` 欄位。
+ 只有在請求中指定了請求屬性時，才會顯示 `requestAttributes` 對映。
+ 只有在 `AMAZON.KendraSearchIntent`提出搜尋 Amazon Kendra 索引的請求時，才會出現 `kendraResponse` 欄位。
+ 在機器人的 Lambda 函數中指定替代意圖時， `developerOverride` 欄位為 true。
+ 只有在請求中指定了工作階段屬性時，才會顯示 `sessionAttributes` 映射。
+ 只有在您設定機器人傳回情緒值時，才會顯示 `sentimentResponse` 映射。

**注意**  
即使 `messageVersion` 中沒有對應的變更，輸入格式也可能變更。如果出現新欄位，您的程式碼不應擲出錯誤。

您必須設定角色和政策，才能讓 Amazon Lex 寫入 CloudWatch Logs。如需更多資訊，請參閱[對話日誌的 IAM 政策](conversation-logs-policies.md)。

# 在 Amazon S3 中存取音訊日誌
<a name="conversation-logs-s3"></a>

Amazon Lex 會將對話的音訊日誌存放在 S3 儲存貯體中。

**使用主控台存取音訊日誌**

1. 開啟 Amazon Lex 主控台 https：//[https://console.aws.amazon.com/lex](https://console.aws.amazon.com/lex)。

1. 從清單中選擇一個機器人。

1. 選擇 **Settings (設定)** 標籤，然後從左側功能表中選擇 **Conversation logs (對話日誌)**。

1. 選擇**音訊日誌**下方的連結，以在 Amazon S3 主控台中存取別名的日誌。

您也可以使用 Amazon S3 主控台或 API 來存取音訊日誌。您可以在 Amazon Lex 主控台或`GetBotAlias`操作回應的 `resourcePrefix` 欄位中看到音訊檔案的 S3 物件金鑰字首。

# 使用 CloudWatch 指標監控對話日誌狀態
<a name="conversation-logs-monitoring"></a>

使用 Amazon CloudWatch 監控對話日誌的交付指標。您可以在指標上設定警示，以便在記錄時注意到應該發生的問題。

Amazon Lex 在 `AWS/Lex` 命名空間中為對話日誌提供四個指標：
+ `ConversationLogsAudioDeliverySuccess`
+ `ConversationLogsAudioDeliveryFailure`
+ `ConversationLogsTextDeliverySuccess`
+ `ConversationLogsTextDeliveryFailure`

如需詳細資訊，請參閱[對話日誌的 CloudWatch 指標](monitoring-aws-lex-cloudwatch.md#cloudwatch-metrics-for-logging)。

成功指標顯示 Amazon Lex 已成功將您的音訊或文字日誌寫入其目的地。

失敗指標顯示 Amazon Lex 無法將音訊或文字日誌交付至指定的目的地。通常，這是組態錯誤。當您的失敗指標高於零時，請檢查下列情況：
+ 確定 Amazon Lex 是 IAM 角色的受信任實體。
+ 對於文字記錄，請確定 CloudWatch Logs 日誌群組存在。對於音訊記錄，確定 S3 儲存貯體存在。
+ 確定 Amazon Lex 用來存取 CloudWatch Logs 日誌群組或 S3 儲存貯體的 IAM 角色具有日誌群組或儲存貯體的寫入許可。
+ 請確定 S3 儲存貯體與 Amazon Lex 機器人位於相同的區域，且屬於您的帳戶。
+ 如果您使用 AWS KMS 金鑰進行 S3 加密，請確定沒有防止 Amazon Lex 使用您的金鑰的政策，並確保您提供的 IAM 角色具有必要的 AWS KMS 許可。如需詳細資訊，請參閱[對話日誌的 IAM 政策](conversation-logs-policies.md)。

# 使用 Amazon Lex API 管理工作階段
<a name="how-session-api"></a>

當使用者開始與您的機器人對話時，Amazon Lex 會建立*工作階段*。應用程式與 Amazon Lex 之間交換的資訊構成對話的工作階段狀態。您發出請求時，會以您指定的機器人名稱與使用者識別符組合識別此工作階段。如需使用者識別符的詳細資訊，請參閱 [PostContent](API_runtime_PostContent.md) 或 [PostText](API_runtime_PostText.md) 操作中的 `userId` 欄位。

工作階段操作的回應包括唯一的工作階段識別符。此識別符用以識別使用者的特定工作階段。您可以在測試時使用此識別符，或協助進行機器人的疑難排解。

您可以修改在應用程式與機器人之間傳送的工作階段。例如，您可以修改包含工作階段自訂資訊的工作階段屬性，也可以設定解釋下一個表達用語的對話方塊內容，來變更對話流程。

有兩種方式可以更新工作階段狀態。首先，使用 Lambda 函數搭配 `PostContent`或 `PostText`操作，該操作會在每次對話後呼叫。如需詳細資訊，請參閱[使用 Lambda 函數](using-lambda.md)。另一個是使用應用程式中的 Amazon Lex 執行期 API 來變更工作階段狀態。

Amazon Lex 執行時間 API 提供可讓您管理工作階段資訊以與機器人對話的操作。這些操作為 [PutSession](API_runtime_PutSession.md) 操作、[GetSession](API_runtime_GetSession.md) 操作及 [DeleteSession](API_runtime_DeleteSession.md) 操作。您使用這些操作取得您使用者的機器人工作階段資訊，並對狀態進行細微控制。

當您想要取得工作階段目前的狀態時，請使用 `GetSession` 操作。此操作會傳回工作階段目前的狀態，包括您使用者的對話方塊狀態、已設定的任何工作階段狀態，以及使用者最近三次互動之意圖的槽值。

此 `PutSession` 操作可讓您直接運用目前的工作階段狀態。您可以設定機器人接下來要執行的對話方塊類型。如此一來，您可以控制與機器人的對話流程。將對話方塊動作`type`欄位設定為 `Delegate`，讓 Amazon Lex 決定機器人的下一個動作。

您可以使用 `PutSession` 操作來建立包含機器人的新工作階段，並設定機器人開始時的意圖。您也可以使用 `PutSession` 操作，來將一種意圖變更成另一種意圖。建立工作階段或變更意圖時，您也可以設定工作階段狀態，例如槽值和工作階段屬性。完成新的意圖時，您可以選擇重新啟動先前的意圖。您可以使用 `GetSession`操作，從 Amazon Lex 取得先前意圖的對話方塊狀態，並使用此資訊來設定意圖的對話方塊狀態。

來自 `PutSession` 操作的回應包含如 `PostContent` 操作的相同資訊。正如您會對 `PostContent` 操作的回應一樣，您可以使用此項資訊向使用者提示下一筆資訊。

使用 `DeleteSession` 操作移除現有工作階段，並重新啟動新的工作階段。例如，當您正在測試機器人時，您可以使用 `DeleteSession` 操作從機器人移除測試工作階段。

工作階段操作會與您的履行 Lambda 函數搭配使用。例如，如果您的 Lambda 函數傳回 `Failed`做為履行狀態，您可以使用 `PutSession`操作，將對話方塊動作類型設定為 `close`，並將對話方塊動作類型設定為 `ReadyForFulfillment` `fulfillmentState`，以重試履行步驟。

以下是您可以使用工作階段操作進行的一些動作：
+ 讓機器人開始對話，而非等候使用者。
+ 在對話期間切換意圖。
+ 回到先前的意圖。
+ 在互動的過程中間開始或重新開始對話。
+ 驗證槽值並讓機器人針對無效的值重新提示。

以下進一步說明上述各個動作。

## 切換意圖
<a name="session-switch"></a>

您可以使用 `PutSession` 操作，來將一種意圖切換成另一種意圖。您也可以使用它切回上一個意圖。您可以使用 `PutSession` 操作來設定工作階段屬性或新意圖的槽值。
+ 呼叫 `PutSession` 操作。將意圖名稱設為新意圖的名稱，然後將對話方塊動作設為 `Delegate`。您也可以設定新意圖所需的任何槽值或工作階段屬性。
+ Amazon Lex 將使用新意圖開始與使用者的對話。

## 繼續先前的意圖
<a name="session-return"></a>

若要繼續先前的意圖，請使用 `GetSession` 操作來取得意圖的摘要，然後使用 `PutSession` 操作來將意圖設為其之前的對話方塊狀態。
+ 呼叫 `GetSession` 操作。來自操作的回應包括使用者所互動之最後三次意圖的對話方塊狀態摘要。
+ 使用意圖摘要的資訊呼叫 `PutSession` 操作。這將把在對話中同一處的先前意圖傳回給使用者。

在某些情況下，可能需要繼續您使用者與機器人的對話。例如，假設您已建立客服機器人。您的應用程式會判斷使用者是否需要與客服代表談話。與使用者交談後，客服代表可以連同收集到的資訊，將對話轉回機器人。

若要繼續工作階段，請使用與下列相似的步驟：
+ 您的應用程式會判斷使用者是否需要與客服代表交談。
+ 使用 `GetSession` 操作來取得意圖目前的對話方塊狀態。
+ 客服代表與使用者交談，並解決問題。
+ 使用 `PutSession` 操作來設定意圖的對話方塊狀態。這可能包括設定槽值、設定工作階段屬性或變更意圖。
+ 機器人繼續與使用者對話。

您可以使用 `PutSession` 操作 `checkpointLabel` 參數來標示意圖，以便於稍後可以找到意圖。例如，詢問客戶相關資訊的機器人可能會進入 `Waiting` 意圖，同時客戶蒐集資訊。機器人會為目前意圖建立檢查點標籤，然後啟動 `Waiting` 單元。客戶返回時，機器人可以使用檢查點標籤尋找上一個意圖並切換回來。

意圖必須存在於 `GetSession` 操作傳回的 `recentIntentSummaryView` 結構中。如果您在 `GetSession` 操作請求中指定檢查點標籤，則它最多會傳回包含該檢查點標籤的三個意圖。
+ 使用 `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` 欄位。

# 機器人部署選項
<a name="chatbot-service"></a>

目前，Amazon Lex 提供下列機器人部署選項：
+ [AWS Mobile SDK](https://aws.amazon.com/mobile/sdk/) – 您可以使用 AWS Mobile SDK 建置與 Amazon Lex 通訊的行動應用程式。 SDKs
+ Facebook Messenger – 您可以將 Facebook Messenger 頁面與 Amazon Lex 機器人整合，讓 Facebook 上的最終使用者可以與機器人通訊。在目前的實作中，這項整合僅支援文字輸入訊息。
+ Slack – 您可以將 Amazon Lex 機器人與 Slack 訊息應用程式整合。
+ Twilio – 您可以將 Amazon Lex 機器人與 Twilio Simple Messaging Service (SMS) 整合。

如需範例，請參閱 [部署 Amazon Lex 機器人](examples.md)。

# 內建意圖和槽類型
<a name="howitworks-builtins"></a>

為了更輕鬆地建立機器人，Amazon Lex 可讓您使用標準內建意圖和槽類型。

**Topics**
+ [內建意圖](howitworks-builtins-intents.md)
+ [內建槽類型](howitworks-builtins-slots.md)

# 內建意圖
<a name="howitworks-builtins-intents"></a>

對於常見動作，您可以使用標準內建意圖程式庫。若要從內建意圖建立意圖，請在主控台中選擇內建意圖，並為其指定新名稱。新意圖具有基本意圖的組態，例如範例表達用語。

您無法在目前的實作中執行以下操作：
+ 從基本意圖中新增或移除範例表達用語
+ 設定內建意圖的槽

**將內建意圖新增至機器人**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 選擇要新增內建意圖的機器人。

1. 在導覽窗格中，選擇 **Intents (意圖)** 旁邊的加號 (\$1)。

1. 針對 **Add intent (新增意圖)**，選擇 **Search existing intents (搜尋現有的意圖)**。

1. 在**搜尋意圖**方塊中，輸入要新增至機器人的內建意圖名稱。

1. 對於**複製內建意圖**，請為意圖命名，然後選擇**新增**。

1. 視需要為您的機器人設定意圖。

**Topics**
+ [AMAZON.CancelIntent](built-in-intent-cancel.md)
+ [AMAZON.FallbackIntent](built-in-intent-fallback.md)
+ [AMAZON.HelpIntent](built-in-intent-help.md)
+ [AMAZON.KendraSearchIntent](built-in-intent-kendra-search.md)
+ [AMAZON.PauseIntent](built-in-intent-pause.md)
+ [AMAZON.RepeatIntent](built-in-intent-repeat.md)
+ [AMAZON.ResumeIntent](built-in-intent-resume.md)
+ [AMAZON.StartOverIntent](built-in-intent-start-over.md)
+ [AMAZON.StopIntent](built-in-intent-stop.md)

**注意**  
對於英文 (US) (en-US) 地區設定，Amazon Lex 支援 Alexa 標準內建意圖的意圖。如需內建意圖清單，請參閱 [Alexa Skills Kit](https://developer.amazon.com/docs/custom-skills/standard-built-in-intents.html) 中的*標準內建意圖*。  
Amazon Lex 不支援下列意圖：  
`AMAZON.YesIntent`
`AMAZON.NoIntent` 
[Alexa Skills Kit](https://developer.amazon.com/docs/custom-skills/built-in-intent-library.html) 中 *內建意圖程式庫*內的意圖

# AMAZON.CancelIntent
<a name="built-in-intent-cancel"></a>

回應指出使用者想要取消目前互動的單字和片語。您的應用程式可以使用此意圖來移除槽類型值和其他屬性，然後再結束與使用者的互動。

常見表達用語：
+ 取消
+ 永不介意
+ 忘記它

# AMAZON.FallbackIntent
<a name="built-in-intent-fallback"></a>

當使用者對意圖的輸入不是機器人預期的輸入時，您可以設定 Amazon Lex 叫用*備用意圖*。例如，如果使用者輸入「我想要訂購 Candy」不符合`OrderFlowers`機器人中的意圖，Amazon Lex 會叫用備用意圖來處理回應。

透過將內建 `AMAZON.FallbackIntent` 意圖類型新增到機器人來新增備用意圖。您可以使用 [PutBot](API_PutBot.md) 操作，或從主控台的內建意圖清單中選擇意圖以指定意圖。

呼叫備用意圖需要兩個步驟。在第一個步驟中，備用意圖係根據使用者的輸入進行比對。當備用意圖相符時，機器人的行為方式則取決於為提示設定的重試次數。例如，如果嘗試判斷意圖的最大次數是 2，則機器人會在呼叫備用意圖之前，傳回機器人的釐清提示兩次。

Amazon Lex 在這些情況下符合備用意圖：
+ 使用者對意圖的輸入不符合機器人預期的輸入
+ 音訊輸入為雜訊，或文字輸入無法辨識為文字。
+ 使用者的輸入不明確，Amazon Lex 無法判斷要叫用的意圖。

以下情況會叫用備用意圖：
+ 在對話開始時、嘗試釐清的設定次數之後，機器人不會將使用者輸入識別為意圖。
+ 在設定的嘗試次數之後，意圖不會將使用者輸入識別為槽值。
+ 在設定的嘗試次數之後，意圖不會將使用者輸入視為確認提示的回應。

您可以搭配備用意圖使用下列項目：
+ 履行 Lambda 函數
+ 一條結論陳述
+ 一條後續追蹤提示

您無法將以下內容新增至備用意圖：
+ 表達用語
+ 槽
+ 初始化和驗證 Lambda 函數 
+ 一條確認提示

如果您已為機器人設定取消陳述式和備用意圖，Amazon Lex 會使用備用意圖。如果您需要機器人具有取消陳述式，您可以使用履行函數進行備用意圖，以提供與取消陳述式相同的行為。如需詳細資訊，請參閱 [PutBot](API_PutBot.md) 操作的 `abortStatement` 參數。

## 使用釐清提示
<a name="fallback-clarification"></a>

如果您向機器人提供釐清提示，則該提示將用於向使用者請求有效的意圖。釐清提示會依您設定的次數進行重複。在此之後才會呼叫備用意圖。

如果您在建立機器人時未設定釐清提示，且使用者未以有效意圖開始對話，Amazon Lex 會立即呼叫您的備用意圖 。

當您在沒有釐清提示的情況下使用備用意圖時，Amazon Lex 不會在這些情況下呼叫備用：
+ 在使用者回應後續提示，但不提供意圖時。例如，為了回應表示「您今天是否想要其他項目？」的後續提示，使用者表示「是」。Amazon Lex 傳回 400 錯誤的請求例外狀況，因為它沒有要傳送給使用者的釐清提示以取得意圖。
+ 使用 AWS Lambda 函數時，您會傳回`ElicitIntent`對話方塊類型。由於 Amazon Lex 沒有向使用者取得意圖的釐清提示，因此會傳回 400 錯誤的請求例外狀況。
+ 在使用 `PutSession` 操作時，您會傳送 `ElicitIntent` 對話方塊類型。由於 Amazon Lex 沒有向使用者取得意圖的釐清提示，因此會傳回 400 錯誤的請求例外狀況。

## 使用 Lambda 函數搭配備用意圖
<a name="invoke-fallback"></a>

在呼叫備用意圖時，其回應取決於對 [PutIntent](API_PutIntent.md) 操作的 `fulfillmentActivity` 參數設定。機器人會執行下列其中一項操作：
+ 將意圖資訊傳回給用戶端應用程式。
+ 呼叫履行 Lambda 函數。它會使用為工作階段設定的工作階段變數來呼叫函數。

如需在呼叫備用意圖時設定回應的詳細資訊，請參閱 [PutIntent](API_PutIntent.md) 操作的 `fulfillmentActivity` 參數。

如果您在備用意圖中使用履行 Lambda 函數，您可以使用此函數來呼叫另一個意圖，或與使用者執行某種形式的通訊，例如收集回呼號碼，或與客戶服務代表開啟工作階段。

您可以在備用意圖 Lambda 函數中執行任何動作，您可以在履行函數中針對任何其他意圖執行這些動作。如需使用 建立履行函數的詳細資訊 AWS Lambda，請參閱 [使用 Lambda 函數](using-lambda.md)。

您可以在相同工作階段中多次叫用備用意圖。例如，假設您的 Lambda 函數使用 `ElicitIntent` 對話方塊動作來提示使用者使用不同的意圖。如果 Amazon Lex 無法在設定的嘗試次數之後推斷使用者的意圖，則會再次叫用備用意圖。當使用者在設定的嘗試次數之後仍未回應有效的槽值，它也會叫用備用意圖。

您可以設定 Lambda 函數，以追蹤使用工作階段變數呼叫備用意圖的次數。如果呼叫 Lambda 函數的次數超過您在 Lambda 函數中設定的閾值，您的 Lambda 函數可以採取不同的動作。如需工作階段變數的詳細資訊，請參閱 [設定工作階段屬性](context-mgmt-session-attribs.md)。

# AMAZON.HelpIntent
<a name="built-in-intent-help"></a>

回應指出使用者在與機器人互動時需要幫助的單字或片語。調用此意圖時，您可以設定 Lambda 函數或應用程式，以提供機器人功能的相關資訊、詢問有關協助領域的後續問題，或將互動交給人力客服人員。

常見表達用語：
+ 說明
+ 協助我
+ 您可以協助我

# AMAZON.KendraSearchIntent
<a name="built-in-intent-kendra-search"></a>

若要搜尋您已使用 Amazon Kendra 編製索引的文件，請使用 `AMAZON.KendraSearchIntent`意圖。當 Amazon Lex 無法判斷與使用者對話中的下一個動作時，它會觸發搜尋意圖。

`AMAZON.KendraSearchIntent` 僅適用於英文 (US) (en-US) 地區設定和美國東部 （維吉尼亞北部）、美國西部 （奧勒岡） 和歐洲 （愛爾蘭） 區域。

Amazon Kendra 是以machine-learning-based搜尋服務，可將 PDF 文件或 Microsoft Word 檔案等自然語言文件編製索引。它可以搜尋已編製索引的文件，並傳回下列類型的問題回覆：
+ 解答 
+ 可能回答問題的常見問題項目
+ 與問題相關的文件

如需使用 `AMAZON.KendraSearchIntent` 的範例，請參閱[範例：為 Amazon Kendra 索引建立常見問答集機器人](faq-bot-kendra-search.md)。

如果您為機器人設定`AMAZON.KendraSearchIntent`意圖，Amazon Lex 會在無法判斷槽或意圖的使用者表達用語時呼叫意圖。例如，如果您的機器人針對名為「比薩填入」的槽類型發出回應，而使用者說「什麼是比薩？」，Amazon Lex 會呼叫 `AMAZON.KendraSearchIntent` 來處理問題。如果 Amazon Kendra 沒有回應，則對話會繼續如機器人中所設定。

當您在相同的機器人`AMAZON.FallbackIntent`中同時使用 `AMAZON.KendraSearchIntent`和 時，Amazon Lex 會使用意圖，如下所示：

1. Amazon Lex 會呼叫 `AMAZON.KendraSearchIntent`。意圖會呼叫 Amazon Kendra `Query`操作。

1. 如果 Amazon Kendra 傳回回應，Amazon Lex 會將結果顯示給使用者。

1. 如果 Amazon Kendra 沒有回應，Amazon Lex 會重新提示使用者。下一個動作取決於來自使用者的回應。
   + 如果使用者的回應包含 Amazon Lex 辨識的表達用語，例如填入槽值或確認意圖，則與使用者的對話會依照機器人的設定繼續進行。
   + 如果使用者的回應不包含 Amazon Lex 辨識的表達用語，Amazon Lex 會再次呼叫 `Query`操作。

1. 如果在設定的重試次數之後沒有回應，Amazon Lex 會呼叫 `AMAZON.FallbackIntent`並結束與使用者的對話。

有三種方式可以使用 `AMAZON.KendraSearchIntent` 向 Amazon Kendra 提出請求：
+ 讓搜尋意圖為您提出請求。Amazon Lex 以使用者的表達用語做為搜尋字串呼叫 Amazon Kendra。建立意圖時，您可以定義查詢篩選條件字串，以限制 Amazon Kendra 傳回的回應數目。Amazon Lex 會在查詢請求中使用篩選條件。
+ 將其他查詢參數新增至請求，以使用對話方塊 Lambda 函數縮小搜尋結果範圍。您可以將包含 Amazon Kendra 查詢參數`kendraQueryFilterString`的欄位新增至`delegate`對話方塊動作。當您使用 Lambda 函數將查詢參數新增至請求時，它們優先於您在建立意圖時定義的查詢篩選條件。
+ 使用對話方塊 Lambda 函數建立新的查詢。您可以建立 Amazon Lex 傳送的完整 Amazon Kendra 查詢請求。您可以在 `delegate` 對話方塊動作的 `kendraQueryRequestPayload` 欄位中指定查詢。`kendraQueryRequestPayload` 欄位的優先順序高於 `kendraQueryFilterString` 欄位。

若要在建立機器人時指定 `queryFilterString` 參數，或在對話方塊 Lambda 函數中呼叫`delegate`動作時指定 `kendraQueryFilterString` 欄位，您可以指定字串，做為 Amazon Kendra 查詢的屬性篩選條件。如果字串不是有效的屬性篩選條件，則您會在執行時間取得 `InvalidBotConfigException` 例外狀況。如需屬性篩選條件的詳細資訊，請參閱《*Amazon Kendra 開發人員指南*》中的[使用文件屬性篩選查詢](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)。

若要控制 Amazon Lex 傳送給 Amazon Kendra 的查詢，您可以在對話方塊 Lambda 函數的 `kendraQueryRequestPayload`欄位中指定查詢。如果查詢無效，Amazon Lex 會傳回`InvalidLambdaResponseException`例外狀況。如需詳細資訊，請參閱《*Amazon Kendra 開發人員指南*》中的[查詢操作](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html)。

如需使用 `AMAZON.KendraSearchIntent` 的範例，請參閱[範例：為 Amazon Kendra 索引建立常見問答集機器人](faq-bot-kendra-search.md)。

## Amazon Kendra 搜尋的 IAM 政策
<a name="kendra-search-iam"></a>

若要使用`AMAZON.KendraSearchIntent`意圖，您必須使用提供 AWS Identity and Access Management (IAM) 政策的角色，讓 Amazon Lex 擔任具有呼叫 Amazon Kendra `Query`意圖許可的執行期角色。您使用的 IAM 設定取決於您使用 Amazon Lex `AMAZON.KendraSearchIntent` 主控台或使用 AWS 開發套件或 AWS Command Line Interface () 建立AWS CLI。使用主控台時，您可以選擇將呼叫 Amazon Kendra 的許可新增至 Amazon Lex 服務連結角色，或使用專門用於呼叫 Amazon Kendra `Query`操作的角色。當您使用 AWS CLI 或 開發套件建立意圖時，您必須特別使用角色來呼叫 `Query`操作。

### 連接許可
<a name="kendra-iam-attach"></a>

您可以使用 主控台將存取 Amazon Kendra `Query`操作的許可連接到預設的 Amazon Lex 服務連結角色。當您將許可連接到服務連結角色時，您不需要特別建立和管理執行期角色，即可連線到 Amazon Kendra 索引。

您用來存取 Amazon Lex 主控台的使用者、角色或群組必須具有管理角色政策的許可。將下列 IAM 政策連接至主控台存取角色。當您授與這些許可時，角色具有變更現有的服務連結角色政策的許可。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "iam:AttachRolePolicy",
                "iam:PutRolePolicy",
                "iam:GetRolePolicy"
            ],
            "Resource": "arn:aws:iam::*:role/aws-service-role/lex.amazonaws.com/AWSServiceRoleForLexBots"
        },
        {
            "Effect": "Allow",
            "Action": "iam:ListRoles",
            "Resource": "*"
        }
    ]
}
```

------

### 指定角色
<a name="kendra-iam-role"></a>

您可以使用 主控台 AWS CLI、 或 API，指定呼叫 Amazon Kendra `Query`操作時要使用的執行時間角色。

您用來指定執行期角色的使用者、角色或群組必須具有 `iam:PassRole`許可。下列政策會定義許可。您可以使用 `iam:AssociatedResourceArn` 和 `iam:PassedToService` 條件內容鍵來進一步限制許可的範圍。如需詳細資訊，請參閱[《 使用者指南》中的 IAM 和 AWS STS 條件內容金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_iam-condition-keys.html)。 *AWS Identity and Access Management *

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:PassRole",
            "Resource": "arn:aws:iam::111122223333:role/role"
        }
    ]
}
```

------

Amazon Lex 呼叫 Amazon Kendra 所需的執行時間角色必須具有 `kendra:Query`許可。當您將現有的 IAM 角色用於呼叫 Amazon Kendra `Query`操作的許可時，該角色必須連接下列政策。

您可以使用 IAM 主控台、IAM API 或 AWS CLI 來建立政策，並將其連接至角色。這些指示會使用 AWS CLI 來建立角色和政策。

**注意**  
下列程式碼是針對 Linux 和 MacOS 格式化的。若為 Windows，請將接續字元 (\$1) 取代為插入符號 (^)。

**將查詢操作許可新增至角色**

1. 在目前目錄中建立一個稱為 **KendraQueryPolicy.json** 的文件、將下列程式碼新增至其中，然後儲存它

1. 在 中 AWS CLI，執行下列命令來建立執行 Amazon Kendra `Query`操作的 IAM 政策。

   ```
   aws iam create-policy \
       --policy-name query-policy-name \
       --policy-document file://KendraQueryPolicy.json
   ```

1. 將政策連接至您用來呼叫 `Query`操作的 IAM 角色。

   ```
   aws iam attach-role-policy \
       --policy-arn arn:aws:iam::account-id:policy/query-policy-name
       --role-name role-name
   ```

您可以選擇更新 Amazon Lex 服務連結角色，或使用您在`AMAZON.KendraSearchIntent`為機器人建立 時建立的角色。下列程序說明如何選擇要使用的 IAM 角色。

**指定 AMAZON.KendraSearchIntent 的執行時間角色。**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 選擇您要新增 `AMAZON.KendraSearchIntent` 的機器人。

1. 選擇 **Intents (意圖)** 旁邊的加號 (\$1)。

1. 在 **Add intent (新增意圖)** 中，選擇 **Search existing intents (搜尋現有的意圖)**。

1. 在 **Search intents (搜尋意圖)** 中，輸入 **AMAZON.KendraSearchIntent** 然後選擇 **Add (新增)**。

1. 在 **Copy built-in intent (複製內建意圖)** 中，輸入意圖的名稱，例如 **KendraSearchIntent**，然後選擇 **Add (新增)**。

1. 開啟 **Amazon Kendra query (Amazon Kendra 查詢)** 部分。

1. 在 **IAM role (IAM 角色)** 下，選擇以下其中一個選項：
   + 若要更新 Amazon Lex 服務連結角色，讓機器人查詢 Amazon Kendra 索引，請選擇**新增 Amazon Kendra 許可**。
   + 若要使用具有呼叫 Amazon Kendra `Query`操作許可的角色，請選擇**使用現有角色**。

## 使用請求和工作階段屬性作為篩選條件
<a name="kendra-search-filter"></a>

若要篩選 Amazon Kendra 對目前對話相關項目的回應，請在建立機器人時新增 `queryFilterString` 參數，以使用工作階段和請求屬性做為篩選條件。您可以在建立意圖時指定屬性的預留位置，然後 Amazon Lex V2 會在呼叫 Amazon Kendra 之前取代值。如需請求屬性的詳細資訊，請參閱[設定請求屬性](context-mgmt-request-attribs.md)。如需工作階段屬性的詳細資訊，請參閱 [設定工作階段屬性](context-mgmt-session-attribs.md)。

以下是使用字串篩選 Amazon Kendra 查詢的`queryFilterString`參數範例。

```
"{"equalsTo": {"key": "City", "value": {"stringValue": "Seattle"}}}"
```

以下是 參數的範例，該`queryFilterString`參數使用名為 的工作階段屬性`"SourceURI"`來篩選 Amazon Kendra 查詢。

```
"{"equalsTo": {"key": "SourceURI","value": {"stringValue": "[FileURL]"}}}"
```

以下是 參數的範例，該`queryFilterString`參數使用名為 的請求屬性`"DepartmentName"`來篩選 Amazon Kendra 查詢。

```
"{"equalsTo": {"key": "Department","value": {"stringValue": "((DepartmentName))"}}}"
```

`AMAZON.KendraSearchInteng` 篩選條件使用與 Amazon Kendra 搜尋篩選條件相同的格式。如需詳細資訊，請參閱《*Amazon Kendra 開發人員指南*》中的[使用文件屬性篩選搜尋結果](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)。

搭配 使用的查詢篩選條件字串`AMAZON.KendraSearchIntent`，必須針對每個篩選條件的第一個字母使用小寫字母。例如，以下是 的有效查詢篩選條件`AMAZON.KendraSearchIntent`。

```
{
    "andAllFilters": [
        {
            "equalsTo": {
                "key": "City",
                "value": {
                    "stringValue": "Seattle"
                }
            }
        },
        {
            "equalsTo": {
                "key": "State",
                "value": {
                    "stringValue": "Washington"
                }
            }
        }
    ]
}
```

## 使用搜尋回應
<a name="kendra-search-response"></a>

Amazon Kendra 傳回對意圖`conclusion`陳述式中搜尋的回應。除非履行 Lambda 函數產生結論訊息，否則意圖必須具有`conclusion`陳述式。

Amazon Kendra 有四種類型的回應。
+ `x-amz-lex:kendra-search-response-question_answer-question-<N>` – 來自符合搜尋之常見問答集的問題。
+ `x-amz-lex:kendra-search-response-question_answer-answer-<N>` – 符合搜尋之常見問答集的答案。
+ `x-amz-lex:kendra-search-response-document-<N>` – 索引中與表達用語文字相關的文件摘錄。
+ `x-amz-lex:kendra-search-response-document-link-<N>` – 索引中與表達用語文字相關的文件 URL。
+ `x-amz-lex:kendra-search-response-answer-<N>` – 來自索引中回答問題之文件的摘錄。

回應會以 `request` 屬性傳回。每個屬性最多可有五個回應，編號為 1 到 5。如需回應的詳細資訊，請參閱《*Amazon Kendra 開發人員指南*》中的[回應類型](https://docs.aws.amazon.com/kendra/latest/dg/response-types.html)。

`conclusion` 陳述式必須有一或多個訊息群組。每個訊息群組都包含一或多個訊息。每個訊息都可以包含一或多個預留位置變數，這些變數由 Amazon Kendra 回應中的請求屬性取代。訊息群組中必須至少有一個訊息，而訊息中的所有變數都會由執行時間回應中的請求屬性值取代，或是群組中必須具有無預留位置變數的訊息。請求屬性會以雙括號 ("((" "))") 括起來。下列訊息群組訊息符合 Amazon Kendra 的任何回應：
+ 「我為您找到了一個常見問題項目：((x-amz-lex:kendra-search-response-question\$1answer-question-1)), and the answer is ((x-amz-lex:kendra-search-response-question\$1answer-answer-1))」
+ 「我找到了一份有用文件的摘錄：((x-amz-lex:kendra-search-response-document-1))」
+ 「我認為您的問題的答案是 ((x-amz-lex:kendra-search-response-answer-1))」

## 使用 Lambda 函數管理請求和回應
<a name="kendra-search-lambda"></a>

`AMAZON.KendraSearchIntent` 意圖可以使用您的對話方塊程式碼掛勾和履行程式碼掛勾來管理對 Amazon Kendra 的請求和回應。當您想要修改傳送至 Amazon Kendra 的查詢時，請使用對話方塊程式碼掛鉤 Lambda 函數，而當您想要修改回應時，請使用履行程式碼掛鉤 Lambda 函數。

### 使用對話方塊程式碼掛勾建立查詢
<a name="kendra-search-lambda-dialog"></a>

您可以使用對話方塊程式碼掛勾來建立要傳送至 Amazon Kendra 的查詢。使用對話方塊程式碼掛勾是選用的。如果您未指定對話方塊程式碼掛勾，Amazon Lex 會從使用者表達用語建構查詢，並在您提供意圖時`queryFilterString`，使用您在設定意圖時提供的 。

您可以使用對話方塊程式碼掛接回應中的兩個欄位來修改對 Amazon Kendra 的請求：
+ `kendraQueryFilterString` – 使用此字串來指定 Amazon Kendra 請求的屬性篩選條件。您可以使用索引中定義的任何索引欄位來篩選查詢。如需篩選條件字串的結構，請參閱《*Amazon Kendra 開發人員指南*》中的[使用文件屬性來篩選查詢](https://docs.aws.amazon.com/kendra/latest/dg/filtering.html#search-filtering)。如果指定的篩選字串無效，您會取得 `InvalidLambdaResponseException` 例外狀況。`kendraQueryFilterString` 字串會覆寫為意圖所設定的 `queryFilterString` 中指定的任何查詢字串。
+ `kendraQueryRequestPayload` – 使用此字串來指定 Amazon Kendra 查詢。您的查詢可以使用 Amazon Kendra 的任何功能。如果您沒有指定有效的查詢，您會取得 `InvalidLambdaResponseException` 例外狀況。如需詳細資訊，請參閱《*Amazon Kendra 開發人員指南*》中的[查詢](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html)。

建立篩選條件或查詢字串之後，您會將回應傳送至 Amazon Lex，並將回應的 `dialogAction` 欄位設定為 `delegate`。Amazon Lex 會將查詢傳送至 Amazon Kendra，然後將查詢回應傳回至履行程式碼掛勾。

### 針對回應使用履行程式碼掛勾
<a name="kendra-search-lambda-fulfillment"></a>

Amazon Lex 將查詢傳送至 Amazon Kendra 之後，查詢回應會傳回至`AMAZON.KendraSearchIntent`履行 Lambda 函數。程式碼掛鉤的輸入事件包含來自 Amazon Kendra 的完整回應。查詢資料與 Amazon Kendra `Query`操作傳回的查詢資料位於相同的結構中。如需詳細資訊，請參閱《*Amazon Kendra 開發人員指南*》中的[查詢回應語法](https://docs.aws.amazon.com/kendra/latest/dg/API_Query.html#API_Query_ResponseSyntax)。

履行程式碼掛勾是選用的。如果不存在，或程式碼掛鉤未傳回回應中的訊息，Amazon Lex 會使用 `conclusion`陳述式進行回應。

# 範例：為 Amazon Kendra 索引建立常見問答集機器人
<a name="faq-bot-kendra-search"></a>

此範例會建立使用 Amazon Kendra 索引的 Amazon Lex 機器人，以提供使用者問題的答案。常見問題機器人會管理使用者的對話方塊。它使用 `AMAZON.KendraSearchIntent` 意圖來查詢索引，並向使用者呈現回應。若要建立機器人，您需：

1. 建立機器人，讓您的客戶與其互動以從機器人取得答案。

1. 建立自訂意圖。您的機器人需要至少一個意圖，此意圖具有至少一個表達用語。此意圖讓您的機器人可以建置，但不會用於其他用途。

1. 將`KendraSearchIntent`意圖新增至您的機器人，並將其設定為使用 Amazon Kendra 索引。

1. 透過詢問存放在 Amazon Kendra 索引中的文件所回答的問題來測試機器人。

您必須先建立 Amazon Kendra 索引，才能使用此範例。如需詳細資訊，請參閱《*Amazon Kendra 開發人員指南*》中的 [ S3 儲存貯體 （主控台） 入門](https://docs.aws.amazon.com/kendra/latest/dg/gs-console.html)。

**建立常見問題機器人**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 在導覽窗格中，選擇 **Bots (機器人)**。

1. 選擇**建立**。

1. 選擇 **Custom bot (自訂機器人)**。設定機器人，如下所示：
   + **機器人名稱** – 為機器人命名，指出其用途，例如 **KendraTestBot**。
   + **輸出語音** – 選擇**無**。
   + **工作階段逾時** – 輸入 **5**。
   + **情緒分析** – 選擇**否**。
   + **COPPA** – 選擇**否**。
   + **使用者表達用語儲存** – 選擇**不儲存**。

1. 選擇**建立**。

若要成功建置機器人，您必須至少建立一個意圖，此意圖具有至少一個範例表達用語。建置 Amazon Lex 機器人時需要此意圖，但不會用於常見問答集回應。意圖的表達用語不得套用至您的客戶所提出的任何問題。

**建立必要的意圖**

1. 在 **Getting started with your bot (開始使用您的機器人)** 頁面上，選擇 **Create intent (建立意圖)**。

1. 針對 **Add intent (新增意圖)**，選擇 **Create intent (建立意圖)**。

1. 在 **Create intent (建立意圖)** 對話方塊中，指定意圖名稱，例如 **RequiredIntent**。

1. 在 **Sample utterances (範例表達用語)** 中，輸入表達用語，例如 **Required utterance**。

1. 選擇**儲存意圖**。

現在，建立意圖來搜尋 Amazon Kendra 索引及其應傳回的回應訊息。

**建立 AMAZON.KendraSearchIntent 意圖和回應訊息**

1. 在導覽窗格中，選擇 **Intents (意圖)** 旁邊的加號 (\$1)。

1. 針對 **Add intent (新增意圖)**，選擇 **Search existing intents (搜尋現有的意圖)**。

1. 在**搜尋意圖**方塊中，輸入 **AMAZON.KendraSearchIntent**，然後從清單中選擇它。

1. 對於 **Copy built-in intent (複製內建意圖)**，提供意圖的名稱，例如 **KendraSearchIntent**，然後選擇 **Add (新增)**。

1. 在意圖編輯器中，選擇 **Amazon Kendra query (Amazon Kendra 查詢)** 以開啟查詢選項。

1. 從 **Amazon Kendra index (Amazon Kendra 索引)** 功能表中，選擇您想要搜尋意圖的索引。

1. 在 **Response (回應)** 區段中，新增下列三則訊息：

   ```
   I found a FAQ question for you: ((x-amz-lex:kendra-search-response-question_answer-question-1)) and the answer is ((x-amz-lex:kendra-search-response-question_answer-answer-1)).
   I found an excerpt from a helpful document: ((x-amz-lex:kendra-search-response-document-1)).
   I think the answer to your questions is ((x-amz-lex:kendra-search-response-answer-1)).
   ```

1. 選擇 **Save intent (儲存意圖)**，然後選擇 **Build (建置)** 以建置機器人。

最後，使用主控台測試視窗來測試您的機器人的回應。您的問題應該位於索引支援的網域中。

**測試您的常見問題機器人**

1. 在主控台測試視窗中，輸入索引的問題。

1. 驗證測試視窗回應部分中的答案。

1. 若要重設其他問題的測試視窗，請選擇 **Clear chat history (清除聊天歷史記錄)**。

# AMAZON.PauseIntent
<a name="built-in-intent-pause"></a>

回應單字和片語，讓使用者暫停與機器人的互動，以便稍後可以返回。您的 Lambda 函數或應用程式需要在工作階段變數中儲存意圖資料，或者您需要在繼續目前意圖時使用 [GetSession](API_runtime_GetSession.md)操作來擷取意圖資料。

常見表達用語：
+ 暫停
+ 暫停

# AMAZON.RepeatIntent
<a name="built-in-intent-repeat"></a>

回應可讓使用者重複上一個訊息的單字和片語。您的應用程式需要使用 Lambda 函數將先前的意圖資訊儲存在工作階段變數中，或者您需要使用 [GetSession](API_runtime_GetSession.md)操作來取得先前的意圖資訊。

常見表達用語：
+ 重複
+ 再說一次
+ 重複

# AMAZON.ResumeIntent
<a name="built-in-intent-resume"></a>

回應單字和片語可讓使用者繼續先前暫停的意圖。您的 Lambda 函數或應用程式必須管理恢復先前意圖所需的資訊。

常見表達用語：
+ 繼續
+ 繼續
+ 繼續

# AMAZON.StartOverIntent
<a name="built-in-intent-start-over"></a>

回應讓使用者停止處理目前意圖並從頭開始的單字和片語。您可以使用 Lambda 函數或 `PutSession`操作再次引出第一個槽值。

常見表達用語：
+ 重新開始
+ 重新啟動
+ 再次啟動

# AMAZON.StopIntent
<a name="built-in-intent-stop"></a>

回應指出使用者想要停止處理目前意圖並結束與機器人互動的單字和片語。您的 Lambda 函數或應用程式應該清除任何現有的屬性和槽類型值，然後結束互動。

常見表達用語：
+ stop
+ off
+ 關閉

# 內建槽類型
<a name="howitworks-builtins-slots"></a>

Amazon Lex 支援內建槽類型，可定義如何辨識和處理槽中的資料。您可以在意圖中建立這些槽類型。如此您就無須為常用的槽資料 (例如日期、時間和位置) 建立列舉值。內建槽類型並沒有版本。


| 槽類型 | 簡短描述 | 支援的地區設定 | 
| --- | --- | --- | 
| [AMAZON.Airport](built-in-slot-airport.md) | 辨識代表機場的單字。 | 所有地區設定 | 
| [AMAZON.AlphaNumeric](built-in-slot-alphanumeric.md) | 辨識由字母和數字組成的字詞。 | 韓文以外的所有地區設定 (ko-KR) | 
| [AMAZON.City](built-in-slot-city.md) | 辨識代表城市的單字。 | 所有地區設定 | 
| [AMAZON.Country](built-in-slot-country.md) | 識別代表國家/地區的單字。 | 所有地區設定 | 
| [AMAZON.DATE](built-in-slot-date.md) | 識別代表日期的單字，並將其轉換為標準格式。 | 所有地區設定 | 
| [AMAZON.DURATION](built-in-slot-duration.md) | 識別代表持續時間的單字，並將其轉換為標準格式。 | 所有地區設定 | 
| [AMAZON.EmailAddress](built-in-slot-email.md) | 識別代表電子郵件地址的單字，並將其轉換為標準電子郵件地址。 | 所有地區設定 | 
| [AMAZON.FirstName](built-in-slot-first-name.md) | 辨識代表名字的單字。 | 所有地區設定 | 
| [AMAZON.LastName](built-in-slot-last-name.md) | 識別代表姓氏的單字。 | 所有地區設定 | 
| [AMAZON.NUMBER](built-in-slot-number.md) | 識別數字單字並將其轉換為數字。 | 所有地區設定 | 
| [AMAZON.Percentage](built-in-slot-percent.md) | 識別代表百分比的單字，並將其轉換為數字和百分比符號 (%)。 | 所有地區設定 | 
| [AMAZON.PhoneNumber](built-in-slot-phone.md) | 識別代表電話號碼的單字，並將其轉換為數字字串。 | 所有地區設定 | 
| [AMAZON.SpeedUnit](built-in-slot-speed.md) | 識別代表速度單位的單字，並將其轉換為標準縮寫。 | 英文 (美國) (en-US) | 
| [AMAZON.State](built-in-slot-state.md) | 識別代表狀態的單字。 | 所有地區設定 | 
| [AMAZON.StreetName](built-in-slot-street-name.md) | 識別代表街道名稱的單字。 | 除了英文 (US) (en-US) 之外的所有地區設定 | 
| [AMAZON.TIME](built-in-slot-time.md) | 辨識指出時間的單字，並將其轉換為時間格式。 | 所有地區設定 | 
| [AMAZON.WeightUnit](built-in-slot-weight.md) | 識別代表權重單位的單字，並將其轉換為標準縮寫  | 英文 (美國) (en-US) | 

**注意**  
對於英文 (US) (en-US) 地區設定，Amazon Lex 支援 Alexa 技能套件中的槽類型。如需可用的內建槽類型清單，請參閱 Alexa Skills Kit 文件中的[槽類型參考](https://developer.amazon.com/docs/custom-skills/slot-type-reference.html)。  
Amazon Lex 不支援 `AMAZON.LITERAL`或`AMAZON.SearchQuery`內建插槽類型。

# AMAZON.Airport
<a name="built-in-slot-airport"></a>

提供機場清單。範例包括：
+ 約翰甘乃迪納國際機場
+ 墨爾本機場

# AMAZON.AlphaNumeric
<a name="built-in-slot-alphanumeric"></a>

辨識由字母和數字組成的字串，例如 **APQ123**。

此槽類型不適用於韓文 (ko-KR) 地區設定。

您可以為包含下列項目的字串使用 `AMAZON.AlphaNumeric` 槽類型：
+ 字母字元，例如 **ABC**
+ 數值字元，例如 **123**
+ 英數字元的組合，例如 **ABC123**

您可將規則表達式新增至 `AMAZON.AlphaNumeric` 槽類型，以驗證為該槽輸入的值。例如，您可以使用規則表達式來驗證：
+ 英國或加拿大郵遞區號
+ 駕照號碼
+ 車輛識別碼

使用標準規則表達式。Amazon Lex 在規則表達式中支援下列字元：
+ A-Z、a-z
+ 0-9

Amazon Lex 也支援規則表達式中的 Unicode 字元。格式為 `\uUnicode`。使用四位數代表 Unicode 字元。例如，`[\u0041-\u005A]` 等同於 [A-Z]。

不支援下列規則運算式：
+ 無限的重複項：\$1、\$1 或 \$1x,\$1，沒有上限。
+ 萬用字元 (.)

規則表達式的長度上限為 300 個字元。使用規則表達式存放在 AMAZON.AlphaNumeric 槽類型中的字串最大長度為 30 個字元。

以下是一些規則表達式的範例。
+ 英數字串，例如 **APQ123** 或 **APQ1**：`[A-Z]{3}[0-9]{1,3}` 或限制更多的 `[A-DP-T]{3} [1-5]{1,3}`
+ 「美國郵政服務國際優先郵件」格式，例如 **CP123456789US**：`CP[0-9]{9}US`
+ 銀行匯款路線號碼，例如 **123456789**：`[0-9]{9}`

若要為槽類型設定規則表達式，請使用主控台或 [PutSlotType](API_PutSlotType.md) 操作。當您儲存槽類型時，會驗證規則表達式。如果表達式無效，Amazon Lex 會傳回錯誤訊息。

當您在槽類型中使用規則表達式時，Amazon Lex 會根據規則表達式檢查該類型的槽輸入。如果輸入與表達式相符，則會針對該槽接受值。如果輸入不相符，Amazon Lex 會提示使用者重複輸入。

# AMAZON.City
<a name="built-in-slot-city"></a>

提供當地和世界城市的清單。插槽類型可識別城市名稱的常見變化。Amazon Lex 不會從變異轉換為正式名稱。

範例：
+ 紐約
+ 雷克雅維克
+ 東京
+ 凡爾賽

# AMAZON.Country
<a name="built-in-slot-country"></a>

全球國家/地區的名稱。範例：
+ 澳洲
+ 德國
+ 日本
+ 美國
+ 烏拉圭

# AMAZON.DATE
<a name="built-in-slot-date"></a>

將代表日期的單字轉換為日期格式。

日期會以 ISO-8601 日期格式提供給您的意圖。您的意圖在槽中收到的日期可能會因使用者說出的特定片語而有所不同。
+ 對應至特定日期的方位，例如「今天」、「現在」或「11 月二十五日」，會轉換為完整日期：`2020-11-25`。這預設為目前日期*或之後*的日期。
+ 對應至特定週的方位，例如「本週」或「下週」，會轉換為一週第一天的日期。在 ISO-8601 格式中，一週從星期一開始，到星期日結束。例如，如果今天是 2020-11-25，則「下週」會轉換為 `2020-11-30`。
+ 對應到一個月，但不是特定日期的張量，例如「下個月」會轉換為該月的最後一天。例如，如果今天是 2020-11-25，則「下個月」會轉換為 `2020-12-31`。
+ 對應至一年，但不是特定月份或日期的方位，例如「明年」會轉換為次年的最後一天。例如，如果今天是 2020-11-25，則「明年」會轉換為 `2021-12-31`。

# AMAZON.DURATION
<a name="built-in-slot-duration"></a>

將指示持續時間的單字轉換為數值持續時間。

持續時間會解析為以 [ISO-8601 持續時間格式 為基礎的格式](https://en.wikipedia.org/wiki/ISO_8601#Durations)`PnYnMnWnDTnHnMnS`。`P` 表示這是持續時間， `n`是數值，而 後面的大寫字母`n`是特定的日期或時間元素。例如， `P3D`表示 3 天。`T` 用於表示剩餘值代表時間元素，而不是日期元素。

範例：
+ 「十分鐘」： `PT10M`
+ 「五個小時」： `PT5H`
+ 「三天」： `P3D`
+ 「四十五秒」： `PT45S`
+ 「八週」： `P8W`
+ 「七年」： `P7Y`
+ 「五小時十分鐘」： `PT5H10M`
+ 「兩年三小時十分鐘」： `P2YT3H10M`

# AMAZON.EmailAddress
<a name="built-in-slot-email"></a>

識別代表以 username@domain 形式提供之電子郵件地址的字詞。地址在使用者名稱中可以包含下列特殊字元：底線 (\$1)、連字號 (-)、句號 (.) 和加號 (\$1)。

# AMAZON.FirstName
<a name="built-in-slot-first-name"></a>

常用的名字。此槽類型可辨識正式名稱和非正式暱稱。傳送到您意圖的名稱是使用者傳送的值。Amazon Lex 不會從 nick 名稱轉換為正式名稱。

對於聽起來類似但拼寫不同的名字，Amazon Lex 會傳送單一通用表單給您的意圖。

在英文 (US) (en-US) 地區設定中，使用槽名稱 AMAZON.US\$1First\$1Name。

範例：
+ Emily
+ John
+ 索菲

# AMAZON.LastName
<a name="built-in-slot-last-name"></a>

常用的姓氏。對於聽起來像是拼法不同的名稱，Amazon Lex 會傳送單一通用表單給您的意圖。

在英文 (US) (en-US) 地區設定中，使用槽名稱 AMAZON.US\$1Last\$1Name。

範例：
+ 布魯斯基
+ 大賽爾文
+ Evers
+ 剖析
+ Welt

# AMAZON.NUMBER
<a name="built-in-slot-number"></a>

將表達數字的單字或數字轉換為數字，包括小數。下表顯示 `AMAZON.NUMBER` 槽類型如何擷取數字字詞。


| Input | 回應 | 
| --- | --- | 
| 一百二十三點四五 | 123.45 | 
| 一百二十三點四五 | 123.45 | 
| 點四二 | 0.42 | 
| 點四十二 | 0.42 | 
| 232.998 | 232.998 | 
| 50 | 50 | 

# AMAZON.Percentage
<a name="built-in-slot-percent"></a>

將代表百分比的字詞和符號轉換成包含百分比符號 (%) 的數值。

如果使用者輸入的數字沒有百分比符號或「百分比」一字，槽值會設定為數字。下表顯示 `AMAZON.Percentage` 槽類型如何擷取百分比。


| Input | 回應 | 
| --- | --- | 
| 50 百分比 | 50% | 
| 0.4% | 0.4% | 
| 23.5% | 23.5% | 
| 百分之二十五 | 25% | 

# AMAZON.PhoneNumber
<a name="built-in-slot-phone"></a>

將代表電話號碼的數字或字詞轉換成不含標點符號的字串格式，如下所示。


| Type | 說明 | Input | 結果 | 
| --- | --- | --- | --- | 
| 含前置加號 (\$1) 的國際號碼 | 含前置加號的 11 位數號碼。 | \$161 7 4445 1061 \$11 (509) 555-1212 | `+61744431061` `+15095551212` | 
| 不含前置加號 (\$1) 的國際號碼 | 不含前置加號的 11 位數號碼 | 1 (509) 555-1212 61 7 4445 1061 | `15095551212` `61744451061` | 
| 國內號碼 | 不含國際碼的 10 位數字 | (03) 5115 4444 (509) 555-1212 | `0351154444` `5095551212` | 
| 市內號碼 | 不含國際碼或區碼的 7 位數電話號碼 | 555-1212 | 5551212 | 

# AMAZON.SpeedUnit
<a name="built-in-slot-speed"></a>

將代表速度單位的字詞轉換成相對應的縮寫。例如，「每小時英里數」轉換成 `mph`。

此插槽類型僅適用於英文 (US) (en-US) 地區設定。

下例顯示 `AMAZON.SpeedUnit` 槽類型如何擷取速度單位。


| 速度單位 | 縮寫 | 
| --- | --- | 
|  每小時英里數、mph、MPH、m/h  | mph | 
|  每小時公里數、kmph、KMPH、km/h  | kmph | 
|  每秒公尺數、mps、MPS、m/s  | mps | 
| 每小時海哩數、節 | 節 | 

# AMAZON.State
<a name="built-in-slot-state"></a>

國家/地區內的地理和政治區域名稱。

範例：
+ 巴瓦利亞
+ 福島縣
+ 太平洋西北部
+ 多倫多
+ 威爾斯

# AMAZON.StreetName
<a name="built-in-slot-street-name"></a>

典型街道地址內的街道名稱。這只包含街道名稱，不包含房屋號碼。

此插槽類型不適用於英文 (US) (en-US) 地區設定。

範例：
+ 坎培拉大街
+ 前街
+ 市場道路

# AMAZON.TIME
<a name="built-in-slot-time"></a>

將代表時間的字詞轉換成時間值。包含不明確時間的解析度。當使用者進入模棱兩可的時間時，Amazon Lex 會使用 Lambda 事件的 `slotDetails` 屬性，將模棱兩可時間的解析度傳遞給您的 Lambda 函數。例如，如果您的機器人提示使用者交付時間，使用者可以說「10 點鐘」來回應。但是這個時間並不明確，這可表示早上 10 點或下午 10 點。在此情況下，`slots`映射中的值為 `null`，而`slotDetails`實體包含兩個可能的 時間解析度。Amazon Lex 會將下列項目輸入 Lambda 函數：

```
"slots": {
   "deliveryTime": null
},
"slotDetails": {
   "deliveryTime": {
      "resolutions": [
         {
            "value": "10:00"
         },
         {
            "value": "22:00"
         }
      ]
   }
}
```

當使用者以不明確的時間回應時，Amazon Lex 會將時間傳送至 Lambda 事件`slots`屬性中的 Lambda 函數，且`slotDetails`屬性為空。例如，如果您的使用者以「10：00 PM」回應交付時間的提示，Amazon Lex 會將以下內容輸入 Lambda 函數：

```
"slots": {
   "deliveryTime": "22:00"
}
```

如需從 Amazon Lex 傳送至 Lambda 函數之資料的詳細資訊，請參閱 [輸入事件格式](lambda-input-response-format.md#using-lambda-input-event-format)。

# AMAZON.WeightUnit
<a name="built-in-slot-weight"></a>

將代表重量單位的字詞轉換成相對應的縮寫。例如，「公斤」會轉換成 `kg`。

此插槽類型僅適用於英文 (US) (en-US) 地區設定。

下例顯示 `AMAZON.WeightUnit` 槽類型如何擷取重量單位。


| 重量單位 | 縮寫 | 
| --- | --- | 
| 公斤、kg、KGS | kg | 
| 公克、gms、gm、GMS、g | g | 
| 毫克、mg、mgs | mg | 
| 磅、lbs、LBS | lbs | 
| 盎司、oz、OZ | oz | 
| 公噸、噸、t | t | 
| 千噸、kt | kt | 

# 自訂槽類型
<a name="howitworks-custom-slots"></a>

對於每個意圖，您可以指定參數，指出意圖需要滿足使用者的請求的資訊。這些參數或槽，有一個類型。*槽類型*是 Amazon Lex 用來訓練機器學習模型以辨識槽值的值清單。例如，您可以定義一個稱為「`Genres.`」的槽類型，在該槽類型中的每個值都是一種流派的名稱，「喜劇」、「探險」、「紀錄片」，以此類推。您可以為槽類型值定義同義詞。例如，您可以為值「喜劇」定義同義詞「滑稽」和「幽默」。

您可以設定槽類型來限制槽值的解析。槽值會用作為列舉，並且只會在與其中一個槽值或同義詞相同時，才會將使用者輸入的值會解析為槽值。同義詞會解析為對應的槽值。例如，如果使用者輸入「滑稽」，它會解析為槽值「喜劇」。

您也可以設定槽類型來擴展該值。槽值會用作為訓練資料，並且只會在槽值和同義詞字類似時，才會將槽解析為使用者提供的值。這是預設行為。

Amazon Lex 會維護插槽可能解析度的清單。清單中的每個項目都會提供*解析度值*，Amazon Lex 會將其視為插槽的其他可能性。解析值是最符合槽值的項目。該清單最多可包含五個值。

當使用者輸入的值是同義詞時，解析值清單中的第一個項目是槽類型值。例如，如果使用者輸入「滑稽」，則 `slots` 欄位會包含「滑稽」而 `slotDetails` 欄位中的第一個項目是「喜劇」。您可以在使用 `valueSelectionStrategy` 操作建立或更新槽類型時設定 [PutSlotType](API_PutSlotType.md)，如此一來槽值就會以解析清單中的第一個值填滿。

 如果您使用 Lambda 函數，函數的輸入事件會包含稱為 的解析清單`slotDetails`。下列範例顯示 Lambda 函數輸入的槽和槽詳細資訊區段：

```
   "slots": {
      "MovieGenre": "funny";
   },
   "slotDetails": {
      "Movie": {
         "resolutions": [
            "value": "comedy"
         ]
      }
   }
```

對於每個槽類型，您最多可以定義 10,000 個值和同義詞。每個機器人總共可有 50,000 個槽類型值和同義詞。例如，您有 5 個槽類型，每個有 5,000 個值和同義詞，或您有 10 個槽類型，每個有 2,500 個值和同義詞。如果您超過這些限制，您在呼叫 [PutBot](API_PutBot.md) 操作時會取得 `LimitExceededException`。

# 槽混淆
<a name="how-obfuscate"></a>

Amazon Lex 可讓您混淆或隱藏插槽的內容，使內容不可見。若要保護擷取為槽值的敏感資料，您可以啟用槽混淆來遮罩對話日誌中的這些值。

當您選擇混淆槽值時，Amazon Lex 會將槽值取代為對話日誌中的槽名稱。對於稱為 `full_name` 的槽，槽值將被混淆，如下所示：

```
Before obfuscation:
    My name is John Stiles
After obfuscation:
    My name is {full_name}
```

如果表達式包含括號字元 (\$1\$1)，Amazon Lex 會以兩個反斜線 (\$1\$1) 逸出括號字元。例如，文字 `{John Stiles}` 會被混淆，如下所示：

```
Before obfuscation:
    My name is {John Stiles}
After obfuscation:
    My name is \\{{full_name}\\}
```

對話日誌中的槽值會被混淆。插槽值仍然可用於 `PostContent`和 `PostText`操作的回應，而槽值可用於您的驗證和履行 Lambda 函數。如果您是在提示或回應中使用槽值，則這些槽值不會在對話日誌中混淆。

在對話的第一回合中，如果 Amazon Lex 在表達式中辨識出槽值和槽值，則會混淆槽值。如果沒有識別到槽值，Amazon Lex 不會混淆表達式。

在第二輪和之後輪換時，Amazon Lex 知道要引出的槽，以及槽值是否應該混淆。如果 Amazon Lex 辨識到槽值，則會混淆該值。如果 Amazon Lex 無法辨識值，則會混淆整個表達式。遺漏表達用語中的任何槽值都不會被混淆。

Amazon Lex 也不會混淆您存放在請求或工作階段屬性中的槽值。如果您是儲存應該當作屬性混淆的槽值，則必須加密或以其他方式混淆該值。

Amazon Lex 不會混淆音訊中的槽值。它的確會混淆音訊記錄中的槽值。

您不需要混淆機器人中的所有槽。您可以使用主控台或使用 Amazon Lex API 來選擇哪些插槽混淆。在主控台中，於槽設定中選擇 **Slot obfuscation (槽混淆)**。如果您是使用 API，則在呼叫 [PutIntent](API_PutIntent.md) 操作時，將槽的 `obfuscationSetting` 欄位設定為 `DEFAULT_OBFUSCATION`。

# 情緒分析
<a name="sentiment-analysis"></a>

您可以使用情緒分析來判斷使用者表達用語中表達的情緒。使用情緒資訊，您可以管理對話流程或執行通話後分析。例如，如果使用者情緒為負面，您可以建立流程，將對話轉交給人類客服人員。

Amazon Lex 與 Amazon Comprehend 整合以偵測使用者情緒。Amazon Comprehend 的回應指出文字的整體情緒是正面、中性、負面或混合。回應包含使用者表達用語最有可能的情緒，以及每個情緒類別的分數。分數代表正確偵測到的情緒的可能性。

 您可以使用 主控台或使用 Amazon Lex API 為機器人啟用情緒分析。在 Amazon Lex 主控台上，選擇機器人**的設定**索引標籤，然後將**情緒分析**選項設定為**是**。如果您正在使用 API，請在 `detectSentiment` 欄位設定為 `true` 的情況下呼叫 [PutBot](API_PutBot.md) 操作。

當啟用情緒分析時，來自 [PostContent](API_runtime_PostContent.md) 和 [PostText](API_runtime_PostText.md) 操作的回應會傳回在機器人回應中稱為 `sentimentResponse` 的欄位以及其他中繼資料。`sentimentResponse` 欄位有兩個欄位，`SentimentLabel` 和 `SentimentScore`，其中包含情緒分析的結果。如果您使用的是 Lambda 函數， `sentimentResponse` 欄位會包含在傳送至函數的事件資料中。

以下是 `sentimentResponse` 欄位傳回 `PostText` 或 `PostContent` 回應一部分的範例。`SentimentScore` 欄位是字串，其中包含回應的分數。

```
{
    "SentimentScore": 
        "{
        Mixed: 0.030585512690246105,
        Positive: 0.94992071056365967,
        Neutral: 0.0141543131828308,
        Negative: 0.00893945890665054
        }",
    "SentimentLabel": "POSITIVE"
}
```

Amazon Lex 代表您呼叫 Amazon Comprehend，以判斷機器人處理的每個表達用語中的情緒。透過啟用情緒分析，即表示您同意 Amazon Comprehend 的服務條款和協議。如需 Amazon Comprehend 定價的詳細資訊，請參閱 [Amazon Comprehend 定價](https://aws.amazon.com/comprehend/pricing/)。

如需 Amazon Comprehend 情緒分析如何運作的詳細資訊，請參閱《*Amazon Comprehend 開發人員指南*》中的[判斷情緒](https://docs.aws.amazon.com/comprehend/latest/dg/how-sentiment.html)。

# 標記您的 Amazon Lex 資源
<a name="how-it-works-tags"></a>

為了協助您管理 Amazon Lex 機器人、機器人別名和機器人通道，您可以將中繼資料指派給每個資源做為*標籤。*標籤是您指派給 AWS 資源的標籤。每個標籤皆包含索引鍵與值。

標籤可讓您以不同的方式分類您的 AWS 資源，例如依據目的、擁有者或應用程式。標籤可協助您：
+ 識別和組織您的 AWS 資源。許多 AWS 資源都支援標記，因此您可以將相同的標籤指派給不同 服務中的資源，以指出資源相關。例如，您可以標記機器人及其搭配相同標籤使用的 Lambda 函數。
+ 配置成本。您可以在 AWS 帳單與成本管理 儀表板上啟用標籤。 AWS 會使用標籤來分類您的成本，並傳送每月成本分配報告給您。對於 Amazon Lex，您可以使用別名特定的標籤來配置每個別名的成本，`$LATEST`但別名除外。您可以使用 Amazon Lex `$LATEST` 機器人的標籤來配置別名的成本。如需詳細資訊，請參閱*AWS 帳單與成本管理 《 使用者指南*》中的[使用成本分配標籤](https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html)。
+ 控制對資源的存取。您可以使用 Amazon Lex 的標籤來建立政策，以控制對 Amazon Lex 資源的存取。這些政策可連接至 IAM 角色或使用者，以啟用標籤型存取控制。如需詳細資訊，請參閱[ABAC 搭配 Amazon Lex](security_iam_service-with-iam.md#security_iam_service-with-iam-tags)。若要檢視身分型政策範例，以根據該資源上的標籤來限制存取資源，請參閱[使用標籤存取資源](security_iam_id-based-policy-examples.md#security_iam_id-based-policy-examples-tag)。

您可以使用 AWS 管理主控台、 AWS Command Line Interface或 Amazon Lex API 來使用標籤。



## 為您的資源建立標籤
<a name="tagging-resources"></a>

如果您使用的是 Amazon Lex 主控台，您可以在建立資源時標記資源，也可以稍後新增標籤。您也可以使用主控台來更新或移除現有的標籤。

如果您使用 AWS CLI 或 Amazon Lex API，您可以使用下列操作來管理 資源的標籤：
+  [ListTagsForResource](API_ListTagsForResource.md) – 檢視與資源相關聯的標籤。
+ [PutBot](API_PutBot.md) 和 [PutBotAlias](API_PutBotAlias.md) – 當您建立機器人或機器人別名時套用標籤。
+  [TagResource](API_TagResource.md) – 在現有資源上新增和修改標籤。
+  [UntagResource](API_UntagResource.md) – 從資源移除標籤。

Amazon Lex 中的下列資源支援標記：
+ 機器人 - 使用 Amazon Resource Name (ARN)，如下所示：
  + `arn:${partition}:lex:${region}:${account}:bot:${bot-name}`
+ 機器人別名 - 使用如下所示的 ARN：
  + `arn:${partition}:lex:${region}:${account}:bot:${bot-name}:${bot-alias}`
+ 機器人頻道 - 使用如下所示的 ARN：
  + `arn:${partition}:lex:${region}:${account}:bot-channel:${bot-name}:${bot-alias}:${channel-name}`

## 標籤限制
<a name="tags-restrictions"></a>

下列基本限制適用於 Amazon Lex 資源上的標籤：
+ 標籤的最大數量 - 50
+ 最大金鑰長度 - 128 個字元
+ 最大值長度 - 256 個字元
+ 索引鍵和值的有效字元 – a–z、A–Z、0–9、空格和下列字元：\$1 . ： / = \$1 - 和 @
+ 金鑰和值會區分大小寫。
+ 請不要使用 `aws:` 做為金鑰的字首；要預訂給 AWS 使用。

# 標記資源 (主控台)
<a name="tags-console"></a>

您可以使用主控台來管理機器人、機器人別名或機器人頻道資源上的標籤。您可以在建立資源時新增標籤，也可以從現有資源新增、修改或移除標籤。

**在建立機器人時新增標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 選擇 **Create (建立)** 以建立新的機器人。

1. 在 **Create your bot (建立您的機器人)** 頁面底部，選擇 **Tags (標籤)**。

1. 選擇 **Add tag (新增標籤)**，然後新增一或更多個標籤至機器人。您最多可新增 50 個標籤。

**在建立機器人別名時新增標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 選擇您要新增機器人別名的機器人。

1. 選擇**設定**。

1. 新增別名名稱、選擇機器人版本，然後選擇 **Add tags (新增標籤)**。

1. 選擇 **Add tag (新增標籤)**，然後新增一或多個標籤至機器人別名。您最多可新增 50 個標籤。

**在您建立機器人頻道時新增標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 選擇您要新增機器人頻道的機器人。

1. 選擇 **Channels (頻道)**，然後選擇您要新增的頻道。

1. 新增機器人頻道的詳細資訊，然後選擇 **Tags (標籤)**。

1. 選擇 **Add tag (新增標籤)**，然後新增一或多個標籤至機器人頻道。您最多可新增 50 個標籤。

**在匯入機器人時新增標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 選擇 **Actions (動作)**，然後選擇 **Import (匯入)**。

1. 選擇用於匯入機器人的 zip 檔案。

1. 選擇 **Tags (標籤)**，然後選擇 **Add tag (新增標籤)** 以新增一或多個標籤至機器人。您最多可新增 50 個標籤。

**新增、移除或修改現有機器人上的標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 從左側選單中選擇 **Bots (機器人)**，然後選擇要修改的機器人。

1. 選擇 **Settings (設定)**，然後從左側選單中選擇 **General (一般)**。

1. 選擇 **Tags (標籤)**，然後新增、修改或移除機器人的標籤。

**新增、移除或修改機器人別名上的標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 從左側選單中選擇 **Bots (機器人)**，然後選擇要修改的機器人。

1. 選擇 **Settings (設定)**，然後從左側選單中選擇 **Aliases (別名)**。

1. 為您要修改的別名選擇 **Manage tags (管理標籤)**，然後新增、修改或移除機器人別名的標籤。

**新增、移除或修改現有機器人頻道上的標籤**

1. 登入 AWS 管理主控台 ，並在 [https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)：// 開啟 Amazon Lex 主控台。

1. 從左側選單中選擇 **Bots (機器人)**，然後選擇要修改的機器人。

1. 選擇 **Channels (管道)**。

1. 選擇 **Tags (標籤)**，然後新增、修改或移除機器人頻道的標籤。

# 標記資源 (AWS CLI)
<a name="tags-cli"></a>

您可以使用 AWS CLI 來管理機器人、機器人別名或機器人頻道資源上的標籤。您可以在建立機器人或機器人別名時新增標籤，也可以從機器人、機器人別名或機器人頻道新增、修改或移除標籤。

所有範例都已針對 Linux 和 macOS 進行格式化。若要在 Windows 中使用命令，請以插入符號 (^) 取代 Linux 接續字元 (\$1)。

**在建立機器人時新增標籤**
+ 下列縮寫`put-bot` AWS CLI 命令顯示建立機器人時，您必須用來新增標籤的參數。若要實際建立機器人，您必須提供其他參數。如需詳細資訊，請參閱[步驟四：開始使用 (AWS CLI)](gs-cli.md)。

  ```
  aws lex-models put-bot \
      --tags '[{"key": "key1", "value": "value1"}, \
               {"key": "key2", "value": "value2"}]'
  ```

**在建立機器人別名時新增標籤**
+ 下列縮寫`put-bot-alias` AWS CLI 命令顯示建立機器人別名時，您必須用來新增標籤的參數。若要實際建立機器人別名，您必須提供其他參數。如需詳細資訊，請參閱[練習 5：建立別名 (AWS CLI)](gs-cli-create-alias.md)。

  ```
  aws lex-models put-bot \
      --tags '[{"key": "key1", "value": "value1"}, \
               {"key": "key2", "value": "value2"}]"
  ```

**在資源上列出標籤**
+ 使用 `list-tags-for-resource` AWS CLI 命令來顯示與機器人、機器人別名、機器人管道相關聯的資源。

  ```
  aws lex-models list-tags-for-resource \
      --resource-arn bot, bot alias, or bot channel ARN
  ```

**新增或修改資源上的標籤**
+ 使用 `tag-resource` AWS CLI 命令來新增或修改機器人、機器人別名或機器人頻道。

  ```
  aws lex-models tag-resource \
      --resource-arn bot, bot alias, or bot channel ARN \
      --tags '[{"key": "key1", "value": "value1"}, \
               {"key": "key2", "value": "value2"}]'
  ```

**從資源移除標籤**
+ 使用 `untag-resource` AWS CLI 命令從機器人、機器人別名或機器人頻道移除標籤。

  ```
  aws lex-models untag-resource \
      --resource-arn bot, bot alias, or bot channel ARN \
      --tag-keys '["key1", "key2"]'
  ```