

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