Skip to content

[NOWEB] message.reaction webhook no longer includes remoteJidAlt (phone number resolution broken) #2010

Description

@williamsalathiel

Describe the bug

After upgrading to WAHA 2026.3+ with NOWEB engine, message.reaction webhooks no longer include remoteJidAlt in the payload. This prevents resolving the phone number from the LID, causing duplicate external user records and database constraint violations in integrations.

Scenario:

  1. Reaction webhook arrives with only from: "132375270973606@lid" (no phone number)
  2. Integration creates a user record with LID only
  3. Text message webhook arrives with same LID and remoteJidAlt: "551999999999@s.whatsapp.net"
  4. Integration finds existing record by phone number, tries to update LID → unique constraint violation because another record already has that LID

Result: Unhandled rejection: duplicate key value violates unique constraint (PostgreSQL 23505)

Version

{
  "version": "2026.3.1",
  "engine": "NOWEB",
  "tier": "PLUS"
}

Steps To Reproduce

  1. Send a text message to the WhatsApp number (generates record with phoneNumber as externalId)
  2. Send a reaction to a previous message (webhook arrives with only @lid, no remoteJidAlt)
  3. Send another text message (webhook arrives with both @lid and remoteJidAlt)
  4. Integration attempts to update external_id → constraint violation

Expected behavior

Reaction webhooks should consistently include remoteJidAlt (or another field with the phone number) when available, matching the behavior of message.any events. This allows integrations to reliably identify users without requiring NOWEB Store to be enabled.

Requests - Responses

Reaction webhook (missing phone number):

{
  "event": "message.reaction",
  "payload": {
    "from": "132375270973606@lid",
    "fromMe": false,
    "reaction": {
      "messageId": "true_132375270973606@lid_3EB0DBFF7CB7F0AB252BEE",
      "text": "❤️"
    }
  },
  "_data": {
    "key": {
      "remoteJid": "132375270973606@lid",
      "fromMe": false,
      "id": "ACC4C4E47ABA8D4EFC4B8A6DCD55CE7C"
    }
  }
}

Message webhook (includes phone number via remoteJidAlt):

{
  "event": "message.any",
  "payload": {
    "from": "132375270973606@lid",
    "body": "Perfeito!! Obrigada 🤍"
  },
  "_data": {
    "key": {
      "remoteJid": "132375270973606@lid",
      "remoteJidAlt": "551999999999@s.whatsapp.net",
      "fromMe": false,
      "id": "ACF32B686EDEE2C818C2BEEDED27A0B3"
    }
  }
}

Docker Logs

Not applicable — issue is in webhook payload structure.

Additional context

  • Workaround considered: Using /api/{session}/lids/{lid} endpoint to resolve phone number. However, this requires enabling NOWEB Store which adds +10-50MB storage per session and I/O overhead.
  • Previous behavior: Earlier versions included remoteJidAlt in reaction webhooks.
  • Impact: This affects all integrations tracking users by phone number when receiving reaction events.

patron:PRO

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions