Sistema de armazenamento de dados do Evolution GO usando bancos separados para diferentes finalidades.
- Visão Geral
- Por que Dois Bancos
- Banco Auth
- Banco Users
- Tabelas Principais
- Como os Dados se Relacionam
- Boas Práticas
O Evolution GO usa dois bancos de dados separados. Pense nisso como ter dois armários diferentes:
- Banco Auth (
evogo_auth): Guarda os dados técnicos do WhatsApp - Banco Users (
evogo_users): Guarda os dados da sua aplicação
- PostgreSQL: Recomendado para produção (servidores reais)
- SQLite: Usado para desenvolvimento e testes (arquivo local)
Imagine que você tem uma loja:
- Armário 1 (Auth): Guarda as chaves, segredos e equipamentos técnicos
- Armário 2 (Users): Guarda produtos, clientes e vendas
É mais organizado e seguro manter separado!
- Organização: Dados do WhatsApp separados dos dados da sua API
- Segurança: Backup independente para cada tipo de dado
- Performance: Cada banco pode ser otimizado para seu uso
- Escalabilidade: Pode colocar cada banco em um servidor diferente
Todos os dados técnicos do WhatsApp (biblioteca whatsmeow):
- Chaves de criptografia - Para proteger suas mensagens
- Informações do dispositivo - Identificação do seu WhatsApp
- Sessões ativas - Conexões abertas
- Contatos sincronizados - Lista de contatos
O WhatsApp cria automaticamente várias tabelas:
- whatsmeow_device - Seu "telefone virtual"
- whatsmeow_identity_keys - Chaves de segurança
- whatsmeow_sessions - Sessões de conversa
- whatsmeow_contacts - Lista de contatos
- ... e outras 6-7 tabelas técnicas
Este banco contém as chaves de criptografia. Sem backup dele:
- ✅ Com backup: Reconecta automaticamente após reiniciar
- ❌ Sem backup: Precisa escanear QR Code novamente
Todos os dados da sua aplicação:
- Instâncias - Cada WhatsApp conectado
- Mensagens - Histórico de mensagens enviadas
- Labels - Etiquetas/marcações
- Configurações - Webhooks, eventos, etc.
O que é: A tabela mais importante! Cada linha é um WhatsApp conectado.
Informações guardadas:
- id: Identificador único (tipo CPF)
- name: Nome amigável (ex: "vendas", "suporte")
- token: Chave de acesso da instância
- webhook: URL para receber eventos
- jid: Número do WhatsApp (ex: 5511999999999@s.whatsapp.net)
- connected: Está conectado? (true/false)
- qrcode: QR Code para conectar
- events: Quais eventos quer receber
Configurações Avançadas:
- always_online: Aparecer sempre online
- reject_call: Rejeitar chamadas automaticamente
- read_messages: Marcar mensagens como lidas
- ignore_groups: Ignorar mensagens de grupo
- ignore_status: Ignorar status/stories
O que é: Histórico de mensagens (opcional, pode ser desabilitado).
Informações guardadas:
- id: Identificador único
- message_id: ID da mensagem no WhatsApp
- timestamp: Quando foi enviada
- status: Status (enviada, entregue, lida)
- source: De qual instância veio
💡 Dica: Por padrão, não salvamos o conteúdo completo das mensagens por questão de espaço.
O que é: Etiquetas/marcações do WhatsApp.
Informações guardadas:
- id: Identificador único
- instance_id: De qual instância
- label_name: Nome da etiqueta (ex: "Cliente VIP")
- label_color: Cor da etiqueta (0-19)
┌──────────────┐
│ instances │ (Tabela Principal)
│ │
│ - id │◄─────────┐
│ - name │ │
│ - token │ │ Relacionamento
│ - connected │ │
└──────────────┘ │
│
┌──────────────┴──────────────┐
│ │
┌──────▼──────┐ ┌───────▼──────┐
│ messages │ │ labels │
│ │ │ │
│ - id │ │ - id │
│ - source ───┼─────┐ │ - instance_id│───┐
│ (FK) │ │ │ (FK) │ │
└─────────────┘ │ └──────────────┘ │
│ │
└────── Aponta para ────────┘
instances.id
FK = Foreign Key (Chave Estrangeira)
- Significa que aponta para outra tabela
- Como um "link" entre tabelas
Se você deletar uma instância, automaticamente deleta:
- ✅ Todas as mensagens dessa instância
- ✅ Todas as labels dessa instância
Isso se chama deleção em cascata - como um efeito dominó!
Imagine que você tem:
1 Instância:
ID: abc-123
Nome: vendas
Token: token-vendas-123
3 Mensagens desta instância:
Mensagem 1: source = abc-123
Mensagem 2: source = abc-123
Mensagem 3: source = abc-123
2 Labels desta instância:
Label 1: instance_id = abc-123
Label 2: instance_id = abc-123
Se você deletar a instância abc-123:
- ❌ Instância deletada
- ❌ 3 mensagens deletadas automaticamente
- ❌ 2 labels deletadas automaticamente
# Banco Auth (Dados do WhatsApp)
POSTGRES_AUTH_DB=postgresql://user:pass@localhost:5432/evogo_auth
# Banco Users (Dados da API)
POSTGRES_USERS_DB=postgresql://user:pass@localhost:5432/evogo_usersQuando você inicia o Evolution GO pela primeira vez:
- Sistema verifica se as tabelas existem
- Se não existir, cria automaticamente
- Se existir, apenas conecta
- Nunca remove ou altera tabelas existentes (seguro!)
Isso se chama Auto-Migration (migração automática).
Recomendado: Backup diário automático
# Backup do banco Auth (CRÍTICO!)
pg_dump -U postgres evogo_auth > backup_auth_$(date +%Y%m%d).sql
# Backup do banco Users
pg_dump -U postgres evogo_users > backup_users_$(date +%Y%m%d).sql💡 O backup do Auth é mais crítico pois contém as chaves de criptografia!
Tabelas crescem com o tempo:
| Tabela | Crescimento |
|---|---|
| messages | Rápido (se salvar mensagens) |
| instances | Lento |
| labels | Lento |
| whatsmeow_* | Médio |
Recomendação: Limpar mensagens antigas regularmente.
O que é: Reutilizar conexões ao banco ao invés de abrir/fechar toda hora.
Configurações recomendadas:
Desenvolvimento (computador local):
- Máximo 20 conexões simultâneas
- 5 conexões em stand-by
Produção (servidor):
- Máximo 100 conexões simultâneas
- 25 conexões em stand-by
O que são índices: Como um índice de livro - ajuda a encontrar coisas mais rápido!
Índices importantes já criados:
instances.name- Buscar por nomeinstances.token- Buscar por tokenmessages.source- Buscar mensagens de uma instâncialabels.instance_id- Buscar labels de uma instância
Recomendações:
# Deletar mensagens com mais de 90 dias
DELETE FROM messages WHERE timestamp < NOW() - INTERVAL '90 days';
# Deletar instâncias desconectadas há mais de 30 dias
DELETE FROM instances
WHERE connected = false
AND updated_at < NOW() - INTERVAL '30 days';Problema: Muitas conexões abertas ao banco.
Soluções:
- Verifique quantas conexões o PostgreSQL permite
- Reduza o número de conexões máximas no Evolution GO
- Aumente o limite no PostgreSQL
# Ver limite atual
psql -c "SHOW max_connections;"
# Aumentar para 200 (editar postgresql.conf)
max_connections = 200Problema: Tabela não foi criada.
Solução: Reinicie a aplicação. Ela cria as tabelas automaticamente.
Problema: Banco de dados está ocupando muito espaço.
Diagnóstico:
-- Ver tamanho de cada tabela
SELECT
tablename,
pg_size_pretty(pg_total_relation_size(tablename::text)) as size
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY pg_total_relation_size(tablename::text) DESC;Solução: Limpe mensagens antigas ou desabilite o salvamento de mensagens.
Problema: Operações demorando muito.
Solução: Provavelmente falta um índice. Consulte um DBA (administrador de banco de dados).
┌────────────────────────┐ ┌────────────────────────┐
│ Banco Auth │ │ Banco Users │
│ (evogo_auth) │ │ (evogo_users) │
├────────────────────────┤ ├────────────────────────┤
│ │ │ │
│ WhatsApp │ │ Sua Aplicação │
│ Dados Técnicos │ │ Dados de Negócio │
│ │ │ │
│ • Chaves cripto │ │ • Instâncias │
│ • Sessões │ │ • Mensagens │
│ • Device info │ │ • Labels │
│ • Contatos │ │ • Webhooks │
│ │ │ • Configurações │
└────────────────────────┘ └────────────────────────┘
▲ ▲
│ │
└───────── Gerenciado por ──────────┘
Evolution GO
1. Usuário cria instância
↓
2. Salvo em: users → instances
3. Usuário conecta WhatsApp
↓
4. WhatsApp salva sessão em: auth → whatsmeow_device
5. Mensagem enviada
↓
6. Salvo em: users → messages
7. Label criada
↓
8. Salvo em: users → labels
| Conceito | Explicação |
|---|---|
| 2 Bancos | Auth (WhatsApp) + Users (API) |
| Auto-Migration | Cria tabelas automaticamente |
| Cascata | Deletar instância → deleta tudo relacionado |
| Backup | Crítico para Auth (chaves cripto) |
| Índices | Fazem buscas ficarem rápidas |
Lembre-se:
- 🔐 Banco Auth = Dados do WhatsApp (crítico!)
- 📊 Banco Users = Dados da sua aplicação
- 💾 Faça backup regular
- 🧹 Limpe dados antigos
- 📈 Monitore crescimento
Documentação Evolution GO v1.0