

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

# Amazon Chime SDK의 통화 분석 프로세서 및 출력 대상
<a name="call-analytics-processor-and-output-destinations"></a>

 미디어 인사이트 파이프라인 구성당 고유한 요소를 한 번만 지정할 수 있습니다. 모든 프로세서와 싱크는 동일한 AWS 계정에 있어야 하며 호출하는 엔드포인트와 동일한 AWS 리전에 생성해야 합니다. 예를 들어 Amazon Chime SDK 미디어 파이프라인에 `us-east-1` 엔드포인트를 사용하는 경우 `us-west-2` 리전에서 Kinesis Data Stream을 전달할 수 없습니다.

각 대상에 대한 정보를 보려면 각 섹션을 펼치세요.

## Amazon Transcribe Call Analytics 프로세서 대상
<a name="amazon-transcribe-call-analytics-processor"></a>

지원되는 싱크는 `KinesisDataStreamSink`입니다.

이 프로세서를 Amazon Transcribe 프로세서와 함께 사용할 수 없습니다. Amazon Transcribe Call Analytics에 대한 자세한 내용은 *Amazon Transcribe 개발자 안내서*의 [실시간 통화 분석](https://docs.aws.amazon.com/transcribe/latest/dg/call-analytics-streaming.html)을 참조하세요. `AmazonTranscribeCallAnalyticsProcessorConfiguration` API 호출에 `PostCallAnalyticsSettings`를 포함하여 [통화 후 분석](https://docs.aws.amazon.com/transcribe/latest/dg/tca-post-call.html)을 활성화하면 미디어 인사이트 파이프라인이 중지되고 처리가 완료되면 지정된 Amazon S3 위치에서 아티팩트를 수신합니다.

**참고**  
파이프라인을 35초 이상 일시 중지했다가 다시 시작하면 Amazon S3 버킷에서 세션 ID가 다른 별도의 파일에 호출 후 아티팩트가 생성됩니다.

통화 후 아티팩트에는 분석 JSON 파일과 오디오 녹음 WAV 또는 Opus 파일이 포함됩니다. 편집된(콘텐츠 편집을 활성화한 경우) 및 편집되지 않은 녹음 파일에 대한 Amazon S3 버킷 URL은 메타데이터 섹션의 `onetimeMetadata`의 일부로 각 Amazon Transcribe Call Analytics 통화 후 세션마다 한 번씩 Kinesis Data Stream으로 전송됩니다.

Amazon Transcribe Call Analytics을 사용한 통화 분석은 Kinesis Video Stream에서 오디오 데이터 입력을 가져옵니다.
+ 지원되는 미디어 인코딩: PCM 서명 16비트 리틀 엔디안 오디오.
+ 지원되는 미디어 샘플 속도: 8,000Hz에서 48,000Hz 사이.

Amazon Transcribe 분석 프로세스를 위한 `StreamConfiguration` 입력:
+ 각 스트림에 대해 `KinesisVideoStreamArn`을 지정해야 합니다.
+ (선택 사항) KVS `FragmentNumber`는 지정된 프래그먼트 다음에 있는 청크를 사용하여 통화 분석 작업을 시작합니다. 제공되지 않은 경우 Kinesis Video Stream의 최신 청크를 사용합니다.
+ `StreamChannelDefinition`은 누가 말하고 있는지를 정의합니다. Amazon Transcribe Call Analytics에는 2채널 오디오가 필요합니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API를 직접 호출할 때는 어떤 화자가 어느 채널에 있는지 지정해야 합니다. 예를 들어 에이전트가 먼저 말하는 경우 `ChannelId`를 `0`으로 설정하여 첫 번째 채널을 나타내고, `ParticipantRole`을 `AGENT`로 설정하여 에이전트가 말하고 있음을 나타냅니다.

**참고**  
음성 커넥터를 사용하여 Amazon Transcribe Call Analytics 프로세서가 있는 `MediaInsightsPipeline`을 만드는 경우, 음성 커넥터 계정 레그 오디오는 `AGENT`이고 PSTN 레그 오디오는 `ParticipantRole`에 대해 `CUSTOMER`입니다.  
음성 커넥터 SIPREC의 경우 SIPREC 메타데이터를 사용합니다. 대부분의 경우 사전식 값이 가장 낮은 스트림 레이블이 `AGENT`로 간주됩니다.

다음 예제는 듀얼 채널 오디오 스트림 하나에 대한 Kinesis Video Stream 입력을 보여줍니다.

```
"StreamChannelDefinition" : {
    "NumberOfChannels" : 2
    "ChannelDefinitions": [
        {
            "ChannelId": 0,
            "ParticipantRole": "AGENT"
        },
        {
            "ChannelId": 1,
            "ParticipantRole": "CUSTOMER"
        }
    ]
}
```

 반대로 다음 예에서는 서로 다른 두 Kinesis Video 스트림의 모노 입력 2개를 보여줍니다.

```
KVS-1:
    "StreamChannelDefinition" : {
        "NumberOfChannels"  : 1
        "ChannelDefinitions": [
            {
                "ChannelId": 0,
               "ParticipantRole": "AGENT"
            }
        ]
    }
KVS-2:
    "StreamChannelDefinition" : {
        "NumberOfChannels"  : 1
        "ChannelDefinitions": [
            {
                "ChannelId": 1,
               "ParticipantRole": "CUSTOMER"
            }
        ]
    }
```

## Amazon Transcribe Call Analytics 출력
<a name="amazon-transcribe-call-analytics-output"></a>

 각 Amazon Transcribe 레코드에는 `UtteranceEvent` 또는 `CategoryEvent`가 포함되지만 둘 다 포함되지는 않습니다. `CategoryEvents`에는 `TranscribeCallAnalyticsCategoryEvent`의 `detail-type`이 있습니다.

다음 예제는 Amazon Transcribe의 일회성 메타데이터 출력 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "CallAnalyticsMetadata",
    "mediaInsightsPipelineId": "string",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "oneTimeMetadata": "string" // JSON encoded string of oneTimeMetadata object
}
 
// onetimeMetadata object
{
    "inviteHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string", // siprec metadata in JSON (converted from above XML) 
    
    // If PostcallSettings are enabled for Amazon Transcribe Call Analytics
    "s3RecordingUrl": "string", 
    "s3RecordingUrlRedacted": "string"
}
 
// inviteHeaders object
{
    "string": "string"
}
```

 다음 예제는 Amazon Transcribe Call Analytics 출력 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "TranscribeCallAnalytics",
    "mediaInsightsPipelineId": "string",
    "metadata": {
        "voiceConnectorId": "string",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "direction": "string"
    },
    "UtteranceEvent": {
        "UtteranceId": "string",
        "ParticipantRole": "string",
        "IsPartial": boolean,
        "BeginOffsetMillis": number,
        "EndOffsetMillis": number,
        "Transcript": "string",
        "Sentiment": "string",
        "Items": [{
            "Content": "string",
            "Confidence": number,
            "VocabularyFilterMatch": boolean,
            "Stable": boolean,
            "ItemType": "string",
            "BeginOffsetMillis": number,
            "EndOffsetMillis": number,
        }, ]
        "Entities": [{
            "Content": "string",
            "Confidence": number,
            "Category": "string", // Only PII is supported currently
            "Type": "string",
            "BeginOffset": number,
            "EndOffset": number,
        }, ],
        "IssuesDetected": [{
            "CharacterOffsets": {
                "Begin": number,
                "End": number
            }
        }]
    },
    "CategoryEvent": {
        "MatchedCategories": ["string"],
        "MatchedDetails": {
            "string": {
                "TimestampRanges": [{
                    "BeginOffsetMillis": number,
                    "EndOffsetMillis": number
                }]
            }
        }
    }
}
```

## Amazon Chime SDK Voice Connector 스트리밍 업데이트 메타데이터
<a name="cvc-stream-update-metadata"></a>

통화 분석 구성이 Amazon Chime SDK Voice Connector와 연결된 경우 [음성 커넥터 스트리밍 업데이트](https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html)가 있을 때 다음 음성 커넥터 업데이트 페이로드가 전송됩니다.

다음 예에서는 Amazon Transcribe 프로세서 및 Transcribe 통화 분석 프로세서의 업데이트 메타데이터 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "CallAnalyticsMetadata",
    "callevent-type": "Update",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "oneTimeMetadata": "string" // JSON encoded string of oneTimeMetadata object
}
 
// onetimeMetadata object
{
    "sipHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string" // siprec metadata in JSON (converted from above XML) 
}
 
// sipHeaders object
{
    "string": "string"
}
```

다음 예에서는 통화 분석 S3 녹음의 업데이트 메타데이터 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "Recording",
    "callevent-type": "Update",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "oneTimeMetadata": "string" // JSON encoded in string of oneTimeMetadata object
}

// onetimeMetadata object
{
    "sipHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string" // siprec metadata in JSON (converted from above XML) 
}

// sipHeaders object
{
    "string": "string"
}
```

## SIP 통화 녹음 메타데이터
<a name="sip-update-metadata"></a>

다음 예에서는 Alice와 Bob이라는 두 사람 간의 SIP 통화 녹음에 대한 메타데이터를 보여줍니다. 두 참가자 모두 오디오와 비디오를 보내고 받습니다. 단순화를 위해 이 예에는 SIP 및 SDP의 코드 조각만 있으며 SRC는 각 참가자의 스트림을 믹싱 없이 SRS에 기록합니다.

```
INVITE sip:recorder@example.com SIP/2.0
   Via: SIP/2.0/TCP src.example.com;branch=z9hG4bKdf6b622b648d9
   From: <sip:2000@example.com>;tag=35e195d2-947d-4585-946f-09839247
   To: <sip:recorder@example.com>
   Call-ID: d253c800-b0d1ea39-4a7dd-3f0e20a
   Session-ID: ab30317f1a784dc48ff824d0d3715d86
    ;remote=00000000000000000000000000000000
   CSeq: 101 INVITE
   Max-Forwards: 70
   Require: siprec
   Accept: application/sdp, application/rs-metadata,
   application/rs-metadata-request
   Contact: <sip:2000@src.example.com>;+sip.src
   Content-Type: multipart/mixed;boundary=boundary
   Content-Length: [length]

   Content-Type: application/SDP
   ...
   m=audio 49170 RTP/AVP 0
   a=rtpmap:0 PCMU/8000
   a=label:96
   a=sendonly
   ...
   m=video 49174 RTP/AVPF 96
   a=rtpmap:96 H.264/90000
   a=label:97
   a=sendonly
   ...
   m=audio 51372 RTP/AVP 0
   a=rtpmap:0 PCMU/8000
   a=label:98
   a=sendonly
   ...
   m=video 49176 RTP/AVPF 96
   a=rtpmap:96 H.264/90000
   a=label:99
   a=sendonly
   ....

Content-Type: application/rs-metadata
Content-Disposition: recording-session

<?xml version="1.0" encoding="UTF-8"?>
<recording xmlns='urn:ietf:params:xml:ns:recording:1'>
  <datamode>complete</datamode>
        <group group_id="7+OTCyoxTmqmqyA/1weDAg==">
                <associate-time>2010-12-16T23:41:07Z</associate-time>
                <!-- Standardized extension -->
                <call-center xmlns='urn:ietf:params:xml:ns:callcenter'>
                        <supervisor>sip:alice@atlanta.com</supervisor>
                </call-center>
                <mydata xmlns='http://example.com/my'>
                        <structure>structure!</structure>
                        <whatever>structure</whatever>
                </mydata>
        </group>
        <session session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <sipSessionID>ab30317f1a784dc48ff824d0d3715d86;
                                      remote=47755a9de7794ba387653f2099600ef2</sipSessionID>
                <group-ref>7+OTCyoxTmqmqyA/1weDAg==
                </group-ref>
                <!-- Standardized extension -->
                <mydata xmlns='http://example.com/my'>
                        <structure>FOO!</structure>
                        <whatever>bar</whatever>
                </mydata>
        </session>
        <participant
              participant_id="srfBElmCRp2QB23b7Mpk0w==">
                <nameID aor="sip:alice@atlanta.com">
                        <naSRCme xml:lang="it">Alice</name>
                </nameID>
                <!-- Standardized extension -->
                <mydata xmlns='http://example.com/my'>
                        <structure>FOO!</structure>
                        <whatever>bar</whatever>
                </mydata>
        </participant>
        <participant
               participant_id="zSfPoSvdSDCmU3A3TRDxAw==">
                <nameID aor="sip:bob@biloxy.com">
                        <name xml:lang="it">Bob</name>
                </nameID>
                <!-- Standardized extension -->
                <mydata xmlns='http://example.com/my'>
                        <structure>FOO!</structure>
                        <whatever>bar</whatever>
                </mydata>
        </participant>
        <stream stream_id="UAAMm5GRQKSCMVvLyl4rFw=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <label>96</label>
        </stream>
        <stream stream_id="i1Pz3to5hGk8fuXl+PbwCw=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <label>97</label>
        </stream>
        <stream stream_id="8zc6e0lYTlWIINA6GR+3ag=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <label>98</label>
        </stream>
        <stream stream_id="EiXGlc+4TruqqoDaNE76ag=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <label>99</label>
        </stream>
        <sessionrecordingassoc session_id="hVpd7YQgRW2nD22h7q60JQ==">
            <associate-time>2010-12-16T23:41:07Z</associate-time>
        </sessionrecordingassoc>
        <participantsessionassoc
              participant_id="srfBElmCRp2QB23b7Mpk0w=="
              session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <associate-time>2010-12-16T23:41:07Z</associate-time>
        </participantsessionassoc>
        <participantsessionassoc
               participant_id="zSfPoSvdSDCmU3A3TRDxAw=="
               session_id="hVpd7YQgRW2nD22h7q60JQ==">
                <associate-time>2010-12-16T23:41:07Z</associate-time>
        </participantsessionassoc>
        <participantstreamassoc
              participant_id="srfBElmCRp2QB23b7Mpk0w==">
                <send>i1Pz3to5hGk8fuXl+PbwCw==</send>
                <send>UAAMm5GRQKSCMVvLyl4rFw==</send>
                <recv>8zc6e0lYTlWIINA6GR+3ag==</recv>
                <recv>EiXGlc+4TruqqoDaNE76ag==</recv>
        </participantstreamassoc>
        <participantstreamassoc
               participant_id="zSfPoSvdSDCmU3A3TRDxAw==">
                <send>8zc6e0lYTlWIINA6GR+3ag==</send>
                <send>EiXGlc+4TruqqoDaNE76ag==</send>
                <recv>UAAMm5GRQKSCMVvLyl4rFw==</recv>
                <recv>i1Pz3to5hGk8fuXl+PbwCw==</recv>
        </participantstreamassoc>
</recording>
```

다음 예에서는 한 통화 참가자가 다른 통화 참가자를 대기시켰을 때 업데이트된 메타데이터를 보여줍니다. 이 경우 `participant_id srfBElmCRp2QB23b7Mpk0w==`는 미디어 스트림만 수신하고 미디어는 전송하지 않으므로 `send` XML 요소는 생략됩니다. 반면, `participant_id zSfPoSvdSDCmU3A3TRDxAw==`는 미디어를 다른 참가자에게 보내지만 다른 참가자로부터 미디어를 수신하지는 않으므로 `recv` XML 요소는 생략됩니다.

```
INVITE sip:recorder@example.com SIP/2.0
            Via: SIP/2.0/TCP src.example.com;branch=z9hG4bKdf6b622b648d9
      From: <sip:2000@example.com>;tag=35e195d2-947d-4585-946f-09839247
      To: <sip:recorder@example.com>
      Call-ID: d253c800-b0d1ea39-4a7dd-3f0e20a
      Session-ID: ab30317f1a784dc48ff824d0d3715d86
       ;remote=f81d4fae7dec11d0a76500a0c91e6bf6
      CSeq: 101 INVITE
      Max-Forwards: 70
      Require: siprec
      Accept: application/sdp, application/rs-metadata,
      application/rs-metadata-request
      Contact: <sip:2000@src.example.com>;+sip.src
      Content-Type: multipart/mixed;boundary=foobar
      Content-Length: [length]

      Content-Type: application/SDP
      ...
      m=audio 49170 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      a=label:96
      a=sendonly
      ...
      m=video 49174 RTP/AVPF 96
      a=rtpmap:96 H.264/90000
      a=label:97
      a=sendonly
      ...
      m=audio 51372 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      a=label:98
      a=sendonly
      ...
      m=video 49176 RTP/AVPF 96
      a=rtpmap:96 H.264/90000
      a=label:99
      a=sendonly
      ....

   Content-Type: application/rs-metadata
   Content-Disposition: recording-session

      <?xml version="1.0" encoding="UTF-8"?>
        <recording xmlns='urn:ietf:params:xml:ns:recording:1'>
          <datamode>partial</datamode>
            <participantstreamassoc
             participant_id="srfBElmCRp2QB23b7Mpk0w==">
             <recv>8zc6e0lYTlWIINA6GR+3ag==</recv>
             <recv>EiXGlc+4TruqqoDaNE76ag==</recv>
            </participantstreamassoc>
            <participantstreamassoc
             participant_id="zSfPoSvdSDCmU3A3TRDxAw==">
              <send>8zc6e0lYTlWIINA6GR+3ag==</send>
              <send>EiXGlc+4TruqqoDaNE76ag==</send>
             </participantstreamassoc>
           </recording>
```

다음 예에서는 통화가 재개될 때의 메타데이터 업데이트를 보여줍니다. 이제 페이로드에는 `send` 및 `recv` XML 요소가 포함됩니다.

```
INVITE sip:recorder@example.com SIP/2.0
      Via: SIP/2.0/TCP src.example.com;branch=z9hG4bKdf6b622b648d9
      From: <sip:2000@example.com>;tag=35e195d2-947d-4585-946f-09839247
      To: <sip:recorder@example.com>
      Call-ID: d253c800-b0d1ea39-4a7dd-3f0e20a
      Session-ID: ab30317f1a784dc48ff824d0d3715d86
       ;remote=f81d4fae7dec11d0a76500a0c91e6bf6
      CSeq: 101 INVITE
      Max-Forwards: 70
      Require: siprec
      Accept: application/sdp, application/rs-metadata,
      application/rs-metadata-request
      Contact: <sip:2000@src.example.com>;+sip.src
      Content-Type: multipart/mixed;boundary=foobar
      Content-Length: [length]

      Content-Type: application/SDP
      ...
      m=audio 49170 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      a=label:96
      a=sendonly
      ...
      m=video 49174 RTP/AVPF 96
      a=rtpmap:96 H.264/90000
      a=label:97
      a=sendonly
      ...
      m=audio 51372 RTP/AVP 0
      a=rtpmap:0 PCMU/8000
      a=label:98
      a=sendonly
      ...
      m=video 49176 RTP/AVPF 96
      a=rtpmap:96 H.264/90000
      a=label:99
      a=sendonly
      ....
    
   Content-Type: application/rs-metadata
   Content-Disposition: recording-session

      <?xml version="1.0" encoding="UTF-8"?>
        <recording xmlns='urn:ietf:params:xml:ns:recording:1'>
          <datamode>partial</datamode>
            <participantstreamassoc
             participant_id="srfBElmCRp2QB23b7Mpk0w==">
             <send>i1Pz3to5hGk8fuXl+PbwCw==</send>
             <send>UAAMm5GRQKSCMVvLyl4rFw==</send>
             <recv>8zc6e0lYTlWIINA6GR+3ag==</recv>
             <recv>EiXGlc+4TruqqoDaNE76ag==</recv>
            </participantstreamassoc>
            <participantstreamassoc
             participant_id="zSfPoSvdSDCmU3A3TRDxAw==">
              <send>8zc6e0lYTlWIINA6GR+3ag==</send>
              <send>EiXGlc+4TruqqoDaNE76ag==</send>
              <recv>i1Pz3to5hGk8fuXl+PbwCw==</recv>
             <recv>UAAMm5GRQKSCMVvLyl4rFw==</recv>
             </participantstreamassoc>
           </recording>
```

## Amazon Transcribe 프로세서 대상
<a name="amazon-transcribe-processors"></a>

지원되는 싱크는 `KinesisDataStreamSink`입니다.

이 프로세서를 Amazon Transcribe Call Analytics와 결합할 수 없습니다. Amazon Transcribe의 입력 및 출력에 대한 자세한 내용은 *Amazon Transcribe 개발자 안내서*의 [ Transcribe 스트리밍 오디오](https://docs.aws.amazon.com/transcribe/latest/dg/streaming.html)를 참조하세요.

Amazon Transcribe를 사용한 통화 분석 세션에서는 Kinesis Video Stream에서 오디오 데이터를 입력합니다.
+ 지원되는 MediaEncoding: PCM 서명 16비트 리틀 엔디안 오디오.
+ 지원되는 MediaSampleRate 샘플링 속도: 8,000Hz에서 48,000Hz 사이.

 Amazon Transcribe 프로세서용 `StreamConfiguration` 입력: 
+ 각 스트림에 대해 `KinesisVideoStreamArn`을 지정해야 합니다.
+ (선택 사항) KVS `FragmentNumber` - 특정 프래그먼트 뒤에 있는 청크를 사용하여 통화 분석 작업을 시작합니다. 제공되지 않으면 Kinesis Video Stream에서 사용 가능한 최신 청크를 사용합니다.
+ `StreamChannelDefinition` Amazon Transcribe는 현재 두 채널의 오디오를 지원합니다. `StreamChannelDefinition` 런타임에서 `NumberOfChannels`를 지정해야 합니다. 또한 모노 오디오를 두 개의 별도 채널로 전송하는 경우 반드시 `ChannelId`를 전달해야 합니다. 트랜스크립트에서 채널에는 `ch_0` 및 `ch_1` 레이블이 지정됩니다. 다음 예제는 하나의 모노 오디오 채널 스트림에 대한 KVS 입력을 보여줍니다.

```
"StreamChannelDefinition" : {"
    NumberOfChannels" : 1
}
```

 다음 예제는 서로 다른 두 스트림의 두 모노 오디오 입력에 대한 KVS 입력을 보여줍니다.

```
KVS-1:
    "StreamChannelDefinition" : {
        "NumberOfChannels"  : 1
        "ChannelDefinitions": [
            {
                "ChannelId": 0
            }
        ]
    }
KVS-2:
    "StreamChannelDefinition" : {
        "NumberOfChannels"  : 1
        "ChannelDefinitions": [
            {
                "ChannelId": 1
            }
        ]
    }
```

**참고**  
Amazon Transcribe 프로세서로 생성된 `MediaInsightsPipeline`의 경우, 보이스 커넥터 계정 레그 오디오는 `channel-0`에, PSTN 레그 오디오는 `channel-1`에 할당됩니다.  
음성 커넥터 SIPREC의 경우 SIPREC 메타데이터를 사용합니다. 대부분의 경우 사전 값이 가장 낮은 스트림 레이블이 `channel-0`에 할당됩니다.  
Amazon Transcribe 및 Amazon Transcribe Call Analytics 프로세서의 경우 두 개의 Kinesis Video 스트림을 전달하고 각 스트림에 모노 오디오 채널이 포함되어 있는 경우 Transcribe 또는 Transcribe 통화 분석 데이터를 처리하기 전에 두 채널을 단일 오디오 스트림으로 인터리브합니다.

## Amazon Transcribe 출력
<a name="amazon-transcribe-output"></a>

다음 예제는 Amazon Transcribe의 일회성 메타데이터 출력 형식을 보여 줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "CallAnalyticsMetadata",
    "mediaInsightsPipelineId": "string",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "oneTimeMetadata": "string" // JSON encoded string of oneTimeMetadata object
}
 
// onetimeMetadata object
{
    "inviteHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string" // siprec metadata in JSON (converted from above XML) 
}
 
// inviteHeaders object
{
    "string": "string"
}
```

다음 예제는 Amazon Transcribe 출력 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "Transcribe",
    "mediaInsightsPipelineId": "string",
    "metadata": {
        "voiceconnectorId": "string",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "direction": "string"
    }
    "TranscriptEvent": {
        "Transcript": {
            "Results": [{
                "Alternatives": [{
                    "Entities": [{
                        "Category": "string",
                        "Confidence": number,
                        "Content": "string",
                        "EndTime": number,
                        "StartTime": number,
                        "Type": "string"
                    }],
                    "Items": [{
                        "Confidence": number,
                        "Content": "string",
                        "EndTime": number,
                        "Speaker": "string",
                        "Stable": boolean,
                        "StartTime": number,
                        "Type": "string",
                        "VocabularyFilterMatch": boolean
                    }],
                    "Transcript": "string"
                }],
                "ChannelId": "string",
                "EndTime": number,
                "IsPartial": boolean,
                "LanguageCode": "string",
                "LanguageIdentification": [{
                    "LanguageCode": "string",
                    "Score": number
                }],
                "ResultId": "string",
                "StartTime": number
            }]
        }
    }
}
```

## 음성 분석 프로세서 대상
<a name="voice-analytics-processor"></a>

 지원되는 싱크는 `KinesisDataStreamSink`, `SqsQueueSink`, `SnsTopicSink`, `LambdaFunctionSink`입니다.

 이 프로세서를 Amazon Transcribe Call Analytics 프로세서, Amazon Transcribe 프로세서 또는 통화 레코딩과 결합할 수 있습니다. [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html) API를 사용하여 음성 분석 프로세서를 간접 호출해야 합니다. 음성 분석 사용에 대한 자세한 내용은 [Amazon Chime SDK 음성 분석 사용](https://docs.aws.amazon.com/chime-sdk/latest/dg/voice-analytics.html)을 참조하세요.

## 싱크로 Kinesis Data Streams 사용
<a name="kinesis-data-stream-destination"></a>

통화 분석을 통해 생성되는 KDS(Kinesis Data Stream) 레코드에는 미디어 파이프라인 ID, 세부 정보 유형, 메타데이터, 프로세서별 섹션이 포함됩니다. Kinesis Data Stream의 데이터 소비에 대한 자세한 내용은 *Amazon Kinesis Streams 개발자 안내서*의 [Amazon Kinesis Data Streams에서 데이터 읽기](https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html)를 참조하세요. 이 싱크를 사용하여 구성을 생성하려면 지정된 스트림에 대한 `kinesis:DescribeStream` 권한이 있어야 합니다.

 **Metadata**

 생성된 KDS 레코드의 `metadata` 섹션에는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API 직접 호출 중에 `CallAnalyticsRuntimeMetadata`에 지정된 키-값 페어가 포함됩니다. 음성 커넥터로 통화 분석 세션을 시작한 경우 메타데이터 섹션이 다음 파라미터로 자동으로 채워집니다.
+ `transactionId`
+ `fromNumber`
+ `toNumber`
+ `callId`
+ `voiceConnectorId`
+ `direction`

 위에 표시된 파라미터 외에도 음성 커넥터에서 시작한 통화 분석 세션의 메타데이터 섹션에는 다음이 포함된 `oneTimeMetadata` 필드가 채워집니다.
+ `inviteHeaders`
+ `siprecMetadata`

이는 세션이 시작될 때 한 번만 Kinesis Data Stream에 게시되며, `detail-type`은 `CallAnalyticsMetadata`입니다.

각 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API 직접 호출마다 `MediaInsightsRuntimeMetadata`에 고유 식별자를 전달하여 Kinesis Data Stream으로 전달되는 각 레코드의 출처를 고유하게 식별할 수 있습니다.

## Amazon S3 통화 녹음
<a name="amazon-s3-call-recording"></a>

 통화 분석 녹음은 KVS 스트림에서 오디오를 읽고, 오디오 파일로 녹음하고, 파일을 지정된 Amazon S3 버킷에 업로드합니다. 또한 통화 분석은 녹음 후 파일 위치와 함께 통화 메타데이터를 KDS로 보냅니다. 데이터 웨어하우스를 활성화하면 호출 메타데이터(SIPREC가 사용된 경우 SIPREC 메타데이터 포함)가 쿼리할 수 있는 Parquet 테이블 세트로 데이터 웨어하우스에 전달됩니다.

다른 통화 분석 프로세서와 마찬가지로 파이프라인에 대한 구성을 먼저 만들어야 합니다. Amazon Chime SDK 콘솔 또는 CLI를 사용하여 새 구성을 생성할 수 있습니다. 그런 다음 CLI를 사용하여 파이프라인을 생성합니다. 콘솔을 사용하여 녹화 구성을 만드는 방법에 대한 자세한 내용은 이 섹션 앞부분에 있는 [Amazon Chime SDK의 통화 분석 구성 생성](creating-ca-configuration.md) 항목을 참조하세요. 기록 워크플로 사용에 대한 자세한 내용은 이 섹션 앞부분에 있는 [Amazon Chime SDK의 통화 녹음 워크플로 이해](recording-workflows.md) 항목을 참조하세요.

 **CLI를 사용하여 구성 생성**

 다음 명령을 실행합니다.

```
aws chime-sdk-media-pipeline create-media-insights-pipeline-configuration --cli-input-json file://configuration.json 
```

 다음 예제에서는 레코딩만 사용 설정된 구성 JSON 파일을 보여줍니다.

```
{
    "MediaInsightsPipelineConfigurationName": configuration_name,
    "ResourceAccessRoleArn": role_arn,
    "Elements": [
        {
            "KinesisDataStreamSinkConfiguration": {
                "InsightsTarget": KDS_arn //Where recording live metadata will be delivered.
            },
            "Type": "KinesisDataStreamSink"
        },
        {
            "S3RecordingSinkConfiguration": {
                "Destination": "arn:aws:s3:::kvs-recording-testing",
                "RecordingFileFormat": file_format // Specify "Opus" or "WAV" as the recording file format.
            },
            "Type": "S3RecordingSink"
        }         
    ]
}
```

다음 사항에 유의하세요.
+ Kinesis Video Stream을 통해 통화 녹음을 활성화하려면 오디오는 PCM 서명 16비트 리틀 엔디안 형식이어야 합니다. 샘플 레이트는 8kHz여야 합니다.
+ 빌더는 Kinesis Video Stream의 데이터 보존 기간을 충분히 길게 설정하여 통화 분석을 통해 프래그먼트를 보존하고 사용할 수 있도록 해야 합니다.
+ 통화 레코딩을 단독으로 또는 다른 프로세서와 조합하여 활성화하는 경우 녹음용 Kinesis Video Stream ARN 2개를 제공해야 합니다. 통화 레코딩은 단일 스테레오 오디오 입력을 지원하지 않습니다.

## Amazon S3 통화 레코딩 메타데이터 출력
<a name="s3-recording-metadata-output"></a>

다음 예는 통화 분석 Amazon S3 녹음을 위한 메타데이터 출력 형식을 보여줍니다.

```
{
    "time": "string", // ISO8601 format
    "service-type": "CallAnalytics",
    "detail-type": "Recording",   
    "mediaInsightsPipelineId": "string",
    "s3MediaObjectConsoleUrl": "string",
    "recordingDurationSeconds": "number",
    "metadata": "string" // JSON encoded string of the metadata object
}

// metadata object
{
    "voiceConnectorId": "string",
    "callId": "string",
    "transactionId": "string",
    "fromNumber": "string",
    "toNumber": "string",
    "direction": "string",
    "startTime": "string", // ISO8601 format
    "endTime": "string", // ISO8601 format
    "oneTimeMetadata": "string" // JSON encoded in string of oneTimeMetadata object
}

// onetimeMetadata object
{
    "sipHeaders": "string", // JSON encoded string of SIP Invite headers key-value pair
    "siprecMetadata": "string", // siprec metadata in XML 
    "siprecMetadataJson": "string" // siprec metadata in JSON (converted from above XML) 
}

// sipHeaders object
{
    "string": "string"
}
```

## 음성 향상 활성화
<a name="voice-enhancement-sink"></a>

음성 향상을 활성화하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API 직접 호출에 `VoiceEnhancementSinkConfiguration` 요소를 포함합니다.

이 예제는 일반적인 요소를 보여줍니다.

```
{
  "Type":"VoiceEnhancementSink",
  "VoiceEnhancementSinkConfiguration": {
       "Disabled": Boolean (string) // FALSE ==> Voice Enhancement will be performed
}
```

구성을 업데이트하려면 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html) API 직접 호출에 `VoiceEnhancementSinkConfiguration` 요소를 추가합니다. 이 경우 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaInsightsPipelineConfiguration.html) API는 결과에 `VoiceEnhancementSinkConfiguration` 요소를 포함합니다.

이 예제 요청은 음성 향상 및 Amazon S3 녹음을 활성화하는 방법을 보여줍니다.

```
POST /media-insights-pipeline-configurations HTTP/1.1
Content-type: application/json

{
   "MediaInsightsPipelineConfigurationName":"media_insights_configuration_name",
   "ResourceAccessRoleArn":"arn:aws:iam::account_id:role/resource_access_role",
   "Elements":[
      {
         "Type":"S3RecordingSink",
         "S3RecordingSinkConfiguration":{
            "Destination":"arn:aws:s3:::input_bucket_path",
            "RecordingFileFormat":"Wav"
         }
      },
      {
         "Type":"VoiceEnhancementSink",
         "VoiceEnhancementSinkConfiguration": {
            "disabled":"false"
         }
      }
   ],
   "ClientRequestToken":"client_request_token"
}
```

**참고**  
통화 분석 구성의 `S3RecordingSink` 요소에는 항상 `VoiceEnhancementSink` 요소가 필요합니다.

# Amazon Chime SDK의 트랜스크립션과 레코딩 싱크 결합
<a name="combining-recording-transcription"></a>

Amazon Transcribe 및 Amazon Transcribe Call Analytics를 Amazon S3 레코딩 싱크와 결합할 수 있습니다. 빌더는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) API 직접 호출 또는 콘솔을 사용하여 Amazon Transcribe 프로세서 외에도S3RecordingSinkConfiguration을 전달할 수 있습니다.

Amazon S3 레코딩 싱크와 함께 Amazon Transcribe 또는 Amazon Transcribe Call Analytics를 사용할 수 있지만 둘 다 사용할 수는 없습니다. 트랜스크립션 프로세서가 있든 없든 녹음 싱크 외에도 동일한 구성에 음성 분석을 추가할 수도 있습니다.

**참고**  
위에 나열된 프로세서 중 하나로 녹음을 활성화할 수 있습니다. 하지만 Amazon S3 통화 녹음과 함께 Amazon Transcribe Call Analytics를 활성화하는 경우 두 개의 Kinesis 비디오 스트림을 제공해야 하며, Amazon Transcribe Call Analytics와 Amazon S3 통화 녹음에서 각각 하나씩 중복된 녹음 파일을 받게 됩니다.

다음 사항에 유의하세요.
+ 고유한 `MediaInsightsPipelineConfigurationName`을 사용해야 합니다.
+ `ResourceAccessRoleArn`에 대한 자세한 내용은 이 안내서의 [Amazon Chime SDK의 통화 분석 리소스 액세스 역할 사용](call-analytics-resource-access-role.md) 섹션을 참조하세요.
+ `Destination` 값은 S3 경로 ARN이어야 합니다. Amazon S3 버킷은 동일한 계정이 소유해야 합니다.
+ Transcribe 및 레코딩이 포함된 구성을 사용하여 파이프라인을 생성하는 경우 일시 중지 및 다시 시작은 Kinesis Data 스트림에서 생성된 인사이트에만 나타납니다. KVS 스트림의 모든 데이터는 기록되고 Amazon S3에 업로드됩니다.
+ 구성에서 레코딩 외에 Amazon Transcribe 또는 TCA(Transcribe Call Analytics)를 사용하는 경우, 미디어 인사이트 파이프라인은 트랜스크립션 또는 Transcribe Call Analytics 인사이트를 실시간으로 제공하고, 통화 종료 시 Amazon S3 레코딩을 제공합니다. 통화 분석 중에 트랜스크립션 서비스가 실패하더라도 S3 레코딩 작업은 계속 실행을 시도합니다. 반대로, Amazon S3 기록 실패는 트랜스크립션이 완료된 후에 실행되므로 트랜스크립션 인사이트에 영향을 주지 않습니다.

이 예제는 Amazon Transcribe 프로세서와 Amazon S3 레코딩 싱크를 사용한 구성을 보여줍니다. 또한 이 예제는 부분적인 결과 안정화를 지원하여 출력 지연 시간을 줄일 수 있지만 정확도에는 영향을 미칠 수 있습니다. 자세한 내용은 Amazon Transcribe 개발자 안내서**의 [일부 결과 안정화](https://docs.aws.amazon.com/transcribe/latest/dg/streaming-partial-results.html#streaming-partial-result-stabilization)를 참조하세요.

```
{
    "MediaInsightsPipelineConfigurationName": unique_configuration_name,
    "ResourceAccessRoleArn": role_arn,
    "Elements": [{
            "AmazonTranscribeProcessorConfiguration": {
                "ContentIdentificationType": "string",
                "ContentRedactionType": "string",
                "EnablePartialResultsStabilization": boolean, //Enables partial result stabilization. Can reduce latency. May impact accuracy. 
                "FilterPartialResults": boolean, //To control partial utterance events
                "LanguageCode": "string",
                "LanguageModelName": "string",
                "PartialResultsStability": "string",
                "PiiEntityTypes": "string",
                "ShowSpeakerLabel": boolean,
                "VocabularyFilterMethod": "string",
                "VocabularyFilterName": "string",
                "VocabularyName": "string"
            },
            "Type": "AmazonTranscribeProcessor"
        },
        {
            "KinesisDataStreamSinkConfiguration": {
                "InsightsTarget": KDS_arn //Where recording and insights live metadata will be delivered.
            },
            "Type": "KinesisDataStreamSink"
        },
        {
            "S3RecordingSinkConfiguration": {
                "Destination": S3_Arn,
                "RecordingFileFormat": file_format // Specify "Opus" or "WAV" as the recording file format.
            },
            "Type": "S3RecordingSink"
        }
    ]
}
```

# Amazon Chime SDK에 Amazon EventBridge 알림 사용
<a name="using-eventbridge-notifications"></a>

Amazon Chime SDK Call Analytics는 미디어 인사이트 파이프라인 상태가 변경되거나 통화 분석 실시간 알림 조건이 충족될 때 기본 EventBridge 버스로 이벤트를 전송할 수 있도록 지원합니다. 미디어 인사이트 파이프라인 오류 상태 업데이트의 경우 리소스가 비동기적으로 실패할 경우 이를 알리도록 EventBridge 대상을 구성하는 것이 좋습니다. 통화 분석 알림에는 aws.chime 소스와 다양한 세부 정보 유형이 있으며, 이는 다음 섹션에서 공유됩니다. 자세한 내용은 [Amazon EventBridge 사용자 설명서](https://docs.aws.amazon.com/eventbridge/latest/userguide/eb-what-is.html)를 참조하세요.

**Topics**
+ [상태 업데이트](#status-updates)
+ [실시간 경고](#realtime-alerts)

## 상태 업데이트
<a name="status-updates"></a>

 미디어 인사이트 파이프라인은 통화 분석 세션이 진행되면서 성공적으로 종료되거나 오류가 발생할 때 EventBridge 알림을 보냅니다. 다음과 같은 경우 ‘미디어 인사이트 상태 변경’ 세부 정보 유형이 포함된 EventBridge 알림을 받게 됩니다.
+ 미디어 파이프라인의 상태가 바뀝니다.
+ 미디어 파이프라인 요소의 상태가 바뀝니다.
+ 파이프라인 요소가 중지됩니다.
+ 파이프라인 요소가 실패합니다.

세부 정보 섹션에는 항상 다음 필드가 포함됩니다.
+ `version`
+ `mediaInsightsPipelineArn`
+ `eventType`

미디어 인사이트 파이프라인에 분석 프로세서, 데이터 싱크 등 여러 요소가 포함된 경우 세부 정보 섹션에는 `mediaInsightsPipelineElementStatuses` 필드도 포함됩니다. 이 필드는 파이프라인 내 각 요소의 상태를 나타냅니다. 각 파이프라인 요소의 가능한 상태는 다음과 같을 수 있습니다.
+ `NotStarted`
+ `InProgress`
+ `Stopped`
+ `Failed`

 세부 정보 섹션에는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) API 직접 호출 중에 `MediaInsightsRuntimeMetadata`에 지정된 모든 키-값 페어도 포함됩니다. 음성 커넥터로 통화 분석 세션을 시작한 경우 메타데이터 섹션은 다음 파라미터로 자동으로 채워집니다.
+ `transactionId`
+ `fromNumber`
+ `toNumber`
+ `callId`
+ `voiceConnectorId`
+ `direction`

 미디어 인사이트 파이프라인에 단일 요소가 포함될 때마다 다음과 같은 이벤트 유형이 나타날 수 있습니다. 각 섹션을 펼쳐 자세히 알아보세요.

### Amazon Chime SDK 미디어 인사이트 진행 중
<a name="insights-in-progress"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsInProgress",
        "version": "0",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string"
    }
}
```

### Amazon Chime SDK 미디어 인사이트 일시 중지
<a name="insights-paused"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsPaused",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string"
    }
}
```

### Amazon Chime SDK 미디어 인사이트 중지
<a name="insights-stoppped"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsStopped",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string"
    }
}
```

### Amazon Chime SDK 미디어 인사이트 일시적 실패
<a name="insights-temp-failure"></a>

서비스에 일시적인 장애가 발생하여 재시도를 시도할 것임을 나타냅니다. 아무 조치도 필요하지 않습니다.

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsTemporaryFailure",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string"
    }
}
```

### Amazon Chime SDK 미디어 인사이트 영구 실패
<a name="insights-perm-failure"></a>

사용자의 조치가 필요한 장애를 나타냅니다. `failureReason`을 사용하여 문제를 해결하세요. 일반적인 장애에는 다음이 포함될 수 있습니다.
+ 리소스 액세스 역할에 대한 권한이 부족함
+ 누락되거나 삭제된 리소스
+ 분석을 호출하는 AWS 서비스에서 제한하면 Amazon Transcribe 또는 Amazon Kinesis와 같이 사용자를 대신하여가 호출합니다.
+ KVS 스트림의 미디어 형식이 호환되지 않습니다.

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": {
        "version": "0",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsPermanentFailure",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string",
        "failureReason": "string"              
    }
}
```

**참고**  
`failureReason` 필드는 선택 사항입니다. 예를 들어, 일반적인 이유는 `Access denied when assuming resource access role`일 수 있습니다.

다음 이벤트 유형은 Amazon Chime SDK 음성 커넥터에 의해 시작된 통화 분석 세션에 대해 미디어 인사이트 파이프라인이 만들어지거나 만들어지려는 시도가 실패할 때마다 나타날 수 있습니다. 각 섹션을 펼쳐 자세히 알아보세요.

### Amazon Chime SDK 미디어 인사이트 생성됨
<a name="vc-pipeline-created"></a>

이 예제는 일반적인 성공 이벤트를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": 
    {
        "version": "0",
        "mediaInsightsPipelineConfigurationArn": "string",
        "mediaInsightsPipelineArn": "string",
        "eventType": "chime:MediaInsightsCreated",
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string",
    }
}
```

### Amazon Chime SDK 미디어 인사이트 생성 실패
<a name="vc-pipeline-failed"></a>

이 예시는 일반적인 장애 이벤트를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights State Change",     
    "source": "aws.chime", 
    "account": number,
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ",
    "resources": [] 
    "detail": 
    {
        "version": "0",
        "mediaInsightsPipelineConfigurationArn": "string",
        "eventType": "chime:MediaInsightsCreateFailed", 
        "callId": "string",
        "transactionId": "string",
        "fromNumber": "string",
        "toNumber": "string",
        "voiceConnectorId": "string", 
        "direction": "string",
        "failureOrigin": "Voice Connector",
        "httpStatusCode": "string",
        "failureReason": "string"
    }
}
```

미디어 인사이트 파이프라인에 여러 요소가 포함된 경우 다음과 같은 이벤트 유형이 나타날 수 있습니다. 예제 알림은 다음과 `S3RecordingSink`와 결합된 `AmazonTranscribeProcessor`에 대한 것입니다. 각 섹션을 펼쳐 자세히 알아보세요.

### AmazonTranscribeProcessor가 진행 중이며 S3RecordingSink가 시작되지 않음
<a name="processor-running-sink-not-started"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsInProgress",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "InProgress",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "NotStarted",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor가 성공했고 S3RecordingSink가 진행 중임
<a name="processor-success-sink-in-progress"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsInProgress",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Stopped",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "InProgress",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor에 장애가 발생했고 S3RecordingSink가 진행 중임
<a name="processor-fail-sink-in-process"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsInProgress",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Failed",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "InProgress",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor에 장애가 발생했고 S3RecordingSink가 성공함
<a name="processor-fail-record-finish"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsPermanentFailure",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Failed",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "Stopped",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string",
        "failureReason": "string" 
    } 
}
```

### AmazonTranscribeProcessor가 성공했고 S3RecordingSink에 장애가 발생함
<a name="processor-success-recording-fail"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsPermanentFailure",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Stopped",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "Failed",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string",
        "failureReason": "string" 
    } 
}
```

### AmazonTranscribeProcessor가 일시 중지되고S3RecordingSink가 시작되지 않음
<a name="processor-pause-recording-no-start"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsPaused",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Paused",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "NotStarted",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor가 일시적으로 실패하고S3RecordingSink가 시작되지 않았음
<a name="processor-temp-fail-recording-no-start"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsTemporaryFailure",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "TemporarilyFailed",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "NotStarted",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### AmazonTranscribeProcessor와 S3RecordingSink가 성공함
<a name="processor-sink-success"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
    "version": "0", 
    "id": "string",
    "detail-type": "Media Insights State Change", 
    "source": "aws.chime", 
    "account": number, 
    "region": "string",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail": {
        "version": "0", 
        "mediaInsightsPipelineArn": "string", 
        "eventType": "chime:MediaInsightsStopped",
        "mediaInsightsPipelineElementStatuses": [
            { 
                "type": "AmazonTranscribeProcessor", 
                "status": "Stopped",
                "updatedOn": 1686184070655             
            },
            { 
                "type": "S3RecordingSink", 
                "status": "Stopped",
                "updatedOn": 1686184070655 
            }
        ] 
        "callId": "string", 
        "transactionId": "string", 
        "fromNumber": "string", 
        "toNumber": "string", 
        "voiceConnectorId": "string", 
        "direction": "string" 
    } 
}
```

### S3RecordingSink가 성공하고 VoiceEnhancement 진행 중
<a name="voice-enhancement-sink-inprogress"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
  "version": "0",
  "id": "string",
  "detail-type": "Media Insights State Change",
  "source": "aws.chime",
  "account": number,
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "string",
  "detail": {
    "mediaInsightsPipelineArn": "string",
    "eventType": "chime:MediaInsightsInProgress",
    "version": "0",
    "mediaInsightsPipelineElementStatuses": [
      {
        "type": "VoiceEnhancementSink",
        "status": "InProgress",
        "updatedOn": 1686184070655
      },
      {
        "type": "S3RecordingSink",
        "status": "Stopped",
        "updatedOn": 1686184070655
      }
    ]
  }
}
```

### 30분이 넘는 통화로 인해 S3RecordingSink는 성공하고 VoiceEnhancement는 실패함
<a name="voice-enhancement-sink-fail-longerthan30minutes"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
  "version": "0",
  "id": "string",
  "detail-type": "Media Insights State Change",
  "source": "aws.chime",
  "account": number,
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "string",
  "detail": {
    "mediaInsightsPipelineArn": "string",
    "eventType": "chime:MediaInsightsStopped",
    "version": "0",
    "mediaInsightsPipelineElementStatuses": [
      {
        "type": "VoiceEnhancement",
        "status": "NotSupported",
        "updatedOn": 1686184070655,
        "statusDetail": "Unsupported recording length"
      },
      {
        "type": "S3RecordingSink",
        "status": "Stopped",
        "updatedOn": 1686184070655
      }
    ]
  }
}
```

### 30분 미만의 통화로 인해 S3RecordingSink는 성공했지만 VoiceEnhancement는 실패함
<a name="voice-enhancement-sink-fail-lessthan30minutes"></a>

이 예제는 일반적인 이벤트 구조를 보여줍니다.

```
{
  "version": "0",
  "id": "string",
  "detail-type": "Media Insights State Change",
  "source": "aws.chime",
  "account": number,
  "time": "yyyy-mm-ddThh:mm:ssZ",
  "region": "string",
  "detail": {
    "mediaInsightsPipelineArn": "string",
    "eventType": "chime:MediaInsightsPermanentFailure",
    "version": "0",
    "mediaInsightsPipelineElementStatuses": [
      {
        "type": "VoiceEnhancement",
        "status": "Failed",
        "updatedOn": 1686184070655
      },
      {
        "type": "S3RecordingSink",
        "status": "Stopped",
        "updatedOn": 1686184070655
      }
    ]
  }
}
```

## 실시간 경고
<a name="realtime-alerts"></a>

**참고**  
Amazon Transcribe 및 Amazon Transcribe Call Analytics 프로세서만 실시간 알림을 지원합니다.

 Amazon Chime SDK 통화 분석을 사용하면 개발자가 분석 세션 중에 프로세서를 통해 실시간 알림을 보내는 규칙을 설정할 수 있습니다. 알림은 세부 정보 유형 `Media Insights Rules Matched`와 함께 Amazon EventBridge로 전송됩니다. EventBridge는 Lambda, Amazon SQS, Amazon SNS와 같은 다운스트림 서비스와의 통합을 지원하여 최종 사용자를 위한 알림을 트리거하거나 다른 사용자 지정 비즈니스 로직을 시작합니다.

 실시간 알림은 `MediaInsightsPipelineConfiguration`에 대한 `RealTimeAlertConfiguration` 필드의 일부로 설정됩니다. Amazon Chime SDK 콘솔을 사용하여 필드를 구성하거나 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html) 또는 [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html) API를 직접 호출할 수 있습니다.

 이 예제는 API를 통해 실시간 알림 구성을 생성하거나 업데이트하는 방법을 보여줍니다.

```
{
    "MediaInsightsPipelineConfigurationName": "config_name",
    "ResourceAccessRoleArn": "arn:aws:iam::account_id:role/role_name",
    "RealTimeAlertConfiguration": {
        "Disabled": false,
        "Rules": [{
                "Type": "KeywordMatch",
                "KeywordMatchConfiguration": {
                    "RuleName": "rule_name_1",
                    "Keywords": [
                        "hello",
                        "thank you"
                    ],
                    "Negate": false
                }
            },
            {
                "Type": "Sentiment",
                "RuleName": "rule_name_2",
                "SentimentType": "NEGATIVE",
                "TimePeriod": 60
            },
            {
                "Type": "IssueDetection",
                "RuleName": "rule_name_3"
            }
        ]
    },
    "Elements": [{
            "Type": "AmazonTranscribeCallAnalyticsProcessor",
            "AmazonTranscribeCallAnalyticsProcessorConfiguration": {
                "LanguageCode": "en-US"
            }
        },
        {
            "Type": "KinesisDataStreamSink",
            "KinesisDataStreamSinkConfiguration": {
                "InsightsTarget": "arn:aws:kinesis:us-east-1:account_id:stream/stream_name"
            }
        }
    ]
}
```

실시간 알림 구성의 각 규칙은 독립적으로 트리거됩니다. 여러 규칙 조건이 동시에 충족되는 경우 EventBridge 알림을 여러 개 받을 수 있습니다. 알림에 대한 규칙 목록을 만들려면 다음 규칙 유형 중에서 선택할 수 있습니다.

키워드 일치  
발화 또는 트랜스크립트 이벤트에서 지정된 키워드 또는 구문 세트가 일치하면 알림을 보냅니다. 다음과 같은 경우 이벤트가 발생하도록 알림을 구성할 수 있습니다.  
+ 지정된 키워드가 모두 음성으로 전달되며, `Negate`는 `false`로 설정됩니다.
+ `Negate`가 `true`로 설정된 경우 지정된 모든 키워드는 통화 전체에 걸쳐 음성으로 전달되지 않은 것으로 처리됩니다.
Amazon Transcribe 및 Amazon Transcribe 애널리틱스는 이 규칙 유형을 지원합니다.

감정 분석  
특정 감정 유형이 일정 기간 동안 지속되면 알림을 보냅니다. Transcribe Call Analytics만 이 규칙을 지원합니다.

문제 감지  
발화 이벤트에서 문제가 감지되면 경보를 보냅니다. Transcribe Call Analytics만 이 규칙 유형을 지원합니다.

다음 예제는 `KeywordMatch` 규칙에 대한 실시간 알림 이벤트를 보여줍니다.

```
{
    "version": "0",
    "id": "string",
    "detail-type": "Media Insights Rules Matched", 
    "source": "aws.chime", 
    "account": number,
    "region": "us-east-1",
    "time": "yyyy-mm-ddThh:mm:ssZ", 
    "resources": [],
    "detail":   {
        "version": "0",
        "sourceMetadata": {}
        "ruleName": "string"
        "utteranceId": "string",
        "beginTimestamp": "yyyy-mm-ddThh:mm:ssZ",
    }
}
```

일부 EventBridge 필드는 일치하는 규칙 유형에 고유해야 합니다.

**키워드 매칭 필드**  
`utteranceId`: Amazon Transcribe Call Analytics를 사용하는 경우 일치하는 키워드가 포함된 트랜스크립트의 ID입니다. 발화된 키워드 매칭에만 해당됩니다.  
`resultId`: Amazon Transcribe를 사용하는 경우 일치하는 키워드가 포함된 트랜스크립트의 ID입니다. 발화된 키워드 매칭에만 해당됩니다.  
`beginTimestamp`: 일치하는 키워드가 포함된 트랜스크립트의 시작 시간입니다. 발화된 키워드 매칭에만 해당됩니다.

**감정 분석 필드**  
`beginTimestamp`: 일치하는 감정의 롤링 윈도우 시작 시간입니다.  
`endTimestamp`: 일치하는 감정의 롤링 윈도우 종료 시간입니다.

# Amazon Chime SDK 데이터 레이크 생성
<a name="ca-data-lake"></a>

Amazon Chime SDK 통화 분석 데이터 레이크를 사용하면 Amazon Kinesis Data Stream의 기계 학습 기반 인사이트와 모든 메타데이터를 Amazon S3 버킷으로 스트리밍할 수 있습니다. 예를 들어, 데이터 레이크를 사용하여 레코딩 URL에 액세스할 수 있습니다. 데이터 레이크를 생성하려면 Amazon Chime SDK 콘솔에서 또는를 사용하여 프로그래밍 방식으로 AWS CloudFormation 템플릿 세트를 배포합니다 AWS CLI. 데이터 레이크를 사용하면 Amazon Athena의 AWS Glue 데이터 테이블을 참조하여 통화 메타데이터 및 음성 분석 데이터를 쿼리할 수 있습니다.

**Topics**
+ [사전 조건](#data-lake-prereqs)
+ [데이터 레이크 용어 및 개념](#data-lake-terms)
+ [다중 데이터 레이크 생성](#creating-multiple-data-lakes)
+ [데이터 레이크 리전별 가용성](#data-lake-regions)
+ [데이터 레이크 아키텍처](#data-lake-architecture)
+ [데이터 레이크 설정](#data-lake-setup)

## 사전 조건
<a name="data-lake-prereqs"></a>

Amazon Chime SDK 레이크를 생성하려면 다음 항목이 있어야 합니다.
+ Amazon Kinesis Data Stream. 자세한 내용은 Amazon Kinesis Streams 개발자 안내서**의 [AWS Management Console을 통한 스트림 생성](https://docs.aws.amazon.com/streams/latest/dev/how-do-i-create-a-stream.html)을 참조하세요.
+ S3 버킷. 자세한 내용은 Amazon S3 사용 설명서**의 [첫 번째 Amazon S3 버킷 생성](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html)을 참조하세요.

## 데이터 레이크 용어 및 개념
<a name="data-lake-terms"></a>

다음 용어와 개념을 사용하여 데이터 레이크의 작동 방식을 이해하세요.

**Amazon Kinesis Data Firehose**  
추출, 전환, 적재(ETL) 서비스로서 스트리밍 데이터를 안정적으로 캡처, 변환하여 데이터 레이크, 데이터 스토어, 분석 서비스로 전달합니다. 자세한 내용은 Amazon Kinesis Data Firehose란 무엇인가요?(What Is Amazon Kinesis Data Firehose?)를 참조하세요.

**Amazon Athena**  
Amazon Athena는 표준 SQL을 사용하여 Amazon S3의 데이터를 분석할 수 있는 대화형 쿼리 서비스입니다. Athena는 서버리스 서비스이므로 관리할 인프라가 없으며 실행한 쿼리에 대해서만 비용을 지불하면 됩니다. Athena를 사용하려면 Amazon S3의 데이터를 가리키고 스키마를 정의한 다음 표준 SQL 쿼리를 사용하세요. 또한 작업 그룹을 사용하여 사용자를 그룹화하고 쿼리를 실행할 때 액세스할 수 있는 리소스를 제어할 수도 있습니다. 작업 그룹을 사용하면 다양한 사용자 및 워크로드 그룹에서 쿼리 동시성을 관리하고 쿼리 실행의 우선순위를 지정할 수 있습니다.

**Glue Data 카탈로그**  
Amazon Athena에서 테이블과 데이터베이스에는 기본 소스 데이터의 스키마를 자세히 설명하는 메타데이터가 포함되어 있습니다. 각 데이터 세트에 대한 테이블이 Athena에 반드시 있어야 합니다. 테이블의 메타데이터는 Athena에게 Amazon S3 버킷의 위치를 알려줍니다. 또한 열 이름, 데이터 유형, 테이블 이름과 같은 데이터 구조를 지정합니다. 데이터베이스에는 데이터 세트의 메타데이터와 스키마 정보만 보관됩니다.

## 다중 데이터 레이크 생성
<a name="creating-multiple-data-lakes"></a>

고유한 Glue 데이터베이스 이름을 제공하여 통화 인사이트를 저장할 위치를 지정함으로써 여러 데이터 레이크를 생성할 수 있습니다. 특정 AWS 계정의 경우 각각 해당 데이터 레이크가 있는 여러 통화 분석 구성이 있을 수 있습니다. 즉, 보존 정책 사용자 지정 및 데이터 저장 방식에 대한 액세스 정책과 같은 특정 사용 사례에 데이터 분리를 적용할 수 있습니다. 인사이트, 기록, 메타데이터에 대한 액세스에 다양한 보안 정책이 적용될 수 있습니다.

## 데이터 레이크 리전별 가용성
<a name="data-lake-regions"></a>

Amazon Chime SDK 데이터 레이크는 다음 리전에서 사용할 수 있습니다.


| 리전 | Glue 테이블 | Quick | 
| --- | --- | --- | 
| us-east-1 | 사용 가능 | Available | 
| us-west-2 | 사용 가능 | Available | 
| eu-central-1 | 사용 가능 | Available | 

## 데이터 레이크 아키텍처
<a name="data-lake-architecture"></a>

다음 다이어그램은 데이터 레이크 아키텍처를 보여줍니다. 그림의 숫자는 아래 번호가 매겨진 텍스트와 일치합니다.

![\[프로그램은 데이터 레이크를 통과합니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/call-analytics-data-lake-architecture.png)


다이어그램에서 AWS 콘솔을 사용하여 미디어 인사이트 파이프라인 구성 설정 워크플로에서 CloudFormation 템플릿을 배포하면 다음 데이터가 Amazon S3 버킷으로 흐릅니다.

1. Amazon Chime SDK 통화 분석은 고객의 Kinesis Data Stream으로 실시간 데이터를 스트리밍하기 시작합니다.

1. Amazon Kinesis Firehose는 누적된 데이터가 128MB 또는 60초 경과 중 빠른 시점이 될 때까지 이 실시간 데이터를 버퍼링합니다. 그런 다음 Firehose는 Glue 데이터 카탈로그에서 `amazon_chime_sdk_call_analytics_firehose_schema`를 사용하여 데이터를 압축하고 JSON 레코드를 Parquet 파일로 변환합니다.

1. Parquet 파일은 Amazon S3 버킷에 파티셔닝된 형식으로 저장됩니다.

1. 실시간 데이터 외에도 통화 후 Amazon Transcribe Call Analytics 요약 .wav 파일(구성에 지정된 경우 편집되거나 편집되지 않음) 및 통화 레코딩 .wav 파일도 Amazon S3 버킷으로 전송됩니다.

1. Amazon Athena와 표준 SQL을 사용하여 Amazon S3 버킷에서 데이터를 쿼리할 수 있습니다.

1. 또한 CloudFormation 템플릿은 Athena를 통해 이 통화 후 요약 데이터를 쿼리할 수 있는 Glue 데이터 카탈로그를 생성합니다.

1. Amazon S3 버킷의 모든 데이터는 Quick을 사용하여 시각화할 수도 있습니다. QuickSight는 Amazon Athena를 사용하여 Amazon S3 버킷과의 연결을 구축합니다.

Amazon Athena 테이블은 다음 기능을 사용하여 쿼리 성능을 최적화합니다.

**데이터 파티셔닝**  
파티셔닝은 테이블을 여러 부분으로 나누고 날짜, 국가, 리전과 같은 열 값을 기준으로 관련 데이터를 함께 유지합니다. 파티션은 가상 열 역할을 합니다. 이 경우 CloudFormation 템플릿은 테이블 생성 시 파티션을 정의하므로 쿼리당 스캔되는 데이터의 양을 줄이고 성능을 개선하는 데 도움이 됩니다. 파티션별로 필터링하여 쿼리가 검사하는 데이터의 양을 제한할 수도 있습니다. Parquet 데이터를 읽는 데 Athena를 사용하는 방법에 대한 자세한 내용은 Amazon Athena 사용 설명서**의 [Athena에서 데이터 분할](https://docs.aws.amazon.com/athena/latest/ug/partitions.html)을 참조하세요.  
이 예제에서는 날짜가 2023년 1월 1일인 파티션 구조를 보여줍니다.  

1. 

   ```
   s3://example-bucket/amazon_chime_sdk_data_lake
                               /serviceType=CallAnalytics/detailType={DETAIL_TYPE}/year=2023
                               /month=01/day=01/example-file.parquet
   ```

1. `DETAIL_TYPE`이 다음 중 하나여야 합니다.

   1. `CallAnalyticsMetadata`

   1. `TranscribeCallAnalytics`

   1. `TranscribeCallAnalyticsCategoryEvents`

   1. `Transcribe`

   1. `Recording`

   1. `VoiceAnalyticsStatus`

   1. `SpeakerSearchStatus`

   1. `VoiceToneAnalysisStatus`

**열 기반 데이터 저장소 생성 최적화**  
Apache Parquet은 열 단위 압축, 데이터 유형에 따른 압축, 조건부 푸시다운을 사용하여 데이터를 저장합니다. 압축률이 높거나 데이터 블록을 건너뛰면 Amazon S3 버킷에서 읽는 바이트 수가 줄어듭니다. 따라서 쿼리 성능이 향상되고 비용이 절감됩니다. 이러한 최적화를 위해 Amazon Kinesis Data Firehose에서 JSON에서 parquet 데이터로의 데이터 변환이 활성화되어 있습니다.

**파티션 프로젝션**  
이 Athena 기능은 날짜별 파티션을 자동으로 생성하여 날짜 기반 쿼리 성능을 향상시킵니다.

## 데이터 레이크 설정
<a name="data-lake-setup"></a>

Amazon Chime SDK 콘솔을 사용하여 다음 단계를 완료하세요.

1. Amazon Chime SDK 콘솔([ https://console.aws.amazon.com/chime-sdk/home](https://console.aws.amazon.com/chime-sdk/home))을 시작하고 탐색 창의 **통화 분석** 아래에서 **구성**을 선택합니다.

1. 1단계를 완료하고 **다음**을 선택한 후 2단계 페이지에서 **음성 분석** 확인란을 선택합니다.

1. **출력 세부 정보**에서 **기록 분석을 수행하기 위한 데이터 웨어하우스** 확인란을 선택한 다음 **CloudFormation 스택 배포** 링크를 선택합니다.

   시스템이 CloudFormation 콘솔의 **빠른 스택 생성** 페이지로 이동합니다.

1. 스택 이름을 입력한 후 다음 파라미터를 입력합니다.

   1. `DataLakeType` - **통화 분석 데이터 레이크 생성**을 선택합니다.

   1. `KinesisDataStreamName` - 스트림을 선택합니다. 통화 분석 스트리밍에 사용되는 스트림이어야 합니다.

   1. `S3BucketURI` - Amazon S3 버킷을 선택합니다. URI에는 접두사 `s3://bucket-name`가 있어야 합니다.

   1. `GlueDatabaseName` - 고유한 AWS Glue 데이터베이스 이름을 선택합니다. AWS 계정에 있는 기존 데이터베이스는 재사용할 수 없습니다.

1. 승인 체크박스를 선택한 다음 **데이터 레이크 생성**을 선택합니다. 시스템에서 레이크를 생성하는 데 10분 정도 걸릴 수 있습니다.

### 를 사용한 데이터 레이크 설정 AWS CLI
<a name="data-lake-setup-using-cli"></a>

 AWS CLI 를 사용하여 CloudFormation의 생성 스택을 호출할 권한이 있는 역할을 생성합니다. 아래 절차에 따라 IAM 역할을 생성하고 설정하세요. 자세한 내용을 알아보려면AWS CloudFormation 사용 설명서**의 [스택 생성](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/using-cfn-cli-creating-stack.html)을 참조하세요.

1. *AmazonChimeSdkCallAnalytics-Datalake-Provisioning-Role*이라는 역할을 생성하고 CloudFormation이 역할을 맡도록 허용하는 역할에 신뢰 정책을 연결합니다.

   1. 다음 템플릿을 사용하여 IAM 신뢰 정책을 생성하고 파일을.json 형식으로 저장합니다.

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

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Service": "cloudformation.amazonaws.com"
                  },
                  "Action": "sts:AssumeRole",
                  "Condition": {}
              }
          ]
      }
      ```

------

   1. **aws iam create-role** 명령을 실행하고 신뢰 정책을 파라미터로 전달합니다.

      ```
                                          aws iam create-role \
          --role-name AmazonChimeSdkCallAnalytics-Datalake-Provisioning-Role
          --assume-role-policy-document file://role-trust-policy.json
      ```

   1. 응답에서 반환된 *role arn*을 기록해 둡니다. 다음 단계에서 *role arn*이 필요합니다.

1. CloudFormation 스택을 생성할 수 있는 권한이 있는 정책을 생성합니다.

   1. 다음 템플릿을 사용하여 IAM 정책을 생성하고 파일을 .json 형식으로 저장합니다. 이 파일은 create-policy를 호출할 때 필요합니다.

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

****  

      ```
      {  
          "Version":"2012-10-17",		 	 	   
          "Statement": [  
              {  
                  "Sid": "DeployCloudFormationStack",  
                  "Effect": "Allow",  
                  "Action": [  
                      "cloudformation:CreateStack"
                  ],
                  "Resource": "*"
              }
          ]
      }
      ```

------

   1. **aws iam create-policy**를 실행하고 스택 정책 생성을 파라미터로 전달합니다.

      ```
                                      aws iam create-policy --policy-name testCreateStackPolicy 
      --policy-document file://create-cloudformation-stack-policy.json
      ```

   1. 응답에서 반환된 *role arn*을 기록해 둡니다. 다음 단계에서 *role arn*이 필요합니다.

1. **aws iam attach-role-policy** 정책을 역할에 연결합니다.

   ```
                               aws iam attach-role-policy --role-name {Role name created above}
   --policy-arn {Policy ARN created above}
   ```

1. CloudFormation 스택을 생성하고 필수 파라미터 **aws cloudformation create-stack**을 입력합니다.

   ParameterValue를 사용하여 각 ParameterKey에 대한 파라미터 값을 제공합니다.

   ```
                               aws cloudformation create-stack  --capabilities CAPABILITY_NAMED_IAM 
   --stack-name testDeploymentStack 
   --template-url https://chime-sdk-assets.s3.amazonaws.com/public_templates/AmazonChimeSDKDataLake.yaml 
   --parameters  ParameterKey=S3BucketURI,ParameterValue={S3 URI}
   ParameterKey=DataLakeType,ParameterValue="Create call analytics datalake" 
   ParameterKey=KinesisDataStreamName,ParameterValue={Name of Kinesis Data Stream}
   --role-arn {Role ARN created above}
   ```

#### 데이터 레이크 설정으로 생성된 리소스
<a name="cf-resources"></a>

다음 표에는 데이터 레이크를 생성할 때 생성되는 리소스가 나열되어 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/ca-data-lake.html)

# Amazon Chime SDK에 대한 빠른 대시보드 구성
<a name="quicksight-setup-setup"></a>

데이터 레이크를 설정한 후에는 데이터를 시각화하는 사전 정의된 지표로 빠른 대시보드를 구성할 수 있습니다. 다음과 같은 대시보드를 사용할 수 있습니다.
+ **Transcribe 통화 분석 \$1 음성 분석** 지표에는 턴바이턴 대화 기록, 감지된 문제, 결과, 개체 감지, 음성 프로필 ID 일치에 대한 요약 및 세부 정보가 포함됩니다.
+ **Transcribe \$1 음성 분석**. 지표에는 턴바이턴 대화 내용, 어휘 검색, 음성 톤, 음성 프로필 ID 일치에 대한 요약 및 세부 정보가 포함됩니다.

다음 주제에서는 Quick 계정이 아직 없는 경우 Quick 계정을 설정하는 방법과 대시보드를 구성하는 방법을 설명합니다.

**Topics**
+ [QuickSight 계정 만들기](#create-quicksight-account)
+ [QuickSight 계정 설정하기](#configure-qs-acct)
+ [QuickSight 대시보드 생성](#create-qs-dashboard)

## QuickSight 계정 만들기
<a name="create-quicksight-account"></a>

이 섹션의 단계에서는 빠른 계정을 생성하는 방법을 설명합니다. 계정이 이미 있는 경우 [QuickSight 대시보드 생성](#create-qs-dashboard)로 건너뛸 수 있습니다.

다음과 같은 방법으로 QuickSight 계정을 만들 수 있습니다.
+ Amazon CloudFormation 템플릿을 사용합니다.
+ Amazon Chime SDK 콘솔을 사용합니다.

### 사전 조건
<a name="qs-account-prereqs"></a>

시작하기 전에 다음 정보를 수집합니다.
+ 통화 분석 Amazon S3 버킷의 이름.
+ 알림 이메일 주소. 시스템이 QuickSight 알림을 이 주소로 전송합니다.

### CloudFormation 템플릿을 사용하여 계정 생성
<a name="account-by-cft"></a>

다음 단계에서는 Amazon CloudFormation 템플릿을 배포하여 Quick 계정을 생성하는 방법을 설명합니다. 이 프로세스를 통해서는 엔터프라이즈 계정만 구독할 수 있습니다. 요금에 대한 자세한 내용은 [빠른 요금을](https://aws.amazon.com/quicksight/pricing/) 참조하세요.

**템플릿을 배포하려면**

1.  AWS 콘솔을 시작하고 AWS 계정에 로그인합니다.

1. 브라우저의 주소 표시줄에 다음 URL을 붙여넣습니다. 리전을 표시된 대로 입력해야 합니다.

   `https://region.console.aws.amazon.com/cloudformation/home?region=region#/stacks/quickcreate?templateURL=https://chime-sdk-assets.s3.amazonaws.com/public_templates/AmazonChimeSDKQuickSightSubscription.yaml`.

1. **빠른 스택 생성** 페이지에서 다음을 입력합니다.

   1. **스택 이름**에 계정 이름을 입력합니다.

   1. **QuickSightNotificationEmail**에 앞서 수집한 이메일 주소를 입력합니다.

   1. **QuickSightSubscriptionForDataVisualization**에서 **New AWS QuickSight 계정 생성을** 선택합니다.

   1. **S3BucketName**에 Amazon S3 버킷의 이름을 입력합니다.

   1. **AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다.** 확인란을 선택합니다.

1. **스택 생성**을 선택합니다.

   시스템에서 스택을 생성하는 데 약 10분이 소요됩니다.

1. 빌드가 완료되면 **빠른으로 이동을** 선택하고 이메일 주소를 입력하여 계정에 로그인합니다.

### 콘솔을 사용하여 계정 생성
<a name="account-by-console"></a>

다음 단계에서는 Amazon Chime SDK 콘솔을 사용하여 Quick 계정을 생성하는 방법을 설명합니다. 엔터프라이즈 또는 엔터프라이즈 \$1 Q 계정을 사용해야 합니다.

**콘솔을 사용하려면**

1. [ https://console.aws.amazon.com/chime-sdk/home](https://console.aws.amazon.com/chime-sdk/home)에서 Amazon Chime SDK 콘솔을 시작하고 **QuickSight**를 검색한 다음 검색 결과에서 **QuickSight**를 선택합니다.  
![\[Quick에 연결되는 검색 결과입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/quicksightsetup-1.png)

1. **QuickSight 가입**을 선택합니다.

1. **엔터프라이즈** 또는 **엔터프라이즈 \$1 Q**를 선택한 다음 **계속**을 선택합니다.

1. 이름, 성, 전화번호, 앞서 수집한 이메일 주소를 입력한 다음 **계속**을 선택합니다.

1. 다음을 따릅니다.

   1. **인증 방법**에서 옵션을 선택합니다.
**참고**  
페더레이션 사용자 옵션을 선택하는 경우 올바른 IAM 권한이 필요합니다. 자세한 내용은 [ 빠른 사용 설명서의 빠른 구독 가입](https://docs.aws.amazon.com/quicksight/latest/user/signing-up.html)을 참조하세요. ** 

   1. **QuickSight 리전**에서 리전을 선택합니다.

   1. **계정 정보**에서 계정 이름과 앞서 수집한 이메일 주소를 입력합니다.

   1. **AWS 서비스에 대한 QuickSight 액세스**에서 기본 역할을 사용하거나 **기존 역할 사용**을 선택하고 목록에서 역할을 선택합니다.

   1. (선택 사항) 필요에 따라 **이러한 리소스에 대한 액세스 및 자동 검색 허용**에서 추가 리소스를 선택합니다.

   1. 완료되면 **마침**을 선택합니다.

   1. 빌드가 완료되면 **빠른으로 이동을** 선택하고 이메일 주소를 입력하여 계정에 로그인합니다.

## QuickSight 계정 설정하기
<a name="configure-qs-acct"></a>

QuickSight 계정에 로그인한 후 보안을 구성하고 설정 프로세스에서 만든 그룹에 자신을 추가해야 합니다.

**보안 키를 구성하려면**

1. 오른쪽 상단의 프로필 아이콘을 선택한 다음 나타나는 메뉴에서 **QuickSight 관리**를 선택합니다.  
![\[QuickSight 관리 명령이 포함된 메뉴입니다.\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/quicksightsetup-1-a.png)

1. 탐색 창에서**보안 및 권한**을 선택합니다.

1. ** AWS 서비스에 대한 QuickSight 액세스**에서 **관리를** 선택하고 다음 서비스가 선택되어 있는지 확인합니다.
   + Amazon Redshift
   + Amazon RDS
   + Amazon S3
   + Amazon Athena
   +  IAM

1. **Amazon S3 버킷 선택** 링크를 선택합니다.

1. Amazon S3 버킷 옆의 확인란을 선택한 다음 **Athena Workgroup에 대한 쓰기 권한** 열에서 오른쪽에 있는 확인란을 선택합니다.

1. **마침**을 클릭합니다.

1. **저장**을 선택합니다.

**그룹에 자신을 추가하려면**

1. 탐색 창에서 **그룹 관리**를 선택한 다음 이름에 **Admins**가 포함된 그룹을 선택합니다. 예: *S3BucketName*–**Admins**.

1. **사용자 추가**를 선택한 다음 나타나는 상자에 이메일 별칭을 입력합니다.

   이름은 **Admin – ***내-별칭* 형식으로 표시됩니다.

1. **추가**를 선택합니다.

## QuickSight 대시보드 생성
<a name="create-qs-dashboard"></a>

데이터 레이크를 만든 후 데이터를 시각화하는 QuickSight 대시보드를 만들 수 있습니다. Amazon CloudFormation 템플릿 또는 Amazon Chime SDK 콘솔을 사용하여 대시보드를 생성할 수 있습니다. 다음 단계에서는 두 가지 방법을 모두 설명합니다.

**템플릿을 사용하려면**

1. Amazon CloudFormation 콘솔을 시작합니다.

1. 브라우저의 주소 표시줄에 다음 링크를 붙여넣습니다. `https://region.console.aws.amazon.com/cloudformation/home?region=region#/stacks/quickcreate?templateURL=https://chime-sdk-assets.s3.amazonaws.com/public_templates/AmazonChimeSDKQuickSightDashboards.yaml` 

1. **빠른 스택 생성** 페이지의 **스택 이름** 아래에 계정 이름을 입력합니다.

1. **ActiveQuickSightAccount**에서 **True**를 선택합니다.

1. **QuicksightDashboardSelection**에서 **Call Analytics – Transcribe Call Analytics and Voice Analytics dashboard** 또는 **Call Analytics – Transcribe and Voice Analytics dashboard**를 선택합니다.

1. **Amazon S3BucketName**에서 Amazon S3 버킷의 URI를 입력합니다.

1. **GlueDatabaseName**에서 QuickSight 대시보드를 배포하려는 Glue 데이터베이스를 입력합니다.

1. **AWS CloudFormation에서 IAM 리소스를 생성할 수 있음을 승인합니다** 확인란을 선택하고 **스택 생성**을 선택합니다.

**QuickSight 대시보드를 수동으로 구성하려면**

1. QuickSight 계정으로 이동합니다.

1. 화면 맨 위 오른쪽에 있는 프로파일 아이콘을 선택한 다음 **QuickSight 관리**를 선택합니다.  
![\[QuickSight 계정 대화 상자 및 QuickSight 관리 명령\]](http://docs.aws.amazon.com/ko_kr/chime-sdk/latest/dg/images/quicksightsetup-1-a.png)

1. 탐색 창에서 **그룹 관리**를 선택한 다음 설치 프로세스에서 만든 그룹을 선택합니다.

1. **사용자 추가**를 선택하고 이메일 주소를 입력한 다음 **추가**를 선택합니다.

   시스템에서 페이지를 배포하는 데 10분 정도 걸립니다.

1. Amazon Chime SDK 콘솔을 사용하여 QuickSight 계정에 로그인하고 대시보드를 사용하세요.