Typing & read receipts
Typing indicators & read receipts
Mark an inbound message read (the blue double-tick the customer sees) and optionally show a typing… indicator while you compose a reply — both from a single call. This makes an automated conversation feel like a real one.
Both actions use POST /messages/read and need the whatsapp scope on your app key.
Mark an inbound message read
Send the wamid of the inbound message you want to acknowledge. The customer’s single grey ticks turn to blue double ticks.
curl -X POST https://api.telenow.ai/api/app-whatsapp/messages/read \
-H "Authorization: Bearer vai_app_…" \
-H "Content-Type: application/json" \
-d '{
"channelId": "b1e2c3d4-…",
"wamid": "wamid.HBgLMTQxNTU1NTAxMDAVAgAREg…"
}'
{ "success": true, "data": { "success": true } }
| Field | Type | Notes |
|---|---|---|
channelId | string | Required. The channel that received the message (channel_id also accepted) |
wamid | string | Required. The WhatsApp id of the inbound message — the wamid from its whatsapp.message.received event or /threads/{id}/messages |
typing | bool | Optional. Also show a typing indicator (see below) |
You mark read against the message id you got when the message arrived, so a typical bot calls this the moment it receives a whatsapp.message.received webhook.
Show a typing indicator
Add "typing": true to the same call. This marks the message read and shows the customer a typing… bubble — a good move right after you receive a message and before you send a reply that takes a moment to generate.
curl -X POST https://api.telenow.ai/api/app-whatsapp/messages/read \
-H "Authorization: Bearer vai_app_…" \
-H "Content-Type: application/json" \
-d '{
"channelId": "b1e2c3d4-…",
"wamid": "wamid.HBgLMTQxNTU1NTAxMDAVAgAREg…",
"typing": true
}'
{ "success": true, "data": { "success": true } }
The indicator auto-dismisses — it clears as soon as you send your reply, or after roughly 25 seconds if you don’t, whichever comes first. There’s no separate “stop typing” call; just send your message. If your reply will take longer than ~25 s, call again to re-arm it.
The typing indicator is tied to reading an inbound message — you can’t show typing out of the blue. Pass a real inbound
wamidand settyping: true.
In the dashboard
The shared inbox does both of these for you:
- Opening a thread auto-marks it read — the newest inbound message is acknowledged and the customer sees blue ticks.
- When the AI agent starts composing a reply to an inbound message, it auto-shows the typing indicator, then clears it when the reply is sent.
So you only need /messages/read when you’re driving conversations programmatically (a custom bot or backend). Note that reading messages via the read API — GET /threads/{id}/messages — does not send read receipts and does not clear the unread badge; only this endpoint (or opening the thread in the dashboard) does. See Reading conversations.
Endpoint reference
| Method | Path | Scope | Body | Returns |
|---|---|---|---|---|
POST | /api/app-whatsapp/messages/read | whatsapp | { channelId, wamid, typing? } | { success: true } |
The dashboard equivalent is POST /api/orgs/{orgId}/whatsapp-hub/… with a user JWT; the read receipt is issued the same way.
Related
- Reading conversations — list threads and paginate message history.
- Webhooks & events — where inbound
wamids arrive. - WhatsApp API · WhatsApp product guide.