Releases: evolution-foundation/evolution-api
2.4.0-rc1
Pre-release candidate for 2.4.0. Built from
develop(commitaf4db31). Not merged tomain. Use for validation only; do not deploy to production without further testing.
2.4.0 (2026-05-06)
⚠️ BREAKING CHANGE — License activation is now required
Starting with v2.4.0, every Evolution API instance must be activated against the
Evolution Foundation licensing server before serving API traffic. Until activation,
all business endpoints return:
HTTP 503 Service Unavailable
{
"error": "service not activated",
"code": "LICENSE_REQUIRED",
"register_url": "https://<your-host>/manager/login",
"instance_id": "<uuid>",
"docs_url": "https://docs.evolutionfoundation.com.br/licensing",
"message": "..."
}
The following routes always remain public so the operator can recover:
/license/status, /license/register, /license/activate, /manager/**,
/health, /server/ok, /ws, static assets.
Migration guide
-
Pull the new version and install dependencies:
git pull npm install
-
Apply the new migration (creates the
RuntimeConfigtable). Required:npm run db:deploy
If you skip this step, the server now fails fast with a clear error
asking you to rundb:deploy. -
Start the service. There are three activation paths:
-
Already have a valid licensing key? Set it as
AUTHENTICATION_API_KEY
in your.envand restart. The bootstrap step will validate the key with
the licensing server, persist it, and activate the instance automatically. -
First-time activation via the manager UI? Open
https://<your-host>/manager/login. The manager detects that the
instance is unlicensed and redirects you to the registration page on
the licensing server. After you complete the form, you are sent back
to/manager/license/callback?code=..., the manager exchanges the code,
and the dashboard becomes accessible. -
Calling the API from code (n8n, Make, custom scripts) without a valid
license? Every request will receive503 LICENSE_REQUIREDwith the
register_urlfield pointing to the manager. Open it in a browser to
activate.
-
Added
Manager v2 — completely redesigned dashboard
The embedded manager (served at /manager) was rebuilt from the ground up
on Tailwind v4 + the new @evoapi/design-system, using the same
visual language as the rest of the Evolution Foundation product line.
Every screen was refactored — no surface remains untouched.
Highlights:
- Modern dashboard with skeleton loading, illustrated empty state,
and a typed-name confirmation modal for instance deletion (no more
accidental clicks). - Dual-provider support: the manager now talks to either
evolution-apiorevolution-go(selected at login, persisted in
localStorage). When connected to a GO backend, the sidebar/router
automatically hide the modules GO does not implement. - Sessions panels for the seven chatbot integrations (OpenAI, Dify,
N8N, EvoAI, EvolutionBot, Flowise, Typebot) gained advanced filters
(name / number / status / time presets + custom),
bulk-status-change actions, client-side pagination, and a real
send-message modal calling/message/sendText. - License-aware login — see the Licensing section below for the
details. - 🧪 Test Interactive modal on each instance card — a 5-tab
payload editor (Reply / CTA / PIX / List / Carousel) for
smoke-testing the new interactive-message endpoints from the
dashboard. Replaces the legacy stand-alonetest-interactive.js
vanilla script that used to be injected intoindex.html. - Full i18n coverage in pt-BR / en-US / es-ES / fr-FR — every
screen, every toast, every modal. - Branding refresh — sidebar/footer/login point to
docs.evolutionfoundation.com.br, GitHub links to
evolution-foundation/evolution-manager-v2, contact to
suporte@evofoundation.com.br.
The new bundle is shipped pre-built under manager/dist/. The manager
source repository moved to evolution-foundation/evolution-manager-v2
(private) — the previous in-repo submodule was dropped.
Licensing
- Licensing module under
src/licensing/— RuntimeContext, gate middleware,
signed/unsigned HTTP transport, hardware-based instance ID, fire-and-forget
heartbeat (every 30 min), graceful shutdown deactivation. Mirrors the
evolution-gopkg/core/reference implementation. - Public license endpoints:
GET /license/status— current activation state and (masked) api_keyGET /license/register?redirect_uri=— initiates registration on the
licensing server, returnsregister_urlGET /license/activate?code=— exchanges the authorization code received
on the callback for a real api_key, persists it, marks the runtime active.
- New Prisma model
RuntimeConfig(key/value rows inRuntimeConfigtable)
for both PostgreSQL and MySQL schemas. - Auto-detect missing migration: if the
RuntimeConfigtable is absent,
the server prints a clear banner explainingnpm run db:deployand exits 1
instead of throwing a stack trace from the Prisma client. - Manager v2 ships with the new license-aware login flow that recognises
HTTP 503 /LICENSE_REQUIRED, calls/license/register, and redirects to
the registration server. After the callback, it lands on
/manager/license/callback?code=...and finalises activation. The new
manager bundle is included undermanager/dist/.
Interactive Messages (Buttons / List / CTA / PIX / Carousel)
- New endpoint
POST /message/sendCarousel/{instance}— multi-card
product carousel built on top ofinteractiveMessage+carouselMessage.
Single-card-without-image falls back tonativeFlowMessagefor iOS
compatibility. New DTOSendCarouselDto, schemacarouselMessageSchema. - Button rendering fixed on WhatsApp Web/Desktop/iOS/Android — removed the
viewOnceMessagewrapper that prevented buttons from rendering and started
injecting the required<biz><interactive type=native_flow v=1> <native_flow v=9 name=mixed/></interactive></biz>node into the
relayMessagestanza via Baileys' officialadditionalNodesoption. - List messages fixed on WhatsApp Web/Desktop — switched to legacy
listMessagewithSINGLE_SELECTlistType (the modern
interactiveMessage + single_selectformat does not render on Web/Desktop)
and added<biz><list type=product_list v=2/></biz>. - Interactive buttons via
deviceSentMessage+ corrected CTA limits
(max 2 CTA buttons, no mixing with reply or PIX), aligning with the
WhatsApp Business message contract. - PIX support for interactive button messages (
payment_infobutton
type — exactly 1 button, isolated). - Quoted product / Catalog
orderMessagesupport — handles
quotedMessage.productMessageand the catalogorderMessageshape,
includinggetTypeMessageenrichment, deduplication cache for
processed order IDs, and propagation through Chatwoot integration. - Manager UI: a
🧪 Test Interactivebutton on each instance card opens
a modal with five tabs (Reply / CTA / PIX / List / Carousel) and an
editable JSON payload — useful for smoke-testing every kind of
interactive message without leaving the dashboard.
History Sync
- New event
messaging-history.setemitted on sync completion, with
cumulative counts (chats, contacts, messages, isLatest, progress).
Allows downstream consumers to know exactly when a history sync has
finished and how much was imported. - Cumulative counters reset on a new sync start to avoid carry-over
between consecutive syncs.
Other
- New endpoint
POST /chat/markMessageAsPlayed/{instance}— emits the
audio "played" receipt (PTT/VOICE), completing the read/delivered/played
triplet for voice messages. - SQS integration now accepts a custom
base_url(useful for
LocalStack and corporate VPC endpoints). - LID → phone-number mapping and caching — translates the new
@lididentifiers WhatsApp uses for hidden-phone profiles into the
real@s.whatsapp.netJID for downstream processing, with a cache
to avoid redundant lookups.
Branding / Documentation
- README, LICENSE, NOTICE, TRADEMARKS standardised under the
Evolution Foundation 2026 identity. - All GitHub URLs migrated from
EvolutionAPItoevolution-foundation. - New README section "License Activation" linking to
https://docs.evolutionfoundation.com.br/licensing.
Fixed
mentionsEveryOnehonoursfalse— earlier the flag was always
applied regardless of value (#2470).getLastMessage: corrected the Prisma JSON path filter so the
query returns the actual last message (#2495 / #2515).markMessageAsRead: corrected JID filter to cover all user types
(regular, business, broadcast, group).- List messages: removed destructive JSON cloning that triggered
this.isZerowhen the message containedLong-typed fields (#2461). - History sync race condition: completion event is now emitted
before the contact upsert, so consumers don't observe the sync as
finished while contacts are still being written (#2510). - Business API (Cloud): race condition in sender identification
resolved (#2493); execution order normalised;chatwootIds
correctly propagated. /instance/logout/{instance}— idempotent: returns SUCCESS instead
of 400 when the instance is already closed, so the manager UI delete
flow (logout-then-delete) does not surface a misleading error.remove.instanceevent — emitted even when logout itself fails,
preventing zombie instances after a partially failed delete (#2520).- Chatbot session: a closed session no longer blocks bot
re-activation. - Docker compose: fresh-install startup failures resolved.
- WhatsApp chats:
accountLidhandling,remoteJidnormalisation
and `cha...
v2.3.7
Features
-
WhatsApp Business Meta Templates: Add update and delete endpoints for Meta templates
- New endpoints to edit and delete WhatsApp Business templates
- Added DTOs and validation schemas for template management
- Enhanced template lifecycle management capabilities
-
Events API: Add isLatest and progress to messages.set event
- Allows consumers to know when history sync is complete (isLatest=true)
- Track sync progress percentage through webhooks
- Added extra field to EmitData type for additional payload properties
- Updated all event controllers (webhook, rabbitmq, sqs, websocket, pusher, kafka, nats)
-
N8N Integration: Add quotedMessage to payload in sendMessageToBot
- Support for quoted messages in N8N chatbot integration
- Enhanced message context information
-
WebSocket: Add wildcard "*" to allow all hosts to connect via websocket
- More flexible host configuration for WebSocket connections
- Improved host validation logic in WebsocketController
-
Pix Support: Handle interactive button message for pix
- Support for interactive Pix button messages
- Enhanced payment flow integration
Fixed
-
Baileys Message Processor: Fix incoming message events not working after reconnection
- Added cleanup logic in mount() to prevent memory leaks from multiple subscriptions
- Recreate messageSubject if it was completed during logout
- Remount messageProcessor in connectToWhatsapp() to ensure subscription is active
- Fixed issue where onDestroy() calls complete() on RxJS Subject, making it permanently closed
- Ensures old subscriptions are properly cleaned up before creating new ones
-
Baileys Authentication: Resolve "waiting for message" state after reconnection
- Fixed Redis keys not being properly removed during instance logout
- Prevented loading of old/invalid cryptographic keys on reconnection
- Fixed blocking state where instances authenticate but cannot send messages
- Ensures new credentials (creds) are properly used after reconnection
-
OnWhatsapp Cache: Prevent unique constraint errors and optimize database writes
- Fixed
Unique constraint failed on the fields: (remoteJid)error when sending to groups - Refactored query to use OR condition finding by jidOptions or remoteJid
- Added deep comparison to skip unnecessary database updates
- Replaced sequential processing with Promise.allSettled for parallel execution
- Sorted JIDs alphabetically in jidOptions for accurate change detection
- Added normalizeJid helper function for cleaner code
- Fixed
-
Proxy Integration: Fix "Media upload failed on all hosts" error when using proxy
- Created makeProxyAgentUndici() for Undici-compatible proxy agents
- Fixed compatibility with Node.js 18+ native fetch() implementation
- Replaced traditional HttpsProxyAgent/SocksProxyAgent with Undici ProxyAgent
- Maintained legacy makeProxyAgent() for Axios compatibility
- Fixed protocol handling in makeProxyAgent to prevent undefined errors
-
WhatsApp Business API: Fix base64, filename and caption handling
- Corrected base64 media conversion in Business API
- Fixed filename handling for document messages
- Improved caption processing for media messages
- Enhanced remoteJid validation and processing
-
Chat Service: Fix fetchChats and message panel errors
- Fixed cleanMessageData errors in Manager message panel
- Improved chat fetching reliability
- Enhanced message data sanitization
-
Contact Filtering: Apply where filters correctly in findContacts endpoint
- Fixed endpoint to process all where clause fields (id, remoteJid, pushName)
- Previously only processed remoteJid field, ignoring other filters
- Added remoteJid field to contactValidateSchema for proper validation
- Maintained multi-tenant isolation with instanceId filtering
- Allows filtering contacts by any supported field instead of returning all contacts
-
Chatwoot and Baileys Integration: Multiple integration improvements
- Enhanced code formatting and consistency
- Fixed integration issues between Chatwoot and Baileys services
- Improved message handling and delivery
-
Baileys Message Loss: Prevent message loss from WhatsApp stub placeholders
- Fixed messages being lost and not saved to database, especially for channels/newsletters (@lid)
- Detects WhatsApp stubs through messageStubParameters containing 'Message absent from node'
- Prevents adding stubs to duplicate message cache
- Allows real message to be processed when it arrives after decryption
- Maintains stub discard to avoid saving empty placeholders
-
Database Contacts: Respect DATABASE_SAVE_DATA_CONTACTS in contact updates
- Added missing conditional checks for DATABASE_SAVE_DATA_CONTACTS configuration
- Fixed profile picture updates attempting to save when database save is disabled
- Fixed unawaited promise in contacts.upsert handler
-
Prisma/PostgreSQL: Add unique constraint to Chat model
- Generated migration to add unique index on instanceId and remoteJid
- Added deduplication step before creating index to prevent constraint violations
- Prevents chat duplication in database
-
MinIO Upload: Handle messageContextInfo in media upload to prevent MinIO errors
- Prevents errors when uploading media with messageContextInfo metadata
- Improved error handling for media storage operations
-
Typebot: Fix message routing for @lid JIDs
-
Message Filtering: Unify remoteJid filtering using OR with remoteJidAlt
- Improved message filtering with alternative JID support
- Better handling of messages with different JID formats
-
@lid Integration: Multiple fixes for @lid problems, message events and chatwoot errors
- Reorganized imports and improved message handling in BaileysStartupService
- Enhanced remoteJid processing to handle @lid cases
- Improved jid normalization and type safety in Chatwoot integration
- Streamlined message handling logic and cache management
- Refactored message handling and polling updates with decryption logic for poll votes
- Improved event processing flow for various message types
-
Chatwoot Contacts: Fix contact duplication error on import
- Resolved 'ON CONFLICT DO UPDATE command cannot affect row a second time' error
- Removed attempt to update identifier field in conflict (part of constraint)
- Changed to update only updated_at field:
updated_at = NOW() - Allows duplicate contacts to be updated correctly without errors
-
Chatwoot Service: Fix async handling in update_last_seen method
- Added missing await for chatwootRequest in read message processing
- Prevents service failure when processing read messages
-
Metrics Access: Fix IP validation including x-forwarded-for
- Uses all IPs including x-forwarded-for header when checking metrics access
- Improved security and access control for metrics endpoint
Dependencies
-
Baileys: Updated to version 7.0.0-rc.9
- Latest release candidate with multiple improvements and bug fixes
-
AWS SDK: Updated packages to version 3.936.0
- Enhanced functionality and compatibility
- Performance improvements
Code Quality & Refactoring
- Template Management: Remove unused template edit/delete DTOs after refactoring
- Proxy Utilities: Improve makeProxyAgent for Undici compatibility
- Code Formatting: Enhance code formatting and consistency across services
- BaileysStartupService: Fix indentation and remove unnecessary blank lines
- Event Controllers: Guard extra spread and prevent core field override in all event controllers
- Import Organization: Reorganize imports for better code structure and maintainability
What's Changed
- fix(chat): apply where filters correctly in findContacts endpoint by @FaelN1 in #2120
- fix: "Media upload failed on all hosts" utilizando proxy by @JefersonRamos in #2141
- Fix merge by @gomessguii in #2155
- fix: Integration Chatwoot and Baileys services by @KokeroO in #2158
- fix: fetchChats e chat - Painel de mensagens no Manager by @moothz in #2160
- feat(whatsapp): corrigir Business (base64/filename/caption), remoteJid by @ricaelchiquetti in #2161
- fix: Erro ao enviar mensagem para grupos (remoteJid failed constraint) by @moothz in #2162
- Feat/update and delete meta templates by @ricaelchiquetti in #2163
- Durante o processo de logout de uma instância, as chaves associadas a… by @JefersonRamos in #2191
- fix(baileys): resolve incoming message events not working after reconnection by @muriloleal13 in #2186
- fix(chatwoot): corrige erro de duplicação na importação de contatos by @RaFaeL-Cunha in #2203
- Fix: Chatwoot service fails when processing read message by @victoreduardo in #2219
- feature: handle with interactive button message for pix by @victoreduardo in #2220
- Fix: Using al...
v2.3.6
Features
- Baileys, Chatwoot, OnWhatsapp Cache: Multiple implementations and fixes
- Fixed cache for PN, LID and g.us numbers to send correct number
- Fixed audio and document sending via Chatwoot in Baileys channel
- Multiple fixes in Chatwoot integration
- Fixed ignored messages when receiving leads
Fixed
- Baileys: Fix buffer storage in database
- Correctly save Uint8Array values to database
- Baileys: Simplify logging of messageSent object
- Fixed "this.isZero not is function" error
Chore
- Version: Bump version to 2.3.6 and update Baileys dependency to 7.0.0-rc.6
- Workflows: Update checkout step to include submodules
- Added 'submodules: recursive' option to checkout step in multiple workflow files to ensure submodules are properly initialized during CI/CD processes
- Manager: Update asset files and install process
- Updated subproject reference in evolution-manager-v2 to the latest commit
- Enhanced the manager_install.sh script to include npm install and build steps
- Replaced old JavaScript asset file with a new version for improved performance
- Added a new CSS file for consistent styling across the application
What's Changed
- feat(baileys,chatwoot,on-whatsapp-cache): implementações e correções na baileys e chatwoot by @KokeroO in #2103
- fix: Simplify logging of messageSent object by @KokeroO in #2105
- fix( baileys.service ): Corrige ao salvar no DB valores Uint8Array by @KokeroO in #2107
- chore: bump version to 2.3.6 and update baileys dependency to 7.0.0-rc.6 by @KokeroO in #2108
Full Changelog: 2.3.5...2.3.6
v2.3.5
Features
- Chatwoot Enhancements: Comprehensive improvements to message handling, editing, deletion and i18n
- Participants Data: Add participantsData field maintaining backward compatibility for group participants
- LID to Phone Number: Convert LID to phoneNumber on group participants
- Docker Configurations: Add Kafka and frontend services to Docker configurations
Fixed
- Kafka Migration: Fixed PostgreSQL migration error for Kafka integration
- Corrected table reference from
"public"."Instance"to"Instance"in foreign key constraint - Fixed
ERROR: relation "public.Instance" does not existissue in migration20250918182355_add_kafka_integration - Aligned table naming convention with other Evolution API migrations for consistency
- Resolved database migration failure that prevented Kafka integration setup
- Corrected table reference from
- Update Baileys Version: v7.0.0-rc.5 with compatibility fixes
- Fixed assertSessions signature compatibility using type assertion
- Fixed incompatibility in voice call (wavoip) with new Baileys version
- Handle undefined status in update by defaulting to 'DELETED'
- Chatwoot Improvements: Multiple fixes for enhanced reliability
- Correct chatId extraction for non-group JIDs
- Resolve webhook timeout on deletion with 5+ images
- Improve error handling in Chatwoot messages
- Adjust conversation verification logic and cache
- Optimize conversation reopening logic and connection notification
- Fix conversation reopening and connection loop
- Baileys Message Handling: Enhanced message processing
- Add warning log for messages not found
- Fix message verification in Baileys service
- Simplify linkPreview handling in BaileysStartupService
- Media Validation: Fix media content validation
- PostgreSQL Connection: Refactor connection with PostgreSQL and improve message handling
Code Quality & Refactoring
- Exponential Backoff: Implement exponential backoff patterns and extract magic numbers to constants
- TypeScript Build: Update TypeScript build process and dependencies
What's Changed
- Fix Chatwoot DB Connection Instability and Implement Stale Conversation Cache Handling by @Vitordotpy in #2017
- fix(baileys): message update and i18n errors by @Vitordotpy in #2021
- fix(chatwoot): Corrige Reabertura de Conversas e Loop de Mensagem de Conexão by @Vitordotpy in #2023
- feat(chatwoot): comprehensive improvements to message handling, editing, deletion and i18n (translate messages) by @dersonbsb2022 in #2048
- feat: convert LID to phoneNumber on GROUP_PARTICIPANTS_UPDATE webhook by @guispiller in #2025
- fix/media content validation by @nolramaf in #2072
- Implementations and corrections of previous commits in the chatwoot and baileys services by @KokeroO in #2076
- Convert LIDs to PN by sending a call rejection message by @KokeroO in #2085
- fix: correct the error of hardcoded prisma/kafka schema by @davidmnzs in #2083
New Contributors
- @Vitordotpy made their first contribution in #2017
- @guispiller made their first contribution in #2025
- @davidmnzs made their first contribution in #2083
Full Changelog: 2.3.4...2.3.5
v2.3.4
Features
-
Kafka Integration: Added Apache Kafka event integration for real-time event streaming
- New Kafka controller, router, and schema for event publishing
- Support for instance-specific and global event topics
- Configurable SASL/SSL authentication and connection settings
- Auto-creation of topics with configurable partitions and replication
- Consumer group management for reliable event processing
- Integration with existing event manager for seamless event distribution
-
Evolution Manager v2 Open Source: Evolution Manager v2 is now available as open source
- Added as git submodule with HTTPS URL for easy access
- Complete open source setup with Apache 2.0 license + Evolution API custom conditions
- GitHub templates for issues, pull requests, and workflows
- Comprehensive documentation and contribution guidelines
- Docker support for development and production environments
- CI/CD workflows for code quality, security audits, and automated builds
- Multi-language support (English, Portuguese, Spanish, French)
- Modern React + TypeScript + Vite frontend with Tailwind CSS
-
EvolutionBot Enhancements: Improved EvolutionBot functionality and message handling
- Implemented splitMessages functionality for better message segmentation
- Added linkPreview support for enhanced message presentation
- Centralized split logic across chatbot services for consistency
- Enhanced message formatting and delivery capabilities
Fixed
-
MySQL Schema: Fixed invalid default value errors for
createdAtfields inEvoaiandEvoaiSettingmodels- Changed
@default(now())to@default(dbgenerated("CURRENT_TIMESTAMP"))for MySQL compatibility - Added missing relation fields (
N8n,N8nSetting,Evoai,EvoaiSetting) in Instance model - Resolved Prisma schema validation errors for MySQL provider
- Changed
-
Prisma Schema Validation: Fixed
instanceNamefield error in message creation- Removed invalid
instanceNamefield from message objects before database insertion - Resolved
Unknown argument 'instanceName'Prisma validation error - Streamlined message data structure to match Prisma schema requirements
- Removed invalid
-
Media Message Processing: Enhanced media handling across chatbot services
- Fixed base64 conversion in EvoAI service for proper image processing
- Converted ArrayBuffer to base64 string using
Buffer.from().toString('base64') - Improved media URL handling and base64 encoding for better chatbot integration
- Enhanced image message detection and processing workflow
-
Evolution Manager v2 Linting: Resolved ESLint configuration conflicts
- Disabled conflicting Prettier rules in ESLint configuration
- Added comprehensive rule overrides for TypeScript and React patterns
- Fixed import ordering and code formatting issues
- Updated security vulnerabilities in dependencies (Vite, esbuild)
Code Quality & Refactoring
-
Chatbot Services: Streamlined media message handling across all chatbot integrations
- Standardized base64 and mediaUrl processing patterns
- Improved code readability and maintainability in media handling logic
- Enhanced error handling for media download and conversion processes
- Unified image message detection across different chatbot services
-
Database Operations: Improved data consistency and validation
- Enhanced Prisma schema compliance across all message operations
- Removed redundant instance name references for better data integrity
- Optimized message creation workflow with proper field validation
Environment Variables
- Added comprehensive Kafka configuration options:
KAFKA_ENABLED,KAFKA_CLIENT_ID,KAFKA_BROKERSKAFKA_CONSUMER_GROUP_ID,KAFKA_TOPIC_PREFIXKAFKA_SASL_*andKAFKA_SSL_*for authenticationKAFKA_EVENTS_*for event type configuration
What's Changed
- fix(docker): change private image to public image in docker-compose by @JamsMendez in #1989
- fix(evolutionbot): Fixing the correct message sending method so that messages are split. by @dersonbsb2022 in #1986
New Contributors
- @JamsMendez made their first contribution in #1989
Full Changelog: 2.3.3...2.3.4
v2.3.3
Features
- Add extra fields to object sent to Flowise bot
- Add Prometheus-compatible /metrics endpoint (gated by PROMETHEUS_METRICS)
- Implement linkPreview support for Evolution Bot
Fixed
- Address Path Traversal vulnerability in /assets endpoint by implementing security checks
- Configure Husky and lint-staged for automated code quality checks on commits and pushes
- Convert mediaKey from media messages to avoid bad decrypt errors
- Improve code formatting for better readability in WhatsApp service files
- Format messageGroupId assignment for improved readability
- Improve linkPreview implementation based on PR feedback
- Clean up code formatting for linkPreview implementation
- Use 'unknown' as fallback for clientName label
- Remove abort process when status is paused, allowing the chatbot return after the time expires and after being paused due to human interaction (stopBotFromMe)
- Enhance message content sanitization in Baileys service and improve message retrieval logic in Chatwoot service
- Integrate Typebot status change events for webhook in chatbot controller and service
- Mimetype of videos video
Security
- CRITICAL: Fixed Path Traversal vulnerability in /assets endpoint that allowed unauthenticated local file read
- Customizable Websockets Security
Testing
- Baileys Updates: v7.0.0-rc.3 (Link)
What's Changed
- Revert "Ignore events that are not messages (like EPHEMERAL_SYNC_RESPONSE)" by @DavidsonGomes in #1919
- feat: implement disable/enable linkPreview support for Evolution Bot by @dersonbsb2022 in #1908
- fix: Prevent Duplicate Cron Jobs for Chatwoot Message Sync by @andres99x in #1906
- fix: integrate Typebot status change events for webhook in chatbot controller e service by @josiasmaceda in #1927
- fix: allowing the chatbot return after the time expires and after human interaction (stopBotFromMe) by @josiasmaceda in #1928
- Customizable Websockets Security by @moothz in #1929
- fix: convert mediaKey from media messages to avoid bad decrypt errors by @furious in #1948
- feat: implement standardized error handling for WhatsApp API responses by @ricaelchiquetti in #1918
- feat: add extra fields to object sent to Flowise bot by @Nocelli in #1951
- Feat/prometheus metrics by @elizandropacheco in #1947
- feat/add global SQS mode with single-queue-per-event and payload size control by @nolramaf in #1896
- feat/validate video type before uploading to S3 by @nolramaf in #1897
- Fix/Adjust remote message key handling in WhatsApp service to include alternative JID by @ricaelchiquetti in #1955
New Contributors
- @dersonbsb2022 made their first contribution in #1908
- @andres99x made their first contribution in #1906
- @josiasmaceda made their first contribution in #1927
- @moothz made their first contribution in #1929
- @furious made their first contribution in #1948
- @Nocelli made their first contribution in #1951
- @elizandropacheco made their first contribution in #1947
- @nolramaf made their first contribution in #1896
Full Changelog: 2.3.2...2.3.3
v2.3.2
Features
- Add support to socks proxy
Fixed
- Added key id into webhook payload in n8n service
- Enhance RabbitMQ controller with improved connection management and shutdown procedures
- Convert outgoing images to JPEG before sending with Chatwoot
- Update baileys dependency to version 6.7.19
What's Changed
- Permitir correta utilização da evolution quando mensagens não são persistidas no DB by @onerrogus in #1798
- Fixed boolean and integer type attributes for MySQL by @bilaliqbalr in #1786
- Securing websockets by @frieck in #1802
- feat: enhance logging for proxy testing errors by @henrybarreto in #1790
- feat: add support to socks proxy by @henrybarreto in #1793
- docs(readme): corrigidos badge Docker image no README by @neto-developer in #1809
- Added key id into webhook payload in n8n service by @bilaliqbalr in #1838
- Feat/whatsapp/convert-to-jpeg by @nestordavalos in #1884
- Reconnect rabbitmq by @LuisSantosJS in #1878
- Update 20250116001415_add_wavoip_token_to_settings_table by @caiquezanetoni in #1851
- update version by @codingbox2022 in #1889
New Contributors
- @bilaliqbalr made their first contribution in #1786
- @frieck made their first contribution in #1802
- @henrybarreto made their first contribution in #1790
- @neto-developer made their first contribution in #1809
- @LuisSantosJS made their first contribution in #1878
- @caiquezanetoni made their first contribution in #1851
- @codingbox2022 made their first contribution in #1889
Full Changelog: 2.3.1...2.3.2
v2.3.1
Feature
- Add BaileysMessageProcessor for improved message handling and integrate rxjs for asynchronous processing
- Enhance message processing with retry logic for error handling
Fixed
- Update Baileys Version
- Update Dockerhub Repository and Delete Config Session Variable
- Fixed sending variables in typebot
- Add unreadMessages in the response
- Phone number as message ID for Evo AI
- Fix upload to s3 when media message
- Simplify edited message check in BaileysStartupService
- Avoid corrupting URLs with query strings
- Removed CONFIG_SESSION_PHONE_VERSION environment variable
What's Changed
- fix: corrige versão inválida do swagger-ui-express by @autonomaia in #1635
- Update Dockerhub Repository and Delete Config Session Variable by @skarious in #1623
- feat: Adiciona mesclagem de contatos @lid no Chatwoot by @KokeroO in #1609
- Correção do envio de variáveis pelo typeboy by @matheusfterra in #1624
- Update Dockerfile by @ToniShelby in #1605
- add unreadMessages in the response by @fernandeshenrique15 in #1626
- 🐛 fix: Phone number as message ID for Evo AI #ISSUE 28 by @VCalazans in #1633
- Create railway.json by @caduzin02 in #1641
- Corrige ref. instance typebot.controller.ts by @KokeroO in #1652
- fix/references-instanceName-typebot by @KokeroO in #1655
- fix(whatsapp-baileys): Verifica eventos com falhas e fallback para erro ao baixar mídias by @KokeroO in #1660
- fix: correçao do typebot não conseguir ouvir mensagens de input by @Santosl2 in #1670
- (mysql): remove out-of-order wavoipToken migration by @pauloboc in #1664
- Fix prisma type mysql by @pauloboc in #1665
- Update README.md - 2025 by @leonardocintra in #1701
- fix: Tratar conversas @lid no inicio do recebimento dos eventos e novo erro da libsignal by @KokeroO in #1705
- Throw exception if download media fail by @rafwell in #1704
- Fix: Support media extraction from templateMessage in getBase64FromMediaMessage by @AlexisJusviack in #1715
- added missing migrations in mysql prisma by @pauloboc in #1683
- feat(database): add pgbouncer support and optimize postgres config by @guilherme-aguilar in #1700
- feat: add BaileysMessageProcessor for improved message handling by @Santosl2 in #1726
- Fix: [Chatwoot] Corrige mensagens editas by @KokeroO in #1728
- Preserve alias casing in chat fetch query by @foqc in #1696
- improv: Ajustado isEmoji para aceitar todos os emojis. by @ricaelchiquetti in #1729
- Ignore events that are not messages (like EPHEMERAL_SYNC_RESPONSE) by @rafwell in #1732
- remove lógica de paginação duplicada no fetchChats que causa resultados vazios quando skip > 0 by @juniortopanotti in #1736
- Add endpoint to retrieve chat data by remoteJid by @foqc in #1743
- fix: atualizar o handle de erros de eventos by @KokeroO in #1757
- Avoid corrupting media URLs with query strings by @coreh in #1748
New Contributors
- @autonomaia made their first contribution in #1635
- @skarious made their first contribution in #1623
- @matheusfterra made their first contribution in #1624
- @ToniShelby made their first contribution in #1605
- @fernandeshenrique15 made their first contribution in #1626
- @VCalazans made their first contribution in #1633
- @caduzin02 made their first contribution in #1641
- @Santosl2 made their first contribution in #1670
- @pauloboc made their first contribution in #1664
- @leonardocintra made their first contribution in #1701
- @AlexisJusviack made their first contribution in #1715
- @guilherme-aguilar made their first contribution in #1700
- @foqc made their first contribution in #1696
- @ricaelchiquetti made their first contribution in #1729
- @juniortopanotti made their first contribution in #1736
- @coreh made their first contribution in #1748
Full Changelog: 2.3.0...2.3.1
v2.3.0
Feature
- Add support to get Catalogs and Collections with new routes: '{{baseUrl}}/chat/fetchCatalogs' and '{{baseUrl}}/chat/fetchCollections'
- Add NATS integration support to the event system
- Add message location support meta
- Add S3_SKIP_POLICY env variable to disable setBucketPolicy for incompatible providers
- Add EvoAI integration with models, services, and routes
- Add N8n integration with models, services, and routes
Fixed
- Shell injection vulnerability
- Update Baileys Version v6.7.18
- Audio send duplicate from chatwoot
- Chatwoot csat creating new conversation in another language
- Refactor SQS controller to correct bug in sqs events by instance
- Adjustin cloud api send audio and video
- Preserve animation in GIF and WebP stickers
- Preventing use conversation from other inbox for the same user
- Ensure full WhatsApp compatibility for audio conversion (libopus, 48kHz, mono)
- Enhance message fetching and processing logic
- Added lid on whatsapp numbers router
- Now if the CONFIG_SESSION_PHONE_VERSION variable is not filled in it automatically searches for the most updated version
What's Changed
- Refactor edit and delete message functionality in BaileyStartupService by @GrimBit1 in #1195
- Feat: Adicionei suporte para obter o Catálogos de Produtos e as Coleções de Produtos para a versão 2.2.3 by @wayre in #1201
- Adicionado suporte para obter Catálogos e Coleções no WhatsApp Business by @wayre in #1214
- feat: notconvertsticket for animated stickers by @joaosouz4dev in #1211
- Fix instance creation on v2.2.3 by @rafwell in #1215
- feat: add message location support whatsapp meta by @tmsdesarrollo3 in #1217
- Fix audio send duplicate from chatwoot. by @mbap-dev in #1221
- fix: chatwoot csat creating new conversation in another language by @tmsdesarrollo3 in #1226
- 🐛 Fix: Add migration for missing wavoipToken column in MySQL build env (#1234) by @julianoaj in #1235
- Refactor Editing Message events and update message handler by @GrimBit1 in #1237
- fix: change mediaId optional chaining and list response message text obtain by @ygorsantana in #1240
- hotfix(migration): add missing wavoipToken column in MySQL schema by @AndersonSilvaCavalcante in #1244
- ✨ Feat: Remover a reação de uma mensagem. by @julianoaj in #1259
- fix: Refactor SQS controller to correct bug in sqs events by instance by @fernandoralha in #1251
- Fix: Expiration being useless on awaitUser false by @ygorsantana in #1264
- fix: adjusting cloud api send audio and video by @pedroepif in #1287
- Corrige validação de URL para permitir localhost e endereços IP by @jrCleber in #1290
- Add eventos referente a instancia que estavam faltando by @rafwell in #1304
- Corrigindo um bug no endpoint de findChats e permitindo paginação nos endpoints de findChats e findContacts by @pedro-php in #1334
- Adicionando um novo webhook no endpoint de updateMessage by @pedro-php in #1343
- Fix/animated stickers by @marceloapd in #1322
- Adicionando um timestamp ao filename para possibilitar enviar o mesmo arquivo mais de uma vez na mesma conversa. by @alvestassio in #1344
- Hotfix - shell injection vulnerability by @jeffersonfelixdev in #1354
- feat(s3): add S3_SKIP_POLICY env variable to disable setBucketPolicy by @Deyvi-dev in #1362
- Correção para quando enviar uma localização. by @ricocorreia1 in #1351
- Corrigindo um bug ao atualizar o push name no evento MESSAGES_UPSERT e MESSAGES_UPDATE by @pedro-php in #1366
- fix(api): modifica fetchChats para trazer mensagens de contatos não salvos by @leandrosroc in #1384
- fix(audio): ensure full WhatsApp compatibility for audio conversion by @edisonmartinsmkt in #1425
- Tornando Webhook mais seguro com JWT token by @victoreduardo in #1318
- Corrigir utilização do linkPreview no WhatsApp Business API by @onerrogus in #1414
- fix: Erro na criação de conversation quando já existe uma conversation de outro inbox para o mesmo usuário by @victoreduardo in #1415
- fix mysql wavoip token by @paulocoutinhox in #1433
- fix(chatwoot): avoid "undefined" caption on group audio messages by @edisonmartinsmkt in #1434
- Defininando TTL no userDivicesCache igual usado no Baileys by @theeusmartins in #1332
- fix: when you set jpegThumbnail, image not appear on app mobile by @Faelst in #1406
- Update package.json by @icaro-andrade in #1422
- fix(chatwoot): only fallback audio caption when audioMessage exists by @edisonmartinsmkt in #1435
- Findchat group name treatment by @luiis716 in #1420
- fix: remove postinstall script from package.json to fix GitHub Action by @gomessguii in #1450
- Add N8n integration with models, services, and routes by @gomessguii in #1448
- feat(whatsapp): enhance message fetching and processing logic by @gomessguii in #1449
- feat(evoai): add EvoAI integration with models, services, and routes by @gomessguii in #1451
- feat: updated manager to the last version with suport to n8n and EvoA… by @gomessguii in #1452
- feat(evoai): add Evoai and EvoaiSetting tables with foreign key const… by @gomessguii in #1453
- feat(channel): enhance pushName logic for messages by @gomessguii in #1457
- Fixes issue #879 by @thiagoomatheus in #1456
- fix: Deadlock errors and undefined arguments by @KokeroO in #1473
- Fix-chatwoot-import by @AlexSzefezuk in #1481
- Refatoração da funcionalidade de chatbots (em andamento) by @gomessguii in #1482
- fix: melhora consistência e formatação dos chatbots (N8N e Evolution Bot) by @oriondesign2015 in #1484
- chore: possibilita o envio de medias do tipo [svg, tiff] vindas do Chatwoot by @KokeroO in #1483
- fix: Corrige envio da apiKey da instância nos payloads do Evolution Bot e N8N by @oriondesign2015 in #1485
- fix: Corrige envio da apiKey da instância nos payloads do Flowise e do Dify by @oriondesign2015 in #1486
- fix: Corrige o PR1481 by @KokeroO in #1490
- corrige estrutura de if/else e bloco try/catch em chatwoot-import-helper.ts by @oriondesign2015 in #1493
- fix: melhora a formatação e tratamento de erros na função getExistingSourceIds by @KokeroO in #1494
- Inclusão do parâmetro frame_max para compatibilidade com RabbitMQ 4.1+ by @thrsouza in #1498
- fix: Melhora o método createConversation (evita conversas criadas duplicadas Chatwoot) by @KokeroO in #1504
- refactor: improve chatbot integrations by @gomessguii in #1508
- fix: change service image version and change to latest config session phone version by @samuelterra22 in #1513
- Update
fetchStatusMessageto handle empty offset / page by @Daquisu in #1536 - fix: adjustment in audio transcription with official api by @splusoficial in #1556
- feat(audio): support LPCM and fix waveform distortion by @edisonmartinsmkt in #1574
- refactor(chatwoot): Melhora e ajusta tratamento de números @lid by @KokeroO in https://github.com...
v2.2.3
Fixed
- Fix cache in local file system
- Update Baileys Version
What's Changed
- Fix Message deletion in Whatsapp Bailey Service by @GrimBit1 in #1190
- fix(dify-service): Truncated messages (agent bot) by @tonimoreiraa in #1192
New Contributors
- @GrimBit1 made their first contribution in #1190
- @tonimoreiraa made their first contribution in #1192
Full Changelog: 2.2.2...2.2.3