Auth model
Bot token + DM pairing or group permissions
Fast pairing, public reach, and the cleanest path from install day to first reply.
Telegram Bot setup for OpenClaw: BotFather token handling, DM versus group policy, privacy mode, verification, streaming behavior, and the failure patterns operators hit first.
Auth model
Bot token + DM pairing or group permissions
Safety stance
Lock pairing scope early and verify privacy mode before exposing the bot to public groups.
Verification ritual
Confirm `/start`, a direct reply, and one group-thread interaction before calling setup complete.
Rollout mode
20–30 min setup
Telegram Bot
Telegram is production-ready for DMs and groups, with BotFather setup, pairing by default, and long polling as the standard runtime.
Watch group visibility
Most failures come from privacy mode, webhook confusion, or missing group permissions.
Telegram is the cleanest day-0 channel for OpenClaw: no QR login, no tenant admin gauntlet, and a fast path from token to working conversations. It is also the channel where new operators most often confuse Telegram-side visibility with OpenClaw-side policy.
Telegram is usually the best first channel when you want to validate your OpenClaw deployment quickly without sacrificing operational control.
It gives you a strong default mix:
If you only ship one first channel before expanding into Slack, WhatsApp, Signal, or WebChat, Telegram is usually the least confusing place to build confidence.
Use this guide when Telegram is likely to be your first operational lane and you want the DM policy, group posture, and verification drill locked down before real users arrive.
You are deciding:
If you want a shorter task-oriented walkthrough, also read:
Most “Telegram is broken” reports are really a mix of two different systems.
Telegram itself controls message visibility through:
If Telegram does not deliver the message to the bot, OpenClaw never gets a chance to evaluate your config.
Once Telegram delivers the message, OpenClaw still evaluates:
dmPolicyallowFromgroupsgroupPolicygroupAllowFromrequireMentionThat means a bot can be perfectly connected and still stay silent by policy.
This distinction matters because the fixes are totally different:
If you want a sensible starting point, use this model:
pairing{
channels: {
telegram: {
enabled: true,
botToken: '123:abc',
dmPolicy: 'pairing',
groups: {
'*': { requireMention: true },
},
groupPolicy: 'open',
},
},
}
Why this is a good first shape:
Open Telegram and chat with @BotFather.
Run:
/newbot
Then:
bot,Useful BotFather toggles to decide early:
/setjoingroups — whether the bot can be added to groups/setprivacy — whether it sees only mentions/replies or all group messagesTelegram does not use an interactive channel login flow like WhatsApp.
That means your working setup should come from config or env, not from a remembered one-time wizard state.
Recommended:
{
channels: {
telegram: {
enabled: true,
botToken: '123:abc',
},
},
}
Env fallback exists for the default account:
export TELEGRAM_BOT_TOKEN="123:abc"
But for long-term operations, config is usually easier to reason about than shell state.
Telegram direct messages are the fastest path to “it works,” but they are also where trust decisions get fuzzy if you do not choose a policy explicitly.
pairing — best defaultpairing is the safest general-purpose starting point.
When an unknown sender DMs the bot:
Useful commands:
openclaw pairing list telegram
openclaw pairing approve telegram <CODE>
This is a strong default for solo operators, family bots, small teams, and test environments.
allowlist — best when ownership is already knownIf you already know exactly who should be able to DM the bot, allowlist is more durable than relying on pairing history.
{
channels: {
telegram: {
dmPolicy: 'allowlist',
allowFrom: ['tg:123456789'],
},
},
}
This keeps your access policy visible in config instead of leaving it buried in previous approvals.
open — only when you really mean itopen should be treated as a deliberate public-access posture, not a convenience toggle.
If you use it, make sure your allowFrom model reflects that intent and that the bot is not carrying sensitive capabilities by default.
Telegram groups are where most first-week confusion happens.
By default, Telegram bots often only receive:
If you want the bot to see all messages in a group, you generally need one of these:
/setprivacy, orImportant operational note:
If you change privacy mode, remove and re-add the bot to the group so Telegram applies the change.
There are two separate decisions in OpenClaw group behavior:
That is why these fields matter so much:
channels.telegram.groupschannels.telegram.groupPolicychannels.telegram.groupAllowFromrequireMentionIf you want the bot available in groups but still conservative:
{
channels: {
telegram: {
groups: {
'*': { requireMention: true },
},
groupPolicy: 'open',
},
},
}
This means:
If you want one specific group to act more like a shared workspace:
{
channels: {
telegram: {
groups: {
'-1001234567890': {
requireMention: false,
},
},
groupPolicy: 'open',
},
},
}
Only do this when you are sure about Telegram-side visibility and you actually want ambient replies.
Do not stop at “the bot replied once.”
Run a four-part verification drill:
This is the decisive test for whether you actually understand your setup.
requireMention: true, the bot should stay quiet when not mentioned.requireMention: false, confirm Telegram is truly delivering those messages.Restart the gateway and retest the same flows:
openclaw gateway restart
If the lane only works before a restart, you do not yet have an operationally stable setup.
Upstream Telegram support is production-ready and defaults to long polling.
Webhook mode is optional.
That means most operators should not introduce webhook complexity unless there is a deployment-specific reason to do so.
Start with the default transport first; add webhook mode only when you need it.
Telegram can show partial replies while the model is still generating.
The relevant setting is:
channels.telegram.streaming
Supported modes include:
offpartialblockprogressOperationally:
partial is expressive and responsive,If users report duplicate-looking or flashing replies, test:
channels.telegram.streaming: "off"
or:
channels.telegram.streaming: "block"
Related fix:
Telegram command menus are registered through setMyCommands at startup.
If command registration fails, the issue is often network/DNS/HTTPS reachability to api.telegram.org, not your command names.
Related fix:
Telegram forum topics are worth planning for if you expect a team to operate the bot inside a supergroup.
Upstream behavior is powerful:
That makes Telegram more than a “simple bot channel” once you move into structured team operations.
Usually one of these:
Start here:
Usually one of these:
requireMention is still in effect,Start here:
This is especially common on VPSes, proxies, or hosts with bad IPv6 assumptions.
Start here:
If users send voice notes and nothing happens, the problem is usually media/transcription policy, not Telegram identity.
Start here:
That usually means config precedence, enablement, or runtime state is not what you think it is.
Start here:
If you want a pragmatic, low-surprise Telegram deployment, this is a good default posture:
| Surface | Recommendation | Why |
|---|---|---|
| DMs | pairing or explicit allowlist | Keeps trust visible and intentional |
| Groups | allowlist only the groups you mean to support | Avoids “why is it answering here?” drift |
| Group replies | mention-only at first | Safer for live communities |
| Streaming | keep default, disable only if preview UX becomes noisy | Better responsiveness without extra complexity |
| Transport | start with long polling | Fewer moving parts than webhook mode |
Telegram is often best used as one of these three roles:
Use it when you need the fastest path to a working bot.
Even if your main surface is Slack, Signal, or WhatsApp, Telegram is often a strong operator backchannel because setup is fast and access controls are clear.
When you need multiple structured discussion spaces with isolated sessions, Telegram topics can become surprisingly strong lightweight routing surfaces.
Verification & references
References