Webhooks
Configurar webhooks
Define notify_url en tus Assembly Instructions, al mismo nivel que steps. Cuando la Assembly
alcanza un estado terminal, Transloadit envía una solicitud HTTP POST a esa URL.
Cualquier código de estado desde 200 hasta 300, sin incluir este último,
confirma la entrega. Las redirecciones y los errores de cliente o de servidor se tratan como fallos. De forma predeterminada,
Transloadit reintenta los fallos 5 veces con un factor exponencial de 1,97.
La confirmación indica la recepción, no que el procesamiento haya sido correcto. Consulta el
estado ok o el código error de la carga útil verificada
para distinguir las Assemblies completadas, canceladas y fallidas. Un reenvío de Notification
también puede entregar un Assembly Status no terminal; no des por hecho que cada entrega implica que la Assembly se ha completado.
Limitar la carga útil de la Notification
De forma predeterminada, un webhook incluye el Assembly Status completo. Asigna a notification_payload un array
que contenga cualquier combinación de estos filtros admitidos:
without_params: se omitenparams,templateymerged_params, los campos sin procesar de nivel superior de las Assembly Instructions.without_result_meta_data: se omitemetade cada archivo enresults.without_results: se omite el objeto de nivel superiorresults.without_upload_meta_data: se omitemetade cada archivo enuploads.without_uploads: se omite el array de nivel superioruploads.
Los reenvíos de Notification reutilizan los filtros proporcionados en la solicitud original de la Assembly. Los filtros definidos solo
en un Template no se conservan en el reenvío, por lo que un reenvío puede incluir datos omitidos en la Notification
inicial. Proporciona notification_payload en la solicitud original de la Assembly cuando los reenvíos deban
usar los mismos filtros.
El esquema de carga útil que aparece a continuación permite estas omisiones. El meta de una subida puede faltar aunque
la subida siga en uploads. Los demás campos conservan su significado en el Assembly Status. Acepta campos
adicionales por compatibilidad, pero no dependas de campos de diagnóstico no documentados.
Verificar la Signature
Los webhooks de Assembly usan el tipo de medio application/x-www-form-urlencoded. El
campo transloadit contiene el Assembly Status JSON serializado exacto, y el
campo signature contiene su HMAC hexadecimal en minúsculas.
Para verificar un webhook:
- Lee los campos de formulario
transloaditysignaturesin modificar la cadena de la carga útil. - Calcula un resumen hexadecimal
HMAC-SHA1sobre la cadenatransloaditexacta, usando el Auth Secret de confianza seleccionado como se describe a continuación. - Compara el resumen calculado con
signaturemediante una comparación segura frente a ataques de temporización. - Analiza
transloaditcomo JSON solo después de que las Signatures coincidan.
La Notification inicial de una Assembly usa el Auth Secret de la Auth Key que autenticó su
creación, también cuando se creó mediante una reejecución de Assembly. Los reenvíos de Notification buscan
primero la Auth Key registrada en el Assembly Status como api_auth_key_id. Si esa clave no está registrada,
no se puede resolver, se ha eliminado o su búsqueda falla, el reenvío de Notification usa en su lugar
el Auth Secret del llamante autenticado que solicita el reenvío.
Las reejecuciones de Assembly conservan el api_auth_key_id histórico de la Assembly de origen. Por ejemplo, si la clave A crea
una Assembly y la clave B la reejecuta, la Notification inicial de la nueva Assembly se firma con el
secreto de B. Reenviar esa Notification puede usar el secreto de A, incluso cuando B llama a ambos endpoints (el de reejecución y el de reenvío)
y ambas claves siguen activas. Mantén disponibles para tu verificador los secretos aplicables de la Assembly de origen y de la creación de la reejecución;
no des por hecho que todas las entregas de una misma Assembly usan el mismo secreto.
Selecciona los secretos de verificación a partir de una configuración de confianza del lado del servidor para el Workspace y la Assembly esperados, no a partir de campos de la carga útil sin verificar. Cuando se aplique más de un secreto configurado, acepta la solicitud solo si su Signature coincide con uno de esos secretos de confianza. Si ninguno coincide, rechaza la solicitud; no omitas la verificación para aceptar un reenvío.
A diferencia de las Signatures actuales de las solicitudes a la API, la signature del webhook es un resumen sha1
sin prefijo, por compatibilidad con versiones anteriores. Trata la carga útil como no fiable y rechaza la solicitud
cuando falte alguno de los dos campos, la Signature tenga un formato incorrecto o la comparación falle.
Usa una de las funciones auxiliares de verificación de nuestros SDK cuando esté disponible. Si implementas la verificación tú mismo, no vuelvas a serializar el JSON analizado antes de calcular el HMAC: los espacios en blanco y el orden de las claves de los objetos forman parte de la secuencia de bytes firmada.
import { createHmac, timingSafeEqual } from 'node:crypto'
// authSecret must come from trusted server-side configuration.
function verifyTransloaditWebhook({ authSecret, payload, signature }) {
if (typeof payload !== 'string' || typeof signature !== 'string') return false
if (!/^[0-9a-f]+$/.test(signature)) return false
const expected = createHmac('sha1', authSecret).update(payload, 'utf8').digest()
if (signature.length !== expected.length * 2) return false
const received = Buffer.from(signature, 'hex')
return received.length === expected.length && timingSafeEqual(received, expected)
}
Campos de formulario del webhook
JSON Schema completo
Transloadit envía solo los campos indicados para este objeto.
| Campo | Tipo y descripción |
|---|---|
signatureobligatorio | stringHMAC-SHA1 hexadecimal en minúsculas de la cadena transloadit exacta, sin prefijo de algoritmo. Usa un Auth Secret de confianza y una comparación resistente a ataques de temporización. Patrón de validación (expresión regular)^[0-9a-f]{40}$ |
transloaditobligatorio | stringTexto JSON exacto del Assembly Status filtrado. Verifica la firma sobre esta cadena sin modificar antes de analizarla como JSON. |
Payload JSON verificado
JSON Schema completo
| Campo | Tipo y descripción | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
account_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
account_name | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
account_slug | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
api_auth_key_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assemblyId | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_id | stringEl ID único de esta Assembly. Puedes almacenarlo en una base de datos cuando se crea una Assembly y usarlo para relacionar las Notifications entrantes. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_ssl_url | null | stringLa URL única que se utiliza para consultar el estado actual de esta Assembly, pero preparada para
usarse mediante SSL/HTTPS. Todas las solicitudes a la API que se envían a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_url | null | stringLa URL única que se utiliza para consultar el estado actual de esta Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
build_id | stringIdentificador de compilación opcional para que el equipo de soporte pueda investigar problemas. Trátalo como un valor opaco; puede cambiar entre Assemblies. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_expected | numberLa cantidad de bytes que esta Assembly espera que se suban. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_received | numberLa cantidad de bytes que se han subido hasta el momento a esta Assembly. Los clientes utilizan este valor principalmente para mostrar el progreso de la subida. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_usage | number | nullLa cantidad total de bytes procesados por esta Assembly que se contabilizan en tu factura de
uso. La suma de | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_agent | null | stringEl agente de usuario de quien realiza la subida no se expone; este campo obsoleto siempre es | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_ip | null | stringLa dirección IP de quien realiza la subida no se expone; este campo obsoleto siempre es | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_referer | null | stringLa URL de referencia de quien realiza la subida no se expone; este campo obsoleto siempre es | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
companion_url | null | stringLa URL del servidor Companion con el que esta Assembly puede comunicarse. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
executing_jobs | Array<string>Esquema de los elementos del arraystring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
execution_duration | number | nullEl tiempo que tardó Transloadit en ejecutar esta Assembly, en segundos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
execution_start | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
expected_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fields | objectUn mapa de claves y valores de cualquier campo adicional presente en tu formulario, para integraciones que no pueden usar
la encapsulación Esquema de propiedades adicionalescualquier valor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finished_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
has_dupe_jobs | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ignored_error_count | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ignored_errors | Array<object>Esquema de los elementos del array
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
info |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
info. | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
instance | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_infinite | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jobs_queue_duration | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
last_job_completed | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
merged_params | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | stringUn mensaje legible que explica el estado de esta Assembly. No siempre está presente. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_duration | number | nullTiempo transcurrido durante la entrega, en segundos, incluidos los reintentos automáticos y las esperas entre ellos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_error | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_response_code | number | null | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_response_data | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_start | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_status | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_url | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
num_input_files | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
params | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
parent_assembly_status | cualquier valor | nullPuede aplicarse cualquiera de los esquemas siguientes: cualquier valorcualquier valornull | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
parent_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
previousStep | stringNombre del Step anterior relacionado con el error, cuando esté disponible. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queue_duration | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
region | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
results | objectLos archivos de resultados que Transloadit ha producido hasta el momento. Cada clave de este objeto es el nombre del
Step que produjo un archivo específico. Como los Robots de almacenamiento no producen archivos,
los nombres de sus Steps no se incluyen aquí. Si se produce un Esquema de propiedades adicionalesArray<object>Los detalles adicionales del esquema están disponibles en el JSON Schema completo. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
running_jobs | Array<string>Esquema de los elementos del arraystring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
start_date | stringLa fecha y hora en que comenzó la subida para esta Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
started_jobs | Array<string>Esquema de los elementos del arraystring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
started_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
step | stringNombre del Step relacionado con el error, cuando esté disponible. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template_name | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
transloadit_client | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tus_uploads | Array<object>Esquema de los elementos del array
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tus_url | stringLa URL del servidor tus que utiliza esta Assembly para las subidas reanudables. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
update_stream_url | null | stringLa URL de un flujo de eventos enviados por el servidor desde el que puedes obtener actualizaciones de estado en tiempo real de esta Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
upload_duration | numberEl tiempo que tardó quien realizó la subida en subir los archivos, en segundos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
upload_meta_data_extracted | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uploads | Array<object>Un arreglo de archivos subidos para esta Assembly. Para obtener más información, consulta la documentación de metadatos. Esquema de los elementos del array
Puede aplicarse cualquiera de los esquemas siguientes: propiedades obligatorias: basename, ext, field, id, mime, name, size, type, url: object
Variante 2: object
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uppyserver_url | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
usage_tags | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
virusname | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
warnings | Array<object>Esquema de los elementos del array
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
websocket_url | null | stringLa URL de un servidor Websocket (utiliza Socket.IO) desde el que puedes obtener actualizaciones en tiempo real sobre el estado de esta Assembly. |
Puede aplicarse cualquiera de los esquemas siguientes:
ok: "ASSEMBLY_EXECUTING" | "ASSEMBLY_REPLAYING" | "ASSEMBLY_UPLOADING"
Transloadit puede enviar campos adicionales.
| Campo | Tipo y descripción |
|---|---|
error | nuncaIndica un estado de error. Esta clave solo está presente si la Assembly falló. Este valor está prohibido. |
okobligatorio | "ASSEMBLY_EXECUTING" | "ASSEMBLY_REPLAYING" | "ASSEMBLY_UPLOADING"Indica un estado del ciclo de vida sin error, incluidos los estados de subida, ejecución, solicitud abortada y Assembly cancelada. El procesamiento correcto se indica con |
ok: string
Transloadit puede enviar campos adicionales.
| Campo | Tipo y descripción |
|---|---|
error | nuncaIndica un estado de error. Esta clave solo está presente si la Assembly falló. Este valor está prohibido. |
okobligatorio | stringIndica un estado del ciclo de vida sin error, incluidos los estados de subida, ejecución, solicitud abortada y Assembly cancelada. El procesamiento correcto se indica con Valores permitidos (6)
|
propiedades obligatorias: error
Transloadit puede enviar campos adicionales.
| Campo | Tipo y descripción |
|---|---|
cmd | string | Array<string | number>Detalles opcionales del comando de procesamiento para investigar problemas. Los detalles de diagnóstico pueden variar; usa el código Puede aplicarse cualquiera de los esquemas siguientes: stringArray<string | number>Array<string | number>Esquema de los elementos del arraystring | number |
errorobligatorio | stringIndica un estado de error. Esta clave solo está presente si la Assembly falló. Valores permitidos (362)
|
exitCode | number | nullEstado de salida opcional de un comando de procesamiento que ha fallado. Los detalles de diagnóstico pueden variar; usa el código |
exitSignal | null | stringSeñal opcional que terminó un comando de procesamiento. Los detalles de diagnóstico pueden variar; usa el código |
file | string |
headers | objectEsquema de propiedades adicionalescualquier valor |
is_private_address | boolean |
name | string |
numRetries | number |
ok | null |
playwright_error_code | string |
reason | null | string | number | boolean | Array<cualquier valor> | objectDetalles de diagnóstico opcionales. No asumas que este valor es una cadena ni lo muestres directamente; usa Puede aplicarse cualquiera de los esquemas siguientes: nullstringnumberbooleanArray<cualquier valor>Array<cualquier valor>Esquema de los elementos del arraycualquier valorobjectobjectEsquema de propiedades adicionalescualquier valor |
response_code | number | null |
retries | number |
retryable | boolean |
stderr | stringSalida de diagnóstico opcional de un comando de procesamiento para investigar problemas. Los detalles de diagnóstico pueden variar; usa el código |
stdout | stringSalida estándar opcional de un comando de procesamiento para investigar problemas. Los detalles de diagnóstico pueden variar; usa el código |
url | string |
url_host | null | string |