Operator
← Back to blog
GuidesMessaging

How to talk to your agent on Telegram

Operator TeamOperator Team···7 min read

Telegram is the channel most people connect first, and it is also the easiest one to talk to once it is running. There is no mention to remember in a private chat, the slash commands live in a menu the app builds for you, and the agent keeps a continuous memory of your conversation. This is how to use it day to day, whether the bot is one you run yourself with OpenClaw or one Operator.io hosts for you.

Telegram app logo

Direct chats

Open your bot in Telegram, type a message, and send it. That is the whole interaction in a one to one chat. The agent reads what you wrote, does the work, and replies in the same thread, so a Telegram DM feels like texting an assistant who happens to have your tools wired in.

Telegram treats every bot as a separate account. When you open the chat for the first time, the client may show a Start button before the input field unlocks. Tap Start or send /start once if the bot does not seem to accept messages yet.

After that, plain text is enough. You can also send photos, documents, voice notes, and other supported media types, and OpenClaw normalizes them into the same session the text uses.

The only moment that ever feels different is the very first message to a self hosted bot. OpenClaw defaults to a pairing policy, so an account it does not recognize gets a short code back instead of an answer, and you approve that account from the machine the gateway runs on with openclaw pairing approve telegram <CODE>. People hunt for a box in Telegram to paste the code into, and there is no box; the code is approved on the host, not in the app.

Our Telegram setup guide walks through that flow if you are standing up your own bot. On Operator the bot is paired to your account at sign in, so the first message you send is the first one it answers.

While the agent is working, replies in a DM often arrive as a live preview. OpenClaw edits the same Telegram message as tokens stream with editMessageText, then finalizes the answer in place. That behavior is controlled by channels.telegram.streaming and defaults to partial preview mode. Long answers may split into multiple messages once they exceed Telegram's size limits, but you still see progress in the chat instead of waiting for a single block at the end.

Groups and mentions

A bot in a group is quieter than a bot in a DM, and there are two separate reasons for that. The first is Telegram's own privacy mode, which by default hides everything from a bot except messages that mention it or reply to it. The second is OpenClaw, which also requires a mention in groups out of the box. The practical upshot is the same either way: in a group you @mention the bot or reply to one of its messages, and it answers that.

Telegram recognizes mentions through MessageEntity objects on the @botusername text, and OpenClaw also accepts mention patterns you configure in the gateway. A reply to any of the bot's prior messages counts even when the @ is omitted, which is useful on mobile where typing the full handle is awkward.

If you want the agent to read and respond to everything in a particular group, you have two knobs on the Telegram side and one on the OpenClaw side. Disable privacy mode in BotFather with /setprivacy, choosing Disable and then removing and re adding the bot so Telegram applies the change, or make the bot a group admin, which has the same effect per Telegram's group bot docs.

Then tell OpenClaw to stop requiring the mention. Sending /activation always in that group works for the current session, but it resets when the gateway restarts. For a permanent change, set requireMention: false under the group's chat ID in channels.telegram.groups, or use "*" if you want that behavior everywhere. The OpenClaw Telegram docs show the exact config shape.

Before you turn either knob in a group that has other people in it, it helps to know what actually changes. Once privacy mode is off and the mention requirement is gone, the bot sees every message posted in that group, including ones that are not aimed at it, and each of those messages becomes input your agent reads and keeps in the group's transcript on the gateway. Anyone in the room can then talk to the agent and push it toward whatever tools you have connected, so the read everything setup fits a group that is just you, or one where you trust everyone present.

In a shared room with people who did not sign up for that, leaving the mention requirement on keeps the agent quiet until someone calls it by name. You can narrow it further by listing the numeric Telegram user IDs allowed to trigger the bot under allowFrom for that group, which is separate from the group chat ID itself, so the agent can sit in a busy channel and still answer only the people you named.

Slash commands

OpenClaw registers its native commands with Telegram's bot menu when it starts, calling setMyCommands with a list of BotCommand name and description pairs. That means the commands show up behind the menu button beside the message box, and typing / brings up the list with descriptions. You do not have to remember the syntax. Telegram clients cache the menu and refresh it when the bot's command list changes, as described in the Bot API commands section.

The ones you will reach for most often:

CommandWhat it does
/helpThe short summary
/statusRuntime state and remaining model quota
/toolsWhat the agent can do in this chat right now, which depends on the integrations you have connected
/modelSwitches models
/newArchives the current conversation and starts a fresh one, keeping the old transcript
/resetClears the current chat in place
/stopCancels a run that is already going
/whoamiPrints your numeric Telegram user ID and the current chat ID

When a command needs a choice you did not supply, Telegram shows tappable buttons rather than making you type it, and /whoami is the one to reach for when you are editing group allowlists.

If the menu is empty but manual slash commands still work, the native registration step likely failed silently at startup. On a self hosted gateway, set channels.telegram.commands.native and commands.nativeSkills to true explicitly instead of "auto", restart, and run openclaw channels status --probe to confirm the bot identity from getMe. The full Telegram channel docs cover custom menu entries you can add yourself, and the limit Telegram enforces is 100 commands per scope.

Memory and sessions

Memory in Telegram follows the chat. A direct message is one continuous session, so the agent carries context across days in that DM. Each group is its own separate session keyed by the negative supergroup ID Telegram assigns, and in a group set up as a forum with topics, OpenClaw appends :topic: to the session key so each topic stays isolated. The /focus command can bind a specific topic to a session when you want a long running task pinned to its own space inside a forum. Switching topics or chats switches context, which is what keeps a personal DM from mixing with a team group.

That separation is why Telegram works well for both private work and shared channels. You can keep a running personal thread with the agent in your DM, drop it into a project group when something needs to be shared, and trust that the two transcripts stay distinct on the gateway side even though they share the same bot account in Telegram's UI.

Outbound replies use Telegram's HTML parse mode, so links and basic formatting survive the trip from the model to the chat. Link previews are on by default. Telegram does not expose read receipts for bots, so you will not see the blue checkmarks you get in human chats, but the typing indicator still fires while the agent is generating when preview streaming is active.

Troubleshooting

If the bot goes silent when it should not, the usual culprits are the token, the pairing approval, privacy mode in a group, or a duplicate poller holding the same bot token. Telegram allows only one active getUpdates long poll per token, so a second gateway or script using the same token produces 409 conflicts and neither side gets messages reliably. The Telegram troubleshooting guide walks through each failure mode.

And if minting a BotFather token and chasing a pairing code is more setup than you want, Operator runs OpenClaw with Telegram connected and maintained, so the agent is waiting in your chat the first time you open it. You can start a free trial and have it answering in a minute, or keep your own bot with the steps above.

Frequently asked questions

How do I message my agent on Telegram?

+

Open the chat with your bot and send a message like you would to any person. In a one to one chat there is no mention or command to remember, the agent reads what you send and replies. The first time an unapproved account messages a self hosted bot it returns a pairing code that you approve from the gateway, but on Operator that step is already handled, so the bot answers right away.

Why does my agent ignore messages in a Telegram group?

+

Two things gate a bot in groups. Telegram's privacy mode means a bot only sees messages that mention it or reply to it unless you disable privacy mode in BotFather or make the bot an admin, and OpenClaw also requires a mention in groups by default. So in a group you @mention the bot or reply to it, or you switch the chat to /activation always if you want it to read everything.

Where are the slash commands on Telegram?

+

OpenClaw registers native commands with Telegram's bot menu on startup, so they show up behind the menu button next to the message box and when you type /. The common ones are /help, /status, /tools, /model, /new to start a fresh chat, /reset to clear the current one, and /stop to cancel a run. Commands that take a choice show tappable buttons when you send them without an argument.

Why is my Telegram command menu empty?

+

OpenClaw registers the menu at startup through Telegram's setMyCommands API. If the menu is blank but typing /help still works, the native command flag may have resolved to false during startup. On self hosted setups, set channels.telegram.commands.native and nativeSkills to true explicitly, restart the gateway, and check openclaw channels status --probe. On Operator the menu is maintained for you.