

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

# 通过集成自定义参与者，在 Amazon Connect 中自定义聊天流体验
<a name="chat-customize-flow"></a>

您可以将其他解决方案（例如自动程序）与 Amazon Connect 聊天集成，以创建自定义的聊天流体验。

以下概述了如何自定义聊天流体验。聊天对话开始后，为每个聊天分段实施这些步骤。我们建议在聊天流程 APIs 中添加一个[AWS Lambda 函数](invoke-lambda-function-block.md)区块来调用。

**重要**  
在 [AWS Lambda 函数](invoke-lambda-function-block.md) 数据块之前添加一个 [播放提示](play.md) 数据块。只有当 **Invoke AWS Lambda** 区块是入站聊天流程中的第一个区块时，才需要这样做。

1.  [启用实时聊天消息流](chat-message-streaming.md)。

1. 调用 Amazon Connect [CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)API 为聊天联系人添加自定义参与者 (`ParticipantRole`=`CUSTOM_BOT`)。

   1. 有关如何创建用于调用 Amazon Connect 的软件开发工具包客户端的信息 APIs，请参阅以下主题：
      + [班级 AmazonConnectClientBuilder](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/connect/AmazonConnectClientBuilder.html)
      + [创建服务客户端](https://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/creating-clients.html)

   1. 保留从`ParticipantToken`中获得的[CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)来电[CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)。 `CreateParticipantConnection`返回 a`ConnectionToken`，您可以使用它来呼叫其他 Amazon Connect 参与者 APIs。

      致电[CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)为自定义参与者创建连接时：
      + 将 `ConnectParticipant` 设置为 `True`，可将自定义参与者标记为已连接，以进行消息流式传输。
      + 通过致电后续`Type``CONNECTION_CREDENTIALS`的 Amazon Connect 参与者服务 APIs。
      + 应在调用 `CreateParticipant` 后的 15 秒内调用 `CreateParticipantConnection`。

1. 将参与者添加到联系人后，他们可以使用 Amazon Connect 参与者服务与客户交换消息 APIs。

1. 要断开参与者的连接，请调用 [ DisconnectParticipant](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_DisconnectParticipant.html)API。

**注意**  
如果联系人已有座席或 Amazon Lex 自动程序，则无法将自定义参与者添加到聊天中。
当座席或 Amazon Lex 自动程序加入联系人时，自定义参与者将断开连接。
一个联系人只能有一个自定义参与者。
不允许自定义参与者访问客户可能上传的附件。

建议配置自定义参与者可以与联系人聊天的时长：
+ 为 `ParticipantRole` = `CUSTOM_BOT` 设置 [Wait](wait.md) 数据块上的 **Timeout** 属性。
+ 如果自定义自动程序参与者在超时之前没有断开连接，该联系人将被路由到**已超时**分支。这样，您就可以决定接下来运行哪个数据块来解决客户的查询了。

**注意**  
如果联系人被路由到**已超时**分支，他们就不会断开与该联系人的连接。您必须调用 [ DisconnectParticipant](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_DisconnectParticipant.html)API 才能断开参与者的连接。

## 为加入自定义参与者的客户激活计时器
<a name="integrate-bot-extension-client"></a>

您可以为加入自定义参与者（例如自定义机器人）的客户激活计时器。这样，您就能检测到客户何时停止回复，从而终止机器人对话，并执行流中的下一步。通过终止空闲参与者，您可以减少客户与自定义参与者之间无响应的未完成聊天次数。

执行以下步骤集成空闲参与者自定义机器人扩展，并可选择设置自定义计时器值。这些步骤假定您已经在聊天中使用了自定义参与者功能。

1. 在自定义参与者加入聊天之前，请为客户调用 [UpdateParticipantRoleConfig](https://docs.aws.amazon.com/connect/latest/APIReference/API_UpdateParticipantRoleConfig.html)API。

   1. 计时器仅为客户激活。自定义参与者没有空闲参与者或自动断开连接的计时器。

   1. 您可以选择调用 API 的方法。

   1. 在此步骤中配置的计时器值将在聊天过程中一直有效。如果您要为**客户和座席互动**设置不同的计时器值，请参阅步骤 2。

   1. 如果您已经以这种方式设置了客户端，则无需执行任何其他操作即可集成自定义参与者。

1. （可选）要配置在**客户和座席互动**期间与**客户和自定义参与者互动**期间不同的计时器和计时器值：
   + 在代理加入聊天之前，请使用所需的配置再次调用 [UpdateParticipantRoleConfig](https://docs.aws.amazon.com/connect/latest/APIReference/API_UpdateParticipantRoleConfig.html)API。

有关聊天时间的更多信息，请参阅 [为聊天参与者设置聊天超时](setup-chat-timeouts.md)。

### 启动计时器
<a name="starting-timers"></a>

自定义参与者使用 [CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html)API 与客户建立连接后，他们将开始计时器。

### 当不兼容的参与者加入自定义参与者的聊天时会发生什么情况
<a name="non-compatible-participants"></a>

以下是座席或 Lex 机器人参与者加入与自定义参与者的聊天并且他们是不兼容的参与者时会发生的情况：

1. 自定义参与者将自动断开聊天连接。

1. 所有先前处于活动状态的计时器都将终止，并为连接的参与者创建新的计时器（如果配置了计时器）。

1. 每个新的计时器也会更新最新配置（如果需要）。这实际上是为新的聊天活跃参与者建立一个新的“闲置会话”。

### 与等待区块计时器的互动
<a name="interaction-wait-block-timer"></a>

闲置计时器不会影响 [Wait](wait.md) 区块的运行。

聊天联系进入**等待**区块时启动的**等待**区块计时器会继续运行。如果**等待**区块计时器过期，则无论是否有闲置参与者计时器处于活动状态，联系都会恢复流，并顺着**时间已过期**分支向下传送。

## 问题排查技巧
<a name="ts-chat-custom-bot"></a>
+ `ResourceNotFoundException`: 

  如果您在调用 `CreateParticipantConnection` API 时收到自定义参与者的 `ResourceNotFoundException`，请检查是否在 `CreateParticipant` API 调用后 15 秒内调用了 `CreateParticipantConnection` API。
+ `AccessDeniedException`: 

  如果您收到 `AccessDeniedException` 错误并且参与者角色为 CUSTOM\$1BOT，则表示机器人正在尝试访问附件。不允许 CUSTOM\$1BOT 的参与者角色访问客户上传的附件。