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

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

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

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

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

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

이 프로세서를 Amazon Transcribe 프로세서와 함께 사용할 수 없습니다. Amazon Transcribe Call Analytics에 대한 자세한 내용은 Amazon Transcribe 개발자 안내서실시간 통화 분석을 참조하세요. 호출PostCallAnalyticsSettings에 를 포함하여 AmazonTranscribeCallAnalyticsProcessorConfiguration API 호출 후 분석을 활성화하면 미디어 인사이트 파이프라인이 중지되고 처리가 완료되면 지정된 Amazon S3 위치에서 아티팩트를 수신합니다.

참고

파이프라인을 35초 이상 일시 중지했다가 다시 시작하면 Amazon S3 버킷에 다른 세션이 있는 별도의 파일에 통화 후 아티팩트IDs가 생성됩니다.

통화 후 아티팩트에는 분석 JSON 파일과 오디오 녹음 WAV 또는 Opus 파일이 포함됩니다. 편집된(콘텐츠 편집을 활성화한 경우) 및 편집되지 않은 레코딩 파일에 URL 대한 Amazon S3 버킷은 메타데이터 섹션의 일부로 각 Amazon Transcribe 통화 분석 통화 후 세션onetimeMetadata에 대해 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채널 오디오가 필요합니다. 를 호출할 때 채널에 있는 스피커를 지정해야 합니다. CreateMediaInsightsPipeline API. 예를 들어 에이전트가 먼저 말하는 경우 ChannelId0으로 설정하여 첫 번째 채널을 나타내고, ParticipantRoleAGENT로 설정하여 에이전트가 말하고 있음을 나타냅니다.

참고

Voice Connector를 사용하여 Amazon Transcribe 통화 분석 프로세서MediaInsightsPipeline로 를 생성할 때 Voice Connector 계정 레그 오디오는 AGENT 이고 PSTN 레그 오디오는 CUSTOMER용입니다ParticipantRole.

Voice Connector 의 경우 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와 연결된 경우 Voice Connector 스트리밍 업데이트가 있을 때 다음 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가지며 각 참가자의 스트림을 혼합SRS하지 않고 에 SRC 기록합니다.

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로 생성된 Voice Connector의 경우 Voice Connector 계정 레그 오디오가 에 할당channel-0되고 PSTN 레그 오디오가 에 할당됩니다channel-1.

Voice Connector 의 경우 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 또는 StartVoiceToneAnalysisTask APIs 음성 분석 프로세서를 호출합니다. 음성 분석 사용에 대한 자세한 내용은 Amazon Chime SDK 음성 분석 사용을 참조하세요.

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

Metadata

생성된 KDS 레코드의 metadata 섹션에는 CallAnalyticsRuntimeMetadata CreateMediaInsightsPipeline API 호출. 음성 커넥터로 통화 분석 세션을 시작한 경우 메타데이터 섹션이 다음 파라미터로 자동으로 채워집니다.

  • transactionId

  • fromNumber

  • toNumber

  • callId

  • voiceConnectorId

  • direction

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

  • inviteHeaders

  • siprecMetadata

이는 세션 시작 시 Kinesis Data Streams에 한 번만 게시되며 detail-type 의 를 갖습니다CallAnalyticsMetadata.

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

통화 분석 녹음은 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를 통한 통화 녹음을 활성화하려면 오디오에 16비트 리틀 엔디안 PCM 서명을 해야 합니다. 샘플 속도는 8이어야 합니다KHz.

  • 빌더는 Kinesis Video Stream에 대해 충분히 긴 데이터 보존 기간을 설정하여 호출 분석을 통해 조각이 보존되고 소모되도록 해야 합니다.

  • 직접 또는 다른 프로세서와 함께 통화 녹음을 활성화하는 경우 녹음을 ARNs 위해 두 개의 Kinesis Video Stream을 제공해야 합니다. 통화 레코딩은 단일 스테레오 오디오 입력을 지원하지 않습니다.

다음 예제에서는 통화 분석 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" }

음성 향상을 활성화하려면 에 VoiceEnhancementSinkConfiguration 요소를 포함하세요. CreateMediaInsightsPipelineConfiguration API 호출.

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

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

구성을 업데이트하려면 에 VoiceEnhancementSinkConfiguration 요소를 추가합니다. UpdateMediaInsightsPipelineConfiguration API 호출. 이렇게 하면 GetMediaInsightsPipelineConfiguration 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 요소가 필요합니다.