Skip to Content
WebhooksTypy zdarzeń

Typy zdarzeń

Ignite Webhooks obsługują trzy typy zdarzeń z cyklu życia wideo. Przy tworzeniu subskrypcji webhooka możesz wybrać dowolną ich kombinację.

Dostępne zdarzenia

video.created

Uruchamiane, gdy w twoim workspace powstaje nowe wideo.

Kiedy się wywołuje:

  • Nowy obiekt wideo jest tworzony przez API
  • Wideo jest przesyłane przez panel administracyjny

Payload: Pełny obiekt wideo ze wszystkimi wartościami początkowymi. Pamiętaj, że status wideo może wtedy być NO_FILE albo PROCESSING.

video.updated

Uruchamiane przy każdej zmianie właściwości wideo.

Kiedy się wywołuje:

  • Aktualizowane są metadane wideo (tytuł, opis, widoczność itd.)
  • Kończy się przetwarzanie wideo (status przechodzi na COMPLETE)
  • Dodawane lub zmieniane są ścieżki tekstowe albo rozdziały
  • Zmieniane są kategorie lub tagi
  • Aktualizowana jest miniatura

Payload: Pełny obiekt wideo ze wszystkimi aktualnymi wartościami po aktualizacji.

video.deleted

Uruchamiane, gdy wideo jest usuwane z twojego workspace.

Kiedy się wywołuje:

  • Wideo jest usuwane przez API
  • Wideo jest usuwane przez panel administracyjny

Payload: Pełny obiekt wideo w stanie sprzed usunięcia.

Struktura payloadu zdarzeń

Wszystkie zdarzenia dostarczają pełny obiekt wideo w treści żądania. Typ zdarzenia jest podany w nagłówku X-Webhook-Event, a nie w body.

Przykład: video.created

Nagłówki:

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

Body:

{ "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" }

Przykład: video.updated

Nagłówki:

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

Body:

{ "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" }

Przykład: video.deleted

Nagłówki:

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

Body:

{ "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" }

Dobre praktyki

Obsługuj wszystkie zapisane zdarzenia

Zawsze sprawdzaj nagłówek X-Webhook-Event i odpowiednio obsługuj każdy typ:

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); }

Używaj ID dostawy do idempotentności

Nagłówek X-Webhook-Delivery-Id zawiera unikalny identyfikator każdej dostawy webhooka. Zapisuj przetworzone ID, żeby uniknąć podwójnej obsługi przy ponowieniach:

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);