Llamar al procesador de análisis y a los destinos de salida - Amazon Chime SDK

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Llamar al procesador de análisis y a los destinos de salida

Solo puede especificar elementos únicos una vez por configuración de canalización de información multimedia. Todos los procesadores y receptores deben residir en la misma AWS cuenta y debe crearlos en la misma AWS región que el punto final al que llame. Por ejemplo, si usa el punto de conexión de us-east-1 para las canalizaciones multimedia de Amazon Chime SDK, no podrá transferir un flujo de datos de Kinesis desde la región de us-west-2.

Amplíe cada sección para obtener información sobre cada destino.

Receptores compatibles: KinesisDataStreamSink.

No puede combinar este procesador con un procesador Amazon Transcribe. Para obtener más información sobre los análisis de llamadas con Amazon Transcribe, consulte Análisis de llamadas en tiempo real en la Guía para desarrolladores de Amazon Transcribe. Si habilita el análisis posterior a la llamada mediante la inclusión de PostCallAnalyticsSettings en la llamada a la API de AmazonTranscribeCallAnalyticsProcessorConfiguration, recibirá artefactos en la ubicación de Amazon S3 especificada cuando la canalización de información multimedia se detenga y finalice el procesamiento.

nota

Si pausa la canalización durante más de 35 segundos y luego la reanuda, los artefactos posteriores a la llamada se generan en archivos separados con diferentes ID de sesión en el bucket de Amazon S3.

Los artefactos posteriores a la llamada incluyen un archivo JSON de análisis y un archivo WAV u Opus de grabación de audio. La URL del bucket de Amazon S3 para los archivos de grabación redactados (si habilita la redacción de contenido) y no redactados se envía al flujo de datos de Kinesis una vez por cada sesión posterior a la llamada de análisis de llamadas con Amazon Transcribe como parte de onetimeMetadata en la sección de metadatos.

El análisis de llamadas con Amazon Transcribe utiliza los datos de audio introducidos desde la transmisión de video de Kinesis.

  • Codificación multimedia compatible: audio little-endian de 16 bits firmado por PCM.

  • Frecuencias de muestreo multimedia compatibles: entre 8000 Hz y 48 000 Hz.

Entrada de StreamConfiguration para un proceso de Amazon Transcribe Analytics:

  • Debe especificar el KinesisVideoStreamArn para cada transmisión.

  • (Opcional) El KVS de FragmentNumber inicia un trabajo de análisis de llamadas con el fragmento situado tras un fragmento especificado. Si no se proporciona, utiliza la última parte de la transmisión de video de Kinesis.

  • StreamChannelDefinition define quién habla. El análisis de llamadas con Amazon Transcribe requiere audio de dos canales. Debe especificar qué altavoz está en qué canal cuando llame a la CreateMediaInsightsPipelineAPI. Por ejemplo, si el agente habla primero, se configura ChannelId para que 0 indique el primer canal y ParticipantRole para que AGENT indique que el agente está hablando.

nota

Cuando utiliza un Voice Connector para crear una MediaInsightsPipeline con un procesador de análisis de llamadas con Amazon Transcribe, el audio del tramo de la cuenta de Voice Connector es AGENT y el audio del tramo de la PSTN es CUSTOMER para el ParticipantRole.

En el caso del Voice Connector SIPREC, nos basamos en los metadatos del SIPREC. En la mayoría de los casos, la etiqueta de flujo con el valor lexicográfico más bajo se considera el AGENT.

El siguiente ejemplo muestra la entrada de Kinesis Video Stream para una transmisión de audio de dos canales.

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

Por el contrario, en el siguiente ejemplo se muestran dos entradas mono de dos transmisiones de video de Kinesis diferentes.

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

Cada registro de Amazon Transcribe contiene un UtteranceEvent o un CategoryEvent, pero no ambos. CategoryEvents tienen un detail-type de TranscribeCallAnalyticsCategoryEvent.

El siguiente ejemplo muestra el formato de salida de metadatos de un solo uso para 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" }

En el siguiente ejemplo se muestra el formato de salida del análisis de llamadas con Amazon Transcribe.

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

Si la configuración de análisis de llamadas está asociada a un Voice Connector de Amazon Chime SDK, se enviará la siguiente carga de actualización del conector de voz cuando haya una actualización de streaming del conector de voz.

El siguiente ejemplo muestra un formato de metadatos de actualización para el procesador Amazon Transcribe y el procesador de análisis de llamadas 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" }

El siguiente ejemplo muestra un formato de metadatos de actualización para la grabación de Amazon S3 de análisis de llamadas.

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

Los siguientes ejemplos muestran los metadatos para grabar una llamada SIP entre dos personas, Alice y Bob. Ambos participantes envían y reciben audio y vídeo. Para simplificar, el ejemplo solo tiene fragmentos de SIP y SDP, y el SRC graba las transmisiones de cada participante en SRS sin mezclarlas.

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>

En el siguiente ejemplo, se muestran los metadatos actualizados cuando un participante de la llamada pone al otro en espera. En este caso, participant_id srfBElmCRp2QB23b7Mpk0w== solo recibe secuencias de contenido multimedia y no envía ningún contenido multimedia, por lo que se omite el elemento XML send. Por el contrario, participant_id zSfPoSvdSDCmU3A3TRDxAw== envía contenido multimedia al otro participante, pero no recibe contenido de él, por lo que se omite el elemento XML 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=="> <recv>8zc6e0lYTlWIINA6GR+3ag==</recv> <recv>EiXGlc+4TruqqoDaNE76ag==</recv> </participantstreamassoc> <participantstreamassoc participant_id="zSfPoSvdSDCmU3A3TRDxAw=="> <send>8zc6e0lYTlWIINA6GR+3ag==</send> <send>EiXGlc+4TruqqoDaNE76ag==</send> </participantstreamassoc> </recording>

En el siguiente ejemplo, se muestra la actualización de metadatos cuando se reanuda la llamada. La carga ahora tiene los elementos XML send y 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>

Receptores compatibles: KinesisDataStreamSink.

No puede combinar este procesador con el análisis de llamadas con Amazon Transcribe. Para obtener más información sobre la entrada y la salida de Amazon Transcribe, consulte Transcribir transmisión de audio en la Guía para desarrolladores de Amazon Transcribe.

La sesión de análisis de llamadas con Amazon Transcribe toma los datos de audio introducidos desde Kinesis Video Stream.

  • Compatible MediaEncoding: audio little-endian de 16 bits firmado por PCM.

  • Frecuencias MediaSampleRate de muestreo compatibles: entre 8.000 Hz y 48.000 Hz.

StreamConfiguration de entrada para los procesadores Amazon Transcribe:

  • Debe especificar el KinesisVideoStreamArn para cada transmisión.

  • (Opcional) FragmentNumber de KVS: inicia un trabajo de análisis de llamadas con el fragmento situado después de un fragmento específico. Si no se proporciona, utilizará el último fragmento disponible en Kinesis Video Stream.

  • La StreamChannelDefinition de Amazon Transcribe admite audio con dos canales. Debe especificar el NumberOfChannels en el tiempo de ejecución de la StreamChannelDefinition. Además, debe pasar el ChannelId si envía audio mono en dos canales separados. En su transcripción, a los canales se les asignan las etiquetas ch_0 y ch_1. El siguiente ejemplo muestra la entrada KVS para una transmisión de un canal de audio mono.

"StreamChannelDefinition" : {" NumberOfChannels" : 1 }

El siguiente ejemplo muestra la entrada KVS para dos entradas de audio mono en dos flujos diferentes.

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

En el caso de la MediaInsightsPipeline creada por Voice Connector con un procesador Amazon Transcribe, se asigna el audio del tramo de la cuenta del Voice Connector a channel-0 y el audio del tramo de la PSTN a channel-1.

En el caso del Voice Connector SIPREC, nos basamos en los metadatos del SIPREC. En la mayoría de los casos, se asigna la etiqueta de flujo con el valor lexicográfico más bajo a channel-0.

Para los procesadores de análisis de llamadas con Amazon Transcribe y Amazon Transcribe, si pasa dos transmisiones de Kinesis Video y cada transmisión contiene un canal de audio mono, intercalamos ambos canales en una sola transmisión de audio antes de procesar los datos de análisis de llamadas de Transcribe o Transcribe.

En el siguiente ejemplo se muestra un formato de salida de metadatos de un solo uso para 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" }

En el siguiente ejemplo se muestra el formato de salida de 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 }] } } }

Receptores compatibles: KinesisDataStreamSink, SqsQueueSink, SnsTopicSink yLambdaFunctionSink.

Puede combinar este procesador con el procesador de análisis de llamadas con Amazon Transcribe, el procesador Amazon Transcribe o la grabación de llamadas. Debe usar las StartVoiceToneAnalysisTaskAPI StartSpeakerSearchTasko para invocar un procesador de análisis de voz. Para obtener más información sobre el uso del análisis de voz, consulte Uso del análisis de voz de Amazon Chime SDK.

Los registros de flujo de datos de Kinesis (KDS) generados por el análisis de llamadas incluyen el ID del canal multimedia, el tipo de detalle, los metadatos y las secciones específicas del procesador. Para obtener información sobre el consumo de datos de una transmisión de datos de Kinesis, consulte Lectura de datos de Amazon Kinesis Data Streams, en la Guía para desarrolladores de Amazon Kinesis Streams. Para crear una configuración con este receptor, debe tener permiso de kinesis:DescribeStream en la transmisión especificada.

Metadatos

La metadata sección de los registros KDS generados contiene todos los pares clave-valor especificados CallAnalyticsRuntimeMetadata durante la llamada a la API. CreateMediaInsightsPipeline Si un Voice Connector inició una sesión de análisis de llamadas, la sección de metadatos se rellena automáticamente con los siguientes parámetros:

  • transactionId

  • fromNumber

  • toNumber

  • callId

  • voiceConnectorId

  • direction

Además de los parámetros que se muestran arriba, la sección de metadatos de las sesiones de análisis de llamadas iniciadas por Voice Connector se rellenará con un oneTimeMetadata campo que contiene:

  • inviteHeaders

  • siprecMetadata

Se publica en Kinesis Data Streams solo una vez al principio de la sesión y tiene detail-type un CallAnalyticsMetadata de.

Puede pasar identificadores únicos MediaInsightsRuntimeMetadata para cada llamada a la CreateMediaInsightsPipelineAPI para poder identificar de forma única la fuente de cada registro entregado a su Kinesis Data Stream.

La grabación de análisis de llamadas lee el audio de una transmisión de KVS, lo graba como un archivo de audio y lo carga en el bucket de Amazon S3 especificado. Tras grabar las llamadas, Analytics también envía los metadatos de la llamada junto con la ubicación del archivo a KDS. Si habilita un almacenamiento de datos, los metadatos de la llamada (incluidos los metadatos del SIPREC si se utilizó el SIPREC) se envían al almacenamiento de datos en un conjunto de tablas de Parquet que puede consultar.

Como cualquier otro procesador de análisis de llamadas, primero debe crear una configuración para la canalización. Puede utilizar la consola de Amazon Chime SDK o la CLI para crear la configuración. A continuación, usará la CLI para crear la canalización. Para obtener más información sobre el uso de la consola para crear configuraciones de grabación, consulte Creación de configuraciones de análisis de llamadas en la sección anterior. Para obtener más información sobre el uso de los flujos de trabajo de grabación, consulte Flujos de trabajo para grabar llamadas en la sección anterior.

Para usar la CLI para crear una configuración

Ejecute el siguiente comando:

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

En el siguiente ejemplo se muestra un archivo JSON de configuración con solo la grabación 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" } ] }

Recuerde lo siguiente:

  • Para permitir la grabación de llamadas a través de Kinesis Video Streams, el audio debe ser little-endian de 16 bits firmado por PCM. La frecuencia de muestreo debe ser de 8 kHz.

  • Los creadores deben establecer un período de retención de datos lo suficientemente largo para la transmisión de vídeo de Kinesis a fin de garantizar que los fragmentos se conserven y se puedan consumir mediante el análisis de llamadas.

  • Si habilita la grabación de llamadas, sola o en combinación con otros procesadores, debe suministrar dos ARN de Kinesis Video Stream para la grabación. La grabación de llamadas no admite una sola entrada de audio estéreo.

El siguiente ejemplo muestra el formato de salida de metadatos para la grabación de análisis de llamadas en 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 habilitar la mejora de la voz, incluye un VoiceEnhancementSinkConfiguration elemento en una llamada a la CreateMediaInsightsPipelineConfigurationAPI.

En este ejemplo se muestra un elemento típico.

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

Para actualizar una configuración, añade el VoiceEnhancementSinkConfiguration elemento a una llamada a la UpdateMediaInsightsPipelineConfigurationAPI. Cuando lo hagas, la GetMediaInsightsPipelineConfigurationAPI incluirá el VoiceEnhancementSinkConfiguration elemento en los resultados.

Esta solicitud de ejemplo muestra cómo habilitar la mejora de voz y la grabación en 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

El elemento VoiceEnhancementSink siempre requiere un elemento S3RecordingSink en la configuración de análisis de llamadas.