

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

# 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` 요소가 필요합니다.