openclaw - 💡(How to fix) Fix whatsapp: monitor outbound gate só verifica texto vazio — qualquer não-vazio passa (NO_REPLY ignorado)

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…

Fix Action

Fix / Workaround

Workaround atual

Patch local no dist forçando return antes de deliverReply (kill switch resistente a config rollback), com cron horário verificando se o marker sobreviveu ao último openclaw update. Não é solução upstream.

Code Example

const deliverNormalizedPayload = async (normalizedDeliveryPayload, info) => {
    const reply = resolveSendableOutboundReplyParts(normalizedDeliveryPayload);
    if (!reply.hasMedia && !reply.text.trim()) return;
    if (!(await params.deliverReply({ ... }))) { ... }
};
RAW_BUFFERClick to expand / collapse

Sumário

Em @openclaw/[email protected], o dist monitor-*.js (deliverNormalizedPayload) só bloqueia outbound se !reply.hasMedia && !reply.text.trim(). Qualquer texto não-vazio passa para deliverReply, independente de cláusulas NO_REPLY no AGENTS.md, marcadores no output, ou intenção do agente.

Resultado: o agente WA monitor, mesmo com prompt explícito mandando NÃO responder, acaba enviando análises internas ao contato real porque o modelo emite algum texto e o runtime envia.

Código (linhas relevantes em 2026.5.7)

dist/monitor-C5_C_RGJ.js:2374-2381:

const deliverNormalizedPayload = async (normalizedDeliveryPayload, info) => {
    const reply = resolveSendableOutboundReplyParts(normalizedDeliveryPayload);
    if (!reply.hasMedia && !reply.text.trim()) return;
    if (!(await params.deliverReply({ ... }))) { ... }
};

Histórico de vazamentos correlatos (env Marco/rossit)

  • 20/abr — 3 contatos (Santec etc), causa fallback MiniMax + detector NO_REPLY exigia match exato
  • 23/abr — Shirley/Caroline/Ricardo Ferrari, fallback authProfileOverride + MiniMax
  • 12/mai — Indiana, anthropic-only ativo, provider Claude obediente, mas runtime enviou mesmo assim

O padrão dos 3 incidentes: configuração de provider/fallback não importa para o vazamento; o runtime entrega qualquer texto não-vazio.

Proposta de fix

Gate explícito de outbound:

  1. Detector NO_REPLY robusto: regex que ignora case/espaços/pontuação e aceita variações (no reply, [no_reply], <<NO_REPLY>>, etc), aplicado sobre reply.text antes de deliverReply.
  2. Default-deny mode opt-in: flag channels.whatsapp.outboundMode = "explicit" exige marcador positivo (ex: [REPLY]...[/REPLY]) para enviar; ausência = drop.
  3. Audit log obrigatório: toda chamada a deliverReply registra agentId, contactId, textHash, decisionReason em arquivo separado para forense.

Sem isso, o canal WA é um vetor de vazamento em qualquer agente analítico que tenha o canal habilitado, e mitigações em prompt/AGENTS.md são placebo.

Workaround atual

Patch local no dist forçando return antes de deliverReply (kill switch resistente a config rollback), com cron horário verificando se o marker sobreviveu ao último openclaw update. Não é solução upstream.

Versão

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - 💡(How to fix) Fix whatsapp: monitor outbound gate só verifica texto vazio — qualquer não-vazio passa (NO_REPLY ignorado)