Sistema completo de atendimento automatizado para WhatsApp com dashboard web, autenticação, agendamento de mensagens e integração com Google Calendar.
Este projeto é apenas para fins educacionais.
Utiliza bibliotecas não-oficiais que violam os Termos de Serviço do WhatsApp e pode resultar em banimento da conta. NÃO use em números comerciais importantes.
Para uso profissional, utilize a WhatsApp Business API oficial.
- ✅ Atendimento automatizado 24/7
- ✅ Menu interativo com opções personalizáveis
- ✅ Histórico completo de conversas
- ✅ Respostas contextuais
- ✅ Simulação de "digitando..."
- ✅ Salvamento automático no banco de dados
- ✅ Interface moderna e responsiva
- ✅ Estatísticas em tempo real
- ✅ Gerenciamento de contatos
- ✅ Histórico completo de mensagens
- ✅ Busca avançada
- ✅ Gráficos de atividade
- ✅ Atualização automática (30s)
- ✅ Login seguro com JWT
- ✅ Tokens com expiração configurável (24h)
- ✅ 3 níveis de acesso:
- Admin: Acesso total
- Atendente: Criar e gerenciar agendamentos
- Visualizador: Apenas visualizar dados
- ✅ Bloqueio após 5 tentativas falhas (15 min)
- ✅ Alteração de senha
- ✅ Gestão de usuários
- ✅ Mensagens Únicas: Agende para data/hora específica
- ✅ Mensagens Recorrentes:
- Diária: Todos os dias
- Semanal: Dias da semana específicos
- Mensal: Dia do mês específico
- ✅ Processamento automático a cada minuto
- ✅ Retry automático em caso de falha (até 3x)
- ✅ Variáveis dinâmicas:
{nome},{data},{hora} - ✅ Cancelamento de agendamentos
- ✅ Estatísticas detalhadas
- ✅ Autenticação OAuth 2.0
- ✅ Criar eventos automaticamente
- ✅ Sincronizar agendamentos do bot
- ✅ Suporte a eventos recorrentes
- ✅ Visualizar próximos eventos
- ✅ Lembretes configuráveis
- ✅ Link direto para eventos
- ✅ Armazenamento de mensagens
- ✅ Cadastro de contatos
- ✅ Estatísticas diárias
- ✅ Configurações personalizáveis
- ✅ Índices otimizados
- ✅ Busca avançada
- ✅ 30+ endpoints documentados
- ✅ Autenticação JWT em todas rotas
- ✅ Tratamento de erros robusto
- ✅ Responses padronizados
- ✅ CORS configurado
- Node.js 16.0.0 ou superior
- MongoDB instalado e rodando
- NPM 7.0.0 ou superior
- Google Chrome (para WhatsApp)
- Número de WhatsApp para teste
- (Opcional) Conta Google para Calendar
mkdir bot-whatsapp-completo
cd bot-whatsapp-completo
mkdir publicWindows:
choco install mongodbLinux (Ubuntu/Debian):
sudo apt-get update
sudo apt-get install -y mongodb
sudo systemctl start mongodb
sudo systemctl enable mongodbmacOS:
brew tap mongodb/brew
brew install mongodb-community
brew services start mongodb-communityCopie todos os arquivos fornecidos nos artefatos para as respectivas pastas (consulte GUIA COMPLETO - Todos os Arquivos).
npm installcp .env.example .env
nano .envIMPORTANTE: Altere o JWT_SECRET para um valor único e seguro:
JWT_SECRET=seu-secret-super-seguro-aqui-xyz789Opção 1: Tudo Junto (Recomendado)
npm run start:allOpção 2: Separado
# Terminal 1 - Bot
npm start
# Terminal 2 - Dashboard
npm run dashboard- Aguarde o QR Code aparecer no terminal
- Abra o WhatsApp no celular
- Vá em: Menu (⋮) > Aparelhos conectados > Conectar aparelho
- Escaneie o QR Code
- ✅ Bot conectado!
- Abra o navegador: http://localhost:3000
- Faça login com:
- Email:
admin@bot.com - Senha:
admin123
- Email:
⚠️ IMPORTANTE: Altere a senha imediatamente!
| Comando | Descrição |
|---|---|
/menu ou menu |
Exibe o menu principal |
1 |
Horário de atendimento |
2 |
Serviços disponíveis |
3 |
Falar com atendente |
4 |
Sobre nós |
5 |
Ver histórico de conversas |
oi, olá, ola |
Saudação inicial |
obrigado, valeu |
Agradecimento |
- Cards de Estatísticas: Mensagens hoje, total de contatos, contatos ativos, mensagens da semana
- Atualização Automática: Dados atualizados automaticamente a cada 30 segundos
- Lista completa de todos os contatos
- Busca por nome ou telefone
- Total de mensagens por contato
- Data do último contato
- Status (ativo/inativo/bloqueado)
- Clique em um contato para ver histórico completo
- Visualização de todas as conversas
- Busca por conteúdo de mensagens
- Interface estilo chat
- Filtros por data
- Botão "+ Nova Mensagem": Criar novo agendamento
- Filtros: Por status (pendente, enviada, falhada, cancelada) e tipo (única, recorrente)
- Estatísticas: Pendentes, enviadas e recorrentes ativas
- Integração Google Calendar: Conectar, sincronizar e visualizar eventos
- Ações: Cancelar agendamentos e sincronizar com Calendar
- Gráfico de mensagens dos últimos 7 dias
- Análise de tendências
- Métricas de atividade
Agende uma mensagem para ser enviada em data e hora específicas.
Exemplo:
Contato: João Silva
Mensagem: Lembrete: Reunião amanhã às 14h!
Data: 25/12/2024 09:00
Enviada todos os dias no horário especificado.
Horário: 08:00
Mensagem: Bom dia! Lembrete diário.
Enviada nos dias da semana selecionados.
Dias: Segunda, Quarta, Sexta
Horário: 14:00
Mensagem: Follow-up semanal!
Enviada no dia do mês especificado.
Dia: 25
Horário: 16:00
Mensagem: Relatório mensal disponível.
Use variáveis nas mensagens:
Olá {nome}!
Hoje é {data} e são {hora}.
Lembrete importante para você!
Veja o guia completo em: GUIA_GOOGLE_CALENDAR.md
Resumo:
- Crie projeto no Google Cloud Console
- Ative Google Calendar API
- Crie credenciais OAuth 2.0
- Baixe
google-credentials.json - Coloque na raiz do projeto
- Reinicie o sistema
- No dashboard: Conectar Google Calendar
- Conectar: Clique em "Conectar Google Calendar" na aba Agendamentos
- Sincronizar Individual: Clique no botão "📅 Sync" ao lado do agendamento
- Sincronizar Todos: Clique em "🔄 Sincronizar Todos"
- Ver Eventos: Lista de próximos 5 eventos aparece automaticamente
| Funcionalidade | Admin | Atendente | Visualizador |
|---|---|---|---|
| Ver Dashboard | ✅ | ✅ | ✅ |
| Ver Contatos/Mensagens | ✅ | ✅ | ✅ |
| Agendar Mensagens | ✅ | ✅ | ❌ |
| Cancelar Agendamentos | ✅ | Próprios | ❌ |
| Criar Usuários | ✅ | ❌ | ❌ |
| Alterar Configurações | ✅ | ❌ | ❌ |
| Conectar Google Calendar | ✅ | ✅ | ❌ |
Via Dashboard (Admin):
- Menu do usuário > Gerenciar Usuários
-
- Novo Usuário
- Preencha: Nome, Email, Senha, Role
- Salvar
Via API:
curl -X POST http://localhost:3000/api/usuarios \
-H "Authorization: Bearer SEU_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"nome": "João Silva",
"email": "joao@empresa.com",
"senha": "senha123",
"role": "atendente"
}'Todas as rotas (exceto login) requerem token JWT no header:
Authorization: Bearer SEU_TOKEN
POST /api/auth/login- LoginGET /api/auth/verificar- Verificar token
POST /api/usuarios- Criar usuário (admin)GET /api/usuarios- Listar usuários (admin)POST /api/usuarios/senha- Alterar senha
GET /api/dashboard- Estatísticas geraisGET /api/contatos- Listar contatosGET /api/contatos/:chatId- Detalhes do contatoGET /api/historico/:chatId- Histórico de conversaGET /api/mensagens- Mensagens por períodoGET /api/estatisticas- Estatísticas por período
POST /api/agendamentos- Agendar mensagem únicaPOST /api/agendamentos/recorrente- Agendar recorrenteGET /api/agendamentos- Listar agendamentosDELETE /api/agendamentos/:id- Cancelar agendamentoGET /api/agendamentos/stats- Estatísticas
GET /api/google-calendar/status- Status conexãoGET /api/google-calendar/auth-url- URL autorizaçãoDELETE /api/google-calendar/disconnect- DesconectarPOST /api/google-calendar/eventos- Criar eventoGET /api/google-calendar/eventos- Listar eventosPOST /api/google-calendar/sincronizar/:id- Sincronizar
{
chatId: String,
nomeContato: String,
mensagem: String,
resposta: String,
tipo: String, // 'recebida' ou 'enviada'
timestamp: Date
}{
chatId: String,
nome: String,
telefone: String,
primeiroContato: Date,
ultimoContato: Date,
totalMensagens: Number,
status: String, // 'ativo', 'inativo', 'bloqueado'
tags: [String],
notas: String
}{
nome: String,
email: String,
senha: String, // hash bcrypt
role: String, // 'admin', 'atendente', 'visualizador'
ativo: Boolean,
ultimoLogin: Date,
tentativasLogin: Number,
bloqueadoAte: Date
}{
chatId: String,
nomeContato: String,
mensagem: String,
dataAgendamento: Date,
status: String, // 'pendente', 'enviada', 'falhou', 'cancelada'
tipo: String, // 'unica', 'recorrente'
recorrencia: {
frequencia: String,
diasSemana: [Number],
diaMes: Number,
horario: String
},
googleCalendarEventId: String
}Edite bot-v2.js:
const respostas = {
'/menu': `🤖 *Seu Menu Personalizado*\n\n...`,
'1': `Sua resposta personalizada`,
// Adicione mais opções
'6': `Nova opção aqui`
};async function processarMensagem(mensagem, chatId) {
const texto = mensagem.toLowerCase().trim();
// Seu novo comando
if (texto.includes('palavra-chave')) {
return 'Sua resposta personalizada';
}
// ... resto do código
}Edite public/index.html para:
- Alterar cores e estilos
- Adicionar novos cards
- Modificar layout
- Incluir novas funcionalidades
# Verificar status
sudo systemctl status mongodb
# Iniciar
sudo systemctl start mongodbEdite bot-v2.js:
headless: false // Altere de true para falseNo .env:
PORT=3001
- Faça logout e login novamente
- Verifique se JWT_SECRET está correto no
.env
- Confirme que bot está conectado
- Veja logs no console
- Verifique conexão com internet
- Verifique se MongoDB está rodando
- Confirme que data/hora são futuras
- Veja status no dashboard
- Verifique
google-credentials.jsonna raiz - Confirme redirect URI no Google Cloud Console
- Adicione seu email como usuário de teste
- QUICK_START.md - Guia de início rápido
- GUIA_AUTH_SCHEDULER.md - Autenticação e agendamento
- GUIA_GOOGLE_CALENDAR.md - Integração Google Calendar
- ✅ Altere a senha admin após primeiro login
- ✅ Mude
JWT_SECRETno.env(produção) - ✅ Não commite credenciais no git
- ✅ Use HTTPS em produção
- ✅ Configure firewall adequadamente
- ✅ Faça backup regular do MongoDB
- ✅ Monitore logs de acesso
- ✅ Revise permissões de usuários
- Use variáveis de ambiente seguras
- Configure SSL/TLS
- Implemente rate limiting
- Adicione logging avançado
- Configure monitoramento
- Use serviço gerenciado de MongoDB
- Habilite autenticação MongoDB
- Contatos simultâneos: 100-200
- Mensagens/dia: 1000-2000
- Agendamentos ativos: 500
- Usuários logados: 10-20
- Índices MongoDB otimizados
- Cache de consultas frequentes
- Lazy loading no frontend
- Paginação de resultados
- Compressão de responses
Este é um projeto educacional. Sugestões e melhorias são bem-vindas!
MIT License - Apenas para fins educacionais
Para uso profissional:
- Utilize a WhatsApp Business API oficial
- Contrate um Business Solution Provider (BSP)
- Siga todos os Termos de Serviço
- Implemente compliance LGPD/GDPR
- Obtenha consentimento dos usuários
# Logs do Bot e Dashboard
# Veja no console onde executou npm start
# Logs MongoDB
sudo journalctl -u mongodb
# Limpar logs
npm run clean-logs# Limpar banco de dados
mongo whatsapp-bot --eval "db.dropDatabase()"
# Remover sessão WhatsApp
rm -rf tokens/
# Reinstalar dependências
rm -rf node_modules
npm installPossíveis melhorias:
- Integração com IA (Claude/GPT)
- Envio de mídia (imagens, vídeos)
- Templates de mensagens
- Chatbot com contexto
- Análise de sentimento
- Dashboard de métricas avançadas
- Múltiplos atendentes
- Sistema de filas
- Integração CRM
- App mobile
Desenvolvido para aprendizado e experimentação 🚀
Para dúvidas, consulte a documentação completa ou os guias específicos.