The Telegram console reads tables, stays right-to-left, thinks in place, and updates its approval card there

Console replies in the admin chat are now rich messages like the console bot's: real tables, headings, and proper RTL layout. The bot shows \"Working on it…\" the moment a question lands and that same message grows into the answer; figures left in the open are covered automatically, and approval cards are redrawn in place.

Product update 4 min read

What changed

The Telegram console chat — the shared bot's admin chat and the dedicated @NabuOSBot console bot alike — now uses Telegram's newer messaging features:

  • Live thinking: the moment a question or voice note arrives, the bot sends a short "Working on it…" line in your own language, moves that same message along while it works ("Reading your records…", "Gathering the figures…"), and finally the very same message becomes the answer — no separate status message left above a separate reply. A typing indicator runs while it works.
  • Rich messages with real tables: the model's reply, already written with headings and tables for Telegram, now goes out as a rich message in the admin chat too; it no longer degrades to the legacy Markdown that could not carry a table. Clients without rich support get the same reply as HTML (monospace tables, spoilers, collapsible quotes).
  • Mirrored right-to-left tables: in an RTL reply the table columns mirror too — the naming column sits at the right edge and rows read right-to-left. Telegram keeps drawing a rich table's columns left-to-right whatever the message's direction says, so the bot mirrors the columns itself before sending; the text fallback mirrors in its own box table the same way and fits longer Persian cells without cutting them to "…".
  • Sensitive data under spoiler: on an approval card, the money figure and sensitive numbers (phone, card, IBAN) are covered with ||spoilers|| and only show when tapped. Figures the model left in the open are now covered by the bot itself: money beside a currency word ("120 USD", "1,200,000 تومان"), card numbers, IBANs, phone numbers and any run of six digits or more. The /approve_N · /deny_N command lines and tables deliberately stay plain so they stay actionable.
  • In-place updates instead of new-message spam: answering a card with /approve_N or /deny_N edits the message that carries it — the outcome plus the cards still waiting — rather than dropping a new message under a card that still says "waiting".
  • An "Open the console" button: wherever a reply ends with the console page's address (a card whose text is too long for the chat, say), the message carries a button that opens the console inside Telegram; on deployments whose domain is not registered as a Mini App, the same button degrades to a plain link.
  • Invisible decisions in groups: in a group, /approve_N and /deny_N are now answered invisibly like /ask, and the invisible card is redrawn through the same edit — nobody else in the room sees any of it.
  • Transient messages are removed: the business picker deletes itself once a choice is made.

How to use it

  1. Ask the console a question in the admin chat or the console bot as before (say, "this month's sales by month"); you see "Working on it…" at once, that message moves along, and the answer with a real table and the right direction lands in its place.
  2. When the console needs permission, the amount and numbers sit under spoilers; tap to reveal, then decide with /approve_N or /deny_N.
  3. The card message immediately becomes the outcome; any other waiting cards stay at the bottom of that same message.
  4. When a reply points at the console page, tap "Open the console" to open it inside Telegram.
  5. In a group, send /ask or /approve_N right there — the answer and the status bubble are visible only to you.

Good to know

  • The status updates are deliberately slow (at most one every couple of seconds, at most three) so Telegram's rate limits never bite; the final answer always arrives as an edit of that same message, and if the edit is refused the answer is sent fresh instead — it is never lost.
  • The automatic spoilers deliberately leave table rows, command lines, code blocks and links alone: a spoiler inside a table cell would shred both the box table and Telegram's own tables.
  • In-place editing only applies to cards drawn in that same chat; older cards and MCP cards are still answered with a new message.
  • Telegram's Bot API has no way for a bot to set a chat's auto-delete timer; the closest supported equivalents — invisible group replies and deleting the bot's own transient messages — are what this uses.
  • Everything keeps working through the HTML fallback on clients without rich message support.

More from the blog

Product update

The panel now opens on one address

Sign-in, the CRM, the console and billing all live on one host. Your theme, language and panel skin follow you to every page, including a public invoice.

Missing something?

Tell us what to build next. Most of what is announced here started as somebody’s suggestion.

Suggest a feature