From 3aca8ac25ed10452e9c8f0805941cfd5cfe51143 Mon Sep 17 00:00:00 2001 From: VPS 4 Builder Date: Sun, 28 Jun 2026 15:40:45 +0200 Subject: [PATCH] =?UTF-8?q?docs(fase3):=20config/conex=C3=A3o=20sat=C3=A9l?= =?UTF-8?q?ite=E2=86=94motor=20auditada=20(ext-api=20ok,=20webhook=20HMAC?= =?UTF-8?q?=20ok)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ext-api x-nw-key casa (satélite=apiKey motor, teste vivo 200); webhook secret/url/ eventos casam. Topologia co-locada (127.0.0.1); live e2e exige satélite rodando. /nw/* usa chave diferente (PluginPair nwk_) — reconciliar se usado. Co-Authored-By: Claude Opus 4.8 --- .../integracao-satelites.md | 22 +++++++++++++++++-- projetos/newwhats.clube67.com/tarefas.md | 8 ++++--- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/projetos/newwhats.clube67.com/integracao-satelites.md b/projetos/newwhats.clube67.com/integracao-satelites.md index 3be1b7e..6ca9663 100644 --- a/projetos/newwhats.clube67.com/integracao-satelites.md +++ b/projetos/newwhats.clube67.com/integracao-satelites.md @@ -54,8 +54,26 @@ 1. ✅ **Contrato documentado** (este arquivo). 2. ✅ **Compatibilidade de API**: alias `GET /secretaria/numbers` no ext-api do motor (retrocompatível) — fecha o gap do `webhook-receiver`. (commit motor) -3. ⏳ **Config/conexão**: validar `newwhats_url`/keys do satélite apontando para o - motor correto (dev/prod) e o HMAC do webhook. *(requer credenciais reais.)* +3. ✅ **Config/conexão** (auditado 28/jun/2026, satélite `mercado`@VPS3 ↔ motor dev + `newwhats_dev`). Resultado: + - **Satélite → Motor (ext-api/proxy/WS)** ✅ — `proxy.js` envia `x-nw-key` = + `integration_key` do satélite; o ext-api valida contra a tabela `apiKey`. A + chave do satélite (`nw_t…_001`, len 34) **é igual** à `apiKey` ativa do motor. + **Teste vivo:** `GET /api/ext/v1/sessions` com a chave → **200**; sem chave / + chave inválida → **401** (correto). + - **Webhook Motor → Satélite (HMAC)** ✅ — `ext_webhooks` do motor: url + `http://127.0.0.1:4001/api/webhook/newwhats`, eventos `[message.new, + session.status]`, ativo, `secret` (len 64) **igual** ao `webhook_secret` do + satélite. Assinatura `x-nw-signature: sha256=HMAC` (`webhook-dispatcher.ts`). + - **Topologia co-locada** (`127.0.0.1`): satélite espera motor em `:8008`; motor + espera satélite em `:4001`. Para teste vivo ponta-a-ponta o **satélite precisa + rodar co-locado com o motor dev** (hoje não está rodando na VPS4). + - ⚠️ **`/nw/*` (Motor → Satélite, Secretária)**: o satélite valida o `x-nw-key` + entrante contra `plugin_configs.integration_key` (`nw_t…_001`); o `PluginPair` + do motor usa outra chave (`nwk_…1039`, `lastSeenAt=null`). Se esse sentido for + usado, **reconciliar a chave** (não afeta a Fase 4, que é Satélite → Motor). + - ⚠️ `api_token` não existe em `plugin_configs` do satélite — não é necessário: o + ext-api autentica por `x-nw-key` (= `integration_key`), não por Bearer separado. 4. ⏳ **Conhecimento**: rodar `sync-knowledge` end-to-end (satélite → motor). 5. **Mover recursos para o motor** (genéricos a todos os satélites): - ✅ **Transcrição** (áudio→texto, imagem→descrição) já no motor via Gemini diff --git a/projetos/newwhats.clube67.com/tarefas.md b/projetos/newwhats.clube67.com/tarefas.md index 060dcee..0ea459f 100644 --- a/projetos/newwhats.clube67.com/tarefas.md +++ b/projetos/newwhats.clube67.com/tarefas.md @@ -17,9 +17,11 @@ ## Integração satélite ↔ motor (faseado) - [x] **Fase 1** — Contrato documentado (`integracao-satelites.md`). - [x] **Fase 2** — Compatibilidade de API: alias `GET /secretaria/numbers` no ext-api. -- [ ] **Fase 3** — Validar config/conexão (`newwhats_url`, `integration_key`, - `api_token`, `webhook_secret`) do satélite → motor (dev/prod) + HMAC do webhook. - _Bloqueado: requer credenciais reais._ +- [x] **Fase 3** — Config/conexão auditada: ext-api `x-nw-key` casa (satélite + `nw_t…_001` = `apiKey` do motor, teste vivo 200); webhook HMAC casa + (`secret` len 64, url `127.0.0.1:4001`, eventos ok). Topologia co-locada; + live ponta-a-ponta exige satélite rodando co-locado. ⚠️ `/nw/*` usa chave + diferente (`nwk_…1039`) — reconciliar se esse sentido for usado. - [ ] **Fase 4** — Rodar `sync-knowledge` end-to-end (satélite → motor) e validar RAG. _Bloqueado: requer satélite rodando + Fase 3._ - [ ] **Fase 5** — Satélite consumir `messages.transcription` do motor e **remover