Skip to main content
인바운드 웹훅은 전화가 걸려 오면 발신번호와 수신번호를 내 서버로 보내고, 서버가 돌려준 값을 통화 시작 전에 동적 변수와 메타데이터로 넣어요. CRM이나 DB에 있는 고객 정보를 프롬프트에 넣을 때 가장 많이 쓰는 경로예요. 에이전트 설정의 인바운드 웹훅 URL 입력란

인바운드 웹훅 연결하기

1

수신 서버 만들기

아래 요청과 응답 형식대로 답하는 HTTPS 엔드포인트를 준비하세요. 예시는 서버 구현 예시에 있어요.
2

인바운드 웹훅 URL 넣기

에이전트 설정의 웹훅 설정을 열고 인바운드 웹훅 URL에 엔드포인트를 넣은 뒤 저장하세요. URL은 https://만 저장돼요. 이 응답이 동적 변수를 만드는 곳이라 URL 자체에는 동적 변수를 쓸 수 없어요.
3

프롬프트에 변수 넣기

응답의 dynamic_variables 키와 같은 이름으로 프롬프트에 {{변수명}}을 넣으세요. 통화가 시작될 때 값으로 바뀌어요.
4

실제 통화로 확인하기

curl로 먼저 시험한 뒤 실제 통화를 한 통 걸어 변수가 제대로 들어갔는지 보세요.

요청과 응답

전화가 걸려 오면 vox.ai가 아래 JSON 본문으로 POST 요청을 보내요. 본문 형식은 고정이에요.
  • 타임아웃: 한 번에 10초까지 기다리고 2번까지 시도해요. 그동안 발신자는 벨소리를 들어요. 합쳐 약 20초 동안 기다리던 발신자가 전화를 끊을 수 있으니 8초 안에 응답하세요.
  • 재시도: 실패하면 짧은 간격으로 한 번 다시 보내요. 다시 보내는 요청도 같은 (call_from, call_to)로 오므로 중복을 가려야 하면 서버에서 자체 키로 처리하세요.
  • 실패하면: 응답 오류든 시간 초과든 두 번 모두 실패하면 동적 변수 없이 통화를 이어가요. 프롬프트에 변수가 비었을 때의 분기를 두세요. 두 번 모두 시간이 초과되면 발신자는 약 20초 동안 벨소리만 듣기 때문에 그 사이 전화를 끊을 수 있어요.
  • 차단 번호가 먼저: 차단 번호 규칙이 웹훅보다 먼저 적용돼요. 차단된 통화는 웹훅이 호출되지 않아요.
  • 응답 코드: 2xx가 아닌 응답은 한 번 다시 보내요. 리다이렉트는 따라가지 않아요.
  • 덮어쓸 수 없는 변수: current_time, call_id, agent_id, call_from, call_to는 응답으로 덮어쓸 수 없어요.
응답 JSON은 아래 구조를 따라야 해요. dynamic_variables의 키가 프롬프트의 {{변수명}}과 같으면 자동으로 바뀌어요.
  • dynamic_variables: 키와 값의 쌍이에요. 값은 문자열, 숫자, 불리언만 돼요. 배열이나 객체 같은 중첩 값을 다루는 방법은 동적 변수 작성 문법에 있어요.
  • metadata: 프롬프트에는 들어가지 않고 이 통화의 메타데이터로 저장돼요. 나중에 통화 데이터 웹훅의 call.metadata로 그대로 가므로 내부 고객 ID처럼 다음 시스템에서 필요한 식별자를 실어 보낼 수 있어요.

통화 거절하기

응답에 reject를 true로 담으면 통화를 에이전트에 연결하지 않고 끝낼 수 있어요. 내 서버에서 받지 않을 번호나 시간대를 판단할 때 써요.
  • 발신자: 에이전트가 받기 전에 통화가 연결되지 않고 끝나요.
  • 통화 기록: 연결 종료 사유가 웹훅 거절(inbound_webhook_reject)로 남아요.
  • 요금: 거절된 통화는 요금이 부과되지 않아요.
  • 응답이 없으면: 웹훅 응답이 없거나 실패하면 통화는 거절되지 않고 연결돼요.
  • 적용 조건: reject는 불리언 true일 때만 적용돼요. "true" 같은 문자열은 거절로 보지 않아요.

서버 구현 예시

보안

HMAC 서명 검증 (선택)

에이전트 설정의 웹훅 설정에서 인바운드 웹훅 서명을 켜면 인바운드 웹훅 요청에 HMAC-SHA256 서명 헤더가 붙어요. 엔드포인트에서 요청이 vox.ai에서 왔는지 검증할 수 있어요. 기본값은 꺼짐이고, 꺼 두면 서명 없이 보내요. 인바운드 웹훅 서명 스위치와 워크스페이스 서명 키 안내 서명 키와 검증 방식은 워크스페이스 단위 웹훅의 HMAC-SHA256 서명과 같아요. "{timestamp}.{원본 요청 본문}"에 서명하므로 받은 원본 본문 그대로 검증하세요. 통화 데이터 웹훅 서명을 이미 검증하고 있다면 같은 코드를 그대로 쓰면 돼요.
  • 서명 키: 대시보드 설정 > 웹훅에서 발급하는 워크스페이스 웹훅 서명 키를 함께 써요. 에이전트별 키는 없어요.
  • 키가 없을 때: 워크스페이스에 서명 키가 없으면 켜 두어도 서명 없이 보내요. 켜기 전에 키를 먼저 발급하세요.

엔드포인트 쪽 추가 방어

서명 검증과 별도로 엔드포인트에서 다음을 적용할 수 있어요.
  • HTTPS 전용: 인바운드 웹훅 URL은 https://만 저장돼요.
  • 자체 토큰: URL 경로나 쿼리에 비밀 토큰을 넣고 서버에서 검증하세요. 예: https://api.example.com/webhook/inbound?token=YOUR_SECRET_TOKEN
  • 요청 검증: call_from이 E.164나 한국 휴대전화 형식인지, call_to가 자사에 등록된 수신번호인지 확인하세요.
방화벽 화이트리스트 정책이 필요하면 vox.ai에 따로 문의해 주세요.

연결 확인

본문 형식이 고정이라 엔드포인트는 curl로 직접 시험할 수 있어요.
요청과 응답 형식대로 200 응답이 오는지 먼저 확인한 뒤, 실제 통화를 한 통 걸어 LLM에 변수가 제대로 들어갔는지 보세요.

웹훅 없이 SIP 헤더로 넘기기

SIP 트렁킹으로 전화를 받으면, PBX가 X-로 시작하는 커스텀 헤더에 고객 정보를 실어 보내면 웹훅 서버 없이도 동적 변수로 자동으로 들어가요. 웹훅과 함께 쓸 수 있고, 키가 겹치면 예외 상황의 우선순위를 따라요. 자세한 내용은 시스템 변수의 SIP 헤더 자동 주입과 SIP 연동에 있어요.

예외 상황

관련 문서

  • 동적 변수: 인바운드 웹훅 말고 다른 네 가지 주입 경로(전화, 대량 발신, SDK, 테스트 프리셋)
  • 시스템 변수: 자동으로 들어가는 변수와 SIP 헤더 자동 주입
  • SIP 연동: SIP 트렁크와 PBX 연결하기
  • 웹훅 개요: 통화 데이터 웹훅