A WhatsApp read receipt means someone opened the chat, and nothing more. It can be missing when the message was read, and present when nobody acted on it. Use the ticks to find delivery problems, and use replies to measure what customers did.
What each tick means
WhatsApp's help page, How to check read receipts, defines three marks. Each one says where the message got to. None of them says what the person did next.
| Mark | What WhatsApp says | What it does not tell you |
|---|---|---|
One grey ticksent in ChatRail | The message was sent. | That any phone has it yet. |
Two grey ticksdelivered | It reached the recipient's phone or one of their linked devices. | That a person saw it. A laptop left open on WhatsApp Web counts. |
Two blue ticksread | The recipient read it. | That they understood it, agreed to it or will act on it. |
Seven ways the ticks mislead a dashboard

The first five come from the same WhatsApp page. The last two are how ChatRail records what WhatsApp reports.
| What happens | What your dashboard shows | Why |
|---|---|---|
| The customer turned read receipts off | Never read, even if they read every message | It is a privacy setting on their phone. |
| Your own number has read receipts off | No read from anyone in one-to-one chats | WhatsApp hides other people's receipts from an account that hides its own. |
| They read it in the notification | Stuck at delivered | A receipt needs the chat to be opened. |
| It is your first message to them | May never show read | WhatsApp says a receipt might not be sent the first time someone gets your message. |
| You sent it to a group | One status for the whole group | WhatsApp turns the ticks blue only when everyone has read it. ChatRail keeps one status per message, not one per member. |
| You sent a voice note | read, whether or not it was played | WhatsApp tells seen and played apart. ChatRail records both as read. |
| You edited the message after it was read | Still read | WhatsApp resets its receipts on an edit. ChatRail's status never moves back, so that read was of the old text. |
So read is a floor, not a count. The real number of people who saw your message is higher, and you cannot tell by how much.
How ChatRail reports them
Each change arrives as a webhook: message.sent, message.delivered, message.read or message.failed. The same times are on the message as sent_at, delivered_at and read_at.
{
"id": "whd_9f2c81a0e34b4d1e8c5a7b93f0d2e611",
"type": "message.read",
"created_at": "2026-10-13T09:14:03.118Z",
"workspace_id": "019bf4a1-0000-7000-8000-000000000000",
"data": {
"message_id": "019bf4a9-0000-7000-8000-00000000003f",
"connection": "main",
"status": "read",
"occurred_at": "2026-10-13T09:14:02.000Z"
}
}Two rules decide what you receive:
- The status only moves forward. WhatsApp's updates can arrive out of order. A late
sentnever replaces areadthat got there first. - A step can be skipped. If
readarrives beforedelivered, you get nomessage.deliveredevent anddelivered_atstays empty. Count a message as delivered when its status isdeliveredorread.
What to measure instead
Use each signal for the one question it can answer. Take an order confirmation sent to a cash-on-delivery customer: blue ticks do not mean the order is confirmed. Their reply does.
| You want to know | Use | Do not use |
|---|---|---|
| Is a number or route broken? | message.failed, and messages that never reach delivered | The read rate |
| Did it reach the customer's device? | Status delivered or read | delivered_at on its own |
| Did the customer see it? | read, as a lower limit | read as an exact count |
| Did the customer act? | Their reply (message.received, with the alert it answers attached) or a poll vote (poll.vote) | Any tick |
Never treat a read receipt as consent, confirmation or proof that a task is done. If you need one of those, ask a question the customer has to answer.
ChatRail is a WhatsApp API for developers. It connects through WhatsApp Linked Devices, not Meta's official API. What WhatsApp does is taken from its help page, read on 13 October 2026. What ChatRail does is taken from our code the same day. We have not measured how often each case happens, or what a group's status means in practice.
