Audit voice agents built with Bolna
Evidova reads the call Bolna reports when it is over, and scores the conversation inside it.
What it catches
Bolna tells you the call ran and how it finished. It does not tell you whether the agent did its job. Evidova reads the transcript Bolna sends with the completed call and scores it against the checks you approved: whether the agent answered the question asked, whether it said it was not a person when asked, whether it promised something nobody authorised, and where the caller gave up.
Connect Bolna
- In Evidova, open Setup, choose Bolna, and paste your API key. Leave the signing secret empty unless something sits in front of Bolna that can add an Authorization header, because Bolna publishes no way to sign a delivery.
- Copy the URL we generate.
- In Bolna, set it as the webhook on your agent.
https://app.evidova.com/ingest/webhooks/bolna/<your-token>What we read from Bolna
| id | The call's identity. Required, and the delivery is refused without it |
|---|---|
| created_at | When the call started. Required as well |
| updated_at | When it finished. Falls back to created_at |
| status | What the delivery is worth. completed brings the transcript; no-answer, busy, failed, canceled, stopped, error and balance-low end the call with no turns; anything earlier records only that the call started |
| transcript | The turns, as one block of text. Every line beginning assistant: or user: becomes a turn, in the order given |
| user_number | The contact's number whichever way the call went, so repeat calls from one caller group |
| telephony_data.call_type, .from_number, .to_number | Used when user_number is absent. An inbound call takes from_number, an outbound one takes to_number |
| telephony_data.recording_url | Audio, kept on the end of the call |
What we ignore, and why
A transcript line beginning with neither assistant: nor user: is not a turn. Bolna gives us that block as plain text with no structure inside it, so a line in any other shape is left out rather than guessed at and attributed to somebody. A delivery that arrives before the call is over is not thrown away either: it records that the call started, and the completed delivery that follows carries the same identity, so the two collapse into one call instead of standing as two.
One trap worth knowing
One Bolna webhook carries one time for the whole call, to the second, so every turn in it would otherwise sit on that same second and no reply would appear to have taken any time at all. So we read the call back out of Bolna's own executions record and use the per-turn timings in it to place each agent turn. That read needs your API key. Without it, or when the read fails, the turns keep the single second the webhook gave them and the delivery is kept anyway rather than being lost over a missing extra. So paste the API key: it is what makes a reply time on this platform mean anything.
What Bolna gives us
| Channel | voice |
|---|---|
| Audio | Yes |
| Timestamps | Seconds, on Bolna's clock |
| Delivery | Webhook, push |
| Retries | Bolna retries |
Read next
- Quickstart: connect a platform · Ten minutes, one path, from a webhook to your first score.
- Webhook reference · The URL, the signature, and what we answer a delivery with.
- All twelve platforms · Every voice and chat stack Evidova reads, side by side.