Skip to main content
Telegram is a deployment-owned messaging provider. It is not a Roomote sign-in provider. Roomote can receive Telegram bot messages, start tasks from private chats or bot mentions, and reply back through the same chat or forum topic. Telegram delivers updates through the Bot API webhook endpoint, so Roomote must be reachable at a stable public HTTPS URL. Use <public-url> below for your stable public Roomote URL.

Create a Telegram bot

Message @BotFather in Telegram and create or select a bot. In the Roomote UI (Settings > Communications > Telegram), enter the bot token, then save. Roomote reads the bot identity from Telegram, generates a webhook secret, registers the Bot API webhook, and adds /start, /help, /new, and /goal to the bot’s command menu for you. In BotFather, open Bot Settings > Threaded Mode and enable it. Roomote will then create a separate topic in your private bot chat for each new task. If Threaded Mode is unavailable or disabled, Roomote uses the existing single-chat flow. When a new topic opens, Roomote replies in the source conversation with its name; open it from Telegram’s topic list. Telegram’s Bot Developer Terms currently withhold a 15% fee from Stars purchases made through a bot while private-chat topics are enabled. When Telegram initially labels an implicit topic New Chat, Roomote replaces it with the same generated title shown for the task in the web app. For a shared team chat, create a Telegram supergroup, enable topics, then add the Roomote bot as an administrator with Manage Topics permission. Telegram requires a user to create the group and enable topics; the Bot API cannot do those provisioning steps. Once configured, Roomote can create task topics in the forum automatically. The source conversation receives an Open topic button so the handoff is visible instead of relying on the topic list alone. If Telegram rejects topic creation, Roomote starts the task in the source conversation and explains that Threaded Mode or Manage Topics needs attention. For self-hosted env-var configuration instead of the UI:
Roomote reads the bot username from Telegram using the bot token, so it does not need to be configured separately. When Roomote asks you to confirm an environment, you can use the buttons or reply naturally in the same chat or topic. Replies such as yes, never mind, or use API instead confirm, cancel, or revise the pending route without turning the reply into a second task. Restart Roomote after changing Telegram env vars. Inbound webhooks are accepted only when Telegram sends the matching X-Telegram-Bot-Api-Secret-Token header, and outbound replies use R_TELEGRAM_BOT_TOKEN.

Register the webhook

When you save Telegram credentials in Roomote, the webhook is registered automatically at <public-url>/api/webhooks/telegram with the managed secret token and allowed_updates including message, callback_query, and message_reaction. Roomote uses newly added 👍 reactions on suggested-task messages to launch the selected task and user-attributed reactions on Roomote Roomote replies as conversation input. Roomote does not request message_reaction_count: those aggregate updates do not identify the reacting user, so they cannot satisfy Roomote’s account and conversation ownership checks. If the connection check reports a mismatch, delivery error, or stale update configuration, use Repair in Telegram settings to re-register it. If you are bootstrapping only from env vars and need to register manually before the first UI save:
Use the same value for secret_token and R_TELEGRAM_WEBHOOK_SECRET when you pass a secret explicitly.

Account linking

Telegram tasks are attributed only to senders who have linked their Telegram account to a Roomote user. Generate a link code under Settings > Personal > Linked Accounts and send it to the bot. Until a sender links, Roomote will not start, resume, or follow up on tasks on their behalf.

Verify setup

  1. send a direct message to the bot, or mention the bot in a group
  2. confirm Roomote answers in the session and includes a web continuation link
  3. reply to the Roomote answer, or reply in the same Roomote-owned topic, and confirm the same session continues
  4. use /new <request> and confirm a fresh conversation opens in its own topic when Threaded Mode is enabled
  5. use /goal <objective> and confirm the acknowledgement repeats the objective
  6. reply in the task topic to send a follow-up
Every message from a linked user enters a session: in private chats directly, and in groups from bot mentions. Roomote answers directly or delegates a task into the right environment. A Roomote-owned topic can continue without another mention, and a direct reply to a Roomote message resumes the bound session even when the chat has no topics. Sessions are isolated by linked Roomote user. /new starts a fresh conversation instead of continuing the current one, opening a new topic when Telegram supports it; in a plain private chat the request joins that chat’s conversation. /goal makes the session own and pursue the supplied objective; Roomote may delegate child tasks as needed. Peer conversations do not apply to Telegram. Telegram’s privacy settings can prevent ambient group messages from reaching bots, and Roomote keeps Telegram sessions isolated per linked sender rather than treating a group or topic as one owner-bound conversation. Roomote does not claim to observe group messages that Telegram does not deliver. While a private-chat session turn is running, Telegram shows a non-empty Roomote is working… rich-message draft, then replaces it with rich response text as generation continues. The completed response is always finalized as a durable rich message so it remains in the conversation. Roomote keeps activity active across intermediate replies while more work remains, and a final reply clears it naturally. Telegram does not support native drafts in group chats, so groups use Telegram’s standard typing status and receive completed replies instead. Existing task chats and topics keep their active-task, request_user_input, and resumable-snapshot behavior. If Roomote cannot start a conversation, it says so in the chat instead of starting a task another way. Session automation reports can target a Telegram chat, topic, or owner direct message; replies continue the report’s session. Session-delegated coding tasks use one editable live status message with elapsed time, expandable progress details, and a link to the selected task. When a task finishes successfully, Telegram leaves its last useful progress update in place instead of replacing it with a generic Completed message. If the task later resumes, Roomote continues updating the same live message. Roomote sends all Telegram text replies as rich messages, including acknowledgements, progress, final replies, and editable live-task status. Every Markdown-authored reply uses Telegram’s native Rich Markdown support, preserving GitHub Flavored Markdown features where Telegram supports them. Plain text and Roomote-generated controls use supported Rich HTML embedded in the same Markdown payload, so sends, edits, and drafts share one formatting path. Each Roomote reply ends with a compact footer: Reply anytime, a plain running-task count when at least one task is running, links to pull requests the session is working on, and Open in Roomote, which opens the session transcript. Telegram renders this through its native rich-message footer presentation and controls its exact appearance. Rich text replies can remain in one message up to Telegram’s 32,768-character rich-message limit; longer replies are split while keeping the footer on the final text message. Roomote keeps the footer on the latest reply current as delegated tasks start and finish (checking about every 30 seconds while work is running), and earlier replies drop their footer when a new reply posts. When someone continues a Telegram conversation from the Roomote web app, the next Telegram reply quotes that authenticated sender and web message above the response. The quote is also sent before an image-only response. Replies to messages that originated in Telegram remain unquoted. Photos and supported image documents are passed as image input. Supported text documents are downloaded server-side and their extracted content is added to the request; voice and audio messages are transcribed, and supported video documents are described. Roomote can explicitly forward those current-message attachments to a task. The bot token is never included in the prompt or attachment URL.

Local URL changes

When the public URL changes, call setWebhook again with the new <public-url>/api/webhooks/telegram URL and restart Roomote with the matching URL.