WABridges

Typing, presence and receipts

The small signals that make a bot feel like a person: typing indicators, online state, read receipts, and knowing when the other side is typing.

Show that you are typing

If your reply takes a couple of seconds - a model call, a database lookup - send composing first. The recipient sees "typing…" and the wait stops feeling like nothing happened.

Send paused to clear it, though sending the message clears it too. The indicator also expires on its own, so a crashed handler will not leave someone watching a bot type forever.

curl
curl -X POST https://wabridges.com/api/instances/user-123/proxy/send/typing \
  -H "Authorization: Bearer $WA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"chat": "15550001234", "state": "composing"}'
and to stop
{"chat": "15550001234", "state": "paused"}

Marking messages read

Read receipts are sent per message, by id. In a one-to-one chat the chat is enough; in a group you also name the sender, because the receipt is about that person's message.

Whether to send them at all is a product decision. Marking read the instant your webhook fires tells people a machine is reading, which is honest but sets an expectation of an instant answer.

a one-to-one chat
{"chat": "15550001234@s.whatsapp.net"}
in a group
{
  "chat": "120363000000000001@g.us",
  "sender": "15550001234@s.whatsapp.net"
}

Your own online state

A bridge can appear online or offline. available shows the number as online while your service is up; unavailable keeps it dark.

Staying permanently available tells everyone the account is always online, which is a strange look for a support number that only answers office hours. Set it deliberately.

curl
curl -X POST https://wabridges.com/api/instances/user-123/proxy/presence \
  -H "Authorization: Bearer $WA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"state": "available"}'

Seeing when they type

Typing and presence events for other people are opt-in per contact. Subscribe once, and from then on that contact's typing and presence events arrive on your webhook.

A typing event carries mode: text when they are typing, voice when they are recording a voice note. Useful if you want to hold a reply while someone is clearly still composing.

curl
curl -X POST https://wabridges.com/api/instances/user-123/proxy/presence/subscribe \
  -H "Authorization: Bearer $WA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"chat": "15550001234"}'

Without a subscription these events are simply never delivered - it is not a bug in your handler. Subscribe only to the contacts you actually act on, or a busy number will fill your webhook with keystrokes.

Something here not matching what you see? Write to us - a person answers.