Secretária IA mais segura e contextual:
- Roteamento por especialidade: /contexto (dentistas+especialidades) injetado no
cérebro; descobrir o motivo e priorizar clínico geral só p/ avaliação/limpeza.
- Situações da clínica: regras editáveis injetadas no prompt (siga à risca).
- Dúvida/caso incerto → tool encaminhar_humano (não agenda; pede p/ aguardar).
- Imagem/áudio: ext:message.transcription religa no fluxo ext:message.new
(guard hadCaption evita processar 2x); a IA reage à descrição da imagem.
- Checklist do dono × banco → cautelas no /contexto: NÃO assumir clínico geral
por padrão p/ quem já é paciente; sem certeza de quem/qual dentista → humano.
- Desligar GLOBAL da Secretária: GET/POST /secretaria/power (kill-switch
auto_reply via config.set, efeito imediato, sem restart; visível a todos).
Inclui a plumbing da sessão (chat.upsert, ownership de conexão, ws-bridge).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- re-download persiste a mídia no Wasabi e gera thumbnail <url>.thumb.webp (sharp)
- GET /inbox/:chatId/messages expõe mediaRecoverable = url|path|payload presente
- ws-bridge: encaminha hook ext:presence
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
A integration_key do satélite (nwk_) passa a resolver por x-nw-email quando
presente (preserva multi-conta: cada usuário vê o WhatsApp do seu e-mail),
caindo no tenant dono do par quando ausente — igual no middleware REST e no
handshake do WS bridge. Valida o par (revoke) antes de resolver por email.
Permite migrar o scoreodonto da EXT_MASTER_KEY global p/ chave própria
(revogável/auditada), sem mudança de comportamento.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Satélite confiável acessa a conta de qualquer email via EXT_MASTER_KEY:
- apikey-auth: helpers isMasterKey/resolveMasterEmail resolvem o tenant pelo
User.email; middleware REST refatorado para usá-los.
- ws-bridge: handshake do /api/ext/v1/stream trata a chave mestra + x-nw-email
(antes só tabela apiKey → o túnel WS tomava 401).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>