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_507f1f77bcf86cd799439011Corps :
{
"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_507f1f77bcf86cd799439012Corps :
{
"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_507f1f77bcf86cd799439013Corps :
{
"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);