

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

# 在 Amazon Connect 中启用实时聊天消息流
<a name="chat-message-streaming"></a>

Amazon Connect Chat 提供的[APIs](https://docs.aws.amazon.com/connect/latest/APIReference/Welcome.html)功能使您能够订阅聊天消息的实时流。使用这些 APIs，您可以：
+ 在创建新的聊天联系人时，实时流式传输聊天消息。
+ 扩展当前的 Amazon Connect Chat 功能，以支持与 SMS 解决方案和第三方消息应用程序的集成、启用移动推送通知以及创建分析控制面板来监控和跟踪聊天消息活动等应用场景。

**注意**  
本页介绍如何订阅 SNS 终端节点，以便在 Amazon Connect 中实时传输聊天消息。如果您正在尝试在 Amazon Connect 中为对话式 AI 互动启用消息流，请参阅[为 AI 支持的聊天启用消息流](message-streaming-ai-chat.md)。

## 消息流 APIs 的工作原理
<a name="how-chat-message-streaming-apis-work"></a>

当 [Amazon Connect 聊天联系 APIs人中发生某些事件时，就会触发 Amazon Connect 消息流](https://docs.aws.amazon.com/connect/latest/APIReference/Welcome.html)。例如，当客户发送新的聊天消息时，该事件会向指定端点发送一个[有效负载](sns-payload.md)，其中包含有关刚刚发送的消息的数据。消息通过 [Amazon Simple Notification Service](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) (Amazon SNS) 发布到特定端点。

本主题将介绍如何使用 Amazon Connect 和 Amazon SNS 设置实时消息流。步骤如下：

1. 使用 Amazon SNS 控制台创建一个新的标准 SNS 主题并设置消息。

1. 调用 [StartChatContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartChatContact.html)API 启动聊天联系。

1. 调用 [StartContactStreaming](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartContactStreaming.html)API 启动消息流。

1. 调用 [CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)API 来创建参与者的连接。

## 第 1 步：创建一个标准的 SNS 主题
<a name="step1-chat-streaming"></a>

1. 转到 Amazon SNS 控制台。

1. 在您的 AWS 账户@@ [中创建 SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/sns-create-topic.html)。在**详细信息**部分的**类型**中，选择**标准**，输入主题名称，然后选择**创建主题**。
**注意**  
当前，消息流 APIs 仅支持用于消息实时流式传输的标准 SNS。它们不支持 [Amazon SNS FIFO（先进先出）主题](https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html)。

1. 创建主题后，其 Amazon 资源名称 (ARN) 会在**详细信息**部分中显示。将主题 ARN 复制到剪贴板。您将在下一步和 [第 3 步：对联系启用消息流](#step3-chat-streaming) 中使用主题 ARN。

   主题 ARM 与以下示例类似：

   ```
   arn:aws:sns:{{us-east-1}}:{{123456789012}}:{{MyTopic}}                                
   ```

1. 选择**访问策略**选项卡，选择**编辑**，然后在 SNS 主题上添加基于资源的策略，这样 Amazon Connect 就有权向其发布内容了。以下是 SNS 策略示例，您可以将其复制粘贴到 JSON 编辑器中，然后使用自己的值进行自定义：

------
#### [ JSON ]

****  

   ```
   {
      "Version":"2012-10-17",		 	 	 
      "Statement":[
         {
            "Effect":"Allow",
            "Principal":{
               "Service":"connect.amazonaws.com"
            },
            "Action":"sns:Publish",
            "Resource":"arn:aws:sns:{{us-east-1}}:{{111122223333}}:{{TopicName}}",
            "Condition":{
               "StringEquals":{
                   "aws:SourceAccount":"{{111122223333}}"
               },
               "ArnEquals":{
               "aws:SourceArn":"arn:aws:connect:{{us-east-1}}:{{111122223333}}:instance/{{InstanceId}}"
               }
            }
         }
      ]
   }
   ```

------
**注意**  
默认**访问策略**附带适用于 `sourceOwner` 的条件，例如：  

   ```
   "Condition": {
           "StringEquals": {
             "AWS:SourceOwner": "921772911154"
           }
         }
   ```
请务必将其移除并替换为 `SourceAccount`，例如：  

   ```
   "Condition":{
               "StringEquals":{
                  "aws:SourceAccount":"YOUR_AWS_ACCOUNT_ID"
               },
               "ArnEquals":{
                  "aws:SourceArn":"YOUR_CONNECT_INSTANCE_ARN"
               }
            }
   ```
这样可以防止出现[跨服务混淆座席](cross-service-confused-deputy-prevention.md)的问题。

1. 如果您要在 SNS 上使用服务器端加密，请确认您已在 KMS key上启用了 `connect.amazonaws.com` 权限。以下是策略示例：

------
#### [ JSON ]

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Id": "key-consolepolicy-3",
       "Statement": [
           {
               "Sid": "Enable IAM User Permissions",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::{{111122223333}}:root",
                   "Service": "connect.amazonaws.com"
               },
               "Action": "kms:*",
               "Resource": "*"
           },
           {
               "Sid": "Allow access for Key Administrators",
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::{{111122223333}}:root",
                   "Service": "connect.amazonaws.com"
               },
               "Action": [
                   "kms:Create*",
                   "kms:Describe*",
                   "kms:Enable*",
                   "kms:List*",
                   "kms:Put*",
                   "kms:Update*",
                   "kms:Revoke*",
                   "kms:Disable*",
                   "kms:Get*",
                   "kms:Delete*",
                   "kms:TagResource",
                   "kms:UntagResource",
                   "kms:ScheduleKeyDeletion",
                   "kms:CancelKeyDeletion"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

------

## 第 2 步：启用聊天联系
<a name="step2-chat-streaming"></a>

1. 调用 Amazon Connect [StartChatContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartChatContact.html)API 发起聊天联系。

   有关如何创建用于调用 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. 跟踪[StartChatContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartChatContact.html)响应，因为这些响应属性用于呼叫启用直播 APIs 所需的其他聊天。`ContactId` `ParticipantToken`这将在接下来的步骤中进行说明。

## 第 3 步：对联系启用消息流
<a name="step3-chat-streaming"></a>
+ 致电[StartContactStreaming](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartContactStreaming.html)以启用对您的 SNS 主题的实时消息流式传输。
  + **限制**：每位联系人最多可以订阅两个 SNS 主题。
  + 致电时 [StartContactStreaming](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartContactStreaming.html)，您需要提供 SNS 主题的 Amazon 资源名称 (ARN)（请参阅）。[第 1 步：创建一个标准的 SNS 主题](#step1-chat-streaming)

    一个 SNS 主题 ARN 可以跨 AWS 账户多个使用，但它必须与您的 Amazon Connect 实例位于同一个区域。例如，如果您的主题 ARN 位于 **us-east-1**，您的 Amazon Connect 实例也必须位于 **us-east-1**。
  + 对于在直播端点上未收到的初始聊天消息，您可以调用 [GetTranscript](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_GetTranscript.html)API 来接收初始消息。

## 第 4 步：创建参与者连接
<a name="step4-chat-streaming"></a>
+ [CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)使用传递`ConnectParticipant`为 true 的属性进行调用。
  + 您必须在创建聊天[CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)后的五分钟内致电。
  + 只有在[第 2 步：启用聊天联系](#step2-chat-streaming)您启用了直播功能[CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)且来电者参与者启用时，才可以在`ConnectParticipant`设置为 true 的情况下进行通话`Customer`。
  + 如果您已经使用 `WEBSOCKET` 成功连接到聊天联系，则此步骤（创建参与者连接）为可选。

## 后续步骤
<a name="nextsteps-chat-streaming"></a>

你已经准备好处理消息流 APIs了。

1. 要验证它是否正常运行，请检查消息是否已发布到您创建的 SNS 主题。您可以使用 Amazon CloudWatch 指标来做到这一点。有关说明，请参阅使用[监控 Amazon SNS 主题](https://docs.aws.amazon.com/sns/latest/dg/sns-monitoring-using-cloudwatch.html)。 CloudWatch

1. 由于 SNS 的[保留期有限](https://aws.amazon.com/blogs//aws/sns-ttl-control/)，建议您设置 [Amazon Simple Queue Service (Amazon SQS)](https://aws.amazon.com/sqs/)、[Amazon Kinesis](https://aws.amazon.com/kinesis/) 或其他服务来保留消息。

1. 使用[StopContactStreaming](https://docs.aws.amazon.com/connect/latest/APIReference/API_StopContactStreaming.html)是可选的，如果聊天通过联系流[断开连接](disconnect-hang-up.md)，或者客户断开了聊天，则不需要使用。不过，`StopContactStreaming` 提供了即使聊天正在进行，也能中止 SNS 主题消息流的选项。