Skip to content

Commit 1de78bc

Browse files
committed
docs(changelog): expand 2.4.0 entry with all features since 2.3.7
Previous entry only covered the licensing rollout. The release actually includes 50 commits worth of work: - Manager v2 completely redesigned (Tailwind v4 + @evoapi/design-system, dual-provider support, advanced sessions panels, license flow, Test Interactive modal, full i18n). - Carousel message endpoint (POST /message/sendCarousel). - Cross-client fix for buttons and list rendering on WhatsApp Web/Desktop/iOS via the <biz> stanza node and the legacy listMessage payload. - Interactive buttons via deviceSentMessage with corrected CTA limits and PIX payment_info support. - Catalog orderMessage and quoted productMessage support. - New messaging-history.set event with cumulative counts. - markMessageAsPlayed audio receipt endpoint. - SQS custom base_url. - LID -> phone-number mapping with cache. - Multiple bug fixes (mentionsEveryOne, getLastMessage, markMessageAsRead, list-message JSON cloning, Cloud API race conditions, instance logout idempotency, zombie-instance cleanup, network family timeout, etc.).
1 parent ae878fa commit 1de78bc

1 file changed

Lines changed: 136 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 136 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,50 @@ The following routes always remain public so the operator can recover:
5757

5858
### Added
5959

60+
#### Manager v2 — completely redesigned dashboard
61+
62+
The embedded manager (served at `/manager`) was rebuilt from the ground up
63+
on **Tailwind v4** + the new **`@evoapi/design-system`**, using the same
64+
visual language as the rest of the Evolution Foundation product line.
65+
Every screen was refactored — no surface remains untouched.
66+
67+
Highlights:
68+
69+
- **Modern dashboard** with skeleton loading, illustrated empty state,
70+
and a typed-name confirmation modal for instance deletion (no more
71+
accidental clicks).
72+
- **Dual-provider support**: the manager now talks to either
73+
`evolution-api` or `evolution-go` (selected at login, persisted in
74+
localStorage). When connected to a GO backend, the sidebar/router
75+
automatically hide the modules GO does not implement.
76+
- **Sessions panels** for the seven chatbot integrations (OpenAI, Dify,
77+
N8N, EvoAI, EvolutionBot, Flowise, Typebot) gained advanced filters
78+
(name / number / status / time presets + custom),
79+
bulk-status-change actions, client-side pagination, and a real
80+
send-message modal calling `/message/sendText`.
81+
- **License-aware login** — see the *Licensing* section below for the
82+
details.
83+
- **🧪 Test Interactive** modal on each instance card — a 5-tab
84+
payload editor (Reply / CTA / PIX / List / Carousel) for
85+
smoke-testing the new interactive-message endpoints from the
86+
dashboard. Replaces the legacy stand-alone `test-interactive.js`
87+
vanilla script that used to be injected into `index.html`.
88+
- **Full i18n coverage** in **pt-BR / en-US / es-ES / fr-FR** — every
89+
screen, every toast, every modal.
90+
- **Branding refresh** — sidebar/footer/login point to
91+
`docs.evolutionfoundation.com.br`, GitHub links to
92+
`evolution-foundation/evolution-manager-v2`, contact to
93+
`suporte@evofoundation.com.br`.
94+
95+
The new bundle is shipped pre-built under `manager/dist/`. The manager
96+
source repository moved to `evolution-foundation/evolution-manager-v2`
97+
(private) — the previous in-repo submodule was dropped.
98+
99+
#### Licensing
60100
- **Licensing module** under `src/licensing/` — RuntimeContext, gate middleware,
61101
signed/unsigned HTTP transport, hardware-based instance ID, fire-and-forget
62-
heartbeat (every 30 min), graceful shutdown deactivation.
102+
heartbeat (every 30 min), graceful shutdown deactivation. Mirrors the
103+
evolution-go `pkg/core/` reference implementation.
63104
- **Public license endpoints**:
64105
- `GET /license/status` — current activation state and (masked) api_key
65106
- `GET /license/register?redirect_uri=` — initiates registration on the
@@ -77,6 +118,97 @@ The following routes always remain public so the operator can recover:
77118
`/manager/license/callback?code=...` and finalises activation. The new
78119
manager bundle is included under `manager/dist/`.
79120

121+
#### Interactive Messages (Buttons / List / CTA / PIX / Carousel)
122+
- **New endpoint `POST /message/sendCarousel/{instance}`** — multi-card
123+
product carousel built on top of `interactiveMessage` + `carouselMessage`.
124+
Single-card-without-image falls back to `nativeFlowMessage` for iOS
125+
compatibility. New DTO `SendCarouselDto`, schema `carouselMessageSchema`.
126+
- **Button rendering fixed on WhatsApp Web/Desktop/iOS/Android** — removed the
127+
`viewOnceMessage` wrapper that prevented buttons from rendering and started
128+
injecting the required `<biz><interactive type=native_flow v=1>
129+
<native_flow v=9 name=mixed/></interactive></biz>` node into the
130+
`relayMessage` stanza via Baileys' official `additionalNodes` option.
131+
- **List messages fixed on WhatsApp Web/Desktop** — switched to legacy
132+
`listMessage` with `SINGLE_SELECT` listType (the modern
133+
`interactiveMessage + single_select` format does not render on Web/Desktop)
134+
and added `<biz><list type=product_list v=2/></biz>`.
135+
- **Interactive buttons via `deviceSentMessage`** + corrected CTA limits
136+
(max 2 CTA buttons, no mixing with reply or PIX), aligning with the
137+
WhatsApp Business message contract.
138+
- **PIX support** for interactive button messages (`payment_info` button
139+
type — exactly 1 button, isolated).
140+
- **Quoted product / Catalog `orderMessage`** support — handles
141+
`quotedMessage.productMessage` and the catalog `orderMessage` shape,
142+
including `getTypeMessage` enrichment, deduplication cache for
143+
processed order IDs, and propagation through Chatwoot integration.
144+
- Manager UI: a `🧪 Test Interactive` button on each instance card opens
145+
a modal with five tabs (Reply / CTA / PIX / List / Carousel) and an
146+
editable JSON payload — useful for smoke-testing every kind of
147+
interactive message without leaving the dashboard.
148+
149+
#### History Sync
150+
- **New event `messaging-history.set`** emitted on sync completion, with
151+
cumulative counts (chats, contacts, messages, isLatest, progress).
152+
Allows downstream consumers to know exactly when a history sync has
153+
finished and how much was imported.
154+
- Cumulative counters reset on a new sync start to avoid carry-over
155+
between consecutive syncs.
156+
157+
#### Other
158+
- **New endpoint `POST /chat/markMessageAsPlayed/{instance}`** — emits the
159+
audio "played" receipt (PTT/VOICE), completing the read/delivered/played
160+
triplet for voice messages.
161+
- **SQS integration** now accepts a custom `base_url` (useful for
162+
LocalStack and corporate VPC endpoints).
163+
- **LID → phone-number mapping and caching** — translates the new
164+
`@lid` identifiers WhatsApp uses for hidden-phone profiles into the
165+
real `@s.whatsapp.net` JID for downstream processing, with a cache
166+
to avoid redundant lookups.
167+
168+
#### Branding / Documentation
169+
- README, LICENSE, NOTICE, TRADEMARKS standardised under the
170+
**Evolution Foundation 2026** identity.
171+
- All GitHub URLs migrated from `EvolutionAPI` to `evolution-foundation`.
172+
- New README section "License Activation" linking to
173+
<https://docs.evolutionfoundation.com.br/licensing>.
174+
175+
### Fixed
176+
177+
- **`mentionsEveryOne` honours `false`** — earlier the flag was always
178+
applied regardless of value (#2470).
179+
- **`getLastMessage`**: corrected the Prisma JSON path filter so the
180+
query returns the actual last message (#2495 / #2515).
181+
- **`markMessageAsRead`**: corrected JID filter to cover all user types
182+
(regular, business, broadcast, group).
183+
- **List messages**: removed destructive JSON cloning that triggered
184+
`this.isZero` when the message contained `Long`-typed fields (#2461).
185+
- **History sync race condition**: completion event is now emitted
186+
*before* the contact upsert, so consumers don't observe the sync as
187+
finished while contacts are still being written (#2510).
188+
- **Business API (Cloud)**: race condition in sender identification
189+
resolved (#2493); execution order normalised; `chatwootIds`
190+
correctly propagated.
191+
- **`/instance/logout/{instance}`** — idempotent: returns SUCCESS instead
192+
of 400 when the instance is already closed, so the manager UI delete
193+
flow (logout-then-delete) does not surface a misleading error.
194+
- **`remove.instance` event** — emitted even when logout itself fails,
195+
preventing zombie instances after a partially failed delete (#2520).
196+
- **Chatbot session**: a closed session no longer blocks bot
197+
re-activation.
198+
- **Docker compose**: fresh-install startup failures resolved.
199+
- **WhatsApp chats**: `accountLid` handling, `remoteJid` normalisation
200+
and `chatsRaw` mapping cleaned up to avoid mismatched contact data
201+
on first connection.
202+
- **Facebook ads**: `externalAdReply` context readability and fallback
203+
path for missing fields.
204+
- **Networking**: added the `--network-family-autoselection-attempt-timeout`
205+
flag in `start:prod` so IPv4/IPv6 races no longer hang the boot on
206+
hosts with broken IPv6.
207+
- **Trailing slashes** on configuration URLs are now tolerated in all
208+
HTTP clients.
209+
- Verbose-log fix: undefined `maxRetries` reference inside the
210+
`messages.update` handler.
211+
80212
### Notes
81213

82214
- `AUTHENTICATION_API_KEY` keeps its original meaning (global API key for
@@ -107,6 +239,9 @@ The following routes always remain public so the operator can recover:
107239
- **`Global API key not accepted by licensing server: invalid signature`**
108240
your existing `AUTHENTICATION_API_KEY` is not a valid licensing key. Use
109241
the manager UI flow to obtain a new one.
242+
- **Buttons/list not rendering on WhatsApp Web** — make sure you are on
243+
v2.4.0+; the `<biz>` stanza node and the legacy `listMessage` payload
244+
shipped with this release are required for cross-client rendering.
110245

111246
---
112247

0 commit comments

Comments
 (0)