From 266fe3420e5d4c0e58c4fafcbd500290fd8f8f46 Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 8 Feb 2026 03:06:28 +0000 Subject: [PATCH] fix(evolution): prevent Evolution instances from getting stuck in 'close' state Evolution is a webhook-based integration that should always be considered 'open' since it passively receives events. Three changes fix the issue: 1. monitor.service.ts: Always call connectToWhatsapp() for Evolution instances on server restart, regardless of stored connection status. 2. instance.controller.ts: Call connectToWhatsapp() for Evolution instances during creation to initialize Chatwoot settings. 3. evolution.channel.service.ts: Restore stateConnection to 'open' and persist it to DB when connectToWhatsapp() is called in init mode. Closes #2419 https://claude.ai/code/session_013wxk4cj5U2H5fr2cxCgWdH --- src/api/controllers/instance.controller.ts | 4 ++++ .../channel/evolution/evolution.channel.service.ts | 9 +++++++++ src/api/services/monitor.service.ts | 6 +++++- 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/api/controllers/instance.controller.ts b/src/api/controllers/instance.controller.ts index 6a6910688..aef7595f5 100644 --- a/src/api/controllers/instance.controller.ts +++ b/src/api/controllers/instance.controller.ts @@ -156,6 +156,10 @@ export class InstanceController { getQrcode = instance.qrCode; } + if (instanceData.integration === Integration.EVOLUTION) { + await instance.connectToWhatsapp(); + } + const result = { instance: { instanceName: instance.instanceName, diff --git a/src/api/integrations/channel/evolution/evolution.channel.service.ts b/src/api/integrations/channel/evolution/evolution.channel.service.ts index 87bea08e6..c29d3d49a 100644 --- a/src/api/integrations/channel/evolution/evolution.channel.service.ts +++ b/src/api/integrations/channel/evolution/evolution.channel.service.ts @@ -115,6 +115,15 @@ export class EvolutionStartupService extends ChannelStartupService { public async connectToWhatsapp(data?: any): Promise { if (!data) { + this.stateConnection = { state: 'open' }; + + if (this.instanceId) { + await this.prismaRepository.instance.update({ + where: { id: this.instanceId }, + data: { connectionStatus: 'open' }, + }); + } + this.loadChatwoot(); return; } diff --git a/src/api/services/monitor.service.ts b/src/api/services/monitor.service.ts index 438530b57..8bd3c6dbf 100644 --- a/src/api/services/monitor.service.ts +++ b/src/api/services/monitor.service.ts @@ -293,7 +293,11 @@ export class WAMonitoringService { ownerJid: instanceData.ownerJid, }); - if (instanceData.connectionStatus === 'open' || instanceData.connectionStatus === 'connecting') { + if ( + instanceData.connectionStatus === 'open' || + instanceData.connectionStatus === 'connecting' || + instanceData.integration === Integration.EVOLUTION + ) { this.logger.info( `Auto-connecting instance "${instanceData.instanceName}" (status: ${instanceData.connectionStatus})`, );