v8.8.0
mtkresearch/BreezeAppv8.8.0Jun 19, 2026by github-actions[bot]
AI Summary
This release delivers a major overhaul of the Chatwoot integration, achieving Evolution-API parity with features like auto-provisioning, session-aware webhooks, and agent signature support. It also improves error handling for WhatsApp's 463 error and fixes critical bugs regarding media URLs and contact name display.
Key Highlights
- Chatwoot Evolution-API Parity: Auto-provisioning inbox and bidirectional markdown threading
- Session correlation in webhooks via `session_id` for multi-tenant events
- Honest handling of WhatsApp Error 463, removing futile client-side retries
- Fixed downloaded media URLs and chat-list name fallbacks
- Agent signature support for Chatwoot messages
New Features
- Auto-provisions (or reuses) Chatwoot API-channel inbox on startup
- Forwards message edits, revokes, and deletes as threaded notes
- Reopens conversations for returning contacts across REST and DB import paths
- Routes replies back through the resolved device to prevent mis-delivery
- Saved WhatsApp contact name (`PushName`) displayed in Chatwoot instead of phone number
- Webhook payloads include `session_id` for multi-tenant correlation
Full Release Notes
## 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 (`FullName` → `PushName` → `BusinessName`) 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 * fix(chatwoot): use saved WhatsApp contact name instead of phone number (#688) by @aldinokemal in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/714 * fix(chatwoot): trim whitespace from API token and URL (#674) by @aldinokemal in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/713 * fix(chat): fall back chat-list name to phone number when empty (#675) by @aldinokemal in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/715 * feat(api): add session_id to webhooks and jid to app responses (#578) by @aldinokemal in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/717 * fix(media): return public URL for downloaded media by @aldinokemal in https://github.com/aldinokemal/go-whatsapp-web-multidevice/pull/716 * feat: chatwoot integration updates by @aldinokemal * fix(send): stop retrying WhatsApp error 463 and surface it honestly by @aldinokemal * fix(chatwoot): drop ::text cast on conversation uuid in pgimport by @aldinokemal * chore: update whatsmeow to latest by @aldinokemal **Full Changelog**: https://github.com/aldinokemal/go-whatsapp-web-multidevice/compare/v8.7.0...v8.8.0