Audit WhatsApp agents running on Gupshup
Evidova reads the messages Gupshup already posts to your webhook, and scores the conversation they belong to.
What it catches
Gupshup carries messages between WhatsApp and your agent. It does not read them. Evidova reads the customer's side in full 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 Gupshup
- In Evidova, open Setup, choose Gupshup. Paste a shared secret only if your account is set up behind something that signs the body, because Gupshup publishes no signing scheme of its own.
- Copy the URL we generate.
- In your Gupshup app settings, set it as the callback URL for inbound messages and for message events.
https://app.evidova.com/ingest/webhooks/gupshup/<your-token>What we read from Gupshup
| type | Which kind of delivery this is. message is the customer talking, message-event is your agent's reply |
|---|---|
| timestamp | When Gupshup received it, to the millisecond. Read the trap below |
| payload.id | The customer's message id |
| payload.source | The customer's number, written as E.164. It is what groups the conversation |
| payload.payload.text | What the customer said. That one field serves plain text, the caption on a file, and the label on an interactive reply |
| payload.type | On a message-event, which step of delivery it is. Only sent counts |
| payload.destination | Who your agent replied to, which is what groups an outbound message |
| payload.gsId, payload.id | Which reply it was. gsId first, because it is Gupshup's own id, but Gupshup drops it from events older than seven days, so the WhatsApp message id is the fallback |
What we ignore, and why
One reply of yours arrives several times over: enqueued, then sent, then delivered, then read. We keep sent and leave the rest, because they carry the same ids and no new words, and one reply has to be one turn. The sent event also carries no text at all, so an outbound turn here records that your agent replied and when, never what it said. An envelope that is neither message nor message-event produces no turns, and its raw body is still kept.
One trap worth knowing
The time on a Gupshup delivery is Gupshup's own receipt time. It is not the moment the customer pressed send, and it is not the moment WhatsApp accepted your agent's reply. We use it as the clock in both directions, because it is the one time every delivery on this platform carries. So a reply time measured here includes whatever Gupshup itself took to pass the message along. Read it as a ceiling on how fast the agent answered rather than as the agent's own figure, and compare it against other Gupshup calls rather than against another platform's numbers.
What Gupshup gives us
| Channel | chat |
|---|---|
| Audio | No |
| Timestamps | Milliseconds, on Gupshup's clock |
| Delivery | Webhook, push |
| Retries | Gupshup 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.