Add an https address under Integrations → Webhooks & notifications to receive call events:
| Event | When |
|---|---|
call.started | The agent picked up |
call.ended | The call ended, with its duration and credits |
call.analyzed | The summary, outcome, extracted fields and transcript are ready |
call.transcript | During the call, the new lines of the transcript every few seconds |
call.tool_called | The agent called one of your functions: name, arguments, status, durationMs |
call.handed_off | The call was handed to another agent: fromAgentId, toAgentId |
call.transferred | The call was transferred to a person: destination |
call.voicemail | An outbound call reached a mailbox |
call.do_not_call | The person on an outbound call asked not to be called again: phone |
call.recording_ready | The two-channel recording is stored: recordingUrl (valid 24 hours), durationMs |
call.message_sent | The agent showed cards on a web or app caller's screen: items, quickReplies |
alert.triggered | One of your alerts (Webhooks & notifications → Alerts) crossed its threshold |
alert.resolved | That alert is back to normal |
Events sent during a call carry data.call (id, agentId, channel, direction, numbers). Each request is signed:
EvaSay-Signature: t=<unix seconds>,v1=<hex HMAC-SHA256 of "<t>.<raw body>">
EvaSay-Delivery: <delivery id>
Verify the signature with the webhook secret shown when you created the webhook, and answer with a 2xx status. Failed deliveries are retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours with the same body and EvaSay-Delivery id, so you can ignore repeats. A webhook's latest deliveries, with the exact body sent and the status your endpoint answered, are listed by GET /webhooks/{id}/deliveries and on the dashboard; POST /webhooks/{id}/deliveries/{delivery_id} sends one again.
Besides email and the alert.triggered / alert.resolved webhooks, alerts can go to a Slack channel (incoming webhook), a WeCom group robot or Telegram under Webhooks & notifications → Alerts → Also send to.
Create a webhook through POST /webhooks with { "url": "https://crm.example.com/evasay-events", "events": ["call.analyzed"] }. The response contains the subscription and a generated signing secret, returned only at creation. Verify EvaSay-Signature, deduplicate EvaSay-Delivery, and update your CRM. Event webhooks are asynchronous notifications; in-call tools return results directly to the Agent.