

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

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

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

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

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

1. 完成后，您可以使用现有 Connect Customer [ 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 响应传递给 [ CreateParticipant ](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html) API 的参与者。[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)如果代理尚未连接到联系人，则会返回 “错误请求” 错误。对于用户可能在连接代理之前尝试加入的业务应用程序，请参阅[处理并发用户加入](#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`观察者收到状态码，表明与会者不再有效，则应用程序可以触发[CreateParticipantConnection](https://docs.aws.amazon.com/connect/latest/APIReference/API_connect-participant_CreateParticipantConnection.html)往返业务后端的新呼叫以[CreateParticipant](https://docs.aws.amazon.com/connect/latest/APIReference/API_CreateParticipant.html)重新加入通话。

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

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

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

   下图阐释当一个 Web 通话、应用内通话或视频通话中有多个参与者和座席加进来时，“上一个联系 ID”和“下一个联系 ID”是如何被映射的。  
![联系人 ID 已映射到多方 WebRTC 呼叫中。](https://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），用于保存关于预约会议的元数据。请注意，预约不是实现的功能 Connect Customer，而是示例实现的功能。

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

**如果尚未创建联系人**，则客户应使用自定义[流程和属性调用 [ StartWebRTCContact ](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartWebRTCContact.html) API](connect-contact-flows.md)，该[属性](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 ](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)，然后再调用 get [ ConnectionData](https://docs.aws.amazon.com/connect/latest/APIReference/API_ConnectionData.html#connect-Type-ConnectionData-Meeting)，如前几节所述。

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

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


您可以参考上的 “[连接客户” 应用程序内调用示例](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 通话、视频通话和屏幕共享参与者时，存在以下限制：
+ 如果原始联系在创建时将客户的视频能力设置为**无**，则额外参与者无法将其视频能力设置为**发送**。