

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

# 启用多用户应用内通话、Web 通话和视频通话
<a name="enable-multiuser-inapp"></a>

Amazon Connect 支持在现有通话中添加其他用户以加入应用内通话、网络通话和视频通话。您最多可以在一个正在进行的或预定的应用内通话、Web 通话或视频通话中再添加四名用户，达到总共六个参与者：座席、第一个用户和四个其他参与者（用户或座席）。

## 如何将参与者添加到多用户通话中
<a name="how-to-add-participants"></a>

1. 要启用多用户通话，您需要从 Amazon Connect 控制台启用[增强的多方联系人监控](monitor-conversations.md)。

1. 完成后，您可以利用现有 Amazon Connect [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)API 创建联系人，并将此联系人路由给代理。

1. 要添加其他参与者，请先创建一个`ContactId`从 [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)API 响应传入 API 的[CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)参与者。 [CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)在原始呼叫者连接到代理之前，不会成功。可以在 `ParticipantDetails.ParticipantCapabilities` 字段中为参与者设置视频和屏幕共享功能。

1. 成功[CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)完成后，它将返回[参与者令牌](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html#connect-CreateParticipant-response-ParticipantCredentials)。此令牌可以在`Type`设置为的请求中使用`WEBRTC_CONNECTION`。[CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html)响应中包含[ConnectionData](https://docs.aws.amazon.com/connect/latest/APIReference/API_ConnectionData.html#connect-Type-ConnectionData-Meeting)哪些可用来加入会议的 [Amazon Chime SDK 客户端库](https://docs.aws.amazon.com/chime-sdk/latest/dg/mtgs-sdk-client-lib.html)为创建的其他参与者创建的会议。按照[集成说明](config-com-widget2.md)进行操作，以允许您的应用程序最终用户加入会议。
**注意**  
[CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)如果代理尚未连接到联系人，则返回 Bad Request 错误。有关用户可能试图在连接座席之前加入的业务应用程序，请参阅[处理并发用户加入](#handling-concurrent-joins)。

1. 其他客户可以在[CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html)退货后随时连接。参与者加入后，[所有其他语音和录音行为都与多方通话功能类似](multi-party-calls.md)。如果请求中启用了新参与者的视频和屏幕共享功能，则他们可以启用他们的视频和屏幕共享。[CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)
**注意**  
任何时候总共只有 6 名参与者（客户和座席）可以加入正在进行的通话中。如果在加入会议过程中发生了添加超出限制的额外参与者的操作，则 Amazon Chime SDK 客户端库会返回一个状态码，指示该通话已满员。

1. 在参与者连接到通话之后，如果他们正常断开连接，或者非正常断开连接持续了一段预配置的时间，则他们的参与者凭证将不再有效。如果客户端库`onAudioVideoDidStop`旁听者收到指示与会者不再有效的状态码，则应用程序可以触发[CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)与[CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html)您的业务后端的新呼叫以重新加入该呼叫。

1. 每增加一个用户连接， Amazon Connect 就会创建一个新的联系人和[联系人记录](ctr-data-model.md)。所有其他联系人均已 PreviousContactId 设置为 InitialContactId （即由 [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)API 创建的联系人），以便将其追踪到原始联系人。每个联系记录具有以下特点：
   + 有一个**” InitiationMethod “:” WEBR** TC\$1API”
   + 包含以下分段属性：

     ```
        "SegmentAttributes": {
           "connect:Subtype": {
             "ValueString": "connect:WebRTC"
           }
         },
     ```

   此外，每个联系记录都包含 `CreateParticipant` 中提供的显示名称。对于任何额外用户联系，不会填充座席信息。这是为了避免座席信息重复。

   下图说明了在网络、应用程序内或视频通话中添加多个参与者和代理的场景中，如何映射上一个和下一个联系 IDs 人。  
![\[该图显示了如何映射多方 IDs WebRTC 呼叫的联系人\]](http://docs.aws.amazon.com/zh_cn/connect/latest/adminguide/images/multiparty-webrtc-contact-mapping.png)

## 处理并发用户加入
<a name="handling-concurrent-joins"></a>

企业可能希望创建允许用户以任何顺序、在任何时间加入的应用程序。例如，您的应用程序可能会向多个用户发送一封包含外部预约 ID 的链接的电子邮件，该链接应在预定时间被用户用于加入通话。为实现此行为，业务后端必须确保：
+ 第一个加入的用户会触发 StartWebRTCContact 请求。
+ 所有其他用户都使用 CreateParticipant 和， CreateParticipantConnection但**仅在第一个用户连接到代理之后**。

本节描述一个可能的实现，该实现假设您的业务后端包含一个存储（如 DynamoDB），用于保存关于预约会议的元数据。请注意，预约不是示例实现的功能 Amazon Connect，而是其中的一项功能。

当用户导航到该页面时，他们应该向后端发送一个请求。后端检查：
+ 用户是否能够开始预约，以及时间是否正确。
+  Amazon Connect 联系人是否已通过呼叫创建[StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)。

**如果尚未创建联系人**，则客户应使用自定义[流程](connect-contact-flows.md)调用 [StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)API，并提供一个[属性，该属性](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html#connect-StartWebRTCContact-request-Attributes)表示预计将加入呼叫的相应座席的座席队列。该流应包含一个[设置工作队列](set-working-queue.md)数据块，该数据块配置为使用属性中提供的座席队列。然后，该流应以[转接到队列](transfer-to-queue.md)数据块来终止。在调用 API 之前，后端应以原子方式更新存储区，将调用从“无”状态移至“正在创建”状态，并处理任何并发修改异常。

[StartWebRTCContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html)应将来自的凭证退还给客户，他们应立即加入通话。应在业务存储中将该联系标记为“已创建”，并保存其联系 ID。**此业务 API 需要在所有可能加入的参会者之间实现同步**。这可以通过使用数据库提供的原子操作来实现。

**如果联系处于“正在创建”状态**，则应该将该状态返回给额外用户，显示相关信息，并在短暂等待后重新尝试加入。

**如果联系人已创建**：他们应检索联系人 ID，然后调用 [DescribeContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_DescribeContact.html)API。业务后端应查找 **`Contact.AgentInfo.ConnectedToAgentTimestamp`** 字段。如果该字段不存在，则表示第一个用户尚未连接到座席，并且额外用户应显示相关信息，在短暂等待后重新尝试。

如果该字段存在，则后端应调用 [CreateParticipant[CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html)](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)，然后调用 get [ConnectionData](https://docs.aws.amazon.com/connect/latest/APIReference/API_ConnectionData.html#connect-Type-ConnectionData-Meeting)，如前几节所述。

后端工作流应看起来像下面这样。

![\[处理并发用户加入的后端流示图\]](http://docs.aws.amazon.com/zh_cn/connect/latest/adminguide/images/multiparty-backend-flow.png)


您可以参阅 [Amazon Connect 应用程序内调用示例](https://github.com/amazon-connect/amazon-connect-in-app-calling-examples/tree/main/Web) GitHub 进行实施。

**座席不会使用同一个网站加入**。座席应在[联系人控制面板](launch-ccp.md)中将其状态设置为**可用**。当第一个客户加入时，系统会自动呼叫座席。

## 计费
<a name="multiuser-billing"></a>

额外参与者的计费方式与通话中初始客户和任何座席的现有计费方式相同。音频、视频和屏幕共享都会产生各自的、按参与者计费的费用。

## 等待行为
<a name="multiuser-hold-behavior"></a>

在视频通话或屏幕共享会话期间，即使参与者处于等待状态，座席也能看到该参与者的视频或共享的屏幕。参与者有责任相应地处理个人身份信息。如果使用原生的 CCP 应用程序，当任何非座席参与者被置于等待时，座席的视频将被禁用。如果您要更改此行为，可以构建一个自定义 CCP 和通信小部件。

有关更多信息，请参阅 [将应用内通话、Web 通话、视频通话和屏幕共享原生集成到您的应用程序中](config-com-widget2.md)。

## 限制
<a name="multiuser-limitations"></a>

在创建额外的应用内通话、Web 通话、视频通话和屏幕共享参与者时，存在以下限制：
+ 如果原始联系在创建时将客户的视频能力设置为**无**，则额外参与者无法将其视频能力设置为**发送**。