Webhooks
Configurar Webhooks
Defina notify_url nas suas Assembly Instructions, no mesmo nível de steps. Assim que a Assembly
atinge um estado terminal, a Transloadit envia um POST HTTP para essa URL.
Qualquer status a partir de 200 e abaixo de
300 confirma a entrega. Redirecionamentos e erros de cliente ou de servidor são tratados como falhas. Por padrão,
a Transloadit faz 5 novas tentativas em caso de falha, com um fator exponencial de 1,97.
A confirmação indica o recebimento, não o processamento bem-sucedido. Inspecione o
estado ok ou o código error do payload verificado
para distinguir Assemblies concluídas, canceladas e com falha. Um reenvio de Notification
também pode entregar um Assembly Status não terminal; não presuma que toda entrega significa conclusão.
Limitar o payload da Notification
Por padrão, um Webhook inclui o Assembly Status completo. Defina notification_payload como um array
com qualquer combinação destes filtros compatíveis:
without_params: os campos brutos de instrução da Assembly no nível superior (params,templateemerged_params) são omitidos.without_result_meta_data:metaé omitido de cada arquivo emresults.without_results: o objetoresultsde nível superior é omitido.without_upload_meta_data:metaé omitido de cada arquivo emuploads.without_uploads: o arrayuploadsde nível superior é omitido.
Os reenvios de Notification reutilizam os filtros fornecidos na requisição original da Assembly. Filtros definidos apenas
em um Template não são preservados no reenvio, então um reenvio pode incluir dados omitidos da
Notification inicial. Forneça notification_payload na requisição original da Assembly quando os reenvios precisarem
usar os mesmos filtros.
O schema do payload abaixo permite essas omissões. O meta de um upload pode estar ausente mesmo quando o
upload permanece em uploads. Os demais campos mantêm o significado que têm no Assembly Status. Aceite campos
adicionais por compatibilidade, mas não dependa de campos de diagnóstico não documentados.
Verificar a assinatura
Os Webhooks de Assembly usam o media type application/x-www-form-urlencoded. O
campo transloadit contém exatamente o Assembly Status JSON serializado, e o
campo signature contém o HMAC hexadecimal dele, em letras minúsculas.
Para verificar um Webhook:
- Leia os campos de formulário
transloaditesignaturesem modificar a string do payload. - Calcule um digest hexadecimal
HMAC-SHA1sobre a stringtransloaditexata, usando o Auth Secret confiável selecionado conforme descrito abaixo. - Compare o digest calculado com
signatureusando uma comparação resistente a ataques de temporização (timing-safe). - Faça o parse de
transloaditcomo JSON somente depois que as assinaturas coincidirem.
A Notification inicial de uma Assembly usa o Auth Secret da Auth Key que autenticou a criação dela,
inclusive quando ela foi criada por uma reexecução de Assembly. Os reenvios de Notification primeiro buscam
a Auth Key registrada no Assembly Status como api_auth_key_id. Se essa chave não estiver registrada,
não puder ser resolvida, tiver sido excluída ou se a busca por ela falhar, o reenvio da Notification usará,
em vez disso, o Auth Secret do chamador autenticado que solicitou o reenvio.
As reexecuções de Assembly mantêm o api_auth_key_id histórico da Assembly pai. Por exemplo, se a Chave A cria
uma Assembly e a Chave B a reexecuta, a Notification inicial da nova Assembly é assinada com o
segredo de B. O reenvio dessa Notification pode usar o segredo de A, mesmo quando B chama tanto o endpoint de reexecução quanto o de reenvio
e ambas as chaves continuam ativas. Mantenha disponíveis para o seu verificador os segredos aplicáveis da Assembly pai e da criação por reexecução;
não presuma que todas as entregas de uma mesma Assembly usam o mesmo segredo.
Selecione os segredos de verificação a partir de uma configuração confiável no lado do servidor para o Workspace e a Assembly esperados, e não a partir de campos do payload não verificado. Quando mais de um segredo configurado for aplicável, aceite a requisição somente se a assinatura dela corresponder a um desses segredos confiáveis. Se nenhum corresponder, rejeite a requisição; não ignore a verificação para aceitar um reenvio.
Ao contrário das assinaturas atuais de requisições de API, a signature do Webhook é um digest sha1
sem prefixo, por compatibilidade com versões anteriores. Trate o payload como não confiável e rejeite a requisição
quando algum dos campos estiver ausente, a assinatura estiver malformada ou a comparação falhar.
Use um dos helpers de verificação dos nossos SDKs quando houver um disponível. Se você implementar a verificação por conta própria, não serialize novamente o JSON já parseado antes de calcular o HMAC: os espaços em branco e a ordem das chaves do objeto fazem parte da sequência de bytes assinada.
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 formulário do webhook
Esquema JSON completo
A Transloadit envia somente os campos listados para este objeto.
| Campo | Tipo e descrição |
|---|---|
signatureobrigatório | stringHMAC-SHA1 hexadecimal em minúsculas da string transloadit exata, sem prefixo de algoritmo. Use um Auth Secret confiável e uma comparação segura contra ataques de temporização. Padrão de validação (expressão regular)^[0-9a-f]{40}$ |
transloaditobrigatório | stringTexto JSON exato do Assembly Status filtrado. Verifique a assinatura sobre esta string sem modificações antes de interpretá-la como JSON. |
Payload JSON verificado
Esquema JSON completo
| Campo | Tipo e descrição | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
account_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
account_name | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
account_slug | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
api_auth_key_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assemblyId | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_id | stringO ID único desta Assembly. Você pode armazená-lo em um banco de dados quando uma Assembly é criada e usá-lo para corresponder às Notifications recebidas. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_ssl_url | null | stringA URL única usada para consultar o status atual desta Assembly, porém pronta para ser
usada por SSL/HTTPS. Todas as requisições de API enviadas para a | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_url | null | stringA URL única usada para consultar o status atual desta Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
build_id | stringIdentificador de build opcional para a solução de problemas pelo suporte. Trate-o como opaco; ele pode mudar entre Assemblies. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_expected | numberO número de bytes que esta Assembly espera que sejam enviados. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_received | numberO número de bytes que foram enviados para esta Assembly até agora. Isso é usado principalmente por clientes para exibir o progresso do upload. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_usage | number | nullO número total de bytes que esta Assembly processou e que contam para a sua fatura de uso. A soma de | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_agent | null | stringO user agent de quem fez o upload não é exposto; este campo obsoleto é sempre | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_ip | null | stringO endereço IP de quem faz o upload não é exposto; este campo obsoleto é sempre | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_referer | null | stringA URL de referrer de quem enviou o arquivo não é exposta; este campo obsoleto é sempre | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
companion_url | null | stringA URL do servidor Companion com o qual esta Assembly pode se comunicar. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
executing_jobs | Array<string>Esquema do item do arraystring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
execution_duration | number | nullO tempo que a Transloadit levou para executar esta Assembly, em segundos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
execution_start | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
expected_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fields | objectUm mapa de chave/valor com campos de formulário adicionais para integrações que não podem usar o encapsulamento de Esquema de propriedade adicionalqualquer valor | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finished_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
has_dupe_jobs | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ignored_error_count | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ignored_errors | Array<object>Esquema do item do array
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
info |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
info. | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
instance | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_infinite | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jobs_queue_duration | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
last_job_completed | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
merged_params | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | stringUma mensagem legível por humanos que explica o estado desta Assembly. Nem sempre está presente. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_duration | number | nullTempo decorrido de entrega em segundos, incluindo as tentativas automáticas de reenvio e os atrasos entre elas. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 | qualquer valor | nullQualquer um dos esquemas a seguir pode ser aplicado: qualquer valorqualquer valornull | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
parent_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
previousStep | stringNome do Step anterior associado ao erro, quando disponível. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queue_duration | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
region | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
results | objectOs arquivos de resultado que a Transloadit produziu até agora. Cada chave é o nome do Step que produziu um arquivo. Os Robots de armazenamento não produzem arquivos, portanto os nomes dos seus Steps são omitidos. Quando ocorre um Esquema de propriedade adicionalArray<object>Detalhes adicionais do esquema estão disponíveis no JSON Schema completo. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
running_jobs | Array<string>Esquema do item do arraystring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
start_date | stringA data e a hora em que o upload começou para esta Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
started_jobs | Array<string>Esquema do item do arraystring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
started_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
step | stringNome do Step associado ao erro, quando disponível. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template_name | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
transloadit_client | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tus_uploads | Array<object>Esquema do item do array
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tus_url | stringA URL do servidor tus usado por esta Assembly para uploads resumíveis. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
update_stream_url | null | stringA URL de um stream de server-sent events do qual você pode obter atualizações de status em tempo real desta Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
upload_duration | numberO tempo que o uploader levou para enviar os arquivos, em segundos. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
upload_meta_data_extracted | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uploads | Array<object>Um array de arquivos enviados para esta Assembly. Para mais informações, consulte a documentação de metadados. Esquema do item do array
Qualquer um dos esquemas a seguir pode ser aplicado: propriedades obrigatórias: 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 do item do array
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
websocket_url | null | stringA URL de um servidor Websocket (usa Socket.IO) a partir do qual você pode obter atualizações de status em tempo real desta Assembly. |
Qualquer um dos esquemas a seguir pode ser aplicado:
ok: "ASSEMBLY_EXECUTING" | "ASSEMBLY_REPLAYING" | "ASSEMBLY_UPLOADING"
A Transloadit pode enviar campos adicionais.
| Campo | Tipo e descrição |
|---|---|
error | nuncaIndica um status de erro. Esta chave só está presente se a Assembly tiver falhado. Este valor é proibido. |
okobrigatório | "ASSEMBLY_EXECUTING" | "ASSEMBLY_REPLAYING" | "ASSEMBLY_UPLOADING"Indica um status de ciclo de vida sem erro, incluindo os estados de upload, execução, abortado e cancelado. O processamento bem-sucedido é indicado por |
ok: string
A Transloadit pode enviar campos adicionais.
| Campo | Tipo e descrição |
|---|---|
error | nuncaIndica um status de erro. Esta chave só está presente se a Assembly tiver falhado. Este valor é proibido. |
okobrigatório | stringIndica um status de ciclo de vida sem erro, incluindo os estados de upload, execução, abortado e cancelado. O processamento bem-sucedido é indicado por Valores permitidos (6)
|
propriedades obrigatórias: error
A Transloadit pode enviar campos adicionais.
| Campo | Tipo e descrição |
|---|---|
cmd | string | Array<string | number>Detalhes opcionais do comando de processamento para resolução de problemas. Os detalhes de diagnóstico podem variar; use o código Qualquer um dos esquemas a seguir pode ser aplicado: stringArray<string | number>Array<string | number>Esquema do item do arraystring | number |
errorobrigatório | stringIndica um status de erro. Esta chave só está presente se a Assembly tiver falhado. Valores permitidos (362)
|
exitCode | number | nullStatus de saída opcional de um comando de processamento que falhou. Os detalhes de diagnóstico podem variar; use o código |
exitSignal | null | stringSinal opcional que encerrou um comando de processamento. Os detalhes de diagnóstico podem variar; use o código |
file | string |
headers | objectEsquema de propriedade adicionalqualquer valor |
is_private_address | boolean |
name | string |
numRetries | number |
ok | null |
playwright_error_code | string |
reason | null | string | number | boolean | Array<qualquer valor> | objectDetalhes de diagnóstico opcionais. Não presuma que este valor seja uma string nem o exiba diretamente; use Qualquer um dos esquemas a seguir pode ser aplicado: nullstringnumberbooleanArray<qualquer valor>Array<qualquer valor>Esquema do item do arrayqualquer valorobjectobjectEsquema de propriedade adicionalqualquer valor |
response_code | number | null |
retries | number |
retryable | boolean |
stderr | stringSaída de diagnóstico opcional de um comando de processamento, para solução de problemas. Os detalhes do diagnóstico podem variar; use o código |
stdout | stringSaída padrão opcional de um comando de processamento, para solução de problemas. Os detalhes de diagnóstico podem variar; use o código |
url | string |
url_host | null | string |