Engineering

Why WhatsApp read receipts lie to your dashboard

WhatsApp read receipts show how far a message travelled. They don't show what the customer did, and a dashboard that treats the two as the same will mislead you.

One grey tick, two grey ticks and two blue ticks are stops on the way. The customer's reply is somewhere the track does not go.
One grey tick, two grey ticks and two blue ticks are stops on the way. The customer's reply is somewhere the track does not go.
The short version

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.

MarkWhat WhatsApp saysWhat it does not tell you
One grey tick
sent in ChatRail
The message was sent.That any phone has it yet.
Two grey ticks
delivered
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 ticks
read
The recipient read it.That they understood it, agreed to it or will act on it.

Seven ways the ticks mislead a dashboard

A dashboard showing two blue ticks and a rising chart, beside a room where a phone and an unopened parcel sit on a table as a person walks away

The first five come from the same WhatsApp page. The last two are how ChatRail records what WhatsApp reports.

What happensWhat your dashboard showsWhy
The customer turned read receipts offNever read, even if they read every messageIt is a privacy setting on their phone.
Your own number has read receipts offNo read from anyone in one-to-one chatsWhatsApp hides other people's receipts from an account that hides its own.
They read it in the notificationStuck at deliveredA receipt needs the chat to be opened.
It is your first message to themMay never show readWhatsApp says a receipt might not be sent the first time someone gets your message.
You sent it to a groupOne status for the whole groupWhatsApp turns the ticks blue only when everyone has read it. ChatRail keeps one status per message, not one per member.
You sent a voice noteread, whether or not it was playedWhatsApp tells seen and played apart. ChatRail records both as read.
You edited the message after it was readStill readWhatsApp 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.

message.read
{
  "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 sent never replaces a read that got there first.
  • A step can be skipped. If read arrives before delivered, you get no message.delivered event and delivered_at stays empty. Count a message as delivered when its status is delivered or read.

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 knowUseDo not use
Is a number or route broken?message.failed, and messages that never reach deliveredThe read rate
Did it reach the customer's device?Status delivered or readdelivered_at on its own
Did the customer see it?read, as a lower limitread 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.

Who wrote this, and what we checked

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.

Related reading

Sent vs delivered vs read →The short guide to message states.Match a reply to its alert →Know which message a customer is answering.Webhook events →Every event ChatRail sends, with signatures and retries.API reference →Every endpoint, generated from the API itself.
BUILD IT

Measure replies, not ticks.

ChatRail sends every status change as a webhook, and attaches the alert a customer is answering to their reply. Start on the free Sandbox: one number, 500 messages a month.

Start free