Files
scoreodonto.com/backend/newwhats/INTEGRACAO-MOTOR.md
T
VPS 4 Builder b21fb0f159 feat(newwhats): satélite WhatsApp/Secretária IA adaptado ao odonto
Clona o satélite do mercado adaptado ao scoreodonto (ESM, sem PluginManager):
- backend/newwhats/: config (ENV), auth (x-nw-key), routes /nw/* (clinica,
  especialidades, dentistas, procedimentos, planos — multi-tenant por clinica_id),
  sync-knowledge (base de conhecimento odonto → motor), webhook-receiver (HMAC,
  enxuto), proxy REST /api/nw/v1/* → motor /api/ext/v1/*, manifest, INTEGRACAO-MOTOR.md.
- server.js: registerNewwhats(app, pool) antes do listen.
- Removidos (não úteis): media-transcribe (motor já transcreve), smart-router,
  personas, follow-up-detector, context-builder.
- Config por ENV: NEWWHATS_URL/INTEGRATION_KEY/WEBHOOK_SECRET/CLINICA_ID.
- ativo::int=1 normaliza boolean vs smallint entre tabelas.
- Validado: buildKnowledgeText gera 1195 chars de dados reais; registro ok no express 5.2.1.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 17:38:36 +02:00

2.8 KiB

Integração NewWhats (satélite) — scoreodonto.com ↔ Motor

Único deste projeto (scoreodonto.com). Clonado e adaptado ao domínio odonto a partir do satélite do mercado.clube67.com. Backend ESM — sem o host de plugins do mercado; é um módulo registrado no server.js. v1.0.0.

⚠️ Regra de registro bidirecional (obrigatória)

  • Toda mudança que toque o contrato (rotas, payloads, auth, webhook) deve ser registrada no motor e na doc central documentos-unicos/projetos/newwhats.clube67.com/integracao-satelites.md.
  • Toda mudança no motor que afete o contrato deve ser refletida aqui.
  • O satélite é um braço inteligente do motor — consome/alimenta, não duplica.

Diferenças vs o satélite do mercado

  • ESM (não CommonJS) e sem PluginManager — registrado via registerNewwhats(app, pool) no server.js.
  • Config por ENV (não tabela plugin_configs): NEWWHATS_URL, NEWWHATS_INTEGRATION_KEY, NEWWHATS_WEBHOOK_SECRET, NEWWHATS_CLINICA_ID.
  • Negócio adaptado ao odonto: /nw/* e sync-knowledge usam clínica/especialidades/dentistas/procedimentos/planos (multi-tenant por clinica_id), no lugar de clubes/sorteio/vagas.
  • Removidos (não úteis aqui): media-transcribe (o motor já transcreve — ver Fase 5), smart-router, personas, follow-up-detector, context-builder (heurísticas específicas do mercado). Reavaliar se necessário.

Arquivos

Arquivo Papel
config.js lê a config da integração das ENV
auth.js nwAuth — valida x-nw-key/Bearer nas rotas /nw/*
routes.js /nw/* odonto: /ping, /clinica, /especialidades, /dentistas, /procedimentos, /planos
sync-knowledge.js buildKnowledgeText(pool, clinicaId) + syncKnowledge(pool) → motor /api/secretaria/*
webhook-receiver.js POST /api/webhook/newwhats (HMAC) — message.new, session.status (enxuto)
proxy.js /api/nw/v1/* → motor /api/ext/v1/* (injeta x-nw-key)
index.js registerNewwhats(app, pool) — registra tudo
manifest.json metadados + config_env

Contrato (resumo)

  • Satélite → Motor: proxy /api/nw/v1/* → ext-api /api/ext/v1/* (Bearer/x-nw-key); sync-knowledge/api/secretaria/*.
  • Motor → Satélite: webhook POST /api/webhook/newwhats (HMAC webhook_secret); Secretária consulta /nw/* (integration_key).

Pendências / TODO

  • webhook message.new: capturar lead / acionar fluxo (hoje só loga).
  • Proxy WS (/api/nw/v1/stream) — só o REST foi portado.
  • Parear scoreodonto com o motor (criar apiKey/pair + agente) e preencher as ENV.
  • Endpoint/admin para disparar syncKnowledge (hoje exportado, sem rota).

Fonte da verdade do contrato: documentos-unicos/projetos/newwhats.clube67.com/.