# Transmitir en vivo los cambios de una Assembly

GET`{UPDATE_STREAM_URL}`

En la respuesta después de crear una Assembly, encontrarás dos campos para obtener elAssembly Status: `assembly_ssl_url` y `update_stream_url`. Puedes[obtener el Assembly Status actual](/es/docs/api/assemblies-assembly-id-get.md) desde la URL proporcionada en`assembly_ssl_url`. Para obtener información sobre el progreso de la Assembly, puedes consultarlo periódicamente o suscribirte al flujo de actualizaciones, que se describe en esta página.

## Eventos enviados por el servidor

La propiedad `update_stream_url` del Assembly Status define una URL en la que está disponible el flujo de actualizaciones de la Assembly correspondiente mediante eventos enviados por el servidor.

Los [eventos enviados por el servidor](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent%5Fevents/Using%5Fserver-sent%5Fevents)son una tecnología web para enviar notificaciones en vivo desde el servidor a un cliente mediante HTTP. Es similar a WebSockets, pero solo permite mensajes unidireccionales del servidor al cliente y utiliza un[formato sencillo basado en texto](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent%5Fevents/Using%5Fserver-sent%5Fevents#event%5Fstream%5Fformat).

Mientras la Assembly se encuentre en estado de subida o ejecución, un cliente puede conectarse a este endpoint enviando una solicitud `GET` con el campo de encabezado `Accept: text/event-stream` a la URL especificada en `update_stream_url` y analizar el flujo de respuesta. El servidor puede enviar una combinación de mensajes y eventos al cliente. La diferencia es que los eventos incluyen una carga útil adicional con información, mientras que los mensajes no.

## Mensajes

Un mensaje consta de su nombre y no incluye ninguna carga útil adicional. En la transmisión, un mensaje con el nombre `assembly_finished` se ve así (`[NL]` indica una línea nueva):

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_GBjmaCTpH3rF6sBBsH4gkTL4K8CU)

```
data: assembly_finished[NL]
[NL]

```

Transloadit envía los siguientes mensajes:

* `assembly_upload_meta_data_extracted` se emite cuando todas las subidas han finalizado y se han extraído los metadatos de todas ellas.
* `assembly_uploading_finished` se emite cuando todas las subidas de esta Assembly han finalizado y la Assembly pasa del estado de subida al de ejecución.
* `assembly_finished` se emite cuando la Assembly está completa y todos los archivos se han procesado. El servidor finalizará el flujo después de este mensaje.
* `ping` se emite periódicamente para mantener activa la conexión mientras se procesa la Assembly. Actualmente se envía cada minuto, aunque este intervalo podría cambiar en el futuro.

## Eventos

Un evento consta de su nombre y una carga útil adicional. En la transmisión, un evento con el nombre`assembly_result_finished` se ve así (`[NL]` indica una línea nueva):

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_GBjmaCTpH3rF6sBBsH4gkTL4K8CU)

```
event: assembly_result_finished[NL]
data: {"id":"6bb16f6cd49a44b4ae431f576e016c6d","name":"lesereihe.doc",...}[NL]
[NL]

```

Transloadit envía los siguientes eventos:

* `assembly_error` se emite cuando ocurre un error durante la ejecución de la Assembly. El servidor finalizará el flujo después de este evento. Se incluye información adicional sobre el error, por ejemplo:\
  ![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_GBjmaCTpH3rF6sBBsH4gkTL4K8CU)

```json
{  
  "error": "DOCUMENT_CONVERT_UNSUPPORTED_CONVERSION",  
  "http_code": 400,  
  "step": "avatar",  
  "previousStep": ":original",  
  "worker": "dhor.transloadit.com",  
  "msg": "The output format pdf is not supported for the input format pdf. The input format pdf is currently not allowed."  
}  
```

* `assembly_upload_finished` se emite por cada subida que finaliza. Se incluye información adicional sobre el archivo subido. La estructura es la misma que la de un objeto del arreglo `uploads`del [Assembly Status](/es/docs/api/assembly-status-response.md), por ejemplo:\
  ![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_GBjmaCTpH3rF6sBBsH4gkTL4K8CU)

```jsonc
{  
  "id": "6bb16f6cd49a44b4ae431f576e016c6d",  
  "name": "lesereihe.doc",  
  "basename": "lesereihe",  
  "ext": "doc",  
  "size": 61440,  
  "mime": "application/msword",  
  "type": null,  
  "field": "file",  
  "md5hash": "154a9349b8f9111865a07ed0a7050f55",  
  // …  
}  
```

* `assembly_result_finished` se emite cuando hay disponible un nuevo resultado de un Step. Se incluyen el nombre del Step e información adicional sobre el resultado. La estructura es la misma que la de un objeto del arreglo `results` del[Assembly Status](/es/docs/api/assembly-status-response.md), por ejemplo:\
  ![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_GBjmaCTpH3rF6sBBsH4gkTL4K8CU)

```jsonc
[  
  "avatar",  
  {  
    "id": "5789e06b48ad450aa55f9b3721376581",  
    "name": "lesereihe.pdf",  
    "basename": "lesereihe",  
    "ext": "pdf",  
    "size": 120456,  
    "mime": "application/pdf",  
    "type": "pdf",  
    "field": "file",  
    "md5hash": "e9df77e5ee87e8ec3b4453bcddf191bc",  
    "meta": {  
      "page_count": 1,  
      "width": 1238,  
      "height": 1750,  
      // …  
    },  
    // …  
  }  
]  
```

* `assembly_execution_progress` se emite a intervalos regulares con información sobre elExecution Progress general de la Assembly y sus archivos. La estructura y los mecanismos se detallan en[Assembly Execution Progress](/docs/topics/assembly-execution-progress.md), por ejemplo:\
  ![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_GBjmaCTpH3rF6sBBsH4gkTL4K8CU)

```json
{  
  "progress_combined": 50,  
  "progress_per_original_file": [  
    {  
      "original_id": "6bb16f6cd49a44b4ae431f576e016c6d",  
      "progress": 50  
    }  
  ]  
}  
```

Nota: `progress_per_original_file` utiliza `original_id` como clave. Los archivos importados sin un`original_id` no aparecerán en esta lista.

###### Nota

Es posible que se agreguen más mensajes y eventos en el futuro. Por lo tanto, el cliente debe ignorar los mensajes o eventos inesperados y no generar errores.

## Ejemplo en JavaScript

Los navegadores modernos ofrecen compatibilidad nativa con los eventos enviados por el servidor mediante el constructor `EventSource`. Si el Assembly Status está almacenado en la variable `assembly_status`, el cliente puede escuchar el mensaje `assembly_finished`, el mensaje `assembly_uploading_finished` y el evento `assembly_result_finished` de la siguiente manera:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_GBjmaCTpH3rF6sBBsH4gkTL4K8CU)

```js
const stream = new EventSource(assembly_status.update_stream_url)

// Listen for the assembly_finished and assembly_uploading_finished messages
stream.addEventListener('message', (event) => {
  switch (event.data) {
    case 'assembly_finished':
      console.log('Assembly is finished')
      break
    case 'assembly_uploading_finished':
      console.log('All uploads are finished')
      break
  }
})

// Listen for the assembly_result_finished event
stream.addEventListener('assembly_result_finished', (event) => {
  const result = JSON.parse(event.data)
  console.log('Assembly result is available', result)
})

```

## Componentes de consulta de GET

No se requieren componentes de consulta en la solicitud

## Respuesta

Este es un ejemplo del cuerpo de la respuesta:

![](/_next/static/media/copy.04p1cju9qekk_.svg?dpl=dpl_GBjmaCTpH3rF6sBBsH4gkTL4K8CU)

```
data: assembly_uploading_finished

event: assembly_upload_finished
data: {"id":"7354d54e9dfa4a47b0f8c451730038b9","name":"lesereihe.doc","basename":"lesereihe","ext":"doc","size":61440,"mime":"application/msword","type":null,"field":"file","md5hash":"154a9349b8f9111865a07ed0a7050f55", [...]

data: assembly_upload_meta_data_extracted

event: assembly_result_finished
data: ["avatar",{"id":"77d73782d83447c38a87af024e03d329","name":"lesereihe.pdf","basename":"lesereihe","ext":"pdf","size":120456,"mime":"application/pdf","type":"pdf","field":"file","md5hash":"278042dc10ac7a9b583c9467dac8cfda", [...]

event: assembly_execution_progress
data: {"progress_combined":100,"progress_per_original_file":[]}

data: assembly_finished

```

Para obtener más información sobre el formato de respuesta, consulta la documentación de Mozilla sobre[eventos enviados por el servidor](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent%5Fevents/Using%5Fserver-sent%5Fevents#event%5Fstream%5Fformat).
