openclaw - ✅(Solved) Fix Telegram direct chat receives unwanted "Nothing further to report" fallback after message.send [1 pull requests, 3 comments, 3 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#78685Fetched 2026-05-07 03:33:49
View on GitHub
Comments
3
Participants
3
Timeline
5
Reactions
2
Author
Timeline (top)
commented ×3cross-referenced ×1referenced ×1

When OpenClaw is used from a Telegram direct conversation, a fallback message Nothing further to report. can still be posted to Telegram after the assistant has already sent the intended reply through the messaging tool.

This appears to happen when the assistant calls message.send successfully, then the normal assistant final response is empty or otherwise treated as empty by the runtime. The runtime inserts the fallback text and routes it back to the Telegram conversation, creating an extra unwanted message.

Root Cause

Reproduction Context

  • Surface: Telegram direct chat
  • Tool path: message.send sends the visible reply successfully
  • After the tool call, the assistant final response is empty or intentionally omitted because the Telegram message was already sent
  • OpenClaw posts an additional fallback message: Nothing further to report.

Fix Action

Fix / Workaround

Notes

This was observed repeatedly in a direct Telegram chat after successful message.send calls. Adding a non-empty internal final message appears to be a workaround, but it is fragile and easy for agents to miss.

PR fix notes

PR #78726: telegram: avoid silent fallback after message tool send (#78685)

Description (problem / solution / changelog)

Root cause

Telegram inbound dispatch tracks user-visible replies with deliveryState when the buffered reply pipeline calls deliverReplies / durable final delivery. The agent message tool sends via deliverOutboundPayloads, which succeeded but never updated that tracker. An empty/no visible final assistant payload then triggered the rewritten silent-reply fallback (“Nothing further to report.” etc.) even though Telegram already showed the tool-delivered reply.

Fixes https://github.com/openclaw/openclaw/issues/78685 .

Approach

Correlate the active inbound telegram turn (SessionKey → chat/account) with telegram outbound message:sent successes: when outbound delivery reports success for channel=telegram and the same to/account, call deliveryState.markDelivered() via the inbound snapshot.

Safety

Scoped to Telegram + matching session key/outbound recipient; clears when inbound dispatch ends. Uses existing outbound send success semantics (already used for diagnostics/hooks).

Runtime / security

No change to Telegram auth/pairing, gateway auth models, sandboxing, or tool ACLs — delivery correlation only affects whether the rewritten silent filler is skipped after proven outbound visibility.

Real behavior proof

Manual reproduction of the duplicate message in a live Telegram DM was not reliable (automatic DM policy steers trivial turns away from message-tool-only paths, so the buggy combination was hard to trigger on demand). Automated tests assert the correlation path (match → mark delivered, wrong to → no mark, end handler prevents double marks after cleanup).

Informal manual checks on a local gateway + Telegram bot (openclaw 2026.5.6) continued to show normal single-reply DM behavior after the change.

Tests run

pnpm test src/infra/outbound/telegram-inbound-turn-delivery.test.ts
node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json src/infra/outbound/telegram-inbound-turn-delivery.ts src/infra/outbound/deliver.ts
node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.extensions.json extensions/telegram/src/bot-message-dispatch.ts
pnpm check:changed

Out of scope

  • Broader refactoring of telegram delivery trackers.
  • Matching other outbound channels unless the same symptom is confirmed there.

Changed files

  • CHANGELOG.md (modified, +1/-0)
  • extensions/telegram/src/action-runtime.test.ts (modified, +51/-0)
  • extensions/telegram/src/action-runtime.ts (modified, +17/-0)
  • extensions/telegram/src/bot-message-dispatch.ts (modified, +10/-0)
  • extensions/telegram/src/channel-actions.test.ts (modified, +28/-0)
  • extensions/telegram/src/channel-actions.ts (modified, +10/-2)
  • src/infra/outbound/deliver.ts (modified, +8/-0)
  • src/infra/outbound/telegram-inbound-turn-delivery.test.ts (added, +54/-0)
  • src/infra/outbound/telegram-inbound-turn-delivery.ts (added, +45/-0)
  • src/plugin-sdk/outbound-runtime.ts (modified, +5/-0)

Code Example

Nothing further to report.
RAW_BUFFERClick to expand / collapse

Summary

When OpenClaw is used from a Telegram direct conversation, a fallback message Nothing further to report. can still be posted to Telegram after the assistant has already sent the intended reply through the messaging tool.

This appears to happen when the assistant calls message.send successfully, then the normal assistant final response is empty or otherwise treated as empty by the runtime. The runtime inserts the fallback text and routes it back to the Telegram conversation, creating an extra unwanted message.

Reproduction Context

  • Surface: Telegram direct chat
  • Tool path: message.send sends the visible reply successfully
  • After the tool call, the assistant final response is empty or intentionally omitted because the Telegram message was already sent
  • OpenClaw posts an additional fallback message: Nothing further to report.

Expected Behavior

If the assistant has already sent a message through message.send, OpenClaw should not post a generic fallback final message to the same Telegram thread.

Possible acceptable behavior:

  • suppress empty final responses for Telegram direct sessions after a successful message.send, or
  • keep the fallback internal-only, or
  • allow agents/config to disable this fallback per surface/session.

Actual Behavior

Telegram receives the intended message, then also receives:

Nothing further to report.

This persists even after adding local agent instructions telling the assistant not to use that phrase, which suggests the text is injected by OpenClaw runtime rather than generated by the agent prompt.

Impact

  • Creates confusing duplicate replies in Telegram
  • Makes the assistant look like it is ignoring its own instructions
  • Breaks chat UX for direct messaging surfaces where message.send is the actual user-visible response

Notes

This was observed repeatedly in a direct Telegram chat after successful message.send calls. Adding a non-empty internal final message appears to be a workaround, but it is fragile and easy for agents to miss.

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 - ✅(Solved) Fix Telegram direct chat receives unwanted "Nothing further to report" fallback after message.send [1 pull requests, 3 comments, 3 participants]