Webhooks Image & Vidéo
Webhooks Image & Vidéo
Recevez le résultat d’une génération au lieu de l’interroger.
Guide pratique · Suppose que vous avez suivi le guide de démarrage rapide Image & Vidéo .
Vue d’ensemble
La génération de vidéos peut prendre plusieurs minutes, ce qui rend l’attente active coûteuse. Activez la
diffusion par webhook pour une génération, et ElevenLabs envoie un événement flows_generation à votre endpoint
lorsque la génération atteint l’état completed ou failed.
La charge utile de l’événement correspond à la réponse finale de l’endpoint GET associé. Un gestionnaire qui comprend déjà la réponse d’attente active n’a donc pas besoin d’une logique d’analyse distincte.
Avant de commencer
La diffusion par webhook utilise les webhooks auxquels votre Workspace est abonné pour les événements de génération. Sa configuration se fait en deux étapes : créez le webhook, puis abonnez-le à l’événement.
Créer un webhook
Accédez à Developers > Webhooks et créez un webhook avec une URL de rappel HTTPS accessible publiquement. Conservez le secret de signature renvoyé : vous en aurez besoin pour vérifier les événements entrants.
L’abonner aux événements de génération
Sous Select events to listen to, cochez Image & Vidéo API generation completed. Un webhook qui existe mais n’est pas abonné à cet événement n’est jamais appelé.
Vous pouvez faire de même via l’API en transmettant l’événement flows à
Mettre à jour le webhook du Workspace :
La création et l’abonnement de webhooks nécessitent l’autorisation Webhooks Manage ou le rôle d’administrateur du Workspace. Un
même événement accepte jusqu’à 10 webhooks. Au-delà, la requête échoue avec too_many_webhooks.
Une génération qui demande une diffusion par webhook alors qu’aucun webhook n’est abonné aux événements de génération est rejetée. Un résultat n’est donc jamais généré sans destination de livraison.
Demander une diffusion par webhook
Ajoutez un objet webhook à la requête de création. Utilisez {"type": "all"} pour diffuser vers tous les webhooks
abonnés aux événements de génération. Ainsi, la requête reste stable lorsque des webhooks sont ajoutés ou remplacés.
Pour cibler des webhooks spécifiques, définissez plutôt le champ webhook sur une liste d’identifiants. Chaque identifiant doit correspondre à
l’un des webhooks du Workspace abonné aux événements de génération.
La requête de création valide la cible avant de lancer la génération et renvoie une erreur lorsque la diffusion ne serait pas possible :
La diffusion par webhook s’associe bien aux générations
enchaînées :
définissez webhook sur la génération finale, et toute la chaîne s’exécute côté serveur avec un seul événement à
la fin. Cela s’applique également si la chaîne échoue en cours de route : l’échec se propage à la
génération finale, qui le diffuse sous forme d’événement failed avec le motif dependency_failed.
Charge utile du webhook
Une génération terminée diffuse l’URL de sortie et le type MIME :
Une génération échouée diffuse à la place la catégorie et le message d’échec :
Utilisez data.status pour déterminer les champs présents. Les deux états finaux sont les seuls
qu’un webhook peut contenir, car la diffusion n’a lieu qu’à la fin d’une génération.
content_url est une URL signée qui expire environ une heure après l’envoi de l’événement. Téléchargez rapidement le
média ou récupérez à nouveau la génération pour obtenir une URL actualisée.
Gérer l’événement
Un gestionnaire vérifie la signature, contrôle le type d’événement, puis agit selon data.status. Cet
exemple télécharge la sortie d’une génération terminée et consigne le motif d’une génération échouée.
Par souci de concision, les deux exemples téléchargent le fichier pendant la requête. Une grande vidéo peut prendre suffisamment longtemps pour dépasser le délai de diffusion. En production, placez plutôt l’identifiant de génération dans une file d’attente et renvoyez immédiatement un statut 2xx. L’URL signée reste valide environ une heure, ce qui laisse largement le temps à un worker en arrière-plan.
Pour recevoir des événements sur un serveur local pendant le développement, exposez-le via un tunnel tel que ngrok et utilisez l’URL HTTPS qu’il vous fournit comme URL de rappel du webhook.
Vérifier la signature
Le gestionnaire ci-dessus appelle construct_event / constructEvent, qui vérifie l’en-tête
ElevenLabs-Signature, valide l’horodatage et analyse la charge utile en une étape. Vérifiez toujours
un événement avant de vous y fier.
Il est important que le récepteur valide tous les webhooks entrants. Les webhooks prennent actuellement en charge l’authentification par signatures HMAC. Configurez l’authentification HMAC en :
- Stockant de manière sécurisée le secret partagé généré lors de la création du webhook
- Vérifiant l’en-tête ElevenLabs-Signature dans votre endpoint à l’aide du SDK
Le SDK JavaScript expose constructEvent ; le SDK Python expose construct_event avec rawBody, sig_header et secret (ils ne s’appellent pas payload / signature en Python). Les deux vérifient la signature, valident l’horodatage et analysent la charge utile JSON.
Python
JavaScript
Exemple de gestionnaire de webhook utilisant FastAPI :
Comportement de diffusion
Chaque génération diffuse exactement un événement final par webhook ciblé. La diffusion est indépendante de la génération elle-même : un webhook qui échoue ou est inaccessible n’affecte pas le résultat, qui reste disponible depuis l’endpoint GET et dans la réponse de liste.
Renvoyez rapidement un statut 2xx depuis votre gestionnaire. Des échecs répétés désactivent automatiquement un webhook, et un
webhook désactivé entraîne le rejet, à la création, des générations ultérieures qui le ciblent. Concevez
le gestionnaire de façon idempotente et utilisez l’id de génération pour dédupliquer.
Pour les flux où aucun résultat manqué n’est acceptable, considérez les webhooks comme le chemin rapide et rapprochez
périodiquement les résultats avec flows.image.list ou flows.video.list, en filtrant selon status.