Tema
Operação e deploy
Deploy (Dokploy)
Serviço Compose no Dokploy apontando para o docker-compose.yml da raiz deste repositório. Sobem três containers: app (painel e webhooks, porta 3100), worker (fila de envios, IA, follow-up, remarketing e consulta da Safefy) e postgres. O app e o worker aplicam as migrações sozinhos ao subir. Mantenha 1 worker.
| Variável | Para que serve |
|---|---|
POSTGRES_PASSWORD | Senha do PostgreSQL |
APP_ENCRYPTION_KEY | 32 bytes (openssl rand -hex 32) que cifram os segredos salvos pelo painel. Guarde: sem ela os segredos não podem ser lidos |
PUBLIC_BASE_URL | Endereço público com HTTPS (https://app.tesseract-ai.com.br) |
ADMIN_EMAIL / ADMIN_PASSWORD | Primeiro administrador da plataforma, dono da conta da plataforma (apague a senha depois do primeiro deploy) |
DIAGNOSTICS_TOKEN (opcional) | Libera GET /api/diagnostics para análise remota |
WUZAPI_URL / WUZAPI_ADMIN_TOKEN (opcional) | Preenchem a conexão com a WuzAPI |
NEXT_SERVER_ACTIONS_ENCRYPTION_KEY (opcional) | Chave estável das Server Actions |
RESEND_API_KEY / EMAIL_FROM | E-mails da plataforma pelo Resend (cadastro, convites, senha, avisos). Sem eles, cadastro público e convites ficam desligados |
O deploy do bot é feito pelo Dokploy, não pela Cloudflare: depois do merge na main, confira no Dokploy (ou no diagnóstico) se a nova versão subiu.
Site da documentação
Estes guias são publicados em docs.tesseract-ai.com.br por um serviço próprio no Dokploy, separado do painel: Application com Build Type Dockerfile, Docker Context docs, porta 80 e o domínio com HTTPS. Em Watch Paths, use docs/** para que só mudanças na documentação reconstruam o site. A imagem gera o site estático com VitePress e o serve com nginx (/healthz responde ok).
Para ver localmente: cd docs && npm install && npm run dev. O npm run build falha se algum link interno estiver quebrado.
Diagnóstico
- Página Logs do painel: worker, fila, WhatsApp, OpenAI, webhooks e eventos recentes.
GET https://app.tesseract-ai.com.br/api/diagnostics?limit=100&level=errorcomAuthorization: Bearer <DIAGNOSTICS_TOKEN>: versão no ar (appStartedAt, migrações), worker, fila, configuração (só se cada item está preenchido), sessão do WhatsApp, consulta da Safefy, vendas e logs. Nunca devolve segredos, telefones ou mensagens.
Problemas comuns
| Sintoma | O que conferir |
|---|---|
| Nada é enviado | Worker vivo em Logs; Automação ligada; WhatsApp conectado; conversa dentro da janela de 24 h |
| Mensagens fora de ordem ou repetidas | Uma só réplica do worker |
| Venda não aparece na conversa | Segredo igual nos dois painéis; o link usado tinha o código da conversa; "Reenviar ao bot" no admin do site; chaves da Safefy |
| "Requisição rejeitada: Assinatura ausente" nos logs | Algo chamou o webhook de pagamentos sem a assinatura do site (ex.: a Safefy direto). Com as chaves da Safefy no bot, ele passa a conferir na Safefy |
| QR Code não aparece | URL e token de administrador da WuzAPI em Configurações → Conectar WhatsApp |
| IA não responde | Testar OpenAI ou Testar Gemini; limites de custo em Configurações → Inteligência artificial; conversa com Atenção ou com a equipe |
| IA não responde no grupo | O fluxo do grupo está ligado? Foi chamada (@, resposta a ela ou palavra)? Intervalo e máximo por dia do gatilho; Logs (escopo group) |
| Fluxo não liga | O editor lista as pendências (passo sem texto, seta faltando, mensagem reserva vazia) |
| Pessoa não consegue entrar | Confirmou o e-mail? A conta foi liberada em Plataforma? Está desativada? O login diz qual é o caso |
| E-mails não chegam | RESEND_API_KEY e EMAIL_FROM definidos; domínio do EMAIL_FROM verificado no Resend; Logs (escopo email) |
Testes
bash
npm test # Vitest + PostgreSQL real; WhatsApp, OpenAI e Safefy simulados