Files
scoreodonto.com/backend/newwhats/index.js
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

29 lines
1.2 KiB
JavaScript

// Integração NewWhats (satélite) para o scoreodonto — versão ESM, adaptada do
// plugin do mercado. Registra as rotas no app Express existente.
//
// Uso no server.js:
// import { registerNewwhats } from './newwhats/index.js'
// registerNewwhats(app, pool)
import { createRoutes } from './routes.js'
import { createWebhookReceiver } from './webhook-receiver.js'
import { createRestProxy } from './proxy.js'
import { isConfigured } from './config.js'
export { syncKnowledge, buildKnowledgeText } from './sync-knowledge.js'
export function registerNewwhats(app, pool) {
// /nw/* — Secretária IA do motor consulta os dados da clínica
app.use('/nw', createRoutes(pool))
// Webhook do motor → satélite (message.new, session.status)
app.use(createWebhookReceiver(pool))
// Proxy REST do inbox: /api/nw/v1/* → motor /api/ext/v1/*
// (app.use com prefixo — evita o wildcard '*' que quebra no express 5)
app.use('/api/nw/v1', createRestProxy())
console.log(
`[newwhats] integração registrada (/nw, /api/webhook/newwhats, /api/nw/v1/*) — ${isConfigured() ? 'configurada' : 'AGUARDANDO config (NEWWHATS_URL/NEWWHATS_INTEGRATION_KEY)'}`
)
}