Skip to content

[WEBJS] sendText returns 201 but cold outbound message later fails with ack=-1 / isSendFailure=true while physical phone succeeds #2118

@s-alfahdawi

Description

@s-alfahdawi

Describe the bug

Outbound messages sent via POST /api/sendText are accepted by WAHA with HTTP 201, but the message later fails in WhatsApp Web history with:

  • ack = -1
  • ackName = ERROR
  • _data.isSendFailure = true

The same recipient can receive messages successfully when the exact same WhatsApp account sends from the physical phone app.

This looks related to the existing cold-contact/LID issues, but it is not the same failure mode as GOWS 463: WEBJS accepts the message first, then WhatsApp marks it failed asynchronously.

Environment

{
"version": "2026.4.3",
"engine": "WEBJS",
"tier": "PLUS",
"platform": "linux/x64"
}

Session status is WORKING.

Related issues found before opening

Steps to reproduce

  1. Start a WAHA Plus session using WEBJS.
  2. Confirm session status is WORKING.
  3. Send a message to a new/cold recipient using the physical WhatsApp phone app.
  4. Confirm the recipient receives that physical-phone message.
  5. Call POST /api/sendText through WAHA to the same recipient using a valid @c.us chatId.
  6. WAHA returns HTTP 201.
  7. Read the chat history from WAHA.
  8. The API-sent message is present, but has ack=-1, ackName=ERROR, and _data.isSendFailure=true.

Expected behavior

If the physical phone app can send to the recipient, WAHA WEBJS should also deliver the message or return a synchronous error explaining why it cannot.

At minimum, we need to know whether this is an expected limitation of WhatsApp Web / linked device sending to cold contacts, or a WAHA WEBJS/LID handling issue.

Actual behavior

Physical phone app message succeeds:

{
"ack": 2,
"ackName": "DEVICE",
"from": "@c.us",
"to": "@lid",
"body": "",
"isSendFailure": null
}

WAHA WEBJS API message to the same chat fails after HTTP 201:

{
"ack": -1,
"ackName": "ERROR",
"from": "@lid",
"to": "@lid",
"body": "",
"isSendFailure": true,
"error": null
}

Important observation: the physical phone message appears as sent from the phone-number identity (<phone-number>@c.us), but the WAHA API message appears as sent from a LID identity (<sender-lid>@lid). The LID-sender API messages fail.

API request

POST /api/sendText
Content-Type: application/json
X-Api-Key:

{
"session": "default",
"chatId": "@c.us",
"text": "Test message"
}

Response:

HTTP/1.1 201 Created

The response includes a message id, but the later chat history shows the message failed with ack=-1.

Additional context

We previously tried GOWS for the same production use case. GOWS failed differently for cold/new contacts with server-side errors around LID / cold-contact reachout behavior. WEBJS improved the synchronous API response, but the actual delivery still fails asynchronously.

Questions:

  1. Is this a known WEBJS limitation with cold outbound messages and LID sender identity?
  2. Is there a way to force WEBJS/WAHA to send from the phone-number identity instead of the LID identity?
  3. Is there a recommended engine/build/configuration for reliable outbound messages to new recipients?
  4. Are there additional logs or debug flags we should capture for ack=-1 / _data.isSendFailure=true cases?

I can provide full unredacted message IDs and JIDs privately if needed, but I redacted them here because this is a public issue.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions