

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# Amazon Connect에서 실시간 채팅 메시지 스트리밍 활성화
<a name="chat-message-streaming"></a>

Amazon Connect 채팅은 실시간 채팅 메시지 스트림을 구독할 수 있는 [API](https://docs.aws.amazon.com/connect/latest/APIReference/Welcome.html)를 제공합니다. 이러한 API를 사용하면 다음을 수행할 수 있습니다.
+ 새 채팅 연락이 생성되면 실시간으로 채팅 메시지를 스트리밍합니다.
+ 현재 Amazon Connect 채팅 기능을 확장하여 SMS 솔루션 및 서드파티 메시징 애플리케이션(예: Facebook Messenger)과의 통합 구축, 모바일 푸시 알림 사용 설정, 채팅 메시지 활동 모니터링 및 추적을 위한 분석 대시보드 생성 등의 사용 사례를 지원합니다.

**참고**  
이 페이지에서는 Amazon Connect에서 채팅 메시지의 실시간 스트리밍을 위해 SNS 엔드포인트를 구독하는 방법을 설명합니다. Amazon Connect에서 대화형 AI 상호 작용을 위한 메시지 스트리밍을 활성화하려는 경우 섹션을 참조하세요[AI 기반 채팅을 위한 메시지 스트리밍 활성화](message-streaming-ai-chat.md).

## 메시지 스트리밍 API 작동 방식
<a name="how-chat-message-streaming-apis-work"></a>

[Amazon Connect 메시지 스트리밍 API](https://docs.aws.amazon.com/connect/latest/APIReference/Welcome.html)는 Amazon Connect 채팅 연락 내에서 특정 이벤트가 발생하면 트리거됩니다. 예를 들어 고객이 새 채팅 메시지를 보내면 이벤트가 방금 보낸 메시지에 대한 데이터가 포함된 [페이로드](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). **세부 정보** 섹션의 **유형**에서 **표준**을 선택하고 주제의 이름을 입력한 다음 **주제 생성**을 선택합니다.
**참고**  
현재 메시지 스트리밍 API는 메시지의 실시간 스트리밍을 위해 표준 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 주제를 사용하게 됩니다.

   ARN 주제는 다음 예제와 유사합니다.

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

1. **액세스 정책** 탭을 선택하고 **편집**을 선택한 다음 SNS 주제에 리소스 기반 정책을 추가하여 Amazon Connect가 게시할 수 있는 권한을 갖도록 합니다. 다음은 JSON 편집기에 복사하여 붙여넣은 다음 값으로 사용자 지정할 수 있는 샘플 SNS 정책입니다.

------
#### [ 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 API를 호출하기 위한 SDK 클라이언트를 만드는 방법에 대한 자세한 내용은 다음 주제를 참조하세요.
   + [Class 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. 이러한 응답 속성은 스트리밍을 활성화하는 데 필요한 다른 채팅 API를 호출하는 데 사용되므로 [StartChatContact](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartChatContact.html) 응답에서 `ContactId` 및 `ParticipantToken`을 추적합니다. 이에 대해서는 다음 단계에 설명합니다.

## 3단계: 고객 응대에서 메시지 스트리밍 활성화
<a name="step3-chat-streaming"></a>
+ [StartContactStreaming](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartContactStreaming.html)을 호출하여 SNS 주제에 대한 실시간 메시지 스트리밍을 활성화합니다.
  + **제한**: 고객 응대당 최대 2개의 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>
+ `ConnectParticipant` 속성을 true로 전달하여 [CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)을 호출합니다.
  + 채팅을 만든 후 5분 이내에 [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)에서 스트리밍을 활성화하고 발신자 참가자가 `Customer`인 경우에만 작동합니다.
  + 이미 `WEBSOCKET`을 사용하여 채팅 고객 응대에 성공적으로 연결한 경우에는 이 단계(참가자 연결 생성)는 선택 사항입니다.

## 다음 단계
<a name="nextsteps-chat-streaming"></a>

메시지 스트리밍 API를 사용할 준비가 모두 완료되었습니다.

1. 작동하는지 확인하려면 만든 SNS 주제에 메시지가 게시되었는지 확인하세요. 이 작업은 Amazon CloudWatch 지표를 사용하여 수행할 수 있습니다. 자세한 내용은 [CloudWatch를 사용하여 Amazon SNS 주제 모니터링](https://docs.aws.amazon.com/sns/latest/dg/sns-monitoring-using-cloudwatch.html)을 참조하세요.

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. 고객 응대 흐름을 통해 채팅 [연결이 해제](disconnect-hang-up.md)되거나 고객이 채팅 연결을 끊는 경우에는 [StopContactStreaming](https://docs.aws.amazon.com/connect/latest/APIReference/API_StopContactStreaming.html)을 사용하는 것은 선택 사항이며 필수는 아닙니다. 그러나 `StopContactStreaming`은 채팅이 활성 상태이고 진행 중이더라도 SNS 주제에 대한 메시지 스트리밍을 중지하는 옵션을 제공합니다.

# Amazon Connect에서 메시지 스트리밍을 활성화한 후 Amazon SNS 페이로드 사용 Amazon Connect
<a name="sns-payload"></a>

메시지 스트리밍을 성공적으로 활성화한 후에는 에이전트, 고객 또는 전체 참가자에게 메시지를 보내도록 메시지를 필터링해야 할 수도 있습니다.

참가자별로 필터링하려면 특정 SNS 헤더 속성(`MessageVisibility`)을 읽고 메시지가 고객 전용인지, 에이전트 전용인지, 아니면 모두를 대상으로 하는지 확인합니다.
+ 고객에게만 전송하는 경우: 고객을 대상으로 하는 모든 코드에 대해 클라이언트는 고객을 대상으로 하는 메시지를 필터링하고 고객에게 메시지를 전달하기 위해 다음과 같은 로직을 구축해야 합니다.

  ```
  if ( ( MessageVisibility == CUSTOMER || MessageVisibility == ALL)  && ParticipantRole != CUSTOMER )
  ```
+ 에이전트에게만 전송하는 경우:

  ```
  if ( ( MessageVisibility == AGENT || MessageVisibility == ALL)  && ParticipantRole != AGENT )
  ```

사용자 지정 [구독 필터링 정책](https://docs.aws.amazon.com/sns/latest/dg/sns-subscription-filter-policies.html)을 구축하여 Amazon SNS의 필터링 기능을 활용할 수도 있습니다. 이렇게 하면 메시지 필터링 로직이 SNS 주제 구독자에서 SNS 서비스 자체로 오프로드됩니다.

## 페이로드의 메시지 속성
<a name="sns-message-attributes"></a>

다음은 Amazon SNS 페이로드의 각 메시지 속성에 대한 설명입니다.
+ `InitialContactId`: 채팅의 초기 고객 응대 ID입니다.
+ `ContactId`: 채팅의 현재 고객 응대 ID입니다. 채팅에 새 에이전트가 들어왔거나 대기열에 대기 중인 고객 응대 흐름이 있는 경우에는 `InitialContactId`와 `ContactId`가 다를 수 있습니다.
+ `ParticipantRole`: 메시지를 보낸 참가자입니다.
+ `InstanceId`: Amazon Connect 인스턴스 ID입니다.
+ `AccountId`: AWS 계정 ID입니다.
+ `Type`: 가능한 값: `EVENT`, `MESSAGE`.
+ `ContentType`: 가능한 값: `application/vnd.amazonaws.connect.event.typing`, `application/vnd.amazonaws.connect.event.participant.joined`, `application/vnd.amazonaws.connect.event.participant.left`, `application/vnd.amazonaws.connect.event.transfer.succeeded`, `application/vnd.amazonaws.connect.event.transfer.failed`, `application/vnd.amazonaws.connect.message.interactive`, `application/vnd.amazonaws.connect.event.chat.ended` 등입니다.
+ `MessageVisibility`: 가능한 값: `AGENT`, `CUSTOMER`, `ALL`.

## SNS 페이로드의 예:
<a name="sns-message-payload"></a>

```
{
  "Type" : "Notification",
  "MessageId" : "ccccccccc-cccc-cccc-cccc-ccccccccccccc",
  "TopicArn" : "arn:aws:sns:us-west-2:009969138378:connector-svc-test",
  "Message" :  "{\"AbsoluteTime\":\"2021-09-08T13:28:24.656Z\",\"Content\":\"help\",\"ContentType\":\"text/plain\",\"Id\":\"333333333-be0d-4a44-889d-d2a86fc06f0c\",\"Type\":\"MESSAGE\",\"ParticipantId\":\"bbbbbbbb-c562-4d95-b76c-dcbca8b4b5f7\",\"DisplayName\":\"Jane\",\"ParticipantRole\":\"CUSTOMER\",\"InitialContactId\":\"33333333-abc5-46db-9ad5-d772559ab556\",\"ContactId\":\"33333333-abc5-46db-9ad5-d772559ab556\"}",
  "Timestamp" : "2021-09-08T13:28:24.860Z",
  "SignatureVersion" : "1",
  "Signature" : "examplegggggg/1tEBYdiVDgJgBoJUniUFcArLFGfg5JCvpOr/v6LPCHiD7A0BWy8+ZOnGTmOjBMn80U9jSzYhKbHDbQHaNYTo9sRyQA31JtHHiIseQeMfTDpcaAXqfs8hdIXq4XZaJYqDFqosfbvh56VPh5QgmeHTltTc7eOZBUwnt/177eOTLTt2yB0ItMV3NAYuE1Tdxya1lLYZQUIMxETTVcRAZkDIu8TbRZC9a00q2RQVjXhDaU3k+tL+kk85syW/2ryjjkDYoUb+dyRGkqMy4aKA22UpfidOtdAZ/GGtXaXSKBqazZTEUuSEzt0duLtFntQiYJanU05gtDig==",
  "SigningCertURL" : "https://sns.us-west-2.amazonaws.com/SimpleNotificationService-11111111111111111111111111111111.pem",
  "UnsubscribeURL" : "https://sns.us-west-2.amazonaws.com/?Action=Unsubscribe&SubscriptionArn=arn:aws:sns:us-west-2:000000000000:connector-svc-test:22222222-aaaa-bbbb-cccc-333333333333",
  "MessageAttributes" : {
    "InitialContactId" : {"Type":"String","Value":"33333333-abc5-46db-9ad5-d772559ab556"},
    "MessageVisibility" : {"Type":"String","Value":"ALL"},
    "Type" : {"Type":"String","Value":"MESSAGE"},
    "AccountId" : {"Type":"String","Value":"999999999999"},
    "ContentType" : {"Type":"String","Value":"text/plain"},
    "InstanceId" : {"Type":"String","Value":"dddddddd-b64e-40c5-921b-109fd92499ae"},
    "ContactId" : {"Type":"String","Value":"33333333-abc5-46db-9ad5-d772559ab556"},
    "ParticipantRole" : {"Type":"String","Value":"CUSTOMER"}
  }
}
```

# Amazon Connect에서 메시지 스트리밍 관련 문제 해결
<a name="troubleshoot-message-streaming"></a>

## 메시지가 SNS에 게시되지 않음
<a name="message-not-published-to-sns"></a>

이 경우 [1단계: 표준 SNS 주제 생성](chat-message-streaming.md#step1-chat-streaming)에서 다음 정보를 확인하는 것이 좋습니다.
+ [Amazon SNS FIFO(선입선출)](https://docs.aws.amazon.com/sns/latest/dg/sns-fifo-topics.html)가 아닌 표준 SNS를 사용하고 있는지 확인하세요. 현재 메시지 스트리밍 API는 메시지의 실시간 스트리밍을 위해 표준 SNS만 지원합니다.
+ 계정에 SNS 리소스 기반 권한이 올바르게 적용되었는지 확인하세요.
  + 서버 측 암호화를 활성화한 경우 암호화 및 암호 해독에 대해 동일한 Amazon Connect 서비스 주체 권한을 부여해야 합니다.

## 흐름이 시작되지 않음
<a name="contact-flow-not-starting"></a>

Websockets 대신 메시지 스트리밍 API를 사용하는 경우에는 연결 승인 이벤트를 보내세요([4단계: 참가자 연결 생성](chat-message-streaming.md#step4-chat-streaming) 참조). 이는 Websocket에 연결하는 것과 같은 의미입니다. 흐름은 연결 승인 이벤트 이후에만 시작됩니다.

[StartContactStreaming](https://docs.aws.amazon.com/connect/latest/APIReference/API_StartContactStreaming.html) 후에 [CreateParticipantConnection](https://docs.aws.amazon.com/connect-participant/latest/APIReference/API_CreateParticipantConnection.html)을 직접적으로 호출하여 `Customer`를 연결됨으로 표시합니다([3단계: 고객 응대에서 메시지 스트리밍 활성화](chat-message-streaming.md#step3-chat-streaming) 참조). 이렇게 하면 고객이 메시지를 받을 준비가 되었는지 확인한 후에 메시지가 전송됩니다.

## 문제가 해결되지 않았나요?
<a name="other-issues-message-streaming"></a>

이전 솔루션을 시도한 후에도 메시지 스트리밍에 문제가 있는 경우 지원 에 문의하여 도움을 받으세요.

Amazon Connect 관리자는 다음 옵션 중 하나를 선택하여 지원팀에 문의할 수 있습니다.
+  AWS 지원 계정이 있는 경우 [지원 센터로](https://console.aws.amazon.com/support/home) 이동하여 티켓을 제출합니다.
+ 계정이 없는 경우 [AWS Management Console](https://console.aws.amazon.com/)을 열고 **Amazon Connect**, **Support**, **사례 생성**을 선택합니다.

다음 정보를 제공하면 도움이 됩니다.
+ 고객 센터 인스턴스 ID/ARN입니다. 인스턴스 ARN을 찾으려면 [Amazon Connect 인스턴스 ID 또는 ARN 찾기](find-instance-arn.md) 섹션을 참조하세요.
+ 해당 리전.
+ 문제에 대한 자세한 설명