

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.

# Llamada al procesador de análisis y a los destinos de salida de Amazon Chime SDK
<a name="call-analytics-processor-and-output-destinations"></a>

 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.

## Destinos del procesador de análisis de llamadas con Amazon Transcribe
<a name="amazon-transcribe-call-analytics-processor"></a>

Receptores compatibles: `KinesisDataStreamSink`.

No puede combinar este procesador con un procesador Amazon Transcribe. Para obtener más información sobre Amazon Transcribe Call Analytics, consulte el análisis de [Real-time llamadas en la Guía](https://docs.aws.amazon.com/transcribe/latest/dg/call-analytics-streaming.html) para desarrolladores de *Amazon Transcribe*. Si habilita el [análisis posterior a la llamada](https://docs.aws.amazon.com/transcribe/latest/dg/tca-post-call.html) mediante la inclusión de `PostCallAnalyticsSettings` en la llamada a la API `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.

Post-call Los artefactos 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é interlocutor está en qué canal cuando llame a la API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html). 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"
            }
        ]
    }
```

## Resultados de análisis de llamadas con Amazon Transcribe
<a name="amazon-transcribe-call-analytics-output"></a>

 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}}
                }]
            }
        }
    }
}
```

## Metadatos de actualizaciones de streaming de Voice Connector de Amazon Chime SDK
<a name="cvc-stream-update-metadata"></a>

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](https://docs.aws.amazon.com/chime-sdk/latest/ag/automating-chime-with-cloudwatch-events.html).

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

## Metadatos de grabación de llamadas SIP
<a name="sip-update-metadata"></a>

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 video. 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>
```

## Destinos del procesador Amazon Transcribe
<a name="amazon-transcribe-processors"></a>

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](https://docs.aws.amazon.com/transcribe/latest/dg/streaming.html) 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.

## Salida de Amazon Transcribe
<a name="amazon-transcribe-output"></a>

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}}
            }]
        }
    }
}
```

## Destinos de los procesadores de análisis de voz
<a name="voice-analytics-processor"></a>

 Receptores compatibles: `KinesisDataStreamSink`, `SqsQueueSink`, `SnsTopicSink` y`LambdaFunctionSink`. 

 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 API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartSpeakerSearchTask.html) o [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_StartVoiceToneAnalysisTask.html) 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](https://docs.aws.amazon.com/chime-sdk/latest/dg/voice-analytics.html). 

## Uso de un flujo de datos de Kinesis como receptor
<a name="kinesis-data-stream-destination"></a>

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](https://docs.aws.amazon.com/streams/latest/dev/building-consumers.html), 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 sección de `metadata` de los registros KDS generados contiene todos los pares clave-valor especificados en `CallAnalyticsRuntimeMetadata` durante la llamada a la API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html). 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 mostrados anteriormente, la sección de metadatos de las sesiones de análisis de llamadas iniciadas por Voice Connector se rellenará con un campo `oneTimeMetadata` que contiene: 
+ `inviteHeaders`
+ `siprecMetadata`

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

Puede pasar identificadores únicos de `MediaInsightsRuntimeMetadata` para cada llamada a la API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipeline.html) para poder identificar de forma única la fuente de cada registro entregado a su flujo de datos de Kinesis.

## Grabación de llamadas de Amazon S3
<a name="amazon-s3-call-recording"></a>

 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 [Creaión de configuraciones de análisis de llamadas de Amazon Chime SDK](creating-ca-configuration.md) en la sección anterior. Para obtener más información sobre el uso de los flujos de trabajo de grabación, consulte [Descripción de los flujos de trabajo para grabar llamadas para Amazon Chime SDK](recording-workflows.md) en la sección anterior.

 **Para usar la CLI para crear una configuración**

 Use 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 habilitar 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 video de Kinesis a fin de garantizar que los fragmentos se retengan y pueda consumirlos un 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. 

## Salida de metadatos de grabación de llamadas de Amazon S3
<a name="s3-recording-metadata-output"></a>

El siguiente ejemplo muestra el formato de salida de los metadatos del análisis de llamada para la grabación de 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}}"
}
```

## Habilitación de ajustes de voz
<a name="voice-enhancement-sink"></a>

Para habilitar la mejora de la voz, incluya un elemento `VoiceEnhancementSinkConfiguration` en una llamada a la API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_CreateMediaInsightsPipelineConfiguration.html).

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ñada el elemento `VoiceEnhancementSinkConfiguration` a una llamada a la API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_UpdateMediaInsightsPipelineConfiguration.html). Cuando lo haga, la API [https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaInsightsPipelineConfiguration.html](https://docs.aws.amazon.com/chime-sdk/latest/APIReference/API_media-pipelines-chime_GetMediaInsightsPipelineConfiguration.html) incluirá el elemento `VoiceEnhancementSinkConfiguration` 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.