Sistema de Disparo — AtomixMKT
Schema: public
Supabase: https://goyttlxigbtdferzoaxc.supabase.co
Este documento descreve o schema e o uso das tabelas no sistema. As contagens por tabela são ilustrativas; para totais atuais consulte o Supabase Dashboard (Table Editor).
← Voltar ao PainelO Sistema de Disparo é um painel de controle para automação de prospecção via WhatsApp. Permite gerenciar campanhas, empresas, contatos, templates de mensagens e acompanhar envios e respostas em tempo (quase) real.
Centralizar a operação de disparos da AtomixMKT: em poucos segundos, o operador vê a saúde do sistema, o que vai disparar, onde há risco e qual a próxima ação. Suporta múltiplos clientes (multi-tenant) com campanhas, templates e configurações por cliente.
O n8n orquestra os disparos. Os fluxos principais que leem/escrevem no Supabase:
campanhas.proximo_envio na janela; envia via Evolution API; grava em historico_envios; atualiza campanhas (quantidade_envios, proximo_envio, respondeu). Regra de horário comercial: os envios devem ocorrer apenas em dias e horários comerciais; a lógica que define o próximo proximo_envio (após cada envio) e o agendamento inicial (no Weekly Manager) deve ficar no n8n — ex.: próximo horário útil 9h–18h, timezone Brasil.campanhas.respondeu e pode disparar ações adicionais.configuracoes por cliente.catta_pendencias; o painel exibe e permite acompanhar resolução.TESTE (Allowlist ON) — Apenas números em lista permitida recebem mensagens. Usado para validar fluxos antes de produção.
PRODUÇÃO — Disparos ativos para toda a base. O painel oferece botão "Pausar Disparos" (kill switch) para emergências.
index.html — Painel principal (KPIs, fila, alertas, saúde, checklist)empresas.html, contatos.html, campanhas.html — CRUD/listagemmensagens.html — Listagem de templates por sequência (consulta); edição em Modeloshistorico.html — Histórico de envios (reagendar erros: Enviar agora)diagnostico-supabase.html — Teste de conexão com o bancoconfig.js — SUPABASE_URL e SUPABASE_ANON_KEYsidebar.css, sidebar.js, scrollbar.css — Layout e navegaçãoContagens variam conforme uso; consulte o Supabase (Table Editor) para totais atuais.
Clientes da AtomixMKT (multi-tenant)
Empresas prospectadas
Contatos nas empresas (status_contato: Aguardando, etc.)
Telefones dos contatos
Campanhas (proximo_envio, quantidade_envios, respondeu)
Auditoria de envios WhatsApp (data_envio, hora_envio em UTC)
Templates por variação (A–E) e sequência (M1–M5)
Parâmetros globais ou por cliente (Evolution, n8n)
Pendências CATTA (resolvido: true/false)
Clientes da AtomixMKT que usam o sistema de prospecção
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | uuid_generate_v4() |
| nome_cliente | varchar | ||
| razao_social | varchar | nullable | |
| cnpj | varchar | nullableunique | |
| segmento_atuacao | varchar | nullable | |
| contato_principal | varchar | nullable | |
| email_contato | varchar | nullable | |
| telefone_contato | varchar | nullable | |
| status_cliente | varchar | nullabledefault: 'Ativo' | Ativo, Inativo, Suspenso |
| plano | varchar | nullable | Básico, Pro, Enterprise, Personalizado |
| data_inicio | date | nullabledefault: CURRENT_DATE | |
| data_fim | date | nullable | |
| observacoes | text | nullable | |
| varchar | nullable | ||
| nota_perfil | integer | nullable | check: 1-10 |
| site | varchar | nullable | |
| investe_trafego_pago | boolean | nullabledefault: false | |
| plataformas_trafego | array | nullable | |
| created_at | timestamp | nullabledefault: now() | |
| updated_at | timestamp | nullabledefault: now() |
Empresas prospectadas pelos clientes da AtomixMKT
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | uuid_generate_v4() |
| cliente_atomix_id | uuid | FK → clientes_atomix.id | A qual cliente AtomixMKT pertence este lead |
| nome_empresa | varchar | ||
| cnpj | varchar | nullable | |
| segmento | varchar | nullable | |
| porte | varchar | nullable | |
| cidade | varchar | nullable | |
| estado | varchar | nullable | |
| endereco | text | nullable | |
| site | varchar | nullable | |
| origem_lead | varchar | nullable | |
| prioridade | varchar | nullabledefault: 'Média' | |
| status_empresa | varchar | nullabledefault: 'Ativa' | |
| tem_catta | boolean | nullabledefault: false | |
| campanha_status | varchar | nullable | |
| campanha_contato_atual_id | uuid | nullableFK → contatos.id | |
| campanha_tentativa | integer | nullabledefault: 0 | |
| created_at / updated_at | timestamp | nullabledefault: now() |
Contatos nas empresas. Coluna de status pode ser status ou status_contato (Aguardando, Em Campanha, Respondeu, etc.).
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | uuid_generate_v4() |
| cliente_atomix_id | uuid | FK → clientes_atomix.id | |
| empresa_id | uuid | nullableFK → empresas.id | |
| nome_completo | varchar | ||
| cargo | varchar | nullable | |
| nivel_decisao | varchar | nullable | Decisor, Influenciador, Usuário |
| email_principal | varchar | nullable | |
| status | varchar | nullabledefault: 'Aguardando' | Aguardando, Em Campanha, Respondeu, Agendado, Cliente, Inativo |
| varchar | nullable | ||
| cpf | char(11) | nullable | check: 11 dígitos |
| participacao_percentual | numeric | nullable | check: 0-100 |
| apto_campanha | boolean | nullabledefault: true | |
| tem_catta | boolean | nullabledefault: false |
Telefones dos contatos (múltiplos por contato)
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | uuid_generate_v4() |
| cliente_atomix_id | uuid | FK → clientes_atomix.id | |
| contato_id | uuid | FK → contatos.id | |
| telefone | varchar | ||
| tipo | varchar | nullable | |
| principal | boolean | nullabledefault: false | |
| boolean | nullabledefault: true | ||
| status_telefone | varchar | nullabledefault: 'Ativo' |
Campanhas de prospecção. proximo_envio define quando o Daily Dispatch envia; updated_at usado para “respostas hoje”.
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | uuid_generate_v4() |
| cliente_atomix_id | uuid | FK → clientes_atomix.id | |
| contato_id | uuid | FK → contatos.id | |
| telefone_id | uuid | nullableFK → telefones.id | |
| variacao_mensagem | char | nullable | A–E (variação da mensagem) |
| status_campanha | varchar | nullabledefault: 'Ativa' | Ativa, etc. |
| proximo_envio | timestamp | nullable | |
| quantidade_envios | integer | nullabledefault: 0 | |
| respondeu | boolean | nullabledefault: false | |
| agendou | boolean | nullabledefault: false | |
| fechou_venda | boolean | nullabledefault: false | |
| valor_venda | numeric | nullable | |
| updated_at | timestamptz | nullabledefault: now() | Usado para filtrar “respostas hoje” no painel |
Templates por variação (A–E) e sequência (M1–M5). cliente_atomix_id NULL = global.
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | uuid_generate_v4() |
| cliente_atomix_id | uuid | nullableFK → clientes_atomix.id | NULL = mensagem compartilhada para todos |
| nome_mensagem | varchar | ||
| variacao | char | nullable | A–E |
| numero_sequencia | integer | nullable | 1–5 (M1–M5) |
| texto | text | ||
| ativa | boolean | nullabledefault: true | |
| compartilhada | boolean | nullabledefault: false | TRUE = template AtomixMKT |
Configurações do sistema - global ou por cliente
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | uuid_generate_v4() |
| cliente_atomix_id | uuid | nullableFK → clientes_atomix.id | NULL = configuração global |
| parametro | varchar | ||
| valor | text | ||
| tipo | varchar | nullable | |
| descricao | text | nullable | |
| categoria | varchar | nullable |
Segmentos para sequências de mensagens (ex.: B2B, E-commerce). Usado em Modelos ao criar/duplicar. Cadastro em Configurações.
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | gen_random_uuid() |
| nome | varchar(255) | UNIQUE | Nome do segmento (ex.: B2B) |
| ativo | boolean | default: true | |
| created_at | timestamptz | default: now() |
Auditoria de envios WhatsApp. data_envio e hora_envio gravados em UTC pelo n8n; o painel converte para horário local.
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | uuid_generate_v4() |
| cliente_atomix_id | uuid | nullableFK → clientes_atomix.id | Escopo do envio (filtro no painel) |
| campanha_id | uuid | FK → campanhas.id | |
| data_envio | date | nullabledefault: CURRENT_DATE | Geralmente em UTC no servidor |
| hora_envio | time | nullabledefault: CURRENT_TIME | Geralmente em UTC no servidor |
| numero_sequencia | integer | nullable | |
| texto_enviado | text | nullable | |
| status_envio | varchar | nullabledefault: 'Pendente' | Ex.: Enviado, Erro (texto livre; painel classifica n8n/BD) |
| id_evolution | varchar | nullable |
Pendências do sistema CATTA
| Coluna | Tipo | Constraints | Notas |
|---|---|---|---|
| id | uuid | PKdefault | gen_random_uuid() |
| cliente_atomix_id | uuid | FK → clientes_atomix.id | |
| empresa_id | uuid | FK → empresas.id | |
| tipo | text | ||
| severidade | text | default: 'WARN' | |
| mensagem | text | ||
| payload | jsonb | nullable | |
| resolvido | boolean | default: false |