Sistema empresarial completo para WhatsApp com automação inteligente, relatórios executivos, deploy automatizado e monitoramento avançado. Totalmente configurado para produção no DigitalOcean.
- 🔄 Script de deploy automático com backup
- 📦 Configuração inicial do servidor DigitalOcean
- 📊 Monitoramento de saúde do sistema
- 📋 Checklist completo para alterações
- 🔍 Relatórios mais precisos e informativos
- 🐛 Correção de problemas com relatórios vazios
- 📝 Logs de debug aprimorados
- ⚡ Performance otimizada
- Servidor: 161.35.176.216 (DigitalOcean)
- Express Server: ✅ Ativo na porta 8080
- WhatsApp: ✅ Conectado e autenticado
- PM2: ✅ Online (PID: 221177+)
- Comandos: ✅ 14 comandos carregados
- Health Check: ✅ http://161.35.176.216:8080/health
# Status PM2 esperado:
┌──┬─────────────┬───────┬─────┬────────┬──────┬──────┬────────┬─────┬─────┬─────┬────────┐
│id│name │version│mode │pid │uptime│↺ │status │cpu │mem │user │watching│
├──┼─────────────┼───────┼─────┼────────┼──────┼──────┼────────┼─────┼─────┼─────┼────────┤
│0 │whatsapp-bot │1.0.0 │fork │RUNNING │ONLINE│STABLE│online │<5% │<100M│root │disabled│
└──┴─────────────┴───────┴─────┴────────┴──────┴──────┴────────┴─────┴─────┴─────┴────────┘# ================================
# CONFIGURAÇÕES OBRIGATÓRIAS DO BOT WHATSAPP
# ================================
NODE_ENV=production
PORT=8080 # ⚠️ OBRIGATÓRIO - Express Server
COMMAND_PREFIX=!
DEBUG=false
LOG_LEVEL=info
# ================================
# CONFIGURAÇÕES DE ADMINISTRADORES
# ================================
WHATSAPP_ADMIN_NUMBER=[email protected]
ADMIN_WHATSAPP_IDS=[email protected]
DEFAULT_SUMMARY_DAYS=7
# ================================
# CONFIGURAÇÕES DE AGENDAMENTO
# ================================
DAILY_SUMMARY_CRON="0 16 * * *"
WHATSAPP_NOTIFY=true
# ================================
# CONFIGURAÇÃO DE E-MAIL
# ================================
EMAIL_USER=[email protected]
EMAIL_PASS=sua-senha-de-app-gmail
EMAIL_TO=[email protected]
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
# ================================
# CONFIGURAÇÕES AVANÇADAS (FASE 1)
# ================================
DB_PATH=./data/messages.db
COMMAND_TIMEOUT=30000
RATE_LIMIT_MAX_REQUESTS=30
RATE_LIMIT_ADMIN_MAX_REQUESTS=100
CACHE_TTL_STATS=300000
RETRY_MAX_ATTEMPTS=3
RETRY_INITIAL_DELAY=1000
RETRY_BACKOFF_FACTOR=2
MAX_MESSAGE_LENGTH=4096
MAX_COMMAND_ARGS=20
MAX_SEARCH_RESULTS=50module.exports = {
apps: [{
name: 'whatsapp-bot',
script: 'src/index.js', // ⚠️ OBRIGATÓRIO
instances: 1,
exec_mode: 'fork',
env: {
NODE_ENV: 'production',
PORT: 8080 // ⚠️ PORTA OBRIGATÓRIA
},
env_production: {
NODE_ENV: 'production',
PORT: 8080
},
time: false,
log_date_format: '',
merge_logs: true,
combine_logs: true,
timestamp: false,
error_file: './logs/pm2-error.log',
out_file: './logs/pm2-out.log',
log_file: './logs/pm2-combined.log',
max_memory_restart: '1G',
node_args: '--max-old-space-size=1024',
restart_delay: 1000,
max_restarts: 10,
min_uptime: '10s'
}]
};O Express server é OBRIGATÓRIO e está configurado no arquivo src/index.js:
// Linha 22 - OBRIGATÓRIA
const express = require('express');
// Linhas 345-371 - CRÍTICAS - NÃO ALTERAR
const app = express();
const port = process.env.PORT || 8080;
app.get('/health', (req, res) => {
res.json({
status: 'OK',
timestamp: new Date().toISOString(),
uptime: process.uptime(),
version: process.env.npm_package_version || '1.0.0'
});
});
app.listen(port, () => {
logger.info(`Servidor de health check ouvindo na porta ${port}`);
}).on('error', (err) => {
if (err.code === 'EADDRINUSE') {
logger.error(`Porta ${port} já está em uso. Tentando outra porta...`);
const alternativePort = port + 1;
app.listen(alternativePort, () => {
logger.info(`Servidor de health check ouvindo na porta alternativa ${alternativePort}`);
});
} else {
logger.error('Erro ao iniciar servidor:', err);
}
});🚨 IMPORTANTE: Remover o Express server causa o erro EADDRINUSE: address already in use :::8080
/var/www/html/ # Diretório raiz no servidor
├── src/
│ ├── index.js # ✅ ARQUIVO PRINCIPAL
│ ├── database.js # ✅ Banco SQLite
│ ├── emailer.js # ✅ Sistema de email
│ ├── logger.js # ✅ Sistema de logs
│ ├── scheduler.js # ✅ Agendamento
│ ├── summarizer.js # ✅ Gerador de resumos
│ └── commands/ # ✅ 14 comandos
│ ├── group/
│ │ └── todos.js
│ └── util/
│ ├── ajuda.js
│ ├── buscar.js
│ ├── config.js
│ ├── grupos.js
│ ├── logs.js
│ ├── pendencias.js
│ ├── ping.js
│ ├── reiniciar.js
│ ├── resumo-hoje.js
│ ├── stats.js
│ ├── test-email.js
│ ├── uptime.js
│ └── versao.js
├── .env # ✅ CONFIGURAÇÕES
├── package.json # ✅ DEPENDÊNCIAS
├── ecosystem.config.js # ✅ CONFIGURAÇÃO PM2
└── logs/ # ✅ Diretório de logs
{
"dependencies": {
"@discordjs/collection": "^1.5.3",
"@google-cloud/storage": "^7.0.0",
"@sendgrid/mail": "^8.1.5",
"compromise": "^13.11.3",
"dotenv": "^16.6.1",
"express": "^4.21.2", // ⚠️ CRÍTICO - NÃO REMOVER
"express-rate-limit": "^7.5.1",
"helmet": "^8.1.0",
"joi": "^17.13.3",
"node-cache": "^5.1.2",
"node-cron": "^3.0.3",
"nodemailer": "^6.10.1",
"puppeteer": "^19.11.1",
"qrcode-terminal": "^0.12.0",
"quickchart-js": "^3.1.0",
"remove-accents": "^0.5.0",
"sentiment": "^5.0.2",
"sqlite3": "^5.1.6",
"tar-fs": "2.1.3",
"whatsapp-web.js": "^1.30.0",
"winston": "^3.11.0",
"winston-daily-rotate-file": "^4.7.1"
}
}# No servidor (161.35.176.216):
cd /var/www/html
git clone https://github.com/josemar9993/Whats-17-06.git .
git checkout versao-ontem-16h # ⚠️ BRANCH OBRIGATÓRIA
npm install
pm2 start ecosystem.config.js# No servidor:
cd /var/www/html
git stash # Salvar mudanças locais
git fetch origin # Baixar atualizações
git checkout versao-ontem-16h # ⚠️ SEMPRE esta branch
pm2 restart whatsapp-bot # Reiniciar bot
pm2 logs whatsapp-bot --lines 20 # Verificar logspm2 list # Lista processos
pm2 logs whatsapp-bot # Ver logs em tempo real
pm2 monit # Monitor visual
curl http://localhost:8080/health # Testar health check✅ info: Configurando o cliente do WhatsApp...
✅ info: [DEBUG CONFIG] commandPrefix: "!"
✅ info: [DEBUG CONFIG] dailySummaryCron: "0 16 * * *"
✅ info: [COMANDO CARREGADO] todos
✅ info: [COMANDO CARREGADO] ajuda
✅ info: [COMANDO CARREGADO] buscar
✅ info: [COMANDO CARREGADO] config
✅ info: [COMANDO CARREGADO] grupos
✅ info: [COMANDO CARREGADO] logs
✅ info: [COMANDO CARREGADO] pendencias
✅ info: [COMANDO CARREGADO] ping
✅ info: [COMANDO CARREGADO] reiniciar
✅ info: [COMANDO CARREGADO] resumo-hoje
✅ info: [COMANDO CARREGADO] stats
✅ info: [COMANDO CARREGADO] test-email
✅ info: [COMANDO CARREGADO] uptime
✅ info: [COMANDO CARREGADO] versao
✅ info: Configurando eventos do cliente...
✅ info: Inicializando o cliente... Isso pode levar um minuto.
✅ info: Servidor de health check ouvindo na porta 8080
✅ info: Cliente autenticado!
✅ info: Cliente do WhatsApp está pronto!
✅ info: [CRON] Tarefa de resumo diário agendada com a expressão: "0 16 * * *"
| Comando | Descrição | Exemplo |
|---|---|---|
!ajuda |
Lista todos os comandos | !ajuda |
!ping |
Verifica status do bot | !ping |
!uptime |
Tempo online do sistema | !uptime |
!versao |
Versão atual do bot | !versao |
| Comando | Descrição | Exemplo |
|---|---|---|
!todos |
Menciona todos do grupo | !todos |
| Comando | Descrição | Exemplo |
|---|---|---|
!stats |
Estatísticas do sistema | !stats |
!buscar <termo> |
Busca em mensagens | !buscar pedido |
!pendencias |
Perguntas sem resposta | !pendencias |
!resumo-hoje [data] |
Resumo do dia/período | !resumo-hoje 01/01/2025 |
!logs [linhas] |
Visualizar logs | !logs 50 |
!grupos |
Lista grupos ativos | !grupos |
!config |
Configurações do bot | !config |
!reiniciar |
Reinicia o sistema | !reiniciar |
!test-email |
Testa envio de email | !test-email |
Causa: Express server removido ou porta em conflito
Solução: Garantir que o Express server está ativo no código
Causa: client.initialize() não chamado
Solução: Verificar se a linha está no final do src/index.js
Causa: Estrutura de pastas incorreta
Solução: Verificar estrutura src/commands/group/ e src/commands/util/
Causa: Dependências não instaladas
Solução: npm install antes de iniciar PM2
- IP: 161.35.176.216
- OS: Ubuntu 24.04.2 LTS
- Node.js: >= 16.0.0
- PM2: Versão mais recente
- Diretório: /var/www/html
- Usuário: root
- 8080: Express Health Check (HTTP)
- 22: SSH
- 80: HTTP (liberado no firewall)
- 443: HTTPS (liberado no firewall)
# Portas liberadas automaticamente:
ufw allow 22/tcp # SSH
ufw allow 80/tcp # HTTP
ufw allow 443/tcp # HTTPS
# Porta 8080 é interna (não precisa liberar)- Health Check: http://161.35.176.216:8080/health
- Status: Deve retornar JSON com status: "OK"
- Memory: < 100MB normal
- CPU: < 5% normal
- Uptime: Deve ser estável
- Restarts: Máximo 10 por dia
- SMTP: smtp.gmail.com:587
- Usuário: [email protected]
- Senha App: sua-senha-de-app-gmail
- Destinatário: [email protected]
- Número: [email protected]
- Formato: Sempre incluir @c.us
# Verificar logs
pm2 logs whatsapp-bot
# Verificar status
pm2 list
# Reiniciar bot
pm2 restart whatsapp-bot
# Health check
curl http://localhost:8080/health
# Limpar logs
pm2 flush whatsapp-bot- Verificar logs:
pm2 logs whatsapp-bot - Verificar status:
pm2 list - Reiniciar:
pm2 restart whatsapp-bot - Health check:
curl http://localhost:8080/health
git checkout versao-ontem-16h # Voltar para versão estável- Branch:
versao-ontem-16h - Commit:
dcd3026(docs: Atualizar README.md com sistema enterprise completo) - Status: ✅ FUNCIONANDO PERFEITAMENTE
- Data: 01/07/2025
- Testado por: GitHub Copilot
- ✅ Express Server Ativo (porta 8080)
- ✅ WhatsApp Client Conectado
- ✅ 14 Comandos Funcionais
- ✅ PM2 Configurado
- ✅ Logs Estruturados
- ✅ Health Check Endpoint
- ✅ Sistema de Email Funcional
- ✅ Agendamento de Resumos (16:00)
Para documentação completa e detalhada, consulte:
- 📋 CONFIGURACAO_ESTAVEL.md - Documentação técnica completa
- 🔧 ecosystem.config.js - Configuração do PM2
- ⚙️ .env - Variáveis de ambiente