이미지 & 비디오 웹훅
폴링 대신 생성 결과를 수신하세요.
사용 방법 가이드 · 이미지 & 비디오 빠른 시작을 완료했다고 가정합니다.
개요
비디오 생성에는 몇 분이 걸릴 수 있어 폴링 연결을 계속 유지하는 데 비용이 많이 듭니다. 생성 요청에서
웹훅 전달을 선택하면, 생성이 completed 또는 failed 상태가 될 때 ElevenLabs가 엔드포인트로
flows_generation 이벤트를 전송합니다.
이벤트 페이로드는 해당 GET 엔드포인트의 최종 응답이므로, 이미 폴링 응답을 처리하는 핸들러라면 별도의 파싱 경로가 필요하지 않습니다.
시작하기 전에
웹훅 전달은 워크스페이스에서 생성 이벤트를 구독 중인 웹훅을 사용합니다. 설정은 두 단계로 이루어집니다. 웹훅을 만든 다음 이벤트를 구독하세요.
웹훅 만들기
개발자 > 웹훅으로 이동해 공개적으로 접근 가능한 HTTPS 콜백 URL을 사용하여 웹훅을 만드세요. 반환되는 서명 시크릿은 보관하세요. 수신 이벤트를 검증하는 데 필요합니다.
생성 이벤트 구독하기
수신할 이벤트 선택에서 이미지 & 비디오 API 생성 또는 템플릿 실행 완료됨을 선택하세요. 동일한 이벤트로 완료된 템플릿 실행도 전달됩니다. 웹훅이 존재하지만 이 이벤트를 구독하지 않으면 호출되지 않습니다.
API를 통해서도 flows 이벤트를 워크스페이스 웹훅 업데이트에
전달하여 동일하게 설정할 수 있습니다.
웹훅을 만들고 구독하려면 Webhooks Manage 권한 또는 워크스페이스 관리자 권한이 필요합니다. 단일 이벤트에는
최대 10개의 웹훅을 연결할 수 있으며, 이를 초과하면 요청이 too_many_webhooks와 함께 실패합니다.
생성 이벤트를 구독한 웹훅이 없을 때 웹훅 전달을 요청하면 생성 요청이 거부됩니다. 따라서 전달할 곳 없는 결과가 생성되는 일은 없습니다.
웹훅 전달 요청하기
생성 요청에 webhook 객체를 추가하세요. 생성 이벤트를 구독하는 모든 웹훅에 전달하려면 {"type": "all"}을
사용하세요. 웹훅이 추가되거나 교체되어도 요청을 안정적으로 유지할 수 있습니다.
특정 웹훅만 대상으로 지정하려면 webhook 필드에 ID 목록을 설정하세요. 각 ID는 생성 이벤트를 구독하는
워크스페이스의 웹훅이어야 합니다.
생성 요청은 생성을 시작하기 전에 대상을 검증하며, 전달할 수 없는 경우 오류를 반환합니다.
웹훅 전달은 연결된
생성과 잘 어울립니다.
최종 생성에 webhook을 설정하면 전체 체인이 서버 측에서 실행되고 마지막에 단일 이벤트가 전송됩니다.
체인이 중간에 실패하는 경우에도 마찬가지입니다. 실패가 최종 생성으로 전파되고, 최종 생성은 이를
dependency_failed 사유의 failed 이벤트로 전달합니다.
웹훅 페이로드
완료된 생성은 출력 URL과 MIME 유형을 전달합니다.
실패한 생성은 대신 실패 카테고리와 메시지를 전달합니다.
data.status를 기준으로 어떤 필드가 있는지 결정하세요. 웹훅은 생성이 완료될 때만 전달되므로,
두 최종 상태만 포함할 수 있습니다.
content_url은 이벤트 전송 후 약 1시간 뒤 만료되는 서명 URL입니다. 미디어를 즉시 다운로드하거나,
새 URL을 받기 위해 생성을 다시 조회하세요.
이벤트 처리하기
핸들러는 서명을 검증하고 이벤트 유형을 확인한 다음 data.status를 기준으로 분기합니다. 이 예제는
완료된 생성의 출력을 다운로드하고, 실패한 생성의 사유를 기록합니다.
두 예제 모두 간결성을 위해 요청 내에서 다운로드합니다. 대용량 비디오는 전달 제한 시간을 초과할 만큼 오래 걸릴 수 있으므로, 프로덕션에서는 생성 ID를 큐에 전달하고 즉시 2xx를 반환하세요. 서명 URL은 약 1시간 동안 유효하므로 백그라운드 워커가 처리하기에 충분합니다.
개발 중 로컬 서버에서 이벤트를 수신하려면 ngrok 같은 터널로 서버를 노출하고, 제공되는 HTTPS URL을 웹훅의 콜백 URL로 사용하세요.
서명 검증하기
위 핸들러는 construct_event / constructEvent를 호출합니다. 이 함수는
ElevenLabs-Signature 헤더를 검증하고 타임스탬프를 확인하며 페이로드를 한 번에 파싱합니다. 이벤트를
신뢰하기 전에 항상 검증하세요.
수신 측에서는 들어오는 모든 웹훅의 유효성을 검증하는 것이 중요합니다. 현재 웹훅은 HMAC 서명을 통한 인증을 지원합니다. 다음 방법으로 HMAC 인증을 설정하세요.
- 웹훅 생성 시 생성되는 공유 시크릿을 안전하게 저장합니다.
- SDK를 사용하여 엔드포인트에서 ElevenLabs-Signature 헤더를 검증합니다.
JavaScript SDK는 constructEvent를 제공하며, Python SDK는 rawBody, sig_header, **secret**을 사용하는 construct_event를 제공합니다(Python에서는 payload / signature이라는 이름을 사용하지 않습니다). 두 SDK 모두 서명을 검증하고 타임스탬프를 확인하며 JSON 페이로드를 파싱합니다.
Python
JavaScript
FastAPI를 사용하는 웹훅 핸들러 예시:
전달 동작
각 생성은 대상 웹훅마다 정확히 하나의 최종 이벤트를 전달합니다. 전달은 생성 자체와 독립적입니다. 웹훅이 실패하거나 연결할 수 없어도 GET 엔드포인트와 목록 응답에서 계속 사용할 수 있는 결과에는 영향을 주지 않습니다.
핸들러에서 2xx 상태를 즉시 반환하세요. 반복적으로 실패하면 웹훅이 자동으로 비활성화되며, 비활성화된 웹훅을
대상으로 하는 이후 생성은 생성 시점에 거부됩니다. 핸들러는 멱등적으로 설계하고 생성 id를 사용해 중복을 제거하세요.
결과 누락을 허용할 수 없는 워크플로에서는 웹훅을 빠른 경로로 사용하고, 주기적으로 flows.image.list 또는
flows.video.list를 status로 필터링해 조정하세요.