

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.

# Descripción de los mensajes de transcripción en vivo de Amazon Chime SDK
<a name="process-msgs"></a>

El servicio Amazon Chime SDK comparte la información de transcripción con los asistentes mediante el envío de objetos de `TranscriptEvent` en mensajes de datos. Un `TranscriptEvent` entrega un `Transcript` o un `TranscriptionStatus`. 

Un `Transcript` incluye los resultados con marcas de tiempo, palabras y signos de puntuación atribuidos al usuario. Un resultado puede ser «parcial», en cuyo caso el sistema normalmente lo actualiza en un `TranscriptEvent` posterior. Esto le permite ver las transcripciones rápidamente y aplicar las actualizaciones en línea más adelante, según sea necesario.

Un `TranscriptStatus` puede ofrecer uno de los eventos de `TranscriptionStatusType`, que se enumeran en el ejemplo de la siguiente sección.

Las versiones más recientes de los Amazon Chime SDK incluyen tipos de datos adicionales y funciones auxiliares para el procesamiento común de un `TranscriptEvent`.

## TranscriptEvent
<a name="transcript-event"></a>

Este ejemplo muestra un evento de transcripción típico.

```
type TranscriptEvent = Transcript | TranscriptionStatus;

export class TranscriptEventConverter {
  static from(dataMessage: DataMessage): TranscriptEvent[] {
    // convert DataMessage to TranscriptEvents
    return ...
  }
}

export default class TranscriptionStatus {
    type: TranscriptionStatusType;
    eventTimeMs:                   number;
    transcriptionRegion:           string;
    transcriptionConfiguration:    string;
    message?:                      string;
}

enum TranscriptionStatusType {
    STARTED        =    'started',
    INTERRUPTED    =    'interrupted',
    RESUMED        =    'resumed',
    STOPPED        =    'stopped',
    FAILED         =    'failed',
}

export default class Transcript {
    results: TranscriptResult[];    // at least one
}

export class TranscriptResult {
    resultId:        string;
    isPartial:       boolean;
    startTimeMs:     number;
    endTimeMs:       number;
    alternatives:    TranscriptAlternative[];    // most confident first
    }

export default class TranscriptAlternative {
    items: TranscriptItem[];    // in start time order
    transcript: string; //concatenated transcript items
    entities?: TranscriptEntity[];
}

export default class TranscriptItem {
    type:                      TranscriptItemType;
    startTimeMs:               number;
    endTimeMs:                 number;
    attendee:                  Attendee;
    content:                   string;
    vocabularyFilterMatch?:    boolean;
    confidence?:               number;  
    stable?:                   boolean;
}

enum TranscriptItemType {
    PRONUNCIATION    =    'pronunciation',// content is a word
    PUNCTUATION      =    'punctuation',// content is punctuation
}

export default class TranscriptEntity {  
    category:       string;  
    confidence:     number;  
    content:        string;  
    endTimeMs:      number;  
    startTimeMs:    number;  
    type?:          string;
}

// This is an existing SDK model
export default class Attendee {
    attendeeId:        string;
    externalUserId:    string;
}
```

## Directrices de datos
<a name="data-guidelines"></a>

Tenga en cuenta estas pautas a medida que avanza.

1. `transcription.results` puede tener más de un resultado.

1. Si `transcription.results[i].isPartial = true`, es posible que haya una actualización para todo el resultado. La actualización es probable, pero no está garantizada. La actualización tiene el mismo `transcript.result[i].resultId`. Si desea evitar las transcripciones poco fiables, puede omitir por completo los resultados parciales. Si desea resultados de baja latencia, puede mostrar resultados parciales y sobrescribirlos por completo cuando llegue la actualización.

1. `transcription.results[i].alternatives` contiene siempre como mínimo una entrada. Si contiene más de una entrada, la entrada más segura será la primera de la lista. En la mayoría de los casos, puede realizar la primera entrada en `transcription.results[i].alternatives` e ignorar las demás.

1. `transcription.results[i].alternatives[j].items` incluye una entrada para cada palabra o signo de puntuación.

1. El contenido de `transcription.results[i].alternatives[j].items[k].` es lo que se ha dicho.

1. `transcription.results[i].alternatives[j].items[k].attendee` es la atribución (quién) del contenido por parte del usuario.

1. `transcription.results[i].alternatives[j].items[k].startTimeMs` es el «cuándo» del contenido. Esto permite reproducir palabra por palabra las transcripciones atribuidas a los usuarios entre diferentes usuarios en el orden en que se pronunciaron las palabras.

1. Por lo general, el campo `transcription.results[i].alternatives[j].items[k].endTimeMs` se puede ignorar, pero se proporciona para completar quién dijo qué y cuándo.

1. `transcription.results[i].alternatives[j].items[k].vocabularyFilterMatch` es verdadero si el contenido coincide con una palabra del filtro; de lo contrario, es falso.

1. `transcription.results[i].alternatives[j].items[k].confidence` es un valor comprendido entre 0 y 1. Indica la confianza del motor en que el contenido del elemento coincide correctamente con la palabra hablada, siendo 0 la confianza más baja y 1 la confianza más alta.

1. `transcription.results[i].alternatives[j].items[k].stable` indica si la palabra actual cambiará en futuras actualizaciones de resultados parciales. Este valor solo puede ser válido si habilita la característica de estabilización de resultados parciales configurando `EnablePartialResultsStabilization` como `true` en su solicitud.

1. `transcription.results[i].alternatives[j].entities` incluye una entrada para cada entidad que detecten las características de identificación o redacción de contenido. La lista solo se rellena si habilita la identificación o la redacción del contenido. Una entidad puede ser información como información de identificación personal o información de salud personal. Puede utilizar entidades para resaltar palabras de interés o tomar medidas al respecto durante la transcripción.

1. `transcription.results[i].alternatives[j].entities[k].category` es la categoría de la entidad. Es igual al tipo de identificación o redacción del contenido, como «PII» o «PHI», que se proporciona en la solicitud.

1. `transcription.results[i].alternatives[j].entities[k].confidence` mide la potencia del motor para que el contenido en particular sea realmente una entidad. Tenga en cuenta que esto es diferente de la confianza a nivel de elemento, que mide la confianza del motor en la exactitud de las propias palabras.

1. `transcription.results[i].alternatives[j].entities[k].content` es el texto real que constituye la entidad. Pueden ser varios elementos, como una dirección.

1. `transcription.results[i].alternatives[j].entities[k].startTimeMs` captura el momento en el que se empezó a hablar con la entidad.

1. `transcription.results[i].alternatives[j].entities[k].endTimeMs` captura el momento en el que la entidad terminó de hablar.

1. `transcription.results[i].alternatives[j].entities[k].type` solo es compatible con el motor de transcripción y proporciona el subtipo de la entidad. Estos son valores como “DIRECCIÓN”, “NÚMERO\_TARJETA\_CRÉDITO”, etc.

## Registro de controladores de eventos para TranscriptEvents
<a name="register-handler"></a>

En los siguientes ejemplos se utiliza la biblioteca de cliente del SDK de Amazon Chime para. JavaScript Sin embargo, el patrón es uniforme en todos Amazon Chime SDK.

El `TranscriptionController` en el `RealtimeController` y `RealtimeControllerFacade` incluye funciones específicas para añadir un controlador que procese `TranscriptionEvents`:

```
/** 
 * Returns the [[TranscriptionController]] for this real-time controller. 
 */
readonly transcriptionController?: TranscriptionController;
```

`TranscriptionController` tiene dos funciones para gestionar la suscripción y la cancelación de la suscripción a las devoluciones de llamadas de `TranscriptionEvent`:

```
import TranscriptEvent from './TranscriptEvent';

export default interface TranscriptionController {
  /**
   * Subscribe a callback to handle received transcript event
   */
  subscribeToTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void;

  /** 
   * Unsubscribe a callback from receiving transcript event 
   */
  unsubscribeFromTranscriptEvent(callback: (transcriptEvent: TranscriptEvent) => void): void;
}
```

**Uso del `TranscriptionController` opcional**  
Proporcionamos una implementación predeterminada de la interfaz de `TranscriptionController` denominada `DefaultTranscriptionController`. La implementación predeterminada en `DefaultRealtimeController` y `DefaultAudioVideoFacade` devuelve un objeto `DefaultTranscriptionController`:

```
/** 
get transcriptionController(): TranscriptionController {
   return this.realtimeController.transcriptionController;
}
```

`DefaultRealtimeController` también toma un objeto de `TranscriptionController` opcional en su constructor. Eso le permite anular el comportamiento de `DefaultTranscriptionController`. Las aplicaciones para desarrolladores se suscriben y cancelan la suscripción a una o más llamadas mediante el objeto de `TranscriptionController` del objeto `AudioVideoFacade`:

```
// Subscribe
this.audioVideo.transcriptionController?.subscribeToTranscriptEvent(this.transcriptEventHandler);

// Unsubscribe
this.audioVideo.transcriptionController?.unsubscribeFromTranscriptEvent(this.transcriptEventHandler););
```