통화 분석 프로세서 및 출력 대상 - Amazon Chime SDK

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

통화 분석 프로세서 및 출력 대상

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

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

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

이 프로세서를 Amazon Transcribe 프로세서와 함께 사용할 수 없습니다. Amazon Transcribe Call Analytics에 대한 자세한 내용은 Amazon Transcribe 개발자 안내서실시간 통화 분석을 참조하세요. AmazonTranscribeCallAnalyticsProcessorConfiguration API 호출에 PostCallAnalyticsSettings를 포함하여 통화 후 분석을 활성화하면 미디어 인사이트 파이프라인이 중지되고 처리가 완료되면 지정된 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채널 오디오가 필요합니다. API를 호출할 때 어떤 스피커가 어느 채널에 있는지 지정해야 합니다 CreateMediaInsightsPipeline. 예를 들어 에이전트가 먼저 말하는 경우 ChannelId0으로 설정하여 첫 번째 채널을 나타내고, ParticipantRoleAGENT로 설정하여 에이전트가 말하고 있음을 나타냅니다.

참고

음성 커넥터를 사용하여 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 레코드에는 UtteranceEvent 또는 CategoryEvent가 포함되지만 둘 다 포함되지는 않습니다. CategoryEvents에는 TranscribeCallAnalyticsCategoryEventdetail-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와 연결된 경우 음성 커넥터 스트리밍 업데이트가 있을 때 다음 음성 커넥터 업데이트 페이로드가 전송됩니다.

다음 예에서는 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" }

다음 예에서는 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>

다음 예에서는 통화가 재개될 때의 메타데이터 업데이트를 보여줍니다. 이제 페이로드에는 sendrecv 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>

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

이 프로세서를 Amazon Transcribe Call Analytics와 결합할 수 없습니다. Amazon Transcribe의 입력 및 출력에 대한 자세한 내용은 Amazon Transcribe 개발자 안내서 Transcribe 스트리밍 오디오를 참조하세요.

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_0ch_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의 일회성 메타데이터 출력 형식을 보여 줍니다.

{ "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 }] } } }

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

이 프로세서를 Amazon Transcribe Call Analytics 프로세서, Amazon Transcribe 프로세서 또는 통화 레코딩과 결합할 수 있습니다. StartSpeakerSearchTask또는 StartVoiceToneAnalysisTaskAPI를 사용하여 음성 분석 프로세서를 호출해야 합니다. 음성 분석 사용에 대한 자세한 내용은 Amazon Chime SDK 음성 분석 사용을 참조하세요.

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

Metadata

생성된 KDS 레코드 metadata 섹션에는 API 호출 중에 지정된 모든 키-값 쌍이 CallAnalyticsRuntimeMetadata 포함됩니다. CreateMediaInsightsPipeline 음성 커넥터로 통화 분석 세션을 시작한 경우 메타데이터 섹션이 다음 파라미터로 자동으로 채워집니다.

  • transactionId

  • fromNumber

  • toNumber

  • callId

  • voiceConnectorId

  • direction

위에 표시된 매개변수 외에도 Voice Connector에서 시작한 통화 분석 세션의 메타데이터 섹션에는 다음이 포함된 필드가 채워집니다. oneTimeMetadata

  • inviteHeaders

  • siprecMetadata

이 내용은 세션 시작 시 Kinesis Data Streams에 한 번만 게시되며 1회만 게시됩니다. detail-type CallAnalyticsMetadata

Kinesis Data MediaInsightsRuntimeMetadata Stream에 전달되는 각 레코드의 소스를 고유하게 식별할 수 있도록 각 CreateMediaInsightsPipelineAPI 호출에 고유한 식별자를 전달할 수 있습니다.

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

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

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 Streams를 통해 통화 녹음을 활성화하려면 오디오는 PCM 서명 16비트 리틀 엔디안이어야 합니다. 샘플 레이트는 8kHz여야 합니다.

  • 빌더는 Kinesis Video Stream에 충분한 데이터 보존 기간을 설정하여 프래그먼트를 보존하고 콜 분석을 통해 사용할 수 있도록 해야 합니다.

  • 통화 레코딩을 단독으로 또는 다른 프로세서와 조합하여 활성화하는 경우 녹음용 Kinesis Video Stream ARN 2개를 제공해야 합니다. 통화 레코딩은 단일 스테레오 오디오 입력을 지원하지 않습니다.

다음 예는 호출 분석 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" }

음성 향상을 활성화하려면 CreateMediaInsightsPipelineConfigurationAPI 호출에 VoiceEnhancementSinkConfiguration 요소를 포함하십시오.

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

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

구성을 업데이트하려면 UpdateMediaInsightsPipelineConfigurationAPI 호출에 VoiceEnhancementSinkConfiguration 요소를 추가하십시오. 그러면 GetMediaInsightsPipelineConfigurationAPI가 해당 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 요소가 필요합니다.