연동 → Webhook 및 알림에서 https 주소를 추가하면 통화 이벤트를 받을 수 있습니다.
| 이벤트 | 시점 |
|---|---|
call.started | 에이전트가 전화를 받음 |
call.ended | 통화가 끝남(통화 시간과 크레딧 포함) |
call.analyzed | 요약, 결과, 추출한 필드, 대화 기록이 준비됨 |
call.transcript | 통화 중 몇 초마다 새 대화 기록 줄 |
call.tool_called | 에이전트가 내 함수를 호출함: name, arguments, status, durationMs |
call.handed_off | 통화가 다른 에이전트에게 넘어감: fromAgentId, toAgentId |
call.transferred | 통화가 사람에게 연결됨: destination |
call.voicemail | 발신 통화가 음성사서함으로 감 |
call.do_not_call | 발신 통화의 상대가 다시 전화하지 말라고 함: phone |
call.recording_ready | 2채널 녹음이 저장됨: recordingUrl(24시간 유효), durationMs |
call.message_sent | 에이전트가 웹이나 앱 발신자의 화면에 카드를 띄움: items, quickReplies |
alert.triggered | 경보(Webhook 및 알림 → 경보) 중 하나가 기준을 넘음 |
alert.resolved | 그 경보가 정상으로 돌아옴 |
통화 중에 보내는 이벤트에는 data.call(id, agentId, channel, direction, 번호)이 들어 있습니다. 각 요청은 서명됩니다.
EvaSay-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">
EvaSay-Delivery: <delivery id>
Webhook을 만들 때 표시된 Webhook 시크릿으로 서명을 확인하고 2xx 상태로 답하세요. 실패한 전송은 1분, 5분, 30분, 2시간, 12시간 뒤에 같은 본문과 같은 EvaSay-Delivery ID로 재시도되므로 중복은 무시하면 됩니다. Webhook의 최근 전송(보낸 본문 그대로와 엔드포인트가 답한 상태)은 GET /webhooks/{id}/deliveries와 대시보드에서 볼 수 있고, POST /webhooks/{id}/deliveries/{delivery_id}로 하나를 다시 보낼 수 있습니다.
이메일과 alert.triggered / alert.resolved Webhook 외에도, 경보는 Webhook 및 알림 → 경보 → 추가 전송 대상에서 Slack 채널(Incoming Webhook), WeCom 그룹 로봇 또는 Telegram으로 보낼 수 있습니다.
POST /webhooks에 { "url": "https://crm.example.com/evasay-events", "events": ["call.analyzed"] }를 보내 Webhook을 만드세요. 응답에는 구독과 생성된 서명 시크릿이 들어 있으며, 시크릿은 만들 때만 돌려줍니다. EvaSay-Signature를 확인하고 EvaSay-Delivery로 중복을 제거한 뒤 CRM을 업데이트하세요. 이벤트 Webhook은 비동기 알림이며, 통화 중 도구는 결과를 에이전트에게 직접 돌려줍니다.