diff --git a/newwhats.clube67.com/newwhats.local/backend/.env.example b/newwhats.clube67.com/newwhats.local/backend/.env.example index 7449427..51c6d73 100644 --- a/newwhats.clube67.com/newwhats.local/backend/.env.example +++ b/newwhats.clube67.com/newwhats.local/backend/.env.example @@ -44,3 +44,12 @@ BAILEYS_SESSIONS_PATH=./sessions # Frontend (CORS) # ───────────────────────────────────────────── FRONTEND_URL=http://localhost:3000 + +# ───────────────────────────────────────────── +# Modo teste (kill switch de saída) +# ───────────────────────────────────────────── +# Quando "true", bloqueia QUALQUER envio de mensagem ao WhatsApp (sock.sendMessage) +# para TODAS as instâncias — rotas, IA/secretária, chatbot, scheduler, warmer e +# plugins. Use em ambientes de DESENVOLVIMENTO/teste para nunca disparar mensagens +# a contatos/grupos reais. Em produção, deixe ausente/false. +DISABLE_OUTBOUND=false diff --git a/newwhats.clube67.com/newwhats.local/backend/src/modules/whatsapp/connection/WhatsAppConnectionManager.ts b/newwhats.clube67.com/newwhats.local/backend/src/modules/whatsapp/connection/WhatsAppConnectionManager.ts index 478616e..06a15ff 100644 --- a/newwhats.clube67.com/newwhats.local/backend/src/modules/whatsapp/connection/WhatsAppConnectionManager.ts +++ b/newwhats.clube67.com/newwhats.local/backend/src/modules/whatsapp/connection/WhatsAppConnectionManager.ts @@ -253,6 +253,21 @@ export class WhatsAppConnectionManager { }, }) + // ── Kill switch de saída (modo teste) ────────────────────────────────────── + // DISABLE_OUTBOUND=true impede QUALQUER envio ao WhatsApp nesta sessão. + // Como todo envio (rotas, IA/secretária, chatbot, scheduler, warmer, plugins) + // usa este sock, envolver sendMessage aqui é o backstop universal para os + // testes: nada é disparado para contatos/grupos reais. + if (process.env.DISABLE_OUTBOUND === 'true') { + sock.sendMessage = (async (jid: string) => { + logger.warn({ instanceId, jid }, + '[OUTBOUND BLOQUEADO] DISABLE_OUTBOUND ativo — mensagem NÃO enviada (modo teste)') + return { key: { id: `BLOCKED_${Date.now()}`, remoteJid: jid, fromMe: true }, status: 1 } as any + }) as typeof sock.sendMessage + logger.warn({ instanceId }, + '[OUTBOUND BLOQUEADO] Modo teste ativo — envios desativados nesta sessão') + } + this.sockets.set(instanceId, sock) this.touchActivity(instanceId)