Codebot

Login

Codebot

Auditoria de execuções (polling 3s)
Carregando estado…
IDInícioFluxoStatusDuraçãoErro
Sem termo de busca: 50 atendimentos mais recentes. O vínculo fluxo ↔ atendimento passou a ser gravado nesta versão (interações antigas não têm histórico).
Última interaçãoClienteTelefone(s)ProtocoloModoFase / EtapaSituaçãoExecuções
carregando…
ou clique no ID na aba Execuções
IDInícioFluxoErroDuração
Execuções (24h)-
Falhas (24h)-
Eventos/wake (24h)-
Backstops/cron (24h)-

Por fluxo (24h)

Fluxos registrados

EstadoFluxo (id)n8nTipoPath / CronEventos (wake)MétodoSíncrono
carregando…
Pausado: webhooks síncronos respondem 503; eventos assíncronos e jobs ficam retidos na fila e rodam sozinhos ao retomar; ticks de cron (backstop) e wakes de evento são ignorados — o backstop re-deriva o que ficou pendente ao retomar. Um fluxo pausado também interrompe quem o chama como subfluxo (o chamador fica retido).

Paridade (replay)

FluxoStatusTotalMatchDivergenteFalta dadosLLM estruturalÚltimo report

Ligações (manifesto)

DeParaTipoQuandoPayload
waiting -
active -
delayed -
failed -
EmailRoleAtivo

Backup do banco → S3

carregando…
O segredo fica criptografado no banco (chave derivada de APP_SECRET). Se o APP_SECRET mudar, salve as credenciais novamente. O dump contém toda a base (dados de clientes e hashes de senha): mantenha o bucket privado.
Último backup concluído-
Agendamento-
Retenção-
Total armazenado (não expirado)-

Backups realizados

InícioFimStatusOrigemTamanhoDuraçãoArquivoSHA-256
carregando…
Horários em America/Sao_Paulo. Backups com mais de 10 dias são removidos automaticamente do S3 (a linha permanece como expirado).

Configurações

Define o departamento usado pela regra "Se Chamado Está Com Bot": produção = 77746 · homologação = 77746. Vale para novas execuções (cache de 30s). Somente admin altera.

O que é o Codebot

O Codebot é o motor de fluxos em TypeScript + Node.js que substitui os workflows do n8n-huggy (atendimento de crédito por WhatsApp/URA/SMS, integrado a Huggy, FACTA, C6 e Meta Events). Ele roda de forma contínua, escala horizontalmente e expõe este painel de auditoria — sem editor visual.

Webhooks e eventos entram pela api, viram jobs no Redis/BullMQ e são executados pelos workers, que rodam os fluxos convertidos e gravam tudo no Postgres próprio (dados de negócio no schema biz + auditoria). O n8n e seus bancos nunca são tocados: os dados são 100% do Codebot.

TypeScript + Node 24 Fastify 5 BullMQ 5 Postgres 16 Redis 7 Coolify · api · worker · scheduler

Diagrama de arquitetura

Passe o mouse (ou use Tab) nas caixas para ver o que cada parte faz; caixas com borda clicável abrem a aba relacionada. Linhas cheias = caminho normal; tracejadas = síncrono/em memória.
carregando diagrama…
—

Ciclo de uma execução

  1. Entrada — webhook assíncrono (ACK 202 + job), evento de escrita no biz (pg_notify → wake na hora, com o delay do executarApos), tick de cron (backstop lento) ou subfluxo em memória.
  2. Fila — o job entra na fila BullMQ (codebot-jobs) com jobId idempotente: dedupe, retry/backoff e jobs atrasados para retomadas.
  3. Worker — pega o job e o registry cria a execução; o handler do fluxo roda com steps (SQL, HTTP, condições) e helpers reutilizáveis.
  4. Steps — leituras/gravações no schema biz (com lock), chamadas externas (Huggy sempre pelo proxy central; demais APIs sob guarda de egress) e subfluxos chamados em memória (parent_execution_id).
  5. Auditoria — o recorder grava os execution_events (trace passo a passo) e fecha a execução com status, duração e erro.
  6. Painel — Execuções/Trace/Erros mostram o resultado; replay reprocessa um job; a pausa retém jobs e o backstop re-deriva o que ficou pendente.

Peças do projeto

PeçaOndePapel
apisrc/server.ts · src/routes/ webhooks (/webhook/*: ACK + job; síncronos executam na hora), painel, login e health.
workersrc/worker.ts · src/queues/ consome a fila e executa os fluxos (concorrência 2–4 por réplica; réplicas = escalar).
schedulersrc/scheduler.ts registra os crons de backstop (só com CRONS_ENABLED) e o listener de eventos pg_notify que enfileira na hora.
Fila / estadoRedis próprio (BullMQ) jobs waiting/active/delayed/failed, dedupe por jobId, retry/backoff e o estado de pausa.
Dados de negócioPostgres próprio · schema biz tabelas usadas pelos fluxos (clientes, atendimentos, filas), com claim por lock e triggers de wake.
AuditoriaPostgres próprio executions + execution_events (trace), usuários/sessões; retenção automática (eventos 14d / execuções 90d).
Fluxossrc/flows/ + manifest.ts um fluxo por arquivo; as ligações (subfluxo, http, fila, evento) são declaradas no manifesto e aparecem na aba Fluxos.
Núcleosrc/core/ registry (executa fluxos e subfluxos), steps genéricos, helpers (Huggy, fila, retomadas, tag…), recorder e pausa.
Painelsrc/web/ este dashboard (single-page) + visualizador de fluxo em /ui/flow.html.
Proxy Huggyn8n-huggy-webhook (até o corte) único caminho até a API da Huggy; concentra o limite (~20 req/s) de todos os sistemas.
Guarda de egresssrc/core/egress.ts fail-closed: nenhuma chamada externa sai sem liberação explícita (prefixo em EGRESS_ALLOW; produção exige EGRESS_ALLOW_PRODUCTION=true).
Estrutura de código: src/config (env/URLs) · src/core (motor) · src/flows (fluxos) · src/queues (BullMQ) · src/routes (HTTP) · src/web (painel) · migrations/ (conhecimento do n8n).

Regras de operação

  • Isolamento total do n8n — Postgres e Redis são próprios; nada aqui lê ou grava nos bancos do n8n.
  • Nada sai sem liberação — a guarda de egress é fail-closed; liberar produção exige autorização explícita.
  • Crons por opt-in — só rodam fluxos listados em CRONS_ENABLED (padrão vazio = nenhum); o cron é só backstop, a entrada normal é por evento.
  • Huggy sempre pelo proxy central — nunca chamar a Huggy direto (o limite global é aplicado no proxy).
  • Pausa segura — webhooks síncronos respondem 503; jobs ficam retidos na fila; wakes/ticks são descartados e o backstop re-deriva pendentes ao retomar.
  • Corte por fluxo — o n8n segue dono da produção de cada fluxo até a migração ser autorizada.

Agora

Contadores—
Números lidos do registry e da fila no momento em que a aba é aberta.
Mapa dos caminhos da conversa: cada etapa reúne destinos do catálogo de testes. Clique numa etapa para ver os destinos dela e o mapa técnico de cada fluxo.
carregando…
Selecione um ou mais destinos — cada um gera um chat de teste independente (lote). O usuário IA (OpenAI) conversa com o bot até atingir o destino.
carregando…
O app codebot-tester não está configurado neste ambiente (env TESTER_URL na api) — os testes ficam indisponíveis, mas o mapa de caminhos continua válido.
CriadoDestinoStatusVereditoDuração
carregando…
O nome do chat abre o transcript completo em nova aba (/ui/teste-chat.html?id=…).