Message Acknowledgement

Track message delivery and read status (sent, delivered, read).

Best practices

  • Use this to update message status icons in your custom chat UI.

  • Track performance by measuring the time between 'Sent' and 'Read' acknowledgements.

The Lifecycle of a Signal: Mastering Message Acknowledgements (ACK)

In the high-stakes world of enterprise communication, "Sending" is merely the beginning of a message's journey. Truth exists not in the submission of a payload, but in the verification of its receipt and consumption. The Message Acknowledgement (ACK) webhook is the definitive feedback loop of the Wawp platform, providing your infrastructure with real-time insight into the "Transit State" of every outbound interaction.

This guide provides an architectural deep-dive into the strategic value of delivery tracking, moving beyond simple state changes into the realm of Operational Accountability and Sentiment Attribution.


🏗️ Architectural Philosophy: The Message as a Continuous Variable

Traditional communication channels, like email or SMS, are often "Fire and Forget." Once the message leaves your server, its status becomes a black box. WhatsApp, via Wawp, transforms this into a Monitored Transit Lifecycle.

1. The Hierarchy of Verification

An ACK event is not a static update; it is a progression through a hierarchy of trust:

  • ACK_SENT (Level 1): The validation that the message has successfully escaped your instance and reached Meta's global infrastructure. This is the first "Safety Check," confirming that your instance is healthy and your API credentials are valid.
  • ACK_DELIVERED (Level 2): The "Double Tick" moment. This confirms that the recipient's device is online and has successfully downloaded the payload. In a logistical or emergency context, this is the most critical signal—it confirms the bridge has been built.
  • ACK_READ (Level 3): The "Blue Tick" phenomenon. This represents a human event—the recipient has actively opened the chat window. For sales and support teams, this is the "Moment of Perception," the signal that the customer is now consciously engaged with your brand.

2. Handling the Asynchronous Nature of ACKs

Acknowledgements frequently arrive out of order or at significantly different intervals. For example, a message may move from SENT to READ instantly if the user has the chat open, or it may stay in a SENT state for hours if the user is on a plane. A professional architecture handles these events as Deterministic Idempotent Updates—your database should only update a message's status to a "Higher" level and never revert to a "Lower" one, regardless of network retry order.


🚀 Strategic Use Cases: Powering Data-Driven Operations

Mastering the ACK stream allows you to measure and optimize the "Pulse" of your business communication.

1. SLA Monitoring and "Last-Mile" Accountability

For customer support organizations, the "Initial Response Time" (IRT) is a key metric. By using the Message ACK webhook, you can calculate a much more precise metric: the "Perceived Response Time". By measuring the gap between when your agent sent the message and when the [ACK_READ] webhook arrived, you can identify if your customers are actually consuming your support advice or if your messages are being ignored.

2. The "Automated Second-Chance" (Failover Logic)

If a high-priority notification (e.g., a fraud alert or a delivery update) stays in the [ACK_SENT] state for more than 5 minutes without reaching [ACK_DELIVERED], your system can trigger a "Cross-Channel Escalation." It can automatically resend the alert via SMS or initiate an automated voice call. This "Smart Redundancy" ensures that critical information is never lost due to a user's temporary lack of data connectivity on WhatsApp.

3. Attribution and Engagement Scoring

In marketing campaigns, a "Read" is as valuable as a "Click." By correlating [ACK_READ] events with your broadcast lists, you can build an "Engagement Score" for every contact in your CRM. Users who consistently "Blue Tick" your messages within 60 seconds of receipt are your "Highly Active" leads and should be prioritized for your most specialized, human-led sales outreach.


🛡️ Administrative Mandate: Protecting the "Trust Chain"

Consistency in status updates is more than a technical requirement; it is a brand promise.

1. The "Sent-to-Read" Velocity Metric

Track the "Velocity" of your acknowledgements. A sudden increase in the time between SENT and DELIVERED across your entire instance fleet often indicates a regional network issue or a temporary degradation of the Meta API. By monitoring these durations in aggregate, your technical team can act as a "Early Warning System," notifying your support agents of potential delays before they start receiving complaints.

2. Privacy and the "Silent Reader"

It is strategically important to recognize that some WhatsApp users choose to disable "Read Receipts" in their privacy settings. In these cases, a message will move to [ACK_DELIVERED] but never to [ACK_READ]. A sophisticated architecture doesn't treat this as a "Failure." Instead, it looks for "Implicit Acknowledgements"—if a user replies to the message, you can logically infer they read it, even if the blue tick never arrived.


🛡️ Operational Best Practices: Designing for High-Volume Status Updates

  • Batching Database Writes: In a high-volume instance sending 100,000 messages per day, you will receive at least 300,000 ACK webhooks (Sent, Delivered, Read). Do not perform a synchronous database write for every single one. Use a message queue and a "Buffered Writer" to update your message statuses in batches, significantly reducing the I/O load on your primary database.
  • The "Final State" Rule: Once a message reaches [ACK_READ], it has reached its terminal state. Any further webhooks for that Message ID (e.g., retries of the DELIVERED state) should be discarded immediately at the ingestion layer to save processing power.
  • UI Synchronization (WebSockets): If you provide a custom chat UI for your agents, use the ACK webhook to trigger a WebSocket push to the agent's browser. This allows the blue ticks to appear in their UI in real-time, providing the "Snappy," responsive feel that users expect from a modern messaging application.

⚙️ Engineering Best Practices: The Validation Loop

  1. Monitor "Out-of-Order" Delivery: In mobile networking, packets can take unpredictable paths. Your logic should always include a "Strict Progression" check: only update SENT to DELIVERED, and DELIVERED to READ.
  2. Verify Message Ownership: The ACK payload includes the chatId. Ensure this matches the expected recipient in your local records before updating the status, providing a dual-layer of data integrity.
  3. Coordinate with Revocations: If you receive a Message Revoked event, any subsequent ACKs for that message ID should be handled with care, as the original "Read" sentiment may no longer be relevant to the current conversation state.

🎯 Conclusion: Mastering the Art of the Loop-Closure

The Message Acknowledgement Webhook is the "Eyes and Ears" of your outbound strategy. By treating every status update as a data point in a continuous lifecycle, you move your business from "Blind Distribution" to Accountable Engagement. You build systems that understand not just what was said, but what was heard. In the world of Wawp, ACKs are the foundation of trust, the pulse of performance, and the key to a truly "Reactive" enterprise.

Expected Responses

Explore all possible responses and outcomes from the server. We have documented each status code with data examples to make success and error handling easier.

Webhook Payload Example
application/json
string *
number *
string *
object *
string *
string *
object *
object *

Example

{
"id": "evt_01...",
"timestamp": 1634567890123,
"session": "default",
"metadata": {
  "user.id": "123",
  "user.email": "email@example.com"
  },
"engine": "WEBJS",
"event": "message.ack",
"payload": {
  "id": "true_11111111111@c.us_...",
  "ack": 3,
  "ackName": "READ",
  "chatId": "11111111111@c.us"
  },
"me": {
  "id": "11111111111@c.us",
  "lid": "123@lid",
  "pushName": "Instance"
  }
}

Command Palette

Search for a command to run...