openclaw - ✅(Solved) Fix [Bug]: Telegram DM fabricates silent-reply chatter for no-visible-response turns [1 pull requests, 1 participants]

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…
GitHub stats
openclaw/openclaw#70628Fetched 2026-04-24 05:55:26
View on GitHub
Comments
0
Participants
1
Timeline
1
Reactions
0
Participants
Timeline (top)
cross-referenced ×1

Telegram direct-message turns that end with no visible final reply can still emit a synthetic user-facing bubble like "No added response from me." instead of staying silent.

Error Message

  • there is no dispatch error and no non-silent delivery failure
  • dispatch error
  • if a turn ends with no visible final reply and no actual error,
  • status reaction state should complete as a normal handled turn, not as an error

Root Cause

There are two pieces that combine into the leak:

  1. extensions/telegram/src/bot-message-dispatch.ts

    • in the !queuedFinal && !sentFallback && !dispatchError && !deliverySummary.delivered path
    • the adapter synthesizes [{ text: "NO_REPLY" }]
    • then immediately routes it through outbound delivery
  2. src/infra/outbound/payloads.ts + silent-reply policy defaults

    • direct conversations default to silentReply.direct = "disallow"
    • direct conversations default to silentReplyRewrite.direct = true
    • so the synthetic NO_REPLY is rewritten into visible filler text like No added response from me.

That means an intentionally silent Telegram DM turn is converted into misleading chatter.

Fix Action

Fix / Workaround

This reproduces when:

  • surface = telegram
  • conversation type = direct / DM
  • the turn ends without a visible final reply
  • there is no dispatch error and no non-silent delivery failure
  1. extensions/telegram/src/bot-message-dispatch.ts
    • in the !queuedFinal && !sentFallback && !dispatchError && !deliverySummary.delivered path
    • the adapter synthesizes [{ text: "NO_REPLY" }]
    • then immediately routes it through outbound delivery

The adapter already has a separate fallback path for actual failures:

  • dispatch error
  • or non-silent delivery failure / skip

PR fix notes

PR #70630: fix(telegram): keep no-visible direct turns silent

Description (problem / solution / changelog)

Summary

This stops Telegram direct-message turns from fabricating silent-reply filler like No added response from me. when the turn ends with no visible final response and no actual error.

Closes #70628.

Root cause

extensions/telegram/src/bot-message-dispatch.ts synthesized a NO_REPLY fallback whenever a Telegram turn ended with:

  • queuedFinal = false
  • sentFallback = false
  • dispatchError = false
  • deliverySummary.delivered = false

That synthetic NO_REPLY then flowed through outbound silent-reply rewriting for direct conversations, which turned it into visible chatter instead of true silence.

What changed

  • keep no-visible-response Telegram direct turns silent instead of sending synthetic NO_REPLY fallback
  • mark that path as a handled silent turn so status reactions finalize as done rather than error
  • keep the existing fallback send behavior for cases where a projected fallback should still be delivered
  • update the Telegram dispatch regression test to assert silence for this DM path

Validation

  • node scripts/run-vitest.mjs run --config test/vitest/vitest.extension-telegram.config.ts extensions/telegram/src/bot-message-dispatch.test.ts

Changed files

  • extensions/telegram/src/bot-message-dispatch.test.ts (modified, +6/-7)
  • extensions/telegram/src/bot-message-dispatch.ts (modified, +8/-2)
RAW_BUFFERClick to expand / collapse

Summary

Telegram direct-message turns that end with no visible final reply can still emit a synthetic user-facing bubble like "No added response from me." instead of staying silent.

Reproduction shape

This reproduces when:

  • surface = telegram
  • conversation type = direct / DM
  • the turn ends without a visible final reply
  • there is no dispatch error and no non-silent delivery failure

A real incident produced repeated Telegram DM bubbles such as:

  • No added response from me.
  • followed later by a recovered background-task completion message

Root cause

There are two pieces that combine into the leak:

  1. extensions/telegram/src/bot-message-dispatch.ts

    • in the !queuedFinal && !sentFallback && !dispatchError && !deliverySummary.delivered path
    • the adapter synthesizes [{ text: "NO_REPLY" }]
    • then immediately routes it through outbound delivery
  2. src/infra/outbound/payloads.ts + silent-reply policy defaults

    • direct conversations default to silentReply.direct = "disallow"
    • direct conversations default to silentReplyRewrite.direct = true
    • so the synthetic NO_REPLY is rewritten into visible filler text like No added response from me.

That means an intentionally silent Telegram DM turn is converted into misleading chatter.

Why this is a bug

The adapter already has a separate fallback path for actual failures:

  • dispatch error
  • or non-silent delivery failure / skip

This no-visible-response path is different: it can represent an intentionally silent turn. In that case the Telegram adapter should not fabricate a user-visible message.

Expected behavior

For Telegram DMs:

  • if a turn ends with no visible final reply and no actual error,
  • keep the turn truly silent
  • do not synthesize a NO_REPLY fallback bubble
  • status reaction state should complete as a normal handled turn, not as an error

Additional note

The current test suite explicitly encodes the buggy behavior in extensions/telegram/src/bot-message-dispatch.test.ts by expecting a DM no-visible-response turn to be rewritten through silent-reply fallback.

Proposed fix

In extensions/telegram/src/bot-message-dispatch.ts:

  • suppress synthetic silent-reply fallback for Telegram direct turns
  • treat the silent turn as handled
  • keep group behavior unchanged unless the projected fallback is already empty

I have a PR ready with:

  • source fix in extensions/telegram/src/bot-message-dispatch.ts
  • regression test update in extensions/telegram/src/bot-message-dispatch.test.ts

extent analysis

TL;DR

Suppress synthetic silent-reply fallback for Telegram direct turns to prevent fabricating user-visible messages for intentionally silent turns.

Guidance

  • Review the extensions/telegram/src/bot-message-dispatch.ts file to ensure the NO_REPLY fallback is not synthesized for Telegram direct turns with no visible final reply and no actual error.
  • Update the extensions/telegram/src/bot-message-dispatch.test.ts test suite to expect truly silent behavior for DM no-visible-response turns, rather than rewritten silent-reply fallback.
  • Verify that the status reaction state completes as a normal handled turn, not as an error, for silent Telegram DM turns.
  • Consider adding additional tests to cover different scenarios and ensure the fix does not introduce regressions.

Example

// In extensions/telegram/src/bot-message-dispatch.ts
if (!queuedFinal && !sentFallback && !dispatchError && !deliverySummary.delivered) {
  // Do not synthesize NO_REPLY fallback for Telegram direct turns
  if (surface === 'telegram' && conversationType === 'direct') {
    // Treat the silent turn as handled
    return;
  }
  // ...
}

Notes

The proposed fix only changes the behavior for Telegram direct turns and keeps group behavior unchanged unless the projected fallback is already empty.

Recommendation

Apply the proposed fix in the PR, which includes the source fix in extensions/telegram/src/bot-message-dispatch.ts and the regression test update in extensions/telegram/src/bot-message-dispatch.test.ts, to suppress synthetic silent-reply fallback for Telegram direct turns.

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…

FAQ

Expected behavior

For Telegram DMs:

  • if a turn ends with no visible final reply and no actual error,
  • keep the turn truly silent
  • do not synthesize a NO_REPLY fallback bubble
  • status reaction state should complete as a normal handled turn, not as an error

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 - ✅(Solved) Fix [Bug]: Telegram DM fabricates silent-reply chatter for no-visible-response turns [1 pull requests, 1 participants]