github aldinokemal/go-whatsapp-web-multidevice v8.8.0

3 hours ago

What's New in v8.8.0

🚀 Minor Release: Chatwoot Evolution-API Parity, Session-Aware Webhooks, Honest 463 Handling & Media URL Fixes

This release lands a major Chatwoot integration overhaul (auto-provisioning, edits/deletes, conversation reopen, a durable retry queue, and device-scoped routing), adds session correlation to webhooks plus JIDs to app responses, stops masking WhatsApp's server-side 463 reach-out timelock behind a futile client retry, and fixes downloaded-media URLs and chat-list name fallbacks.


✨ New Features

Chatwoot Evolution-API Parity

  • Auto-provisions (or reuses) an API-channel inbox on startup and resolves its id automatically (CHATWOOT_AUTO_CREATE, CHATWOOT_INBOX_NAME, CHATWOOT_WEBHOOK_URL)
  • Forwards message edits, revokes, and deletes to Chatwoot as threaded notes, with bidirectional WhatsApp↔Chatwoot markdown and reply/reaction threading via the WAID: source-id convention
  • Reopens/reuses a conversation for returning contacts across both the REST and direct-DB import paths (CHATWOOT_REOPEN_CONVERSATION, CHATWOOT_CONVERSATION_PENDING), plus a CHATWOOT_IGNORE_JIDS ignore list
  • Routes agent replies back through the resolved device (no cross-account mis-delivery in multi-device deployments) and replays transient WhatsApp→Chatwoot failures from a durable retry queue
  • Adds agent signature support (CHATWOOT_SIGN_MSG/CHATWOOT_SIGN_DELIMITER), degrades to text when an inbound media download fails instead of dropping the message, and expands unit coverage (chatwoot 22%→58%, pgimport 28%→74%)

Saved WhatsApp Contact Name in Chatwoot (#714)

  • Resolves the saved address-book name (FullNamePushNameBusinessName) from the local WhatsApp contact store for 1:1 chats, instead of surfacing the bare phone number
  • Prefers it over the event pushname for both incoming and outgoing 1:1 chats, falling back to pushname then the phone identifier (fixes #688)

Session ID in Webhooks & JID in App Responses (#717)

  • Webhook payloads now include session_id, resolved from the device JID at the single forward chokepoint, so multi-tenant events can be correlated back to the session registered via POST /devices (closes #578)
  • GET /app/status and GET /app/devices now return the WhatsApp jid alongside device_id
  • device_id stays the JID for backward compatibility; session_id is omitted when the JID isn't mapped
  • Documented in openapi.yaml and the webhook payload docs

🐛 Bug Fixes

Honest WhatsApp Error 463 Handling (#708)

  • Removes the client-side pre-warm + token-wait + one-shot retry around error 463 (NackCallerReachoutTimelocked), which re-sent without a usable token and simply 463'd again, adding latency and a second reach-out attempt
  • Error 463 is WhatsApp's server-side reach-out timelock: the trusted-contact token can only arrive from the recipient (inbound message, privacy-token notification, or history sync), so whatsmeow's built-in tctoken lifecycle is the only correct path
  • Keeps the 463→429 mapping and rewrites WA_REACHOUT_TIMELOCK guidance to describe the restriction and its real remedies

Public URL for Downloaded Media (#716)

  • Media download responses now return the public URL for the saved file
  • Aligns the media-download device context in the REST path

Chat-List Name Fallback (#715)

  • ListChats and GetChatMessages now fall back to a JID-derived label when the stored chat name is empty (phone number for 1:1, Group <id> / Newsletter <id>, and Status for status@broadcast)
  • Fixes blank names for chats persisted before a pushname/group subject was known (fixes #675)

Chatwoot pgimport UUID Cast (#724)

  • Drops the ::text cast on gen_random_uuid() for the uuid-typed conversations.uuid column
  • Fixes the INSERT failing with column "uuid" is of type uuid but expression is of type text on strict/default Chatwoot schemas, which had dropped every chat whose contact was newly created

🔧 Technical Improvements

Documentation & Tooling

  • Refreshed the AGENTS.md hierarchy for the current branch, runtime paths, Chatwoot conventions, and release workflow
  • Added an update-release-note agent skill

Dependency Updates

  • go.mau.fi/whatsmeow: refreshed to latest across several updates
  • Related Go dependency checksums refreshed through go.mod / go.sum

What's Changed

Full Changelog: v8.7.0...v8.8.0

Don't miss a new go-whatsapp-web-multidevice release

NewReleases is sending notifications on new releases.