feat: add automatic CTWA (Click-to-WhatsApp) ads message recovery

Messages from Facebook/Instagram ads (Click-to-WhatsApp) don't arrive on
linked devices because Meta's ads endpoint doesn't encrypt for multi-device.
They arrive as "Message absent from node" placeholders.

This change automatically requests the message from the primary phone via
PDO (Peer Data Operation) when a CTWA placeholder is detected.

Changes:
- Add enableCTWARecovery config option (default: true)
- Trigger requestPlaceholderResend() for "Message absent from node" errors
- Add Prometheus metrics for CTWA recovery tracking
- Add comprehensive unit tests for CTWA recovery functionality

Resolves: https://github.com/WhiskeySockets/Baileys/issues/1723
Resolves: https://github.com/WhiskeySockets/Baileys/issues/1034
This commit is contained in:
Claude
2026-01-21 14:56:39 +00:00
parent af6f2eede7
commit 5a36ae20d4
6 changed files with 362 additions and 6 deletions
+15
View File
@@ -107,6 +107,21 @@ export type SocketConfig = {
/** Enable recent message caching for retry handling */
enableRecentMessageCache: boolean
/**
* Enable automatic recovery of Click-to-WhatsApp (CTWA) ads messages.
*
* When enabled, messages from Facebook/Instagram ads that arrive as
* "placeholder messages" (Message absent from node) will be automatically
* recovered by requesting resend from the primary phone device.
*
* This is necessary because Meta's ads endpoint doesn't encrypt messages
* for linked devices - they only arrive on the primary phone.
*
* @default true
* @see https://github.com/WhiskeySockets/Baileys/issues/1723
*/
enableCTWARecovery: boolean
/**
* Returns if a jid should be ignored,
* no event for that jid will be triggered.