6.5 KiB
🚀 Evolution API - Multi-Device Fix
📋 Resumo da Alteração
Problema: A Evolution API estava caindo/desconectando quando o WhatsApp Android estava ativo, porque se identificava como "WebClient" (WhatsApp Web), ocupando o slot de sessão web.
Solução: Remover a identificação de browser para usar o modo Multi-Device nativo do Baileys 7.x, que não conflita com outras sessões.
🔧 Alteração no Código
Arquivo: src/api/integrations/channel/whatsapp/whatsapp.baileys.service.ts
ANTES (WebClient - CAI):
const session = this.configService.get<ConfigSessionPhone>('CONFIG_SESSION_PHONE');
let browserOptions = {};
if (number || this.phoneNumber) {
this.phoneNumber = number;
this.logger.info(`Phone number: ${number}`);
} else {
const browser: WABrowserDescription = [session.CLIENT, session.NAME, release()];
browserOptions = { browser };
this.logger.info(`Browser: ${browser}`);
}
// ... no socketConfig:
...browserOptions,
DEPOIS (Multi-Device nativo - NÃO CAI):
if (number || this.phoneNumber) {
this.phoneNumber = number;
this.logger.info(`Phone number: ${number}`);
}
// Multi-Device mode: não definimos browser para evitar ser tratado como WebClient
// Isso faz o Baileys usar o modo MD nativo, que não conflita com outras sessões
this.logger.info('Using Multi-Device native mode (no browser identification)');
// ... no socketConfig:
// Removido browserOptions para usar Multi-Device nativo (não WebClient)
Imports removidos:
ConfigSessionPhonedo@config/env.configWABrowserDescriptiondobaileysreleasedoos
📦 Repositório Fork
URL: https://github.com/joinads/evolution-api
Commit: 5dbf3e93 - "fix: usar Multi-Device nativo para evitar desconexões"
🐳 Deploy na VPS com Docker Compose
Pré-requisitos
- Docker e Docker Compose instalados
- Acesso SSH à VPS
- Volumes existentes com dados (PostgreSQL, Redis, Instances)
Volumes Utilizados (externos)
evolution-clean_evolution_instances # Dados das instâncias WhatsApp
evolution-clean_evolution_redis # Cache Redis
evolution-clean_postgres_data # Banco de dados PostgreSQL
📝 Comandos de Deploy
1. Clone o repositório
cd ~
git clone https://github.com/joinads/evolution-api.git evolution-api-custom
cd evolution-api-custom
2. Copie o .env existente
cp ~/evolution-clean/.env .
3. Crie o docker-compose.prod.yaml
cat > docker-compose.prod.yaml << 'EOF'
services:
api:
container_name: evolution_api
build:
context: .
dockerfile: Dockerfile
image: evolution-api:v2.3.4-multidevice
restart: always
depends_on:
- redis
- postgres
ports:
- 8080:8080
volumes:
- evolution-clean_evolution_instances:/evolution/instances
networks:
- evolution-net
env_file:
- .env
expose:
- 8080
redis:
image: redis:latest
networks:
- evolution-net
container_name: redis
command: >
redis-server --port 6379 --appendonly yes
volumes:
- evolution-clean_evolution_redis:/data
ports:
- 6379:6379
postgres:
container_name: postgres
image: postgres:15
networks:
- evolution-net
command: ["postgres", "-c", "max_connections=1000", "-c", "listen_addresses=*"]
restart: always
ports:
- 5432:5432
environment:
- POSTGRES_USER=caio
- POSTGRES_PASSWORD=caio123
- POSTGRES_DB=evolution
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- evolution-clean_postgres_data:/var/lib/postgresql/data
expose:
- 5432
volumes:
evolution-clean_evolution_instances:
external: true
evolution-clean_evolution_redis:
external: true
evolution-clean_postgres_data:
external: true
networks:
evolution-net:
name: evolution-net
driver: bridge
EOF
4. Pare a Evolution antiga (se estiver rodando)
cd ~/evolution-clean
docker-compose down
5. Build da nova imagem
cd ~/evolution-api-custom
docker-compose -f docker-compose.prod.yaml build --no-cache
6. Suba os containers
docker-compose -f docker-compose.prod.yaml up -d
7. Verifique os logs
docker-compose -f docker-compose.prod.yaml logs -f api
🔄 Comandos Úteis
Ver status dos containers
docker-compose -f docker-compose.prod.yaml ps
Reiniciar a API
docker-compose -f docker-compose.prod.yaml restart api
Ver logs em tempo real
docker-compose -f docker-compose.prod.yaml logs -f api
Parar todos os containers
docker-compose -f docker-compose.prod.yaml down
Rebuild após alterações no código
git pull origin main
docker-compose -f docker-compose.prod.yaml build --no-cache
docker-compose -f docker-compose.prod.yaml up -d
🔍 Verificar se o Fix está Funcionando
Nos logs da API, você deve ver:
Using Multi-Device native mode (no browser identification)
NÃO deve mais aparecer:
Browser: ['Evolution API', 'Chrome', ...]
⚠️ Notas Importantes
-
Instâncias existentes: Continuam funcionando normalmente. As credenciais salvas não dependem do parâmetro
browser. -
Novas conexões: Usarão o modo Multi-Device nativo automaticamente.
-
Se uma sessão expirar: Ao reconectar via QR Code, já usará o novo modo.
-
Volumes externos: O docker-compose usa
external: truepara apontar para os volumes existentes, preservando todos os dados.
📊 Comparação: Antes vs Depois
| Aspecto | Antes (v2.3.4 oficial) | Depois (com fix) |
|---|---|---|
| Identificação | ['Evolution API', 'Chrome', OS] |
Nenhuma (MD nativo) |
| Tipo de sessão | WebClient | Multi-Device |
| Aparece como | "WhatsApp Web" | Dispositivo vinculado |
| Conflita com Android | ✅ SIM | ❌ NÃO |
| Cai quando Android ativo | ✅ SIM | ❌ NÃO |
🆘 Rollback (Voltar para versão oficial)
Se precisar voltar para a versão oficial:
cd ~/evolution-api-custom
docker-compose -f docker-compose.prod.yaml down
cd ~/evolution-clean
docker-compose up -d
📅 Data da Alteração
04 de Dezembro de 2025
👤 Autor
Alteração realizada com auxílio de IA (Claude/Cursor)