

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 呼叫中心代理助理
<a name="example-call-center"></a>

在本教程中，您将使用 Amazon Lex V2 和 Amazon Kendra 来构建一个代理辅助机器人，该机器人可以为客户支持代理提供帮助，并将其发布为 Web 应用程序。Amazon Kendra 是一项企业搜索服务，它使用机器学习来搜索文档以找到答案。有关 Amazon Kendra 的更多信息，请参阅 [https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html](https://docs.aws.amazon.com/kendra/latest/dg/what-is-kendra.html)。

Amazon Lex V2 机器人广泛用于呼叫中心，作为客户的第一联系点。机器人通常能够解决客户的问题。当机器人无法回答问题时，它会将对话转移给客户支持员工。

在本教程中，我们创建了一个 Amazon Lex V2 机器人，代理使用它来实时回答客户的查询。通过阅读机器人提供的答案，客服可以免于手动查找答案。

您在本教程中创建的机器人和 Web 应用程序可通过快速提供合适的资源来帮助客服高效、准确地响应客户。下图显示了该 Web 应用程序的工作方式。

![\[alt text not found\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/agent-tutorial.png)






如图所示，Amazon Kendra 文档索引存储在 Amazon Simple Storage Service (Amazon S3) 存储桶中。如果还没有 S3 存储桶，可以在创建 Amazon Kendra 索引时设置一个。除了 Amazon S3 之外，您还将在本教程中使用 Amazon Cognito。Amazon Cognito 管理将机器人部署为 Web 应用程序的权限。

在本教程中，您将创建提供客户问题答案的 Amazon Kendra 索引，创建机器人并添加意图以使机器人能够根据与客户的对话提出答案，设置 Amazon Cognito 以管理访问权限，并将机器人部署为 Web 应用程序。

**估计时间：**75 分钟

**估计成本：**亚马逊Kendra指数每小时2.50美元，1000份Amazon Lex V2请求每小时0.75美元。完成本练习后，您的 Amazon Kendra 索引将继续运行。请务必将其删除，以免产生不必要的费用。

**注意：**请确保为本教程中使用的所有服务选择相同的 AWS 区域。

**Topics**
+ [步骤 1：创建 Amazon Kendra 索引](agent-step-1.md)
+ [第 2 步：创建 Amazon Lex V2 机器人](agent-step-2.md)
+ [步骤 3：添加自定义意图和内置意图](agent-step-3.md)
+ [步骤 4：设置 Amazon Cognito](agent-step-4.md)
+ [步骤 5：将您的机器人部署为 Web 应用程序](agent-step-5.md)
+ [步骤 6：使用机器人](agent-step-6.md)

# 步骤 1：创建 Amazon Kendra 索引
<a name="agent-step-1"></a>

首先创建 Amazon Kendra 文档索引，用于回答客户问题。索引为客户端查询提供搜索 API。您可以从源文档创建索引。Amazon Kendra 会将它在已编制索引的文档中找到的答案返回给机器人，机器人会将这些答案显示给客服。

Amazon Kendra 建议的响应的质量和准确性取决于您编制索引的文档。文档应包括客服经常访问且必须存储在 S3 存储桶中的文件。您可为 .html、Microsoft Office（.doc、.ppt）、PDF 和文本格式的非结构化和半结构化数据编制索引。

要创建 Amazon Kendra 索引，请参阅《Amazon Kendra 开发人员指南》**中的 [Getting started with an S3 bucket (console)](https://docs.aws.amazon.com/kendra/latest/dg/gs-console.html)。

要添加有助于回答客户查询的问题和答案 (FAQs)，请参阅 *Amazon Kendra 开发者*指南中的[添加问题和答案](https://docs.aws.amazon.com/kendra/latest/dg/in-creating-faq.html)。在本教程中，请使用[上的 ML\$1FAQ.csv 文件 GitHub。](https://github.com/awsdocs/amazon-lex-developer-guide/blob/master/example_apps/agent_assistance_bot/ML_FAQ.csv)

## 后续步骤
<a name="agent-step-1-next"></a>

[第 2 步：创建 Amazon Lex V2 机器人](agent-step-2.md)

# 第 2 步：创建 Amazon Lex V2 机器人
<a name="agent-step-2"></a>

Amazon Lex V2 提供了呼叫中心代理和亚马逊 Kendra 索引之间的接口。它会跟踪客服与客户之间的对话，并根据客户提出的问题调用 `AMAZON.KendraSearchIntent` 意图。*意图*是指用户要执行的操作。

Amazon Kendra 搜索已编入索引的文档，并返回其在机器人中显示的 Amazon Lex V2 的答案。该答案仅对客服可见。

**创建客服助理机器人**

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

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

1. 选择**创建**。

1. 选择**自定义机器人**并配置机器人。

   1. **机器人名称** — 输入一个指示机器人用途的名称，例如 **AgentAssistBot**。

   1. **输出语音** — 选择**无**。

   1. **会话超时** — 输入 **5**。

   1. **COPPA** — 选择**否**。

1. 选择**创建**。创建机器人后，Amazon Lex V2 会显示机器人编辑器选项卡。

## 后续步骤
<a name="agent-step-2-next"></a>

[步骤 3：添加自定义意图和内置意图](agent-step-3.md)

# 步骤 3：添加自定义意图和内置意图
<a name="agent-step-3"></a>

*意图*表示呼叫中心客服希望机器人执行的操作。在此示例中，客服希望机器人根据客服与客户的对话来建议响应和有用的资源。

Amazon Lex V2 有两种意图：自定义意图和内置意图。 `AMAZON.KendraSearchIntent`是一个内置的意图。机器人使用 `AMAZON.KendraSearchIntent` 意图来查询索引并显示 Amazon Kendra 建议的响应。

此示例中的机器人不需要自定义意图。但是，要成功构建机器人，您必须至少创建一个自定义意图，其中包含至少一个示例言语。只有在构建客服助理机器人时才需要此意图。它不执行任何其他功能。意图的言语不得应用于客户可能会询问的任何问题。这样可以确保调用 `AMAZON.KendraSearchIntent` 来回答客户的问题。有关更多信息，请参阅 [AMAZON.KendraSearchIntent](built-in-intent-kendra-search.md)。

**创建所需的自定义意图**

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

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

1. 在**创建意图**对话框中，输入意图的描述性名称，例如 **RequiredIntent**。

1. 在**示例言语**中，输入描述性言语，例如 **Required utterance**。

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

**添加`AMAZON.KendraSearchIntent`意图和响应消息**

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

1. 选择**搜索现有意图**。

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

1. 为意图提供一个描述性名称（例如 **AgentAssistSearchIntent**），然后选择**添加**。

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

1. 选择您想要意图搜索的索引。

1. 在**响应**部分，将以下三条消息添加到消息组。

   ```
   I found an answer for the customer query: ((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 this answer will help the customer: ((x-amz-lex:kendra-search-response-answer-1)).
   ```

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

1. 选择**构建**以构建机器人。

## 后续步骤
<a name="agent-step-3-next"></a>

[步骤 4：设置 Amazon Cognito](agent-step-4.md)

# 步骤 4：设置 Amazon Cognito
<a name="agent-step-4"></a>

要管理网络应用程序的权限和用户，您需要设置 Amazon Cognito。Amazon Cognito 可确保网络应用程序的安全性并具有访问控制功能。Amazon Cognito 使用身份池提供 AWS 证书，允许您的用户访问其他 AWS 服务。在本教程中，它提供了对 Amazon Lex V2 的访问权限。

创建身份池时，Amazon Cognito 会为您提供适用于经过身份验证和未经身份验证的用户的 AWS 身份和访问管理 (IAM) 角色。您可以通过添加授予 Amazon Lex V2 访问权限的策略来修改 IAM 角色。

**设置 Amazon Cognito**

1. 登录 AWS 管理控制台并打开位于的 Amazon Cognito 控制台。[https://console.aws.amazon.com/cognito/](https://console.aws.amazon.com/cognito)

1. 选择 **Manage Identity Pools**（管理身份池）。

1. 选择 **Create new identity pool**（创建新身份池）。

1. 配置身份池。

   1. **身份池名称** — 输入一个表明池用途的名称，例如 **BotPool**。

   1. 在**未经验证的身份**部分，选择**启用对未经验证的身份的访问**。

1. 选择**创建池**。

1. 在**识别要用于新身份池的 IAM 角色**页面，选择**查看详细信息**。

1. 记录 IAM 角色的名称。稍后您将修改它们。

1. 选择**允许**。

1. 在 **Amazon Cognito 入门**页面上，对于 “**平台”，选择**。**JavaScript**

1. 在**获取 AWS 凭证**部分，找到并记录**身份池 ID**。

1. 要允许访问 Amazon Lex V2，请修改经过身份验证和未经身份验证的 IAM 角色。

   1. 登录 AWS 管理控制台并在上打开 IAM 控制台[https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)。

   1. 在导航窗格中的**访问管理**下，选择**角色**。

   1. 在搜索框中，输入经过身份验证的 IAM 角色的名称，然后选择对应的复选框。

      1. 选择**附加策略**。

      1. 在搜索框中，输入 **AmazonLexRunBotsOnly**，然后选中对应的复选框。

      1. 选择**附加策略**。

   1. 在搜索框中，输入未经过身份验证的 IAM 角色的名称，然后选择对应的复选框。

      1. 选择**附加策略**。

      1. 在搜索框中，输入 **AmazonLexRunBotsOnly**，然后选中对应的复选框。

      1. 选择**附加策略**。

## 后续步骤
<a name="agent-step-4-next"></a>

[步骤 5：将您的机器人部署为 Web 应用程序](agent-step-5.md)

# 步骤 5：将您的机器人部署为 Web 应用程序
<a name="agent-step-5"></a>

**将您的机器人部署为 Web 应用程序**

1. 将位于 /\$1assistan [blob/master/example\$1apps/agentce\$1bot https://github.com/awsdocs/amazon-lex-developer-guide/的](https://github.com/awsdocs/amazon-lex-developer-guide/blob/master/example_apps/agent_assistance_bot/)存储库下载到您的计算机上。

1. 导航到已下载的存储库，然后在编辑器中打开 index.html 文件。

1. 进行以下更改。

   1. 在 `AWS.config.credentials` 部分，输入您的区域名称和身份池 ID。

   1. 在 ` Amazon Lex V2 runtime parameters` 部分，输入机器人名称。

   1. 保存该文件。

# 步骤 6：使用机器人
<a name="agent-step-6"></a>

出于演示目的，您以客户和客服的身份向机器人提供输入。为了区分两者，客户提出的问题以“客户：”开头，客服提供的答案以“客服：”开头。您可以从建议的输入菜单中进行选择。

通过打开与机器人进行对话`index.html`来运行您的Web应用程序，如下所示:.

![\[呼叫中心机器人与座席助理之间的对话示例。\]](http://docs.aws.amazon.com/zh_cn/lexv2/latest/dg/images/agent-tutorial-ss.png)


index.html 文件中的 `pushChat()` 函数说明如下。

```
            
            var endConversationStatement = "Customer: I have no more questions. Thank you." 
            // If the agent has to send a message, start the message with 'Agent'
            var inputText = document.getElementById('input');
            if (inputText && inputText.value && inputText.value.trim().length > 0 && inputText.value[0]=='Agent') {               
                showMessage(inputText.value, 'agentRequest','conversation');
                inputText.value = "";
            }
            // If the customer has to send a message, start the message with 'Customer'
            if(inputText && inputText.value && inputText.value.trim().length > 0 && inputText.value[0]=='Customer') {  
                // disable input to show we're sending it
                var input = inputText.value.trim();
                inputText.value = '...';
                inputText.locked = true;
                customerInput = input.substring(2);

                // Send it to the Lex runtime
                var params = {
                    botAlias: '$LATEST',
                    botName: 'KendraTestBot',
                    inputText: customerInput,
                    userId: lexUserId,
                    sessionAttributes: sessionAttributes
                };

                showMessage(input, 'customerRequest', 'conversation');
                if(input== endConversationStatement){
                    showMessage('Conversation Ended.','conversationEndRequest','conversation');
                }
                lexruntime.postText(params, function(err, data) {
                    if (err) {
                        console.log(err, err.stack);
                        showMessage('Error:  ' + err.message + ' (see console for details)', 'lexError', 'conversation1')
                    }

                    if (data &&input!=endConversationStatement) {
                        // capture the sessionAttributes for the next cycle
                        sessionAttributes = data.sessionAttributes;
                        
                            showMessage(data, 'lexResponse', 'conversation1');
                    }
                    // re-enable input
                    inputText.value = '';
                    inputText.locked = false;
                });
            }
            // we always cancel form submission
            return false;
```

 当您以客户身份提供意见时，Amazon Lex V2 运行时 API 会将其发送到亚马逊 Lex V2。

`showMessage(daText, senderRequest, displayWindow)` 函数在聊天窗口中显示客服和客户之间的对话。Amazon Kendra 建议的响应显示在相邻的窗口中。当客户说 **“I have no more questions. Thank you.”** 时，对话就结束了

**注意：**不使用 Amazon Kendra 索引时，请将其删除。