Skip to content

[GOWS] Error 463 on sendText — tctoken lifecycle not implemented in GOWS engine #2050

@joaoAPina

Description

@joaoAPina

Describe the bug

Outbound messages sent via POST /api/sendText fail with HTTP 500 / error 463 when using the GOWS engine for specific contacts, even though the session is WORKING, inbound messages arrive normally, and messages sent directly from the physical device succeed.

We run 30 active WAHA instances (GOWS engine, different phone numbers). This is the first session we have ever seen this issue on. The failure affected 14 different contacts in that single session — all returning the same error 463 — while other instances continued operating normally. The issue occurs regardless of chatId format (@c.us or @lid).


Version

{
  "version": "2026.3.2",
  "engine": "GOWS",
  "tier": "PLUS"
}

Steps

To Reproduce:

  1. Start a WAHA session using the GOWS engine — session reaches WORKING state
  2. Confirm inbound messages are being received normally
  3. Send a message from the physical device — succeeds
  4. Call POST /api/sendText with a valid session and chatId
  5. Receive HTTP 500 with "2 UNKNOWN: server returned error 463"

Expected behavior

POST /api/sendText should succeed for any contact reachable from the device, matching the behavior of the physical device and the WEBJS engine.


Requests - Responses

Request:

POST /api/sendText
{
  "session": "<session-id>",
  "chatId": "557398669599@c.us",
  "text": "Hello"
}

Response (HTTP 500):

{
  "error": "2 UNKNOWN: server returned error 463"
}

Tested with both @c.us and @lid chatId formats — both return the same error 463.


Docker Logs

Failed to send text message | status=500 | errorMessage="Request failed with status code 500" | session=<session-id> | chatId=557398669599@c.us

Screenshots

Session status in WAHA dashboard:

  • Status: WORKING
  • Account: authenticated and active
  • Server: WAHA

Additional context

After investigating, we believe this is caused by the absence of the tctoken lifecycle in the GOWS engine.

WhatsApp now requires a valid privacy token (tctoken) in every outbound DM. When the token is missing or expired, the server rejects the message with error 463 (NackCallerReachoutTimelocked). This is not a session issue — the session is WORKING, receives messages, and the physical device sends without problems.

This was addressed in whatsmeow via:

  • tulir/whatsmeow#1081 — full tctoken lifecycle: proactive fetch before send, 28-day expiration window, async token issuance after send
  • tulir/whatsmeow#1104 — diagnostic APIs for account-level capping and reachout timelock

WEBJS does not reproduce this issue, suggesting the fix is already present there. GOWS appears to be missing the equivalent implementation.

Could the GOWS engine receive parity with the tctoken handling from whatsmeow PR #1081?

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions