Transmitir en vivo los cambios de una Assembly
{UPDATE_STREAM_URL}En la respuesta después de crear una Assembly, encontrarás dos campos para obtener el
Assembly Status: assembly_ssl_url y update_stream_url. Puedes
obtener el Assembly Status actual 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 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.
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):
data: assembly_finished[NL]
[NL]
Transloadit envía los siguientes mensajes:
assembly_upload_meta_data_extractedse emite cuando todas las subidas han finalizado y se han extraído los metadatos de todas ellas.assembly_uploading_finishedse emite cuando todas las subidas de esta Assembly han finalizado y la Assembly pasa del estado de subida al de ejecución.assembly_finishedse emite cuando la Assembly está completa y todos los archivos se han procesado. El servidor finalizará el flujo después de este mensaje.pingse 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):
event: assembly_result_finished[NL]
data: {"id":"6bb16f6cd49a44b4ae431f576e016c6d","name":"lesereihe.doc",...}[NL]
[NL]
Transloadit envía los siguientes eventos:
-
assembly_errorse 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:{ "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_finishedse 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 arreglouploadsdel Assembly Status, por ejemplo:{ "id": "6bb16f6cd49a44b4ae431f576e016c6d", "name": "lesereihe.doc", "basename": "lesereihe", "ext": "doc", "size": 61440, "mime": "application/msword", "type": null, "field": "file", "md5hash": "154a9349b8f9111865a07ed0a7050f55", // … } -
assembly_result_finishedse 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 arregloresultsdel Assembly Status, por ejemplo:[ "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_progressse emite a intervalos regulares con información sobre el Execution Progress general de la Assembly y sus archivos. La estructura y los mecanismos se detallan en Assembly Execution Progress, por ejemplo:{ "progress_combined": 50, "progress_per_original_file": [ { "original_id": "6bb16f6cd49a44b4ae431f576e016c6d", "progress": 50 } ] }Nota:
progress_per_original_fileutilizaoriginal_idcomo clave. Los archivos importados sin unoriginal_idno aparecerán en esta lista.
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:
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 solicitudRespuesta
Este es un ejemplo del cuerpo de la respuesta:
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.