<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:
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:
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
- send a direct message to the bot, or mention the bot in a group
- confirm Roomote answers in the session and includes a web continuation link
- reply to the Roomote answer, or reply in the same Roomote-owned topic, and confirm the same session continues
- use
/new <request>and confirm a fresh conversation opens in its own topic when Threaded Mode is enabled - use
/goal <objective>and confirm the acknowledgement repeats the objective - reply in the task topic to send a follow-up
/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, callsetWebhook again with the new
<public-url>/api/webhooks/telegram URL and restart Roomote with the matching
URL.