Processador de análise de chamadas e destinos de saída - Amazon Chime SDK

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Processador de análise de chamadas e destinos de saída

Você só pode especificar elementos exclusivos uma vez por configuração do pipeline de insights de mídia. Todos os processadores e coletores devem residir na mesma AWS conta e você deve criá-los na mesma AWS região do endpoint que você chama. Por exemplo, se você usa o endpoint do us-east-1 para os pipelines de mídia do SDK do Amazon Chime, não pode passar um fluxo de dados do Kinesis da região us-west-2.

Expanda cada seção para obter informações sobre cada destino.

Coletores suportados: KinesisDataStreamSink.

Não é possível combinar esse processador com um processador do Amazon Transcribe. Para obter mais informações sobre o Amazon Transcribe Call Analytics, consulte Análise de chamadas em tempo real, no Guia do desenvolvedor do Amazon Transcribe. Se habilitar a Análise pós-chamada, ao incluir PostCallAnalyticsSettings na chamada de API AmazonTranscribeCallAnalyticsProcessorConfiguration, você receberá artefatos no local especificado do Amazon S3 quando o pipeline de insights de mídia for interrompido e o processamento for concluído.

nota

Se pausar o pipeline por mais de 35 segundos e depois retomá-lo, os artefatos pós-chamada serão gerados em arquivos separados com diferentes IDs de sessão no bucket do Amazon S3.

Os artefatos pós-chamada incluem um arquivo JSON de análise e um arquivo de gravação de áudio WAV ou Opus. O URL do bucket do Amazon S3 para arquivos de gravação editados (se a edição de conteúdo estiver habilitada) e não editados é enviado ao fluxo de dados do Kinesis uma vez para cada sessão pós-chamada do Amazon Transcribe Call Analytics, como parte dos onetimeMetadata, na seção de metadados.

A análise de chamadas com o Amazon Transcribe Call Analytics usa a entrada de dados de áudio do stream de vídeo do Kinesis.

  • Codificação de mídia suportada: áudio little-endian de 16 bits assinado pelo PCM.

  • Taxas de amostragem de mídia suportadas: entre 8.000 Hz e 48.000 Hz.

Entrada de StreamConfiguration para um processo de análise do Amazon Transcribe:

  • Você deve especificar o KinesisVideoStreamArn para cada stream.

  • (Opcional) O FragmentNumber do KVS inicia um trabalho de análise de chamada da parte após um fragmento especificado. Se não for fornecido, ele usa a parte mais recente do stream de vídeo do Kinesis.

  • StreamChannelDefinition define quem está falando. O Amazon Transcribe Call Analytics requer áudio de dois canais. Você deve especificar qual alto-falante está em qual canal ao chamar a CreateMediaInsightsPipelineAPI. Por exemplo, se seu atendente falar primeiro, você define o ChannelId como 0 para indicar o primeiro canal e o ParticipantRole como AGENT para indicar que o atendente está falando.

nota

Quando usar um conector de voz para criar um MediaInsightsPipeline com um processador do Amazon Transcribe Call Analytics, o áudio da perna da conta do conector de voz será o AGENT e o áudio da perna do PSTN será o CUSTOMER para o ParticipantRole.

Para o conector de voz SIPREC, dependemos dos metadados do SIPREC. Na maioria dos casos, o rótulo do stream com o menor valor lexicográfico é considerado o AGENT.

O exemplo a seguir mostra a entrada do stream de vídeo do Kinesis para um stream de áudio de dois canais.

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

Por outro lado, o exemplo a seguir mostra duas entradas mono de dois streams diferentes do Kinesis Video.

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

Cada registro do Amazon Transcribe contém um UtteranceEvent ou um CategoryEvent, mas não ambos. CategoryEvents têm um detail-type do TranscribeCallAnalyticsCategoryEvent.

O exemplo a seguir mostra o formato único de saída de metadados para o 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" }

O exemplo a seguir mostra o formato de saída do 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 }] } } } }

Se a configuração de análise de chamadas estiver associada a um conector de voz do SDK do Amazon Chime, a seguinte carga útil de atualização do conector de voz será enviada quando houver uma atualização de streaming do conector de voz.

O exemplo a seguir mostra um formato de metadados de atualização para o processador do Amazon Transcribe e o processador do Transcribe Call Analytics.

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

O exemplo a seguir mostra um formato de metadados de atualização para a gravação do Amazon S3 do Call Analytics.

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

Os exemplos a seguir mostram os metadados para gravar uma chamada de SIP entre duas pessoas, Alice e Bob. Ambos os participantes enviam e recebem áudio e vídeo. Para simplificar, o exemplo tem apenas trechos de SIP e SDP, e o SRC grava os streamings de cada participante no SRS sem misturar.

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>

O exemplo a seguir mostra os metadados atualizados quando um participante da chamada coloca o outro em espera. Nesse caso, participant_id srfBElmCRp2QB23b7Mpk0w== apenas recebe streamings de mídia e não envia nenhuma mídia, portanto, o elemento XML send é omitido. Por outro lado, participant_id zSfPoSvdSDCmU3A3TRDxAw== envia, mas não recebe mídia do outro participante, portanto, o elemento XML recv é omitido.

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>

O exemplo a seguir mostra a atualização dos metadados quando a chamada é retomada. A carga útil agora tem os elementos XML send e recv.

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>

Coletores suportados: KinesisDataStreamSink.

Não é possível combinar esse processador com o do Amazon Transcribe Call Analytics. Para obter mais informações sobre a entrada e a saída do Amazon Transcribe, consulte Transcrever streaming de áudio no Guia do desenvolvedor do Amazon Transcribe.

A sessão de análise de chamadas com o Amazon Transcribe usa a entrada de dados de áudio do stream de vídeo do Kinesis.

  • Suportado MediaEncoding: áudio little-endian de 16 bits assinado por PCM.

  • Taxas MediaSampleRate de amostragem suportadas: entre 8.000 Hz e 48.000 Hz.

Entrada de StreamConfiguration para processadores do Amazon Transcribe:

  • Você deve especificar o KinesisVideoStreamArn para cada stream.

  • (Opcional) FragmentNumber do KVS: inicia um trabalho de análise de chamada da parte após um fragmento específico. Se não for fornecido, ele usará a parte mais recente do stream de vídeo no Kinesis.

  • Atualmente, a StreamChannelDefinition do Amazon Transcribe suporta áudio com dois canais. Você precisa especificar o NumberOfChannels no runtime da StreamChannelDefinition. Além disso, você deve passar o ChannelId se enviar áudio mono em dois canais separados. Na transcrição, são atribuídos os rótulos ch_0 e ch_1 aos canais. O exemplo a seguir mostra a entrada KVS para um stream de canal de áudio mono.

"StreamChannelDefinition" : {" NumberOfChannels" : 1 }

O exemplo a seguir mostra a entrada KVS para duas entradas de áudio mono em dois streams diferentes.

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

Para o conector de voz MediaInsightsPipeline criado com um processador do Amazon Transcribe, o áudio da perna da conta do conector de voz é atribuído ao channel-0 e o áudio da perna da PSTN ao channel-1.

Para o conector de voz SIPREC, dependemos dos metadados do SIPREC. Na maioria dos casos, o rótulo do stream com o menor valor lexicográfico é atribuído ao channel-0.

Para os processadores do Amazon Transcribe e do Amazon Transcribe Call Analytics, se você transmitir dois streams de vídeo do Kinesis e cada stream contiver um canal de áudio mono, intercalaremos os dois canais em um único stream de áudio antes de processar o Transcribe ou os dados da análise de chamadas do Transcribe.

O exemplo a seguir mostra um formato único de saída de metadados para o 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" }

O exemplo a seguir mostra o formato de saída do 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 }] } } }

Coletores compatíveis: KinesisDataStreamSink, SqsQueueSink, SnsTopicSink e LambdaFunctionSink.

É possível combinar esse processador com o processador do Amazon Transcribe Call Analytics, o processador do Amazon Transcribe ou a gravação de chamadas. Você deve usar as StartVoiceToneAnalysisTaskAPIs StartSpeakerSearchTaskou para invocar um processador de análise de voz. Para obter mais informações sobre o uso de análise de voz, consulte Como usar a análise de voz do SDK do Amazon Chime.

Os registros do fluxo de dados do Kinesis (KDS) gerados pela análise de chamadas incluem o ID do pipeline de mídia, o tipo de detalhe, os metadados e as seções específicas do processador. Para obter informações sobre o consumo de dados de um fluxo de dados do Kinesis, consulte Leitura de dados do Amazon Kinesis Data Streams, no Guia do desenvolvedor do Amazon Kinesis Streams. Para criar uma configuração com esse coletor, você deve ter permissão para kinesis:DescribeStream no stream especificado.

Metadados

A metadata seção dos registros KDS gerados contém todos os pares de valores-chave especificados CallAnalyticsRuntimeMetadata durante a chamada da CreateMediaInsightsPipelineAPI. Se uma sessão de análise de chamadas foi iniciada por um conector de voz, a seção de metadados será preenchida automaticamente com os seguintes parâmetros:

  • transactionId

  • fromNumber

  • toNumber

  • callId

  • voiceConnectorId

  • direction

Além dos parâmetros mostrados acima, a seção de metadados das sessões de análise de chamadas iniciadas pelo Voice Connector será preenchida com um oneTimeMetadata campo que contém:

  • inviteHeaders

  • siprecMetadata

Isso é publicado no Kinesis Data Streams somente uma vez no início da sessão e detail-type tem um de. CallAnalyticsMetadata

Você pode passar identificadores exclusivos MediaInsightsRuntimeMetadata para cada chamada de CreateMediaInsightsPipelineAPI para identificar com exclusividade a origem de cada registro entregue ao seu Kinesis Data Stream.

A gravação de análise de chamadas lê o áudio de um stream do KVS, o grava como um arquivo de áudio e carrega o arquivo bucket do Amazon S3 especificado. Depois de gravar a chamada, a análise também envia os metadados da chamada junto com a localização do arquivo para o KDS. Se você habilitar um data warehouse, os metadados da chamada (incluindo metadados SIPREC, se o SIPREC tiver sido usado) serão entregues ao data warehouse em um conjunto de tabelas Parquet que você pode consultar.

Como qualquer outro processador de análise de chamadas, primeiro deve ser criada uma configuração para o pipeline. É possível usar o console do SDK do Amazon Chime ou a CLI para criar a configuração. Então, use a CLI para criar um pipeline. Para mais informações sobre como usar o console para criar configurações de gravação, consulte Criação de configurações de análise de chamadas, anteriormente nesta seção. Para obter mais informações sobre o uso dos fluxos de trabalho de gravação, consulte Fluxos de trabalho para gravação de chamadas, anteriormente nesta seção.

Como usar a CLI para criar uma configuração

Execute o seguinte comando:

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

O exemplo a seguir mostra um arquivo JSON de configuração com somente a gravação habilitada:

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

Lembre-se do seguinte:

  • Para habilitar a gravação de chamadas por meio do Kinesis Video Streams, o áudio deve ser little-endian de 16 bits assinado pelo PCM. A taxa de amostragem deve ser de 8 KHz.

  • Os criadores devem definir um período de retenção de dados suficientemente longo para o Kinesis Video Stream, a fim de garantir que os fragmentos sejam retidos e possam ser consumidos pela análise de chamadas.

  • Se ativar a gravação de chamadas, sozinha ou combinada com outros processadores, você deverá fornecer dois ARNs do stream de vídeo do Kinesis para a gravação. A gravação de chamadas não suporta uma entrada única de áudio estéreo.

O exemplo a seguir mostra o formato de saída de metadados para gravação de análise de chamadas no 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" }

Para ativar o aprimoramento de voz, inclua um VoiceEnhancementSinkConfiguration elemento em uma chamada de CreateMediaInsightsPipelineConfigurationAPI.

Este exemplo mostra um elemento típico.

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

Para atualizar uma configuração, adicione o VoiceEnhancementSinkConfiguration elemento a uma chamada de UpdateMediaInsightsPipelineConfigurationAPI. Quando você faz isso, a GetMediaInsightsPipelineConfigurationAPI inclui o VoiceEnhancementSinkConfiguration elemento nos resultados.

Este exemplo de solicitação mostra como habilitar o aprimoramento de voz e a gravação no 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" }
nota

O elemento VoiceEnhancementSink sempre exige um elemento S3RecordingSink em uma configuração de análise de chamadas.