One agent. Three channels. That's the pitch. And with OpenClaw, it's not just possible — it's the default way to run things.
Most people start with one channel (usually Slack or Telegram), get comfortable, and then ask: can my agent also live in Discord? Can it respond on WhatsApp too? The answer is yes, and it's simpler than you'd expect. OpenClaw was built around the idea that your agent shouldn't be locked to a single platform.
This post covers how multi-channel routing works in OpenClaw, how to configure Slack + Discord + WhatsApp simultaneously, how to control which messages your agent sees, and how session isolation keeps contexts clean across platforms.
How OpenClaw Handles Multiple Channels
The core concept is simple: the Gateway is the router. Every incoming message — whether from Slack, Discord, or WhatsApp — hits the same Gateway process. The Gateway inspects the message's origin and routes it to the correct agent and session.
OpenClaw routes replies back to the channel the message came from. If you send a message via WhatsApp, the reply goes to WhatsApp. If you send via Discord, the reply goes to Discord. The model never decides — routing is deterministic and configured by you.
Sessions are isolated by default. A conversation in your Slack DM doesn't bleed into your WhatsApp conversation. Each channel+peer combination gets its own session bucket:
# Slack DM
agent:main:main
# Discord DM
agent:main:main
# WhatsApp DM
agent:main:main
# Slack channel
agent:main:slack:channel:C0A4G5T2DLM
# Discord channel
agent:main:discord:channel:123456789
# WhatsApp group
agent:main:whatsapp:group:120363403215116621@g.us
Direct messages across all channels default to the agent's main session. So if you're the only user talking to your agent, your Slack DM and WhatsApp DM share the same brain.
The Basic Multi-Channel Config
Here's what a minimal config looks like with all three channels enabled:
{
"channels": {
"slack": {
"enabled": true,
"mode": "socket",
"appToken": "xapp-...",
"botToken": "xoxb-..."
},
"discord": {
"enabled": true,
"token": "your-discord-bot-token"
},
"whatsapp": {
"dmPolicy": "pairing",
"allowFrom": ["+15551234567"]
}
}
}
That's it. Once the Gateway starts with this config, your agent is live on all three channels simultaneously.
Slack Setup Requirements
Slack requires creating a Slack app in your workspace. You'll need:
- An App Token (
xapp-...) withconnections:writescope — for Socket Mode - A Bot Token (
xoxb-...) — for posting messages - Socket Mode enabled in your Slack app settings
- Bot events subscribed:
app_mention,message.channels,message.im, and others
Discord Setup Requirements
Discord requires a bot application in the Discord Developer Portal:
- Create an application, add a Bot, and copy the Bot Token
- Enable Message Content Intent (required) and Server Members Intent (recommended)
- Invite the bot to your server with
botandapplications.commandsscopes
WhatsApp Setup Requirements
WhatsApp uses the Baileys library (WhatsApp Web protocol) and requires QR pairing:
openclaw channels login --channel whatsapp
Scan the QR with your WhatsApp mobile app (Settings → Linked Devices).
Access Control Per Channel
OpenClaw gives you fine-grained control:
{
"channels": {
"slack": {
"enabled": true,
"mode": "socket",
"appToken": "xapp-...",
"botToken": "xoxb-...",
"dmPolicy": "pairing",
"allowFrom": ["U08CL58217B"]
},
"discord": {
"enabled": true,
"token": "your-discord-bot-token",
"dmPolicy": "pairing"
},
"whatsapp": {
"dmPolicy": "pairing",
"allowFrom": ["+15551234567"],
"groupPolicy": "allowlist",
"groupAllowFrom": ["+15551234567"]
}
}
}
Key options:
-
dmPolicy:"pairing"(requires approval),"allowlist"(only listed IDs), or"open" -
allowFrom: Array of user IDs/numbers allowed to DM -
groupPolicy:"allowlist","open", or"closed"
Routing Different Agents to Different Channels
{
"agents": {
"list": [
{ "id": "main", "name": "Hex", "workspace": "~/.openclaw/workspace" },
{ "id": "support", "name": "Support", "workspace": "~/.openclaw/workspace-support" }
]
},
"bindings": [
{ "match": { "channel": "slack", "teamId": "T123ABC" }, "agentId": "main" },
{ "match": { "channel": "discord", "guildId": "987654321" }, "agentId": "main" },
{ "match": { "channel": "whatsapp" }, "agentId": "support" }
]
}
Personal agent on Slack/Discord, customer support agent on WhatsApp — different workspaces, memories, and models per agent.
Broadcast: Multiple Agents in Parallel
{
"broadcast": {
"strategy": "parallel",
"120363403215116621@g.us": ["main", "logger"]
}
}
Runs both agents when a message arrives. Use case: primary agent + silent logging agent.
Shared Context Across Channels
Your agent's memory files are shared across channels by default. MEMORY.md, USER.md, and workspace files are the same regardless of which channel a message comes from.
Tell your agent on Slack "I'm going on holiday next week" — when you message on WhatsApp the next day, the agent knows. Memory files are the persistent layer that spans channels; session transcripts are per-session.
Practical Tips
- Different channels for different modes: Slack for team ops, Discord for community, WhatsApp for quick mobile queries
- Start with one channel, expand gradually: Debug multi-channel issues when each channel works independently
-
Verify with
openclaw gateway status: Shows connected channels, active accounts, errors - WhatsApp session persistence: Sessions stored on disk, auto-reconnect on Gateway restart
- Discord thread sessions: Threads get their own session key, isolated from channel context
Putting It Together
Multi-channel isn't just a configuration option — it's a fundamentally different way to operate an AI agent. Your agent is just there — in whatever app you're already using.
One Gateway process. One config file. Three channels blocks. That's the whole setup.
Originally published at openclawplaybook.ai. Get The OpenClaw Playbook — $9.99
Top comments (0)