Mark As Read
Marks a WhatsApp message as read via the WhatsApp Business Cloud API. This updates the message status and displays read receipts to the sender.
Common Properties
- Name - The custom name of the node.
- Color - The custom color of the node.
- Delay Before (sec) - Waits in seconds before executing the node.
- Delay After (sec) - Waits in seconds after executing node.
- Continue On Error - Automation will continue regardless of any error. The default value is false.
If the ContinueOnError property is true, no error is caught when the project is executed, even if a Catch node is used.
Inputs
- Phone Number ID - WhatsApp Business Phone Number ID from Meta Developer Portal.
- Message ID - The WhatsApp message ID to mark as read (format:
wamid.xxx...).
Options
- API Version - Meta Graph API version. Default is
21.0. - Access Token - WhatsApp Cloud API Access Token credential (required).
Output
- Response - The complete API response object containing the operation status.
How It Works
The Mark As Read node updates a message's read status. When executed, the node:
- Validates all required inputs
- Retrieves the access token from the credential
- Constructs the read status payload with message ID
- Sends a POST request to the WhatsApp API
- Returns the API response confirming the status update
Requirements
- A WhatsApp Business Account in Meta Developer Portal
- Access Token with appropriate permissions
- Valid message ID from a received message
- The message must have been sent to your business number
Error Handling
The node will return specific errors in the following cases:
- Empty or invalid Phone Number ID
- Empty or invalid Message ID
- Message ID not found
- Message ID format invalid
- Invalid access token
- Network connectivity issues
Getting Message IDs
Message IDs are obtained from the Receive Events node when messages are received:
From Receive Events Output:
{
"messageId": "wamid.HBgNMTIzNDU2Nzg5MAAVAQAS...",
"from": "14155551234",
"messageBody": "Hello",
...
}
Example: Basic Usage
Inputs:
- Phone Number ID:
123456789012345 - Message ID:
wamid.HBgNMTIzNDU2Nzg5MAAVAQAS...
Result: The message is marked as read, and the sender sees blue checkmarks.
Example: Auto-Reply Flow
Flow:
- Receive Events node captures incoming message
- Get Message ID from output
- Send Text Message node sends auto-reply
- Mark As Read node marks original message as read
// From Receive Events
const messageId = event.messageId;
const from = event.from;
// Send reply
await sendTextMessage({
toPhoneNumber: from,
messageText: "Thank you for your message. We'll get back to you soon."
});
// Mark as read
await markAsRead({
messageId: messageId
});
Example: Conditional Read Receipts
Flow:
- Receive Events captures message
- Check message type or content
- Only mark as read if certain conditions are met
if (messageType === "text" && messageBody.includes("urgent")) {
// Mark urgent messages as read immediately
await markAsRead({messageId});
}
Usage Notes
- Message IDs have the format
wamid.xxxxx... - Marking a message as read displays blue checkmarks to the sender
- You can only mark messages sent to your business number
- Message IDs are unique and valid indefinitely
- Read receipts respect user privacy settings
- Multiple calls with the same message ID are safe (idempotent)
Tips for RPA Developers
- Store message IDs for later processing
- Mark messages as read after successfully processing them
- Use read receipts to acknowledge message receipt
- Implement read status tracking in your database
- Consider user expectations (mark as read after actual processing)
- Don't mark as read immediately if message requires manual review
- Log read status operations for audit
- Handle errors gracefully (message may already be marked)
Common Use Cases
Automated Response System:
1. Receive message
2. Send automated response
3. Mark original message as read
4. Log interaction
Message Queue Processing:
1. Receive message and store in queue
2. Process message from queue
3. Send response
4. Mark message as read
5. Remove from queue
Human Handoff:
1. Receive message
2. Analyze content
3. If automation can handle:
- Send response
- Mark as read
4. If requires human:
- Don't mark as read (signals unread to agent)
- Route to agent dashboard
Priority Handling:
1. Receive message
2. Check priority/urgency
3. High priority:
- Process immediately
- Mark as read
4. Low priority:
- Add to queue
- Mark as read later after processing
Read Receipt Behavior
What happens when you mark a message as read:
- Sender sees double blue checkmarks (if they have read receipts enabled)
- Message status changes to "read" in WhatsApp
- Timestamp of read status is recorded
- No notification sent to sender (silent update)
What doesn't happen:
- No message is sent to the user
- No notification sound or vibration
- The user's chat doesn't move to top of list
Best Practices
- Mark messages as read after processing them
- Don't mark as read immediately for complex requests
- Use read receipts as acknowledgment of receipt
- Respect user privacy (some users disable read receipts)
- Implement retry logic for network failures
- Log all read status operations
- Consider business hours before marking as read
- Use in combination with auto-replies
- Don't over-use (mark only when appropriate)
- Test with real WhatsApp accounts
Common Errors and Solutions
Error: Invalid Message ID
- Verify message ID format (should start with
wamid.) - Ensure you're using the full message ID
- Check for truncation or encoding issues
Error: Message not found
- Message ID may be incorrect
- Message may not be sent to your business number
- Verify the message exists in your account
Error: Already marked as read
- This is not really an error (operation is idempotent)
- You can safely ignore this
- Message was already marked previously
Integration Patterns
With CRM System:
// Receive message
const message = await receiveEvent();
// Store in CRM
await crm.createTicket({
from: message.from,
content: message.messageBody,
messageId: message.messageId
});
// Mark as read
await markAsRead({
messageId: message.messageId
});
With Analytics:
// Mark as read
await markAsRead({messageId});
// Track in analytics
analytics.track('message_read', {
messageId: messageId,
from: from,
timestamp: new Date(),
processingTime: endTime - startTime
});
Performance Considerations
- Marking as read is a lightweight operation
- Safe to call multiple times (idempotent)
- No rate limits specific to read receipts
- Can be called asynchronously
- Consider batching in high-volume scenarios
Privacy and Compliance
- Read receipts are visible to message senders
- Respect user privacy settings
- Some users may have read receipts disabled
- Follow data protection regulations
- Log read operations for audit trails
- Consider opt-out mechanisms for automated read receipts