974d825fd9
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
93 lines
5.1 KiB
Markdown
93 lines
5.1 KiB
Markdown
# newwhats.clube67.com — Tarefas / Pendências (checklist)
|
||
|
||
> Lista mestra de pendências do motor ↔ satélites. Sincronizada com a task list
|
||
> da sessão. Atualizar marcando `[x]` ao concluir e mover detalhes para a doc de
|
||
> estado correspondente. Última revisão: 28/jun/2026.
|
||
|
||
## A fazer (sub-itens abertos — resumo)
|
||
|
||
> Detalhes/seções abaixo. Itens de billing/decisão dependem do usuário.
|
||
|
||
**Provisionamento / onboarding (puro motor, exceto onde indicado):**
|
||
- [ ] Secretária default automática ao provisionar _(plugin secretaria)_
|
||
- [ ] Registro automático do webhook a partir do pair _(ext_webhooks + Instance.webhookUrl)_
|
||
- [ ] Gatilho de `sync-knowledge` no fim do trajeto _(satélite)_
|
||
- [ ] UI de onboarding consumindo `POST /provision` (exibe o `trajeto[]`)
|
||
- [ ] Live update de `isBusiness` no SettingsPanel (evento `instance:business`)
|
||
|
||
**Secretária — humanização:**
|
||
- [ ] Ritmo humano (typing + delay + quebra em 2-3 msgs)
|
||
- [ ] Resposta em áudio (TTS) _(opcional)_
|
||
|
||
**Wasabi / mídias:**
|
||
- [ ] Index por tamanho (coluna `mediaSize`)
|
||
- [ ] Reconciliação DB ↔ bucket (achar órfãos)
|
||
- [ ] Política de retenção (descartar áudio pós-transcrição)
|
||
|
||
**Integração satélite:**
|
||
- [ ] **Fase 5** _(ADIADA)_ — satélite consumir `messages.transcription` + remover `media-transcribe.js`
|
||
- [ ] Reconciliar chave `/nw/*` (PluginPair `nwk_…` ≠ satélite `nw_t…`) _se esse sentido for usado_
|
||
|
||
**Dependem do usuário (billing / decisão):**
|
||
- [ ] Billing OpenAI (sem quota) e quota Gemini (429) — destrava geração LLM da Secretária
|
||
- [ ] Confirmar domínio real da PROD do newwhats (`.env.production.local` aponta p/ `clube67.com`)
|
||
- [ ] Revogar/rotacionar as chaves OpenAI/Gemini coladas no chat
|
||
|
||
## Regra de ouro (registro bidirecional)
|
||
- Cada **plugin satélite é único do projeto onde está instalado** (ex.: o
|
||
`newwhats` do `mercado.clube67.com` ≠ o de outro projeto).
|
||
- **Toda mudança no plugin deve ser registrada no motor, e toda mudança no motor
|
||
que afete o contrato deve ser registrada em cada plugin.** Ver
|
||
[integracao-satelites.md](integracao-satelites.md) (contrato central) e o
|
||
`INTEGRACAO-MOTOR.md` dentro de cada plugin.
|
||
- O **plugin é um braço inteligente do motor** — não duplica lógica; consome,
|
||
alimenta e configura o motor.
|
||
|
||
## 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.
|
||
- [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.
|
||
- [x] **Fase 4** — `sync-knowledge` rodado end-to-end (driver com `buildKnowledgeText`
|
||
real do satélite `mercado`@VPS3 → motor dev). Nó `knowledge` atualizado; RAG
|
||
indexou 4 chunks com embedding Gemini 768d. ⚠️ geração LLM em 429 quota
|
||
(billing). Fix de brinde: `/secretaria/ask` `remoteJid`→`jid`.
|
||
- [ ] **Fase 5** — _**ADIADA** (a fazer depois, decisão 28/jun/2026)._ Satélite
|
||
consumir `messages.transcription` do motor e **remover `media-transcribe.js`**
|
||
redundante. Unificar fonte da chave Gemini (`cfg.gemini_key` vs
|
||
`process.env.GEMINI_API_KEY`).
|
||
|
||
## Wasabi / mídias
|
||
- [x] Upload fire-and-forget + proxy público de leitura (avatares e mídias).
|
||
- [x] `StorageProvider.deletePrefix(prefix)` (delete por prefixo).
|
||
- [x] **Index de mídias** — `GET /api/instances/:id/media-index` (chat/tipo/período,
|
||
byType, paginado). Ver [wasabi-midias.md](wasabi-midias.md).
|
||
- [x] **Delete em lote** — `POST /api/instances/:id/media-batch-delete`, coordenado
|
||
**DB ↔ Wasabi**, dryRun por padrão + `deleteObjects` em lote.
|
||
- [ ] Index por tamanho (bytes) — falta coluna `mediaSize`.
|
||
- [ ] Reconciliação DB ↔ bucket (achar órfãos).
|
||
- [ ] Política de retenção (arquivar/descartar áudio após transcrição salva).
|
||
|
||
## Ativação do WhatsApp (trajeto inteligente)
|
||
- [x] `POST /api/instances/provision` — trajeto guiado e **idempotente** (instância +
|
||
engine `baileys7` + setor default + webhook/connect opcionais), devolve o
|
||
`trajeto[]` visível. Ver [ativacao-whatsapp.md](ativacao-whatsapp.md).
|
||
- [ ] Detecção Business no connect (grava `isBusiness`).
|
||
- [ ] Secretária default automática (plugin) + webhook a partir do pair.
|
||
- [ ] Gatilho de `sync-knowledge` no fim do trajeto + UI de onboarding.
|
||
|
||
## Inbox / Secretária (já entregue nesta frente)
|
||
- [x] Transcrição/descrição no motor (Gemini) → `messages.transcription`.
|
||
- [x] Exibição da transcrição no inbox (🎤 áudio / 👁 imagem) + socket `message:transcription`.
|
||
- [x] Memória de longo prazo por contato (`sec_contact_memory`).
|
||
- [ ] Ritmo humano da Secretária (typing + delay + quebra em 2–3 msgs).
|
||
- [ ] Resposta em áudio (TTS) — opcional.
|
||
|
||
## Validações pendentes de ambiente
|
||
- [ ] Pareamento do WhatsApp dev (avatares/fixados) quando o aparelho voltar.
|
||
</content>
|
||
</invoke>
|