b21fb0f159
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>
22 lines
901 B
JavaScript
22 lines
901 B
JavaScript
// Config da integração com o motor NewWhats — lida de variáveis de ambiente
|
|
// (scoreodonto é ESM e usa dotenv; não há tabela plugin_configs como no mercado).
|
|
//
|
|
// NEWWHATS_URL URL do motor (ex.: https://newwhats.clube67.com)
|
|
// NEWWHATS_INTEGRATION_KEY x-nw-key — valida /nw/* e injetado no proxy
|
|
// NEWWHATS_WEBHOOK_SECRET segredo HMAC do webhook (x-nw-signature)
|
|
// NEWWHATS_CLINICA_ID qual clínica este satélite atende (multi-tenant)
|
|
|
|
export function getConfig() {
|
|
return {
|
|
motorUrl: (process.env.NEWWHATS_URL || '').replace(/\/$/, ''),
|
|
integrationKey: process.env.NEWWHATS_INTEGRATION_KEY || '',
|
|
webhookSecret: process.env.NEWWHATS_WEBHOOK_SECRET || '',
|
|
clinicaId: process.env.NEWWHATS_CLINICA_ID || '',
|
|
}
|
|
}
|
|
|
|
export function isConfigured() {
|
|
const c = getConfig()
|
|
return Boolean(c.motorUrl && c.integrationKey)
|
|
}
|