Audit WhatsApp agents on the Cloud API
Evidova reads the same webhooks Meta already sends your agent, and scores the conversations in them.
What it catches
The Cloud API delivers the customer's messages and a receipt for each of your replies. It says nothing about whether the reply was right. Evidova reads both sides of the conversation 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 invented a price or a delivery date, and where the customer stopped replying.
Connect WhatsApp
- In Evidova, open Setup, choose WhatsApp, and paste your app secret.
- Copy the URL we generate.
- In the Meta app dashboard, set it as the callback URL and subscribe to the messages field.
https://app.evidova.com/ingest/webhooks/whatsapp_cloud/<your-token>What we read from WhatsApp
| messages[].id | WhatsApp's own message id. Required |
|---|---|
| messages[].from | The customer's number, written as E.164. Every message from that number belongs to one conversation |
| messages[].timestamp | When it was sent, in whole seconds |
| messages[].text.body | What the customer typed |
| messages[].button, .interactive | A tap on a quick reply, a list choice or a form, read as the words the customer saw |
| messages[].image, .video, .document | The caption, or the file name when there is no caption |
| messages[].location, .contacts, .reaction, .order | Read as text as well, so a turn where the customer did say something is never scored as silence |
| messages[].audio.id | The voice note, for the audio checks |
| messages[].system.body | A number change or other WhatsApp notice, marked as the platform's own and not as your agent's |
| statuses[].id, .recipient_id, .timestamp | Your agent's reply: which message it was, who it went to, and when |
What we ignore, and why
One reply of yours arrives three or four times over: sent, then delivered, then read. We keep sent and ignore the rest, because they all carry the same message id and one message has to be one turn. A status we do not keep is still answered and still kept as the raw body.
One trap worth knowing
A status webhook is a receipt, not a message. It carries the id, the recipient and the time, and none of the words, so an outbound turn tells us that your agent replied and when, never what it said. It also carries nothing about who wrote it, so a reply one of your own staff typed into the inbox looks exactly like the agent's, and we treat every outbound turn as the agent's. Where people answer in the same conversations, the generic contract is the one that can mark a human turn.
What WhatsApp gives us
| Channel | chat |
|---|---|
| Audio | Yes |
| Timestamps | Seconds, on WhatsApp's clock |
| Delivery | Webhook, push |
| Retries | WhatsApp 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.