openclaw - 💡(How to fix) Fix [Bug]: Cron Telegram delivery renders Markdown links as raw HTML and needs better support for long-running jobs [2 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#81411Fetched 2026-05-14 03:32:32
View on GitHub
Comments
2
Participants
3
Timeline
3
Reactions
2
Author
Timeline (top)
commented ×2closed ×1

Cron Telegram delivery can render Markdown links as raw HTML in Telegram, while the same link format works correctly when sent through openclaw message send.

I also noticed that long-running cron jobs, such as a daily backup, can be marked as successful or forced to produce a visible answer before the actual useful delivery is complete.

Root Cause

This seems related to cron/announce Telegram delivery reliability issues, but the failure mode here is different because the Telegram message is delivered, only incorrectly rendered:

Fix Action

Fix / Workaround

Workaround used

Code Example

[view article](https://example.com/article)

---

<a href="https://example.com/article">view article</a>

---

python3 skills/<skill-name>/scripts/send_to_telegram.py
RAW_BUFFERClick to expand / collapse

Summary

Cron Telegram delivery can render Markdown links as raw HTML in Telegram, while the same link format works correctly when sent through openclaw message send.

I also noticed that long-running cron jobs, such as a daily backup, can be marked as successful or forced to produce a visible answer before the actual useful delivery is complete.

Environment

  • OpenClaw: 2026.5.10-beta.5 (1ba6893)
  • OS: Ubuntu 24.04.4 LTS
  • Kernel: Linux 6.17.0-23-generic x86_64
  • Channel: Telegram
  • Telegram direct messaging works normally

What happened

A cron-generated Telegram message contained Markdown links such as:

[view article](https://example.com/article)

But in Telegram, the delivered message showed the raw HTML form literally:

<a href="https://example.com/article">view article</a>

The link was not clickable and the raw tag appeared in the chat.

However, sending a direct test message with openclaw message send rendered the link correctly in Telegram.

Expected behavior

Cron Telegram delivery should render links the same way as openclaw message send, or it should provide an explicit and reliable formatting mode for cron delivery, such as:

  • markdown
  • html
  • plain

Impact

This affects scheduled Telegram reports and automations, especially crons that generate rich summaries with links, such as:

  • morning briefings
  • news summaries
  • backup reports
  • monitoring alerts
  • task summaries

The cron may appear successful, but the final Telegram message is degraded or incorrectly formatted.

Workaround used

I disabled native cron delivery with --no-deliver / delivery: none.

Then I changed the skill used by the cron to call a wrapper script:

python3 skills/<skill-name>/scripts/send_to_telegram.py

The wrapper:

  • runs the deterministic skill script
  • converts Markdown links like [label](url) to Telegram HTML links
  • escapes the rest of the message
  • sends directly through the Telegram Bot API with parse_mode=HTML
  • uses disable_web_page_preview=True
  • prints only NO_REPLY so OpenClaw does not send a second message

For long-running jobs, such as backup jobs, the wrapper immediately starts a background worker and returns NO_REPLY. The worker sends the final Telegram message when the backup/upload is complete.

This solved the issue locally.

Suggested fixes

  1. Make cron Telegram delivery use the same formatting/rendering path as openclaw message send.
  2. Ensure Markdown links are either preserved correctly or converted to Telegram-compatible HTML only when parse_mode=HTML is actually used.
  3. Add a cron delivery formatting option, for example delivery.format = markdown | html | plain.
  4. For delivery: none jobs that return NO_REPLY, avoid reprompting the model to produce a visible answer.
  5. Consider supporting a native detached-delivery pattern for long-running cron jobs, where the cron can start work and the final message is delivered later by the job itself.
  6. Add regression tests for Telegram cron delivery with clickable links.

Related issues

This seems related to cron/announce Telegram delivery reliability issues, but the failure mode here is different because the Telegram message is delivered, only incorrectly rendered:

  • #43177
  • #23640

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

Cron Telegram delivery should render links the same way as openclaw message send, or it should provide an explicit and reliable formatting mode for cron delivery, such as:

  • markdown
  • html
  • plain

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 [Bug]: Cron Telegram delivery renders Markdown links as raw HTML and needs better support for long-running jobs [2 comments, 3 participants]