OpenClaw Telegram completion receipts that users can actually trust
Problem statement: a user sends OpenClaw a serious Telegram task. The agent starts typing, maybe posts a progress update, calls tools, edits a message, or reacts to the chat. Then the conversation stops feeling conclusive. Did the job finish. Did it fail. Did it already send the report, change the file, or call an external API. The user should not have to guess.
Telegram is a good surface for OpenClaw because it is fast, familiar, and always nearby. It is also a place where ambiguity hurts. A browser chat can show richer session state, but a Telegram user often sees only a small sequence of messages, edits, reactions, and attachments. If the final receipt is missing or vague, the operator may rerun the task and create duplicate side effects. If the receipt says "done" without enough detail, the operator still has to inspect logs manually. The fix is not more noisy progress. The fix is a clear completion contract.
- OpenClaw issue #79684, opened on May 9, 2026, reported that visible Telegram draft previews could be reused after tool or media output landed, making the next assistant message look stale instead of clearly final.
- OpenClaw issues #79681 and #79679, also opened on May 9, 2026, described Telegram and Discord typing, reaction, and delivery-confidence behavior that affects whether users understand a long-running action as alive, complete, or abandoned.
- A May 7, 2026 release note summarized Telegram fixes around draft preview rotation, topic-cache setup, status reactions, and message context assembly. Those are not cosmetic details. They are the parts of the runtime that decide whether a chat surface gives the operator useful feedback.
- Our own hosted-product notes keep Telegram optional after launch, not required for first success. That decision came from operational experience: built-in chat is easier to validate first, while Telegram is best added once provider auth, runtime health, and receipt expectations are already stable.
What a completion receipt has to prove
A completion receipt is not a decorative "done" message. It is the user's proof that a remote agent finished a specific run and left the world in a known state. For OpenClaw, that matters because a Telegram request can lead to file edits, browser actions, API calls, cron updates, channel messages, or work delegated to another session. The receipt should answer five questions without sending the user to a log file first.
- What happened: summarize the actual result, not the plan.
- Where it happened: name the file, chat, issue, page, session, or external system touched.
- Whether it finished cleanly: separate completed, partially completed, failed, and cancelled states.
- What still needs attention: list blocked steps, manual checks, or decisions required from the user.
- Whether retry is safe: warn when rerunning could duplicate an external side effect.
That last point is where many chat-based agents fail. A missing receipt feels like a harmless messaging problem until the operator repeats a command that already sent an email, posted into a channel, created a ticket, or changed infrastructure. Treat receipts as part of the control plane, not as a copywriting flourish.
Common causes of confusing Telegram endings
1. Progress previews outlive the real tool state
Telegram surfaces can show draft text, typing state, edited messages, reactions, and final messages. If a pre-tool preview is reused after tool output, the user may see text that belongs to an earlier phase of the run. The agent may have moved forward, but the chat still looks like it is planning. This is the exact class of failure that makes users ask whether OpenClaw "froze" even when logs show activity.
2. Tool output and final narrative arrive through different paths
A tool may create a file or send media before the final assistant message arrives. If the final message fails, the user sees a partial artifact without a summary. If the artifact fails but the final message says the plan was attempted, the user may overtrust it. Receipts need to describe what actually landed, not what the agent intended to do.
3. Long tasks cross timeout or restart boundaries
Telegram jobs often include web browsing, repository edits, long provider calls, or cron-driven work. Those tasks can cross gateway restarts, provider timeouts, network retries, or session compaction. The visible chat layer may not preserve enough context unless the runtime deliberately writes a final status after the work is known to be complete.
4. Reaction and typing signals are mistaken for delivery proof
A reaction can confirm that OpenClaw saw a message. Typing can show that a handler is active. Neither proves that the requested task finished. Teams get into trouble when they treat lightweight chat affordances as a durable audit trail. Use them for comfort, but do not let them replace the final receipt.
Diagnostics: prove whether the run completed
Check the last assistant turn
Start with the visible transcript. Look for a final status, a concrete result, and named side effects. A good final turn says what changed. A weak one only says that OpenClaw "will" do something, "started" doing something, or "should" have completed. If the last visible turn is only a progress preview, do not assume the task is safe to rerun.
Check the gateway logs around the Telegram update
Match the Telegram message time to gateway logs. You are looking for channel handler errors, delivery failures, provider stream errors, session repair warnings, and restart boundaries. The important question is not simply whether the gateway is now healthy. The question is whether the exact run that handled the Telegram message reached a clean completion path.
Check external side effects before retrying
If the task could touch anything outside the chat, verify that target directly. Check the repository diff, the ticket, the calendar, the email draft, the file path, the browser state, or the API dashboard. This is tedious, but it is cheaper than duplicating a production action because the chat did not say the quiet part out loud.
Check whether the final message was blocked by channel delivery
Sometimes the agent run succeeds and only the channel delivery fails. That is a different failure from a task failure. If logs show the final assistant message was produced but Telegram delivery failed, fix the channel path. If logs show no final assistant message, inspect the run itself.
Step-by-step fix: define a Telegram receipt contract
Step 1: Use explicit status words
Pick a small set of receipt states and use them consistently: Completed, Partially completed, Failed, Cancelled, and Needs review. Do not make users infer status from tone. The first line of the receipt should make the state obvious.
Step 2: Include the result and the evidence
A receipt should include the artifact or evidence that proves the result. For a file edit, name the path. For a research task, name the saved report. For a browser task, describe the final page state. For a cron task, name the job and next scheduled run. For a message-sending task, say where it was sent.
Step 3: Separate progress messages from final messages
Progress updates should be short and clearly non-final. Use language such as "working", "checking", or "running". Reserve completion language for the final receipt. This reduces the chance that a user treats an optimistic intermediate message as proof.
Step 4: Add a retry warning for side-effecting tasks
When a task could create duplicate external work, the receipt should say so. Example: "Do not rerun until you confirm the ticket was not already created." That sentence may feel heavy, but it prevents the most expensive class of chat-agent mistakes.
Step 5: Keep a fallback verification path
Users need a simple way to verify a suspicious run. For a solo instance, that may be a log check and a session review. For a team instance, it should be a repeatable operations habit: check transcript, check logs, check side effects, then decide whether to retry.
Receipt examples you can copy
Completed
Completed. I updated landing/src/data/blog-posts.ts, added the new article page, ran the prebuild check, and found no errors.
No external messages were sent. Safe next step: review the diff or ask me to commit.
Partially completed
Partially completed. I created the local report and updated the backlog, but the build failed on a title-length check. I did not push changes. Safe next step: fix the title and rerun the build. Do not publish until the check passes.
Failed with side-effect warning
Failed. The ticket creation step returned a timeout after the request was sent. I cannot prove whether the ticket exists. Check the project before retrying so we do not create a duplicate.
Edge cases that need extra care
- Edited messages: if OpenClaw edits a previous Telegram message, users may miss the final state. Prefer a fresh receipt for high-risk tasks.
- Attachments: a file upload can succeed while the explanatory message fails. The receipt should name the attachment and its purpose.
- Cron results: scheduled tasks need receipts that include the job name and whether the next run remains enabled.
- Group chats: receipts should avoid leaking private file paths or secrets while still proving status to the right audience.
- Restart windows: if the gateway restarts during delivery, inspect logs before assuming the task failed.
Typical mistakes
- Using typing indicators as a substitute for final status.
- Posting too many progress updates and no durable final summary.
- Letting "done" mean both "attempted" and "verified".
- Rerunning a failed-looking Telegram task without checking external side effects.
- Adding Telegram before the core provider and built-in chat path have been validated.
How to verify the fix
Run three test tasks from Telegram: one harmless file read, one long tool-heavy task, and one intentionally blocked side-effecting task. The harmless task should produce a concise completion receipt. The long task should show progress without reusing stale text and then produce a clear final status. The blocked task should warn that retry safety depends on checking the external target first. If any test leaves you wondering what happened, the receipt contract is not strong enough yet.
Fix once. Stop recurring Telegram completion ambiguity.
If this keeps coming back, you can move your existing setup to managed OpenClaw cloud hosting instead of rebuilding the same stack. Import your current instance, keep your context, and move onto a runtime with lower ops overhead.
- Import flow in ~1 minute
- Keep your current instance context
- Run with managed security and reliability defaults
If you would rather compare options first, review OpenClaw cloud hosting or see the best OpenClaw hosting options before deciding.
FAQ
Can I solve this only with better prompt instructions?
Prompt instructions help, but they are not enough if the runtime can lose final delivery, reuse stale previews, or restart during a long task. Use prompt rules for receipt shape and operational checks for delivery proof.
Should every Telegram task get a long receipt?
No. Simple conversational answers can stay short. Long receipts are for tasks with side effects, uncertainty, files, scheduled work, external APIs, or team visibility. The higher the risk of duplicate work, the more explicit the receipt should be.
Is built-in chat better than Telegram for first setup?
Usually, yes. Built-in chat is easier to validate first because it removes channel delivery from the first-success path. Once the runtime, provider, and model behavior are stable, Telegram becomes a strong everyday interface.
Where should I send users next?
If they want lower operations overhead, send them to OpenClaw cloud hosting. If they are still choosing between self-hosting and managed hosting, send them to the comparison page. If they depend on real browser sessions, point them to Chrome Extension relay before they redesign their workflow around a remote browser.