Skip to Content
WebhooksTypes d'événements

Types d’événements

Les webhooks Ignite prennent en charge trois types d’événements pour le cycle de vie des vidéos. Tu peux t’abonner à n’importe quelle combinaison de ces événements lors de la création d’un abonnement webhook.

Événements disponibles

video.created

Déclenché quand une nouvelle vidéo est créée dans ton espace de travail.

Quand il se déclenche :

  • Un nouvel objet vidéo est créé via l’API
  • Une vidéo est téléversée via l’interface d’administration

Charge utile : l’objet vidéo complet avec toutes les valeurs initiales. Note que le status de la vidéo peut être NO_FILE ou PROCESSING à ce stade.

video.updated

Déclenché quand une propriété d’une vidéo est modifiée.

Quand il se déclenche :

  • Les métadonnées vidéo sont mises à jour (titre, description, visibilité, etc.)
  • Le traitement vidéo se termine (le statut passe à COMPLETE)
  • Des pistes de texte ou des chapitres sont ajoutés ou modifiés
  • Les catégories ou les tags changent
  • La miniature est mise à jour

Charge utile : l’objet vidéo complet avec toutes les valeurs courantes après la mise à jour.

video.deleted

Déclenché quand une vidéo est supprimée de ton espace de travail.

Quand il se déclenche :

  • Une vidéo est supprimée via l’API
  • Une vidéo est supprimée via l’interface d’administration

Charge utile : l’objet vidéo complet tel qu’il existait avant suppression.

Structure de la charge utile

Tous les événements livrent l’objet vidéo complet comme corps de requête. Le type d’événement est indiqué dans l’en-tête X-Webhook-Event, pas dans le corps.

Exemple : video.created

En-têtes :

POST /your-webhook-endpoint HTTP/1.1 Content-Type: application/json X-Webhook-Event: video.created X-Webhook-Signature: t=1705316400000,v1=abc123... X-Webhook-Delivery-Id: del_507f1f77bcf86cd799439011

Corps :

{ "id": "507f1f77bcf86cd799439011", "status": "PROCESSING", "visibility": "private", "title": "My New Video", "description": "", "duration": 0, "workspace": "507f1f77bcf86cd799439000", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:30:00.000Z" }

Exemple : video.updated

En-têtes :

POST /your-webhook-endpoint HTTP/1.1 Content-Type: application/json X-Webhook-Event: video.updated X-Webhook-Signature: t=1705316500000,v1=def456... X-Webhook-Delivery-Id: del_507f1f77bcf86cd799439012

Corps :

{ "id": "507f1f77bcf86cd799439011", "status": "COMPLETE", "visibility": "public", "title": "My New Video", "description": "A great video about something", "duration": 120, "fps": 30, "orientation": "landscape", "src": { "thumbnails": [ { "name": "1080p", "width": 1920, "height": 1080, "formats": { "jpeg": { "url": "https://cdn.ignite.video/.../a1b2c3d4-1080p.jpg", "fileSize": 9180 }, "webp": { "url": "https://cdn.ignite.video/.../a1b2c3d4-1080p.webp", "fileSize": 4256 } } }, // ... additional resolutions ], "thumbnailUrl": "https://cdn.ignite.video/.../a1b2c3d4-1080p.jpg", "abr": { "resolution": "auto", "description": "Adaptive Bitrate Streaming (ABR)", "url": "https://cdn.ignite.video/.../master.m3u8", "maxWidth": 1920, "maxHeight": 1080 }, "hls": [...], "mp4": [...] }, "workspace": "507f1f77bcf86cd799439000", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:35:00.000Z" }

Exemple : video.deleted

En-têtes :

POST /your-webhook-endpoint HTTP/1.1 Content-Type: application/json X-Webhook-Event: video.deleted X-Webhook-Signature: t=1705316600000,v1=ghi789... X-Webhook-Delivery-Id: del_507f1f77bcf86cd799439013

Corps :

{ "id": "507f1f77bcf86cd799439011", "status": "COMPLETE", "visibility": "public", "title": "My New Video", "description": "A great video about something", "duration": 120, "workspace": "507f1f77bcf86cd799439000", "createdAt": "2024-01-15T10:30:00.000Z", "updatedAt": "2024-01-15T10:35:00.000Z" }

Bonnes pratiques

Gérer tous les événements souscrits

Vérifie toujours l’en-tête X-Webhook-Event et traite chaque type d’événement de façon appropriée :

const eventType = request.headers['x-webhook-event']; switch(eventType) { case 'video.created': // Handle new video break; case 'video.updated': // Handle video update break; case 'video.deleted': // Handle video deletion break; default: console.log('Unknown event type:', eventType); }

Utiliser l’ID de livraison pour l’idempotence

L’en-tête X-Webhook-Delivery-Id contient un identifiant unique pour chaque livraison de webhook. Stocke les ID de livraison déjà traités pour éviter un double traitement en cas de nouvelles tentatives :

const deliveryId = request.headers['x-webhook-delivery-id']; if (await hasBeenProcessed(deliveryId)) { return res.status(200).json({ received: true, duplicate: true }); } // Process the event... await markAsProcessed(deliveryId);