

终止支持通知：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-intents"></a>

对于常见操作，您可以使用标准内置意图库。要基于内置意图创建意图，请在控制台中选择一个内置意图，为其指定新名称。新意图将具有基础意图的配置，例如示例言语。

在当前实现中，不能执行以下操作：
+ 向基础意图添加示例言语，或从基础意图中删除示例言语
+ 为内置意图配置槽

**向机器人添加内置意图**

1. 登录 AWS 管理控制台 并打开 Amazon Lex 控制台，网址为[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)。

1. 选择要向其添加内置意图的机器人。

1. 在导航窗格中，选择**目的**旁边的加号 (\$1)。

1. 对于**添加目的**，选择**搜索现有目的**。

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)

**注意**  
对于英语（美国）(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 以调用*回退意图*。例如，如果用户输入“我想要订购糖果”，与 `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 函数中设置的阈值，则该函数可以采取不同的操作。有关会话变量的更多信息，请参阅[设置会话属性](context-mgmt-session-attribs.md)。

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

对表示用户在与机器人交互时需要帮助的词语或短语的响应。调用此意图时，您可以对您的 Lambda 函数或应用程序进行配置，以便提供有关机器人功能的信息、询问有关需要帮助的方面的后续问题，或者将交互移交给人工客服。

常见言语：
+ help
+ 我需要帮助
+ 可以帮帮我吗

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

要搜索已使用 Amazon Kendra 编制索引的文档，请使用 `AMAZON.KendraSearchIntent` 意图。在与用户进行的对话中，如果 Amazon Lex 无法确定下一个操作，则会触发搜索意图。

`AMAZON.KendraSearchIntent` 仅适用于英语（美国）(en-US) 区域设置以及美国东部（弗吉尼亚州北部）、美国西部（俄勒冈州）和欧洲地区（爱尔兰）区域。

Amazon Kendra 是一项 machine-learning-based搜索服务，用于索引 PDF 文档或微软 Word 文件等自然语言文档。它可以搜索已编制索引的文档并为问题返回以下类型的响应：
+ 答案 
+ 可能是问题答案的常见问题解答条目
+ 与问题相关的文档

有关使用 `AMAZON.KendraSearchIntent` 的示例，请参阅[示例：为 Amazon Kendra 索引创建常见问题机器人](faq-bot-kendra-search.md)。

如果您为机器人配置了 `AMAZON.KendraSearchIntent` 意图，则 Amazon Lex 在无法确定插槽或意图的用户言语时，会调用该意图。例如，如果您的机器人引发名为“披萨配料”的插槽类型的响应，而用户问的是“什么是披萨？”，Amazon Lex 将调用 `AMAZON.KendraSearchIntent` 来处理此问题。如果没有来自 Amazon Kendra 的响应，则对话将按照机器人中的配置继续进行。

当您在同一机器人中同时使用 `AMAZON.KendraSearchIntent` 和 `AMAZON.FallbackIntent` 时，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 控制台创建，还是使用 AWS 开发工具包或 AWS Command Line Interface (AWS CLI) 创建。`AMAZON.KendraSearchIntent`使用控制台时，您可以选择向 Amazon Lex 服务相关角色添加调用 Amazon Kendra 的权限，或使用专门用于调用 Amazon Kendra `Query` 操作的角色。使用 AWS CLI 或 SDK 创建 Intent 时，必须使用专门用于调用`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` 条件上下文键进一步限制权限的范围。有关更多信息，请参阅*AWS Identity and Access Management 用户指南*[中的 IAM 和 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"
        }
    ]
}
```

------

Amazon Lex 调用 Amazon Kendra 时所需使用的运行时角色必须具有 `kendra:Query` 权限。当您使用现有 IAM 角色获取调用 Amazon Kendra `Query` 操作的权限时，该角色必须附加以下策略。

您可以使用 IAM 控制台、IAM API 或 AWS CLI 创建策略并将其附加到角色。这些说明使用 AWS CLI 创建角色和策略。

**注意**  
以下代码针对 Linux 和 macOS 编排了格式。对于 Windows，将 Linux 行继续符（\$1）替换为脱字号（^）。

**向角色添加 Query 操作权限**

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 角色。

**为亚马逊指定运行时角色。 KendraSearchIntent**

1. 登录 AWS 管理控制台 并打开 Amazon Lex 控制台，网址为[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)。

1. 选择要向其添加 `AMAZON.KendraSearchIntent` 的自动程序。

1. 选择**意图**旁边的加号（\$1）。

1. 在**添加意图**中，选择**搜索现有意图**。

1. 在**搜索意图**中，输入 **AMAZON.KendraSearchIntent**，然后选择**添加**。

1. 在**复制内置意图**中，输入意图的名称，如 **KendraSearchIntent**，然后选择**添加**。

1. 打开 **Amazon Kendra 查询**部分。

1. 对于 **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"}}}"
```

以下是使用名为 `"SourceURI"` 的会话属性来筛选 Amazon Kendra 查询的 `queryFilterString` 参数示例。

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

以下是使用名为 `"DepartmentName"` 的请求属性来筛选 Amazon Kendra 查询的 `queryFilterString` 参数示例。

```
"{"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))，答案是 ((: \$1answer-answer-answer-1))” x-amz-lex kendra-search-response-question
+ “我找到了一份有用的文档的摘录：((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 开发人员指南》**中的 [Getting started with an S3 bucket (console)](https://docs.aws.amazon.com/kendra/latest/dg/gs-console.html)。

**创建常见问题解答自动程序**

1. 登录 AWS 管理控制台 并打开 Amazon Lex 控制台，网址为[https://console.aws.amazon.com/lex/](https://console.aws.amazon.com/lex/)。

1. 在导航窗格中，选择**自动程序**。

1. 选择**创建**。

1. 选择 **Custom bot (自定义自动工具)**。按下面所示配置自动程序：
   + **机器人名称** — 为机器人提供一个指示其用途的名称，例如 **KendraTestBot**。
   + **输出语音** — 选择**无**。
   + **会话超时** — 输入 **5**。
   + **情绪分析** — 选择**否**。
   + **COPPA** — 选择**否**。
   + **用户言语存储** — 选择**不存储**。

1. 选择**创建**。

要成功构建自动程序，您必须至少创建一个至少具有一种示例表达的目的。该意图是构建 Amazon Lex 机器人所必需的，但不用于常见问题响应。目的的表达不得应用于客户询问的任何问题。

**创建所需的目的**

1. 在**自动程序入门**页面上，选择**创建目的**。

1. 对于**添加目的**，选择**创建目的**。

1. 在**创建目的**对话框中，为该目的提供一个名称，例如 **RequiredIntent**。

1. 对于**示例表达**，键入一种表达，例如 **Required utterance**。

1. 选择**保存意图**。

现在，创建搜索 Amazon Kendra 索引的意图以及它应返回的响应消息。

**创建亚马逊。 KendraSearchIntent 意图和响应消息**

1. 在导航窗格中，选择**目的**旁边的加号 (\$1)。

1. 对于**添加目的**，选择**搜索现有目的**。

1. 在**搜索意图**框中，输入 **AMAZON.KendraSearchIntent**，然后从列表中选择它。

1. 对于**复制内置目的**，为目的提供名称，如 **KendraSearchIntent**，然后选择**添加**。

1. 在目的编辑器中，选择 **Amazon Kendra 查询**以打开查询选项。

1. 从 **Amazon Kendra 索引**菜单中，选择您希望目的搜索的索引。

1. 在**响应**部分中，添加以下三条消息：

   ```
   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. 选择**保存意图**，然后选择**构建**以构建自动程序。

最后，使用控制台测试窗口来测试来自自动程序的响应。您的问题应位于索引支持的域中。

**测试常见问题解答自动程序**

1. 在控制台测试窗口中，为您的索引键入一个问题。

1. 验证测试窗口的响应部分中的答案。

1. 要为其他问题重置测试窗口，请选择**清除聊天历史记录**。

# 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
+ 不要说了