Audit Facebook Messenger agents
Evidova reads the same webhooks Meta already sends your page, and scores the conversations in them.
What it catches
The Messenger Platform delivers what the customer typed, and echoes back what your page sent. It says nothing about whether the reply was right. Evidova reads both sides and scores the conversation 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 Messenger
- In Evidova, open Setup, choose Messenger, and paste your app secret.
- Copy the URL we generate.
- In the Meta app dashboard, set it as the callback URL for your page, and subscribe to inbound messages, to echoes of your own sends, and to button taps.
- If your agent sends through an app of its own, put that app's ID in the Bot app IDs field, for the reason under the trap below.
https://app.evidova.com/ingest/webhooks/messenger/<your-token>What we read from Messenger
| object | Must be page. Any other value is not a Messenger delivery and produces no turns |
|---|---|
| entry[].messaging[].message.mid | Which message this is. Required |
| entry[].messaging[].timestamp | When it happened, to the millisecond |
| entry[].messaging[].sender.id, .recipient.id | The customer's page-scoped ID, which is what groups the conversation. On an echo of your own send the customer is the recipient, so we read that side instead |
| entry[].messaging[].message.text | What was said, in either direction |
| entry[].messaging[].message.is_echo | Whether this is your page's own send coming back to you |
| entry[].messaging[].message.app_id | Which app sent it. Read the trap below |
| entry[].messaging[].message.attachments[] | The first attachment whose type is audio, for the audio checks |
| entry[].messaging[].postback.title | A tap on a button, read as the words printed on the button, so a turn where the customer did say something is never scored as silence |
| entry[].messaging[].postback.mid | Which tap it was. When Meta sends none, we build one from the customer's ID and the time, so one tap cannot become two turns |
What we ignore, and why
Meta posts a delivery receipt and a read receipt for every message your page sends. Both are left out: neither carries a word of content, and the echo of the send already said that the reply happened and when. A messaging entry with neither a message nor a button tap in it produces nothing, and its raw body is still kept.
One trap worth knowing
A Messenger echo names the app that sent the message and never the person behind it, so app_id is the only thing there is to read. An echo with no app_id is your agent, because Meta's own inbox and every third-party tool stamp one. An echo stamped with Meta's Page Inbox app is somebody answering from Business Suite. An echo stamped with any other app is treated as a person too, which is the safe way round, because it keeps words a person wrote out of your agent's score. If your own agent sends through such an app, list its ID in the Bot app IDs field or its turns are credited to a person. And whichever way it lands, a human turn on this platform stays nameless: Meta named the app, so there is nobody for us to name.
What Messenger gives us
| Channel | chat |
|---|---|
| Audio | Yes |
| Timestamps | Milliseconds, on Messenger's clock |
| Delivery | Webhook, push |
| Retries | Messenger 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.