Webhooki Image & Video
Webhooki Image & Video
Odbieraj wynik generacji zamiast go odpytywać.
Poradnik · Zakłada, że masz za sobą krótki przewodnik po Image & Video API.
Przegląd
Generowanie wideo może trwać kilka minut, więc utrzymywanie otwartego odpytywania jest kosztowne. Włącz
dostarczanie przez webhook dla generowania, a ElevenLabs wyśle do twojego endpointu zdarzenie flows_generation,
gdy generowanie osiągnie status completed lub failed.
Ładunek zdarzenia to końcowa odpowiedź z odpowiadającego endpointu GET, więc handler, który obsługuje już odpowiedź z odpytywania, nie potrzebuje osobnej ścieżki parsowania.
Zanim zaczniesz
Dostarczanie przez webhook używa webhooków w twoim workspace, które subskrybują zdarzenia generowania. Konfiguracja wymaga dwóch kroków: utwórz webhook, a potem zasubskrybuj go do zdarzenia.
Utwórz webhook
Przejdź do Developers > Webhooks i utwórz webhook z publicznie dostępnym adresem URL wywołania zwrotnego HTTPS. Zachowaj zwrócony sekret podpisu — będzie potrzebny do weryfikacji zdarzeń przychodzących.
Zasubskrybuj zdarzenia generowania
W sekcji Select events to listen to zaznacz Image & Video API generation completed. Webhook, który istnieje, ale nie subskrybuje tego zdarzenia, nigdy nie zostanie wywołany.
Możesz zrobić to samo przez API, przekazując zdarzenie flows do
Update workspace webhook:
Tworzenie i subskrybowanie webhooków wymaga uprawnienia Webhooks Manage lub roli administratora workspace. Pojedyncze
zdarzenie może przyjąć maksymalnie 10 webhooków; po przekroczeniu tego limitu żądanie kończy się błędem too_many_webhooks.
Generowanie, które żąda dostarczenia przez webhook, gdy żaden webhook nie subskrybuje zdarzeń generowania, zostaje odrzucone, więc wynik nigdy nie jest generowany bez miejsca docelowego.
Zażądaj dostarczenia przez webhook
Dodaj obiekt webhook do żądania utworzenia. Użyj {"type": "all"}, aby dostarczać do każdego webhooka
subskrybującego zdarzenia generowania — dzięki temu żądanie pozostaje stabilne, gdy webhooki są dodawane lub zastępowane.
Aby kierować dostarczanie do konkretnych webhooków, ustaw pole webhook jako listę identyfikatorów. Każdy identyfikator musi należeć
do webhooka workspace subskrybującego zdarzenia generowania.
Żądanie utworzenia sprawdza cel przed rozpoczęciem generowania i zwraca błąd, gdy dostarczenie nie byłoby możliwe:
Dostarczanie przez webhook dobrze współgra z łańcuchami
generowania:
ustaw webhook dla końcowego generowania, a cały łańcuch wykona się po stronie serwera z jednym zdarzeniem
na końcu. Dotyczy to także sytuacji, gdy łańcuch nie powiedzie się w trakcie — błąd przechodzi do
końcowego generowania, które dostarcza go jako zdarzenie failed z przyczyną dependency_failed.
Ładunek webhooka
Zakończone generowanie dostarcza adres URL wyjścia i typ MIME:
Nieudane generowanie dostarcza zamiast tego kategorię błędu i komunikat:
Sprawdź data.status, aby ustalić, które pola są dostępne. Dwa statusy końcowe to jedyne,
które może zawierać webhook, ponieważ dostarczenie następuje tylko po zakończeniu generowania.
content_url to podpisany URL, który wygasa około godzinę po wysłaniu zdarzenia. Pobierz
media od razu lub pobierz generowanie ponownie, aby uzyskać nowy URL.
Obsłuż zdarzenie
Handler weryfikuje podpis, sprawdza typ zdarzenia, a potem rozgałęzia się według data.status. Ten
przykład pobiera wynik zakończonego generowania i zapisuje w logach przyczynę nieudanego.
Dla zwięzłości oba przykłady pobierają plik w trakcie żądania. Duże wideo może pobierać się na tyle długo, że przekroczy limit czasu dostarczenia, więc na produkcji przekaż identyfikator generowania do kolejki i od razu zwróć 2xx. Podpisany URL jest ważny około godziny, więc to wystarczy dla workera działającego w tle.
Aby odbierać zdarzenia na lokalnym serwerze podczas programowania, udostępnij go przez tunel, np. ngrok, i użyj podanego adresu HTTPS jako URL wywołania zwrotnego webhooka.
Zweryfikuj podpis
Powyższy handler wywołuje construct_event / constructEvent, co w jednym kroku weryfikuje nagłówek
ElevenLabs-Signature, sprawdza znacznik czasu i parsuje ładunek. Zawsze weryfikuj zdarzenie,
zanim mu zaufasz.
Ważne, by odbiornik weryfikował wszystkie przychodzące webhooki. Webhooki obecnie obsługują uwierzytelnianie za pomocą podpisów HMAC. Aby skonfigurować uwierzytelnianie HMAC:
- Bezpiecznie przechowuj współdzielony sekret wygenerowany podczas tworzenia webhooka
- Zweryfikuj nagłówek ElevenLabs-Signature w swoim endpointzie za pomocą SDK
SDK JavaScript udostępnia constructEvent, a SDK Python construct_event z parametrami rawBody, sig_header i secret (w Pythonie nie nazywają się one payload / signature). Oba weryfikują podpis, sprawdzają znacznik czasu i parsują dane JSON.
Python
JavaScript
Przykładowy handler webhooka z użyciem FastAPI:
Zachowanie dostarczania
Każde generowanie dostarcza dokładnie jedno zdarzenie końcowe do każdego docelowego webhooka. Dostarczanie jest niezależne od samego generowania: webhook, który zawiedzie lub jest niedostępny, nie wpływa na wynik, który pozostaje dostępny z endpointu GET i w odpowiedzi listy.
Szybko zwracaj status 2xx z handlera. Powtarzające się błędy automatycznie wyłączają webhook, a
wyłączony webhook powoduje odrzucenie kolejnych generowań, które go wskazują, już przy tworzeniu. Zaprojektuj
handler tak, by był idempotentny, i używaj id generowania do usuwania duplikatów.
W workflow, w których pominięcie wyniku jest niedopuszczalne, traktuj webhooki jako szybką ścieżkę i okresowo uzgadniaj
wyniki za pomocą flows.image.list lub flows.video.list, filtrując po status.