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

  1. 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.
  2. Copy the URL we generate.
  3. 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>
Gupshup does not sign what it sends, so the token in the path is what protects this URL. Treat it like a password: anyone who has it can post to your workspace. Rotate it from Setup if it leaks.

What we read from Gupshup

typeWhich kind of delivery this is. message is the customer talking, message-event is your agent's reply
timestampWhen Gupshup received it, to the millisecond. Read the trap below
payload.idThe customer's message id
payload.sourceThe customer's number, written as E.164. It is what groups the conversation
payload.payload.textWhat the customer said. That one field serves plain text, the caption on a file, and the label on an interactive reply
payload.typeOn a message-event, which step of delivery it is. Only sent counts
payload.destinationWho your agent replied to, which is what groups an outbound message
payload.gsId, payload.idWhich 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

Channelchat
AudioNo
TimestampsMilliseconds, on Gupshup's clock
DeliveryWebhook, push
RetriesGupshup retries

Read next

This page as markdown