Channels
How messages flow in and out of OpenClaw — the 24+ messaging surfaces you can connect, what each one does well, and the security defaults that matter.
What channels are, in one sentence
A channel is the messaging surface that connects your real life to your agent — Slack, WhatsApp, iMessage, Discord, etc. The Gateway holds the connection; the channel translates inbound messages into a shape the agent runtime can read, and the agent’s responses back into the format the channel expects.
OpenClaw supports more channels than any other agent runtime we know of — 24+ at last count.
The full list
From the canonical channels index:
Chat / IM: WhatsApp · Telegram · Slack · Discord · Google Chat · Signal · Microsoft Teams · Matrix · Feishu · LINE · Mattermost · Nextcloud Talk · Synology Chat · Tlon · WeChat · QQ · WebChat · Yuanbao
iMessage variants: iMessage (native) · BlueBubbles (more mature)
Other: IRC · Twitch · Nostr · Zalo · Zalo Personal
Voice nodes: macOS · iOS · Android (via Voice Wake and Talk Mode)
That’s a long list. In practice, most people pair 2–3 channels and never touch the rest.
Picking your first channel
If you’re learning OpenClaw and want to test it works, the picking order is:
| Order | Channel | Why |
|---|---|---|
| 1st | Telegram | Bot pairing is the simplest. No workspace admin needed. Free tier good enough. |
| 2nd | Discord | Personal server is fine. Pairing’s mature. Voice channels too if you want. |
| 3rd | Slack | If you have a workspace. Slightly more setup; OAuth scopes to think about. |
| Later | QR-pair via official channel; works but needs more attention. | |
| Mac users | iMessage / BlueBubbles | macOS-only host. BlueBubbles bridge is more reliable. |
| Specialty | everything else | Add when you have a specific reason. |
What every channel shares
All channels in OpenClaw inherit the same security defaults:
- DM policy =
pairingby default. Unknown senders get a one-time code, not your agent. (§6.1 check 2) allowFromallowlist in~/.openclaw/openclaw.json. Even after pairing, only senders on the allowlist reach the agent.- Per-channel rate limits (configurable).
- Webhook signature validation (where the channel supports it — e.g. Slack signing secret).
Why this matters: the friendliest “convenience hack” is to set
dmPolicy="open"and add"*"to allowFrom for testing. Don’t. It’s the same thing as leaving your front door unlocked. The pairing flow takes 30 seconds. Use it.
Channels by use case
”I want a personal assistant in my pocket”
Pair Telegram or WhatsApp. Both are mobile-native. Telegram’s bot model is simpler; WhatsApp pairing via the official channel is more involved but works.
”I want a work bot in our team chat”
Slack if you’re on Slack. Microsoft Teams if you’re on Teams. Google Chat if you’re on Workspace. All three need workspace admin OAuth approval — clear it with whoever owns the workspace before installing.
”I want my Mac to be the agent host”
iMessage (native or BlueBubbles) so your phone gets responses. Voice Wake so you can say “hey claw” without typing. The full Mac-native shape is documented at docs.openclaw.ai/platforms/macos.
”I want a community/server bot”
Discord is the cleanest. Public Discord channels with dmPolicy="open" need a fully sandboxed agent (see §6.1 check 4) — do this carefully.
”I want voice without a Mac”
Voice nodes are macOS / iOS / Android only. On Linux, you’re text-channels-only for now. See §1.4 drawback #6 for the honest take.
What to know before pairing
- OAuth scopes for Slack/Discord/Teams/Google Chat are broader than they need to be by default. Read what you’re granting before clicking through. Scope minimisation is §6.2 signal #4.
- Bot identity — give your bot a distinct username/handle so its messages are visibly bot-tagged. Cleaner conversation flow.
- Allowlist before testing in public. Even your own DM should be in
allowFrombefore you’re surprised by the pairing prompt.
A walkthrough — pairing Telegram in 5 minutes
- Open Telegram, message
@BotFather, send/newbot. Pick a name and a username. BotFather gives you a token. - In
~/.openclaw/openclaw.json, add:{ "channels": { "telegram": { "token": "123456:ABC-...", "dmPolicy": "pairing", "allowFrom": ["@yourusername"] } } } - Restart the daemon:
openclaw daemon restart - Find your bot in Telegram. Send any message. Get back a pairing code.
- Approve:
openclaw pairing approve telegram <code> - Send another message. The agent responds.
Total time: 5–10 minutes. Most other channels follow a similar shape (token + allowlist + pairing).
Things to try
- Pair Telegram + Discord with the same agent, message from both, see that the agent feels like one consistent personality. (That’s the value of single-agent + workspace-files identity.)
- Set up Microsoft Teams + a daily 9am cron that summarises Teams channel activity. Useful for absent-from-meetings days.
- Bridge IRC if you’re in a community that still uses it. OpenClaw supports it; few other agent runtimes do.
- Voice Wake on Mac — say “hey claw, what’s on my calendar?” and watch it work.
What we are NOT going to claim
We’ve not paired all 24 channels ourselves. The docs source is canonical for what’s supported; specific channel quirks (Signal’s pairing flow vs Telegram’s, for instance) need real-deployment validation. Each channel’s own docs page is the source of truth for that channel’s specifics.
What to read next
- §3.1 Index — patterns vs packages framing
- §3.3 Tools — what the agent does (built-in tools)
- §3.4 Models — the brain choice
- §4 Plugins — specific channel connector field notes (Slack et al)
- §6.1 Self-hosting checklist — security posture for channels