You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Outbound messages to personal contacts via PN JID never delivered on LID-migrated account — @lid addressing works, @s.whatsapp.net silently fails #2629
Yes, I have searched for similar issues on GitHub and found none.
What did you do?
On a WhatsApp account fully migrated to LID addressing (inbound messages arrive with addressingMode: "lid", remoteJid: <id>@lid, remoteJidAlt: <phone>@s.whatsapp.net),
I sent outbound messages to personal contacts using the standard endpoint:
POST /message/sendText/{instance}
{"number": "62XXXXXXXXXX", "text": "test"}
To isolate the problem I systematically tested:
Multiple recipient numbers addressed by phone number (PN) — via API directly and via Chatwoot integration replies
The same recipient addressed as <lid>@lid — e.g. {"number": "1584XXXXXXXXXX@lid"}
Full session re-pair on homolog: logout, deleted the Session row from Postgres, fresh QR pairing — to rule out stale session state
POST /chat/whatsappNumbers on the affected numbers to look for a PN→LID resolution path
What did you expect?
Messages sent to {"number": "<phone>"} should be delivered to the recipient's device.
The send path should resolve PN → LID before dispatching (the mapping already exists
internally — OnWhatsappCache stores the lid, and inbound events carry both JIDs),
the same way the official WhatsApp client on the very same account does.
What did you observe instead of what you expected?
Path
v2.3.7
2.4.0-rc2
homolog
homolog + fresh session
Inbound (personal & group)
✅
✅
✅
✅
Outbound group (@g.us)
✅
✅
✅
✅
Outbound personal — PN (@s.whatsapp.net)
❌
❌
❌
❌
Outbound personal — @lid
✅
(not retested)
(not retested)
(not retested)
For the PN path: the API returns HTTP 201 with status: "PENDING", no errors in
logs (LOG_LEVEL=CLIENT,ERROR,INFO), the status never progresses past PENDING, and the
message never arrives on the recipient's device. Consistent across all recipient
numbers tested.
Sending to the exact same contact as <lid>@lid is delivered successfully.
POST /chat/whatsappNumbers returns exists: true for these undeliverable numbers and
does not include any lid field — so there is also no public API path to resolve
PN → LID as a workaround.
Impact: Chatwoot integration replies to personal contacts are 100% broken, since
Chatwoot always dispatches to the PN identifier. Replying from a LID-keyed conversation
works, which creates split-brain duplicate contacts (inbound lands on the PN contact,
outbound only works from the LID contact).
Screenshots/Videos
No response
Which version of the API are you using?
Reproduced on: 2.3.7, 2.4.0 (image tag 2.4.0-rc2), 2.4.0 (image tag homolog,
whatsappWebVersion 2.3000.1042742319)
No ERROR entries appear in the container logs for these sends; the transaction is
treated as completed. Inbound event on the same account showing the LID pair:
The official WhatsApp app logged into the same account sends to these contacts
normally, so the account itself is healthy — this is a send-path addressing issue.
Suggested fix: in the send path, consult OnWhatsappCache / contact store for a known
lid mapping of the target PN and dispatch to the @lid JID when present. Exposing the
lid in the /chat/whatsappNumbers response would also enable client-side workarounds.
Happy to run diagnostic builds or provide further logs privately.
Welcome!
What did you do?
On a WhatsApp account fully migrated to LID addressing (inbound messages arrive with
addressingMode: "lid",remoteJid: <id>@lid,remoteJidAlt: <phone>@s.whatsapp.net),I sent outbound messages to personal contacts using the standard endpoint:
POST /message/sendText/{instance}
{"number": "62XXXXXXXXXX", "text": "test"}
To isolate the problem I systematically tested:
<lid>@lid— e.g.{"number": "1584XXXXXXXXXX@lid"}@g.us) — via API and Chatwootevoapicloudimages), including builds containing fix fix(whatsapp): allow @lid contacts to bypass onWhatsApp validation #2544Sessionrow from Postgres, fresh QR pairing — to rule out stale session statePOST /chat/whatsappNumberson the affected numbers to look for a PN→LID resolution pathWhat did you expect?
Messages sent to
{"number": "<phone>"}should be delivered to the recipient's device.The send path should resolve PN → LID before dispatching (the mapping already exists
internally — OnWhatsappCache stores the lid, and inbound events carry both JIDs),
the same way the official WhatsApp client on the very same account does.
What did you observe instead of what you expected?
@s.whatsapp.net)@lidFor the PN path: the API returns HTTP 201 with
status: "PENDING", no errors inlogs (LOG_LEVEL=CLIENT,ERROR,INFO), the status never progresses past PENDING, and the
message never arrives on the recipient's device. Consistent across all recipient
numbers tested.
Sending to the exact same contact as
<lid>@lidis delivered successfully.POST /chat/whatsappNumbersreturnsexists: truefor these undeliverable numbers anddoes not include any
lidfield — so there is also no public API path to resolvePN → LID as a workaround.
Impact: Chatwoot integration replies to personal contacts are 100% broken, since
Chatwoot always dispatches to the PN identifier. Replying from a LID-keyed conversation
works, which creates split-brain duplicate contacts (inbound lands on the PN contact,
outbound only works from the LID contact).
Screenshots/Videos
No response
Which version of the API are you using?
Reproduced on: 2.3.7, 2.4.0 (image tag 2.4.0-rc2), 2.4.0 (image tag homolog,
whatsappWebVersion 2.3000.1042742319)
What is your environment?
Windows
Other environment specifications
If applicable, paste the log output
Send request response (PN path — accepted, never delivered):
{"key":{"remoteJid":"62XXXXXXXXXX@s.whatsapp.net","fromMe":true,"id":"3EB0..."}, "pushName":"Você","status":"PENDING","message":{"conversation":"test"}, "messageType":"conversation","source":"web"}No ERROR entries appear in the container logs for these sends; the transaction is
treated as completed. Inbound event on the same account showing the LID pair:
Additional Notes
normally, so the account itself is healthy — this is a send-path addressing issue.
builds and unblocks sending to @lid JIDs, but does not add PN → LID resolution
before sending — which appears to be the missing piece.
lid mapping of the target PN and dispatch to the @lid JID when present. Exposing the
lid in the /chat/whatsappNumbers response would also enable client-side workarounds.