Webhooks
Configurer les webhooks
Définissez notify_url dans vos Assembly Instructions, au même niveau que steps. Une fois que l’Assembly
atteint un état terminal, Transloadit envoie une requête HTTP POST à cette URL.
Tout statut compris entre 200 inclus et
300 exclu accuse réception de la livraison. Les redirections et les erreurs côté client ou serveur sont traitées comme des échecs. Par défaut,
Transloadit réessaie 5 fois les livraisons ayant échoué, avec un facteur exponentiel de 1,97.
L’accusé de réception confirme la réception, et non la réussite du traitement. Inspectez l’état ok
ou le code error de la charge utile vérifiée
pour distinguer les Assemblies terminées, annulées et en échec. Un renvoi de Notification
peut également transmettre un Assembly Status non terminal ; ne supposez pas que chaque livraison signifie que le traitement est terminé.
Limiter la charge utile de la Notification
Par défaut, un webhook inclut l’Assembly Status complet. Définissez notification_payload sur un tableau
contenant une combinaison quelconque de ces filtres pris en charge :
without_params: les champs bruts d’Assembly Instructions de premier niveauparams,templateetmerged_paramssont omis.without_result_meta_data:metaest omis de chaque fichier dansresults.without_results: l’objetresultsde premier niveau est omis.without_upload_meta_data:metaest omis de chaque fichier dansuploads.without_uploads: le tableauuploadsde premier niveau est omis.
Les renvois de Notification réutilisent les filtres fournis dans la requête d’Assembly d’origine. Les filtres définis uniquement
dans un Template ne sont pas conservés lors du renvoi, de sorte qu’un renvoi peut inclure des données omises de la
Notification initiale. Fournissez notification_payload dans la requête d’Assembly d’origine lorsque les renvois doivent
utiliser les mêmes filtres.
Le schéma de charge utile ci-dessous autorise ces omissions. Le champ meta d’un fichier téléversé peut être absent même lorsque
ce fichier reste dans uploads. Les autres champs conservent leur signification dans l’Assembly Status. Acceptez les champs
supplémentaires pour préserver la compatibilité, mais ne vous appuyez pas sur les champs de diagnostic non documentés.
Vérifier la signature
Les webhooks d’Assembly utilisent le type de média application/x-www-form-urlencoded. Le
champ transloadit contient la chaîne sérialisée exacte de l’Assembly Status JSON, et le
champ signature contient son HMAC hexadécimal en minuscules.
Pour vérifier un webhook :
- Lisez les champs de formulaire
transloaditetsignaturesans modifier la chaîne de la charge utile. - Calculez une empreinte hexadécimale
HMAC-SHA1sur la séquence exacte d’octets de la chaînetransloadit, en utilisant l’Auth Secret de confiance sélectionné comme décrit ci-dessous. - Comparez l’empreinte calculée à
signatureà l’aide d’une comparaison résistante aux attaques temporelles. - Analysez
transloaditen tant que JSON uniquement après avoir confirmé que les signatures correspondent.
La Notification initiale d’une Assembly utilise l’Auth Secret de l’Auth Key qui a authentifié sa
création, y compris lorsqu’elle a été créée par un Assembly Replay. Les renvois de Notification recherchent d’abord
l’Auth Key enregistrée dans l’Assembly Status sous api_auth_key_id. Si cette Auth Key n’est pas enregistrée,
ne peut pas être résolue, a été supprimée ou si sa recherche échoue, le renvoi de Notification utilise
à la place l’Auth Secret de l’appelant authentifié à l’origine du renvoi.
Les Assembly Replays conservent la valeur historique de api_auth_key_id de l’Assembly parente. Par exemple, si l’Auth Key A crée
une Assembly et que l’Auth Key B la réexécute, la Notification initiale de la nouvelle Assembly est signée avec le
secret de B. Le renvoi de cette Notification peut utiliser le secret de A, même lorsque B appelle à la fois le point de terminaison de réexécution et celui de renvoi
et que les deux Auth Keys restent actives. Gardez à la disposition de votre système de vérification les secrets applicables de l’Assembly parente et de la création par Assembly Replay ;
ne supposez pas que chaque livraison pour une même Assembly utilise le même secret.
Sélectionnez les secrets de vérification à partir d’une configuration de confiance côté serveur pour le Workspace et l’Assembly attendus, et non à partir des champs de la charge utile non vérifiée. Lorsque plusieurs secrets configurés sont applicables, n’acceptez la requête que si sa signature correspond à l’un de ces secrets de confiance. Si aucun ne correspond, rejetez la requête ; ne sautez pas la vérification pour accepter un renvoi.
Contrairement aux signatures actuelles des requêtes API, le champ signature du webhook est une empreinte
sha1 sans préfixe, à des fins de rétrocompatibilité. Traitez la charge utile comme non fiable et rejetez la requête
si l’un des deux champs est absent, si la signature est mal formée ou si la comparaison échoue.
Utilisez l’une des fonctions utilitaires de vérification de nos SDK lorsqu’il en existe une. Si vous implémentez vous-même la vérification, ne sérialisez pas à nouveau le JSON analysé avant de calculer le HMAC : les espaces blancs et l’ordre des clés des objets font partie de la séquence d’octets signée.
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)
}
Champs de formulaire du webhook
Schéma JSON complet
Transloadit envoie uniquement les champs répertoriés pour cet objet.
| Champ | Type et description |
|---|---|
signatureobligatoire | stringHMAC-SHA1 hexadécimal en minuscules calculé sur les octets exacts de la chaîne transloadit, sans préfixe d’algorithme. Utilisez un Auth Secret de confiance et une comparaison résistante aux attaques temporelles. Motif de validation (expression régulière)^[0-9a-f]{40}$ |
transloaditobligatoire | stringTexte JSON exact de l’Assembly Status filtré. Vérifiez la signature sur les octets exacts de cette chaîne non modifiée avant de l’analyser en tant que JSON. |
Charge utile JSON vérifiée
Schéma JSON complet
| Champ | Type et description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
account_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
account_name | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
account_slug | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
api_auth_key_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assemblyId | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_id | stringL’ID unique de cette Assembly. Vous pouvez l’enregistrer dans une base de données lorsqu’une Assembly est créée, et l’utiliser pour faire correspondre les Notifications entrantes. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_ssl_url | null | stringL’URL unique utilisée pour consulter l’état actuel de cette Assembly, mais prête à être
utilisée via SSL/HTTPS. Toutes les requêtes API envoyées à | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
assembly_url | null | stringL’URL unique utilisée pour consulter l’état actuel de cette Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
build_id | stringIdentifiant de build facultatif pour le dépannage par l’assistance. Traitez-le comme une valeur opaque ; il peut changer d’une Assembly à l’autre. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_expected | numberLe nombre d’octets que cette Assembly s’attend à recevoir par téléversement. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_received | numberLe nombre d’octets téléversés vers cette Assembly jusqu’à présent. Cette valeur est principalement utilisée par les clients pour afficher la progression du téléversement. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
bytes_usage | number | nullLe nombre total d’octets traités par cette Assembly qui sont pris en compte dans la facturation de votre utilisation.
La somme des valeurs | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_agent | null | stringL’agent utilisateur du client de téléversement n’est pas exposé ; ce champ obsolète vaut toujours | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_ip | null | stringL’adresse IP de l’auteur du téléversement n’est pas exposée ; ce champ obsolète est toujours | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
client_referer | null | stringL’URL de provenance de l’outil de téléversement n’est pas exposée ; ce champ déprécié vaut toujours | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
companion_url | null | stringL’URL du serveur Companion avec lequel cette Assembly peut communiquer. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
executing_jobs | Array<string>Schéma d’un élément de tableaustring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
execution_duration | number | nullLe temps mis par Transloadit pour exécuter cette Assembly, en secondes. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
execution_start | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
expected_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fields | objectUn dictionnaire clé/valeur de champs de formulaire supplémentaires pour les intégrations qui ne peuvent pas utiliser l’encapsulation Schéma de la propriété supplémentairen’importe quelle valeur | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
finished_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
has_dupe_jobs | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ignored_error_count | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ignored_errors | Array<object>Schéma d’un élément de tableau
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
info |
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
info. | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
instance | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
is_infinite | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
jobs_queue_duration | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
last_job_completed | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
merged_params | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message | stringUn message lisible par un humain expliquant l’état de cette Assembly. Ce message n’est pas toujours présent. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
notify_duration | number | nullTemps écoulé pour la livraison, en secondes, y compris les nouvelles tentatives automatiques et les délais qui les séparent. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 | n’importe quelle valeur | nullN’importe lequel des schémas suivants peut s’appliquer : n’importe quelle valeurn’importe quelle valeurnull | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
parent_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
previousStep | stringNom du Step précédent associé à l’erreur, lorsqu’il est disponible. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
queue_duration | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
region | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
results | objectLes fichiers de résultat que Transloadit a produits jusqu’à présent. Chaque clé est le nom du Step qui a produit un fichier. Les Robots de stockage ne produisent pas de fichiers, donc leurs noms de Step sont omis. Lorsqu’une Schéma de la propriété supplémentaireArray<object>Des détails supplémentaires sur le schéma sont disponibles dans le schéma JSON complet. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
running_jobs | Array<string>Schéma d’un élément de tableaustring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
start_date | stringLa date et l’heure auxquelles le téléversement a commencé pour cette Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
started_jobs | Array<string>Schéma d’un élément de tableaustring | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
started_tus_uploads | number | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
step | stringNom du Step associé à l’erreur, lorsqu’il est disponible. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template_id | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
template_name | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
transloadit_client | null | string | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tus_uploads | Array<object>Schéma d’un élément de tableau
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tus_url | stringL’URL du serveur tus utilisé par cette Assembly pour les téléversements avec reprise. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
update_stream_url | null | stringL’URL d’un flux d’événements envoyés par le serveur, à partir duquel vous pouvez obtenir des mises à jour en temps réel de l’état de cette Assembly. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
upload_duration | numberLe temps mis par l’outil de téléversement pour téléverser les fichiers, en secondes. | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
upload_meta_data_extracted | boolean | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
uploads | Array<object>Un tableau de fichiers téléversés pour cette Assembly. Pour plus d’informations, consultez la documentation sur les métadonnées. Schéma d’un élément de tableau
N’importe lequel des schémas suivants peut s’appliquer : propriétés requises : 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>Schéma d’un élément de tableau
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
websocket_url | null | stringL’URL d’un serveur Websocket (utilisant Socket.IO) depuis lequel vous pouvez obtenir des mises à jour en temps réel de l’état de cette Assembly. |
N’importe lequel des schémas suivants peut s’appliquer :
ok: "ASSEMBLY_EXECUTING" | "ASSEMBLY_REPLAYING" | "ASSEMBLY_UPLOADING"
Transloadit peut envoyer des champs supplémentaires.
| Champ | Type et description |
|---|---|
error | jamaisIndique un statut d’erreur. Cette clé n’est présente que si l’Assembly a échoué. Cette valeur est interdite. |
okobligatoire | "ASSEMBLY_EXECUTING" | "ASSEMBLY_REPLAYING" | "ASSEMBLY_UPLOADING"Indique un statut de cycle de vie sans erreur, y compris les états de téléversement, d’exécution, d’abandon et d’annulation. La réussite du traitement est indiquée par |
ok: string
Transloadit peut envoyer des champs supplémentaires.
| Champ | Type et description |
|---|---|
error | jamaisIndique un statut d’erreur. Cette clé n’est présente que si l’Assembly a échoué. Cette valeur est interdite. |
okobligatoire | stringIndique un statut de cycle de vie sans erreur, y compris les états de téléversement, d’exécution, d’abandon et d’annulation. La réussite du traitement est indiquée par Valeurs autorisées (6)
|
propriétés requises : error
Transloadit peut envoyer des champs supplémentaires.
| Champ | Type et description |
|---|---|
cmd | string | Array<string | number>Détails facultatifs sur la commande de traitement pour le dépannage. Les détails de diagnostic peuvent varier ; utilisez le code N’importe lequel des schémas suivants peut s’appliquer : stringArray<string | number>Array<string | number>Schéma d’un élément de tableaustring | number |
errorobligatoire | stringIndique un statut d’erreur. Cette clé n’est présente que si l’Assembly a échoué. Valeurs autorisées (362)
|
exitCode | number | nullCode de sortie facultatif d’une commande de traitement ayant échoué. Les détails de diagnostic peuvent varier ; utilisez le code |
exitSignal | null | stringSignal facultatif ayant mis fin à une commande de traitement. Les détails du diagnostic peuvent varier ; utilisez le code |
file | string |
headers | objectSchéma de la propriété supplémentairen’importe quelle valeur |
is_private_address | boolean |
name | string |
numRetries | number |
ok | null |
playwright_error_code | string |
reason | null | string | number | boolean | Array<n’importe quelle valeur> | objectDétails de diagnostic facultatifs. Ne supposez pas que cette valeur est une chaîne de caractères et ne l’affichez pas directement ; utilisez N’importe lequel des schémas suivants peut s’appliquer : nullstringnumberbooleanArray<n’importe quelle valeur>Array<n’importe quelle valeur>Schéma d’un élément de tableaun’importe quelle valeurobjectobjectSchéma de la propriété supplémentairen’importe quelle valeur |
response_code | number | null |
retries | number |
retryable | boolean |
stderr | stringSortie de diagnostic facultative produite par une commande de traitement, destinée au dépannage. Les détails du diagnostic peuvent varier ; utilisez le code |
stdout | stringSortie standard facultative d’une commande de traitement, destinée au dépannage. Les détails de diagnostic peuvent varier ; utilisez le code |
url | string |
url_host | null | string |