Respuesta de Assembly Status
Transloadit utiliza un único formato de respuesta para crear y consultar Assemblies, añadir respuestas a formularios de carga y enviar Notifications.
A continuación se muestra un ejemplo completo de una respuesta de Transloadit. Como los archivos se procesan en paralelo,
el orden de results no coincide necesariamente con el de uploads. También puede
haber varios resultados para una sola carga. Para relacionar los resultados con las cargas, puedes usar el
campo original_id, que está presente en ambos elementos.
Ejemplo de respuesta
{
"assembly_id": "7828446e5acd4aa996dce3455ec914e9",
"ok": "ASSEMBLY_COMPLETED",
"message": "The Assembly was successfully completed.",
"warnings": [],
"account_id": "4ce4fb3d9d1842b6ba5d6f3ccee4b066",
"assembly_ssl_url": "https://api2-morven.transloadit.com/assemblies/7828446e5acd4aa996dce3455ec914e9",
"assembly_url": "http://api2-morven.transloadit.com/assemblies/7828446e5acd4aa996dce3455ec914e9",
"build_id": "339",
"bytes_expected": 486608,
"bytes_received": 486608,
"bytes_usage": 1097155,
"client_agent": null,
"client_ip": null,
"client_referer": null,
"companion_url": "https://api2-morven.transloadit.com/companion/",
"executing_jobs": [],
"execution_duration": 5.281,
"execution_start": "2020/01/09 12:02:08 GMT",
"expected_tus_uploads": 1,
"fields": {},
"finished_tus_uploads": 1,
"has_dupe_jobs": false,
"instance": "morven.transloadit.com",
"is_infinite": false,
"jobs_queue_duration": 0.01,
"last_job_completed": "2020/01/09 12:02:14 GMT",
"merged_params": "{\"steps\":{\":original\":{\"robot\":\"/upload/handle\"},\"faces_detected\":{\"use\":\":original\",\"robot\":\"/image/facedetect\",\"crop\":true,\"faces\":\"max-confidence\",\"format\":\"preserve\",\"crop_padding\":\"10%\"},\"exported\":{\"use\":[\"faces_detected\",\":original\"],\"robot\":\"/s3/store\",\"credentials\":\"demo_s3_credentials\"}},\"auth\":{\"key\":\"****\",\"expires\":\"2020-01-10T12:02:05.826Z\"}}",
"notify_duration": null,
"notify_response_code": null,
"notify_start": null,
"notify_status": null,
"notify_url": null,
"params": "{\"steps\":{\":original\":{\"robot\":\"/upload/handle\"},\"faces_detected\":{\"use\":\":original\",\"robot\":\"/image/facedetect\",\"crop\":true,\"faces\":\"max-confidence\",\"format\":\"preserve\",\"crop_padding\":\"10%\"},\"exported\":{\"use\":[\"faces_detected\",\":original\"],\"robot\":\"/s3/store\",\"credentials\":\"demo_s3_credentials\"}},\"auth\":{\"key\":\"****\",\"expires\":\"2020-01-10T12:02:05.826Z\"}}",
"parent_assembly_status": null,
"parent_id": null,
"queue_duration": 0.184,
"running_jobs": [],
"start_date": "2020/01/09 12:02:06 GMT",
"started_jobs": [
":original:::original",
"faces_detected:::original",
"exported:::original",
"exported::faces_detected"
],
"started_tus_uploads": 1,
"template": null,
"template_id": null,
"transloadit_client": "node-sdk:2.0.8",
"tus_url": "https://api2-morven.transloadit.com/resumable/files/",
"upload_duration": 2.814,
"upload_meta_data_extracted": true,
"uppyserver_url": "https://api2-morven.transloadit.com/companion/",
"update_stream_url": "https://api2-morven.transloadit.com/ws20074?assembly=7828446e5acd4aa996dce3455ec914e9",
"websocket_url": "https://api2-morven.transloadit.com/ws20074",
"uploads": [
{
"id": "a30bd0776e7f4ac3817b056d102e8219",
"basename": "joe-gardner-149699",
"ext": "jpg",
"field": "file",
"from_batch_import": false,
"is_tus_file": true,
"md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"mime": "image/jpeg",
"name": "joe-gardner-149699.jpg",
"original_basename": "joe-gardner-149699",
"original_id": "a30bd0776e7f4ac3817b056d102e8219",
"original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"original_name": "joe-gardner-149699.jpg",
"original_path": "/",
"size": 485784,
"ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
"tus_upload_url": "https://api2-morven.transloadit.com/resumable/files/UPLOAD_ID+CAPABILITY_TOKEN",
"type": "image",
"url": "http://demos.transloadit.com.s3.amazonaws.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
"meta": {
"aspect_ratio": "1.500",
"average_color": "#b09d96",
"colorspace": "RGB",
"date_file_modified": "2020/01/09 12:02:08 GMT",
"frame_count": 1,
"has_clipping_path": false,
"has_transparency": false,
"height": 1667,
"width": 2500
}
}
],
"results": {
":original": [
{
"id": "a30bd0776e7f4ac3817b056d102e8219",
"basename": "joe-gardner-149699",
"cost": 97157,
"execTime": 0.81,
"ext": "jpg",
"field": "file",
"from_batch_import": false,
"is_tus_file": false,
"md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"mime": "image/jpeg",
"name": "joe-gardner-149699.jpg",
"original_basename": "joe-gardner-149699",
"original_id": "a30bd0776e7f4ac3817b056d102e8219",
"original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"original_name": "joe-gardner-149699.jpg",
"original_path": "/",
"queue": "live",
"queueTime": 0.01,
"size": 485784,
"ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
"tus_upload_url": null,
"type": "image",
"url": "http://demos.transloadit.com.s3.amazonaws.com/a3/0bd0776e7f4ac3817b056d102e8219/joe-gardner-149699.jpg",
"meta": {
"aspect_ratio": "1.500",
"average_color": "#b09d96",
"colorspace": "RGB",
"date_file_modified": "2020/01/09 12:02:08 GMT",
"frame_count": 1,
"has_clipping_path": false,
"has_transparency": false,
"height": 1667,
"width": 2500
}
}
],
"faces_detected": [
{
"id": "b8d12f6c517541ca86bf50c537cedb27",
"basename": "joe-gardner-149699",
"cost": 627606,
"execTime": 0.83,
"ext": "jpg",
"field": "file",
"from_batch_import": false,
"is_tus_file": false,
"md5hash": "2a5cd917f4281b9438956e489c63dfd2",
"mime": "image/jpeg",
"name": "joe-gardner-149699.jpg",
"original_basename": "joe-gardner-149699",
"original_id": "a30bd0776e7f4ac3817b056d102e8219",
"original_md5hash": "fb205cb04b6998fe7ba364f70227cfa1",
"original_name": "joe-gardner-149699.jpg",
"original_path": "/",
"queue": "live",
"queueTime": 0,
"size": 141822,
"ssl_url": "https://s3.amazonaws.com/demos.transloadit.com/b8/d12f6c517541ca86bf50c537cedb27/joe-gardner-149699.jpg",
"tus_upload_url": null,
"type": "image",
"url": "http://demos.transloadit.com.s3.amazonaws.com/b8/d12f6c517541ca86bf50c537cedb27/joe-gardner-149699.jpg",
"meta": {
"aspect_ratio": "0.739",
"average_color": "#8d654d",
"colorspace": "RGB",
"date_file_created": "2020/01/09 12:02:09 GMT",
"date_file_modified": "2020/01/09 12:02:12 GMT",
"faces": [
{
"confidence": 99.99,
"height": 840,
"width": 621,
"x1": 981,
"x2": 1550,
"y1": 121,
"y2": 891
}
],
"frame_count": 1,
"has_clipping_path": false,
"has_transparency": false,
"height": 840,
"width": 621
}
}
]
}
}
Explicación de los campos
ok-
Indica un estado del ciclo de vida sin errores, incluidos los estados de carga, ejecución, aborto y cancelación. El procesamiento satisfactorio se indica con
ASSEMBLY_COMPLETED. Si se produjo un error en la Assembly, se utiliza la claveerrordescrita a continuación en lugar de esta clave. error-
Indica un estado de error. Esta clave solo está presente si la Assembly ha fallado. Pueden añadirse nuevos códigos de error. Trata los códigos no reconocidos como fallos y conserva sus valores para inspeccionarlos mediante código.
message-
Un mensaje legible para las personas que explica el estado de esta Assembly. No siempre está presente.
assembly_id-
El ID único de esta Assembly. Puedes almacenarlo en una base de datos cuando se crea una Assembly y utilizarlo para identificar las Notifications entrantes correspondientes.
assembly_url-
La URL única utilizada para consultar el estado actual de esta Assembly.
assembly_ssl_url-
La URL única utilizada para consultar el estado actual de esta Assembly, pero preparada para utilizarse a través de SSL/HTTPS. Todas las solicitudes a la API que se envían a
assembly_urltambién pueden enviarse aassembly_ssl_url. companion_url-
La URL del servidor Companion con el que esta Assembly puede comunicarse.
websocket_url-
La URL de un servidor Websocket (utiliza Socket.IO) del que puedes obtener actualizaciones de estado en tiempo real de esta Assembly.
update_stream_url-
La URL de un flujo de eventos enviados por el servidor del que puedes obtener actualizaciones de estado en tiempo real de esta Assembly.
tus_url-
La URL del servidor tus que utiliza esta Assembly para las cargas reanudables.
bytes_received-
El número de bytes que se han cargado en esta Assembly hasta el momento. Los clientes lo utilizan principalmente para mostrar el progreso de la carga.
bytes_expected-
El número de bytes que esta Assembly espera que se carguen.
bytes_usage-
El número total de bytes que esta Assembly ha procesado y que se contabilizan en tu factura por consumo. La suma de
bytes_usagede todas tus Assemblies equivale a tu consumo mensual total. client_agent-
No se expone el agente de usuario de quien realiza la carga; este campo obsoleto siempre es
null. client_ip-
No se expone la dirección IP de quien realiza la carga; este campo obsoleto siempre es
null. client_referer-
No se expone la URL de referencia de quien realiza la carga; este campo obsoleto siempre es
null. start_date-
La fecha y hora en que se inició la carga para esta Assembly.
upload_duration-
El tiempo que tarda quien realiza la carga en cargar los archivos, en segundos.
execution_duration-
El tiempo que tarda Transloadit en ejecutar esta Assembly, en segundos.
fields-
Un mapa de clave/valor de campos de formulario adicionales para integraciones que no pueden utilizar la encapsulación con
<form>, como Uppy. uploads-
Un array de archivos cargados para esta Assembly. Para obtener más información, consulta la documentación sobre metadatos.
results-
Los archivos de resultado que Transloadit ha generado hasta el momento. Cada clave es el nombre del Step que generó un archivo. Los Robots de almacenamiento no generan archivos, por lo que se omiten los nombres de sus Step. Cuando se produce un
error, este objeto puede contener resultados parciales.
Metadatos personalizados de los archivos
Los objetos de archivo en uploads y results pueden contener un objeto user_meta con valores JSON personalizados,
incluidos objetos y arrays anidados. Trátalo como opcional al leer las respuestas; puede estar vacío ({}).
El mapa contiene valores de las cargas tus, de las Instructions del Step y de cualquier metadato heredado por el Robot.
Los valores definidos por el Step actual reemplazan las claves coincidentes del nivel superior. Esto es independiente de los metadatos detectados
de los archivos en meta y de los valores de la solicitud a nivel de la Assembly en fields.
Por ejemplo, un archivo puede contener "user_meta": { "stage": "resized", "approved": false }. Los Steps
posteriores leen ${file.user_meta.stage} y ${file.user_meta.approved}. Consulta
Metadatos personalizados para conocer el momento de evaluación, las reglas de herencia y un flujo de trabajo completo.