call, operator_call, sms, campaign, sms_batch로 다릅니다. 본문 식별자는 call_id, operator_call_id, campaign_id, batch_id처럼 리소스별 키를 쓰며 REST API 응답의 id와 이름이 다릅니다.
비용과 분석 결과는
call_analyzed에서 확인하세요.
call_ended에는 포함되지 않습니다.통화 이벤트
통화 데이터 웹훅은 통화 진행 상태와 분석 완료 상태를 나누어 전송합니다.call_analyzed는 통화 종료 후 비동기로 전송됩니다.
call_started
mid_call
AI 통화 중 플로우 전환이나 발화가 발생하면 전송됩니다.
상담원에게 전환된 뒤의 발화는 상담원 구간의 mid_call을 참고하세요.
call_ended
통화 시간은
end_at - start_at으로 계산합니다.
녹음 파일 다운로드
recording_url은 인증이 필요한 엔드포인트입니다. API 키로 녹음을 내려받는 방법과 스테레오 OGG 채널 분리 형식은 통화 녹음에서 확인하세요.
스크립트 형식
transcript는 발화와 도구 호출 기록을 한 배열에 담습니다. 도구를 사용하지 않은 통화에는 agent와 user 항목만 들어갑니다.
transcript는 통화 데이터 저장 제외 설정이나 통화 처리 상태에 따라 null일 수 있습니다.call_analyzed
상담원 통화 이벤트
AI 통화에서 상담원에게 전환된 뒤의 이벤트입니다. 안내 후 전환과 Desk 이어받기에 적용됩니다. 통화 데이터 웹훅 URL을 설정하면 별도 구독 없이 전송됩니다.
전송 흐름은 안내 후 전환 라이프사이클을 참고하세요.
operator_call_started
mid_call
고객이나 상담원의 발화가 확정되면 전송됩니다.
AI 구간과 같은 mid_call 이벤트이며, call.operator_call_id로 구분합니다.
operator_call_ended
시작 이벤트에는
start_at이 없고 occurred_at이 상담원 통화 조회 응답의 start_at과 같습니다.
종료 이벤트의 occurred_at은 end_at과 같습니다.
종료 이벤트의
recording_url은 만료되지 않습니다.
dynamic_variables, metadata, mode, source, handoff_id는 이벤트가
발생한 통화와 연결 경로를 설명하는 웹훅 전용 컨텍스트입니다.
v3 API 참조의 상담사 통화 > 상담사 통화 조회
응답에는 포함되지 않습니다.이전에 문서화되지 않은
takeover 이벤트를 받고 있었다면 이 두 이벤트로 대체됩니다.
본문 키는 operator_call이고 takeover_id, takeover_event_type, message_count, duration_ms는 없습니다.상담원 통화 상세 조회
대화록, 비용 또는 종료 이벤트에 포함되지 않은 녹음 URL이 필요하면 v3 API 참조의 상담사 통화 > 상담사 통화 조회를 호출하세요.cURL
단건 응답의
recording_url은 15분 뒤 만료되는 서명 URL입니다.
URL을 저장해 두지 말고 재생 시점에 다시 조회하세요.전달 보장과 재시도
수신 서버가 응답을 돌려주면 상태 코드와 무관하게 그 시도는 끝납니다. 4xx나 5xx로 재시도를 유도할 수 없습니다. 응답이 없거나 연결이 끊기면 제한된 횟수만 재시도합니다. 수신 서버가 응답한 뒤 vox.ai가 결과를 저장하기 전에 장애가 나면 같은 이벤트가 다시 전송됩니다. 같은 이벤트를 한 번만 처리하려면 다음 키를 쓰세요. 통화 이벤트는(event, call_id), 상담원 통화 이벤트는 (event, operator_call_id)입니다. mid_call은 AI 구간에서 call_id, 상담원 구간에서 operator_call_id를 쓰세요. 여기에 event, occurred_at, event_type, event_data를 더해 키를 구성하세요.
sms_received
sms_received는 워크스페이스 번호로 SMS나 MMS를 수신할 때 전송됩니다. 워크스페이스 웹훅 전용이며 설정 > 웹훅의 이벤트 구독에서 수신 문자를 선택한 워크스페이스에만 전송됩니다. 본문 키는 통화 이벤트와 달리 call이 아니라 sms입니다.
첨부 파일 다운로드
file_key로 첨부 파일 원본을 받으려면 파일 다운로드 API를 호출하세요.
cURL
Content-Type은 image/jpeg, image/png, image/gif 중 저장된 MIME 타입을 그대로 따릅니다. 같은 워크스페이스가 소유한 file_key만 받을 수 있습니다. 전체 파라미터는 v3 API 참조의 파일 > 파일 다운로드에서 확인하세요.
서명 방식은 통화 데이터 웹훅과 동일합니다.
대시보드 설정 > 웹훅의 이벤트 구독에서 수신 문자를 선택하고 저장하면 전송됩니다.
기본값은 선택 해제이고 선택한 이후 수신분부터 전송됩니다.
대량 발신 이벤트
campaign과 sms_batch는 대시보드 설정 > 웹훅의 이벤트 구독에서 캠페인 종결과 문자 대량 발신 종결을 선택하고 저장합니다. 워크스페이스 설정 API의 webhook_event_subscriptions에 이벤트 값을 추가해도 됩니다.
이 두 이벤트도 워크스페이스 웹훅 URL과 같은 서명 방식을 따릅니다.
중복 처리는 전달 보장과 재시도를 따르세요.
campaign
campaign은 대량 발신 캠페인이 success 또는 canceled로 종결될 때 전송됩니다. 캠페인을 시작, 일시정지, 재개할 때는 전송하지 않습니다.
웹훅은 캠페인 단위로 전송됩니다. 자동 재시도를 켠 캠페인은 실패분을 재발신할 때 새 캠페인이 생성되므로 종결 웹훅도 원본과 재시도분이 각각 전송됩니다. 재시도 캠페인의 sheet_id는 원본과 같습니다. 시트 전체의 완료 여부는 판정하지 않으므로 수신 서버에서 조합하세요.
campaign 본문은 캠페인 조회 API 응답 필드에 sheet_id와 occurred_at을 추가한 구조입니다.sms_batch
sms_batch는 대량 문자 배치가 success 또는 fail로 종결될 때 전송됩니다. 발송이 시작되어 상태가 ongoing이 될 때는 전송하지 않습니다.
sms_batch 본문은 대량 문자 배치 조회 API 응답에서 items를 제외하고,
sheet_id와 occurred_at을 추가한 구조입니다.서버 구현 체크리스트
- 수신 스키마에 최상위
webhook_version필드를 포함하세요. call_ended에서 비용이나 분석 필드를 기대하지 마세요.- 분석 결과 저장, 후속 자동화, 비용 집계는
call_analyzed에서 실행하세요. - 통화 결과는
call_status와disconnection_reason을 함께 확인하세요. - 통화 시간은
end_at - start_at으로 계산하세요. operator_call_started와operator_call_ended는operator_call키를 사용합니다.- 상담원 구간의
mid_call은call키를 사용합니다. sms_received,campaign,sms_batch는 각 리소스 키를 사용합니다.event별로 본문 키를 분기하세요.
관련 문서
- 통화 이벤트 — 이벤트 순서와 활용 사례
- 워크스페이스 단위 웹훅 — HMAC 서명 검증과 보안 설정
- 웹훅 개요 — 웹훅 유형과 우선순위
연관 검색어
연관 검색어
웹훅 스키마, webhook schema, call_analyzed, call_ended, operator_call_started, operator_call_ended, 상담원 통화 웹훅, 상담사 통화 웹훅, operator call webhook, mid_call, sms_received, campaign, sms_batch, 대량 발신 캠페인 웹훅, 대량 문자 배치 웹훅, outbound campaign webhook, bulk sms webhook, 수신 문자 웹훅, inbound sms webhook, MMS 수신, attachments, 웹훅 페이로드, webhook payload, recording_url, 녹음 다운로드, recording download, 녹음 파일 URL