Skip to main content

Channels & Integrations

A channel is any messaging platform connected to your OpenClaw gateway. The same agent, same brain, same memory — accessible from WhatsApp on your phone, Discord on your desktop, or Slack during a meeting. Channels are just transport.

As of v2026.6, OpenClaw supports 26 channels spanning messaging platforms, enterprise tools, and niche services. Since v2026.3.22, most channels are distributed as install-on-demand plugins via ClawHub rather than bundled in core.


Supported Channels

Messaging Platforms

ChannelLibraryAuth MethodStatusNotes
WhatsAppBaileysQR code scanBundledUnofficial API; ban risk — see WhatsApp
TelegramgrammYBot tokenBundledFastest setup — see Telegram
Discorddiscord.jsBot tokenBundledThread binding, mention gating — see Discord
SlackBoltBot + App tokenBundledSocket Mode or HTTP — see Slack
SignallibsignalPhone number linkBundledE2E encrypted, most private
iMessageNativeSystem integrationBundledmacOS only
WebChatBuilt-inGateway URLBundledhttp://localhost:18789/chat
IRCirc-frameworkServer + nickBundledMultiple networks supported
Matrixmatrix-js-sdkAccess tokenPluginSelf-hostable, optional E2E
Microsoft TeamsBot FrameworkAzure AD appPluginEnterprise SSO
Google ChatgoogleapisService accountPluginWorkspace integration
Feishu / Larklarksuite SDKApp credentialsPluginChinese/intl enterprise
LINELINE Messaging APIChannel tokenPluginPopular in Japan/SE Asia
WeChatWeChat APIAppID + secretPluginChinese market
Nostrnostr-toolsPrivate key (nsec)PluginDecentralized protocol
Twitchtmi.jsOAuth tokenPluginChat integration
ZaloZalo OA APIOA tokenPluginVietnam market
QQ BotQQ Bot APIApp ID + secretPluginChina market
MattermostMattermost APIBot tokenPluginSelf-hosted Slack alternative
Nextcloud TalkNextcloud APIApp passwordPluginSelf-hosted
Synology ChatSynology APIBot tokenPluginNAS integration
SMSTwilioAccount SID + tokenPluginOutbound/inbound SMS
Voice CallPlivo / TwilioAccount credentialsPluginPhone call channel
Tlon / UrbitUrbit APIShip credentialsPluginExperimental

Service Integrations

IntegrationCapabilitiesConnection
GmailRead, send, search, label emailsOAuth or App Password
GitHubIssues, PRs, notifications, code reviewPersonal Access Token
SpotifyPlayback control, playlist managementOAuth
ObsidianRead/write notes, search vaultLocal filesystem
Philips HueSmart light controlBridge API key
Google CalendarEvent management, schedulingOAuth
Outlook CalendarEvent management, schedulingAzure AD
Twitter/XTimeline, search, postTweetClaw plugin
BrowserFull Chromium automationBuilt-in (Playwright)
Home AssistantSmart home device controlLong-lived access token

Quick Setup

# Add a channel interactively
openclaw channel add telegram
openclaw channel add discord
openclaw channel add whatsapp

# Install a plugin channel first, then add
openclaw plugins install @openclaw/channel-matrix
openclaw channel add matrix

Each channel walks you through authentication specific to that platform. For the fastest start, Telegram only needs a bot token (2 minutes). WhatsApp requires QR scanning from your phone. Discord and Slack need app/bot creation in their developer portals.


WhatsApp

WhatsApp uses the unofficial Baileys library (@whiskeysockets/baileys) — a reverse-engineered implementation of the WhatsApp Web protocol. This is not the WhatsApp Business API or Cloud API.

Setup

openclaw channel add whatsapp
  1. A QR code appears in your terminal
  2. Open WhatsApp on your phone: Settings > Linked Devices > Link a Device
  3. Scan the QR code
  4. Session credentials are saved to ~/.openclaw/credentials/whatsapp/<accountId>/creds.json

The gateway owns the WhatsApp socket and handles automatic reconnection. A .bak backup of credentials is maintained and restored on corruption.

Configuration

~/.openclaw/openclaw.json
{
"channels": {
"whatsapp": {
"enabled": true,
"sendReadReceipts": false,
"mediaMaxMb": 50,
"dmPolicy": "pairing",
"allowFrom": [],
"group": {
"requireMention": true,
"senderPolicy": "allowlist",
"pendingHistoryCount": 50
}
}
}
}

Features

  • Multi-account — Configure separate accounts (default, personal, biz) with per-account settings
  • Group chats — Mention gating with regex matching, reply-to-bot detection, allowlist/sender policy
  • Voice notes — Automatic transcription (shipped v2026.2, PR #9973)
  • Native mentions — Outbound @+<digits> mention metadata (v2026.5, PR #73961)
  • Media — Images, video, documents, audio up to 50 MB
  • Text chunking — Long messages split at 4,000 character boundaries
  • Read receipts — Configurable per account

Multi-Account Setup

~/.openclaw/openclaw.json
{
"channels": {
"whatsapp": {
"accounts": {
"default": {
"sendReadReceipts": false,
"dmPolicy": "allowlist",
"allowFrom": ["+1234567890"]
},
"personal": {
"sendReadReceipts": true,
"dmPolicy": "open",
"mediaMaxMb": 25
}
}
}
}
}

Migrate from single-account to multi-account: openclaw doctor --fix

Known Issues

Ban risk

WhatsApp uses an unofficial reverse-engineered API. Meta has banned users for automated usage. Community reports (GitHub issues #4376, #73016) document bans and session instability ("frequent Web connection closed status 408 storms"). Mitigate by:

  • Keeping message volume reasonable
  • Not sending bulk messages
  • Using sendReadReceipts: false to reduce API surface
  • Having a backup channel (Telegram) configured

Telegram

Telegram is the fastest channel to set up — it only needs a bot token from BotFather.

Setup

  1. Message @BotFather on Telegram
  2. Send /newbot, choose a name and username
  3. Copy the bot token
openclaw channel add telegram
# ? Bot token: paste-your-token-here
# ✓ Telegram connected

Configuration

~/.openclaw/openclaw.json
{
"channels": {
"telegram": {
"enabled": true,
"botToken": "${TELEGRAM_BOT_TOKEN}",
"mode": "polling",
"dmPolicy": "pairing",
"group": {
"requireMention": true
},
"proxy": {
"url": "socks5://proxy:1080"
}
}
}
}

Features

  • Polling or webhook — Long polling is the default; set webhookUrl and webhookSecret for webhook mode
  • Self-hosted API — Point to your own Telegram Bot API server via apiRoot
  • Forum topics — Bind topics to specific agent routing with per-topic configuration
  • Streaming preview — Responses stream via sendMessage + editMessageText for real-time output
  • Bot menu commands — Custom command menu via commands config
  • Proxy support — SOCKS5 and HTTP proxy for restricted networks
  • Retry logic — 3 attempts, 400-30000ms delay, 0.1 jitter factor
  • Media conversion — Markdown image syntax is converted to media replies on outbound path
  • Reactions — Configurable notification modes: off, own, all

Webhook Mode

For production deployments behind a reverse proxy:

{
"channels": {
"telegram": {
"mode": "webhook",
"webhookUrl": "https://yourdomain.com/telegram/webhook",
"webhookSecret": "${TELEGRAM_WEBHOOK_SECRET}"
}
}
}

Discord

Setup

  1. Go to the Discord Developer Portal
  2. Click New Application, give it a name
  3. Go to Bot in the sidebar, click Add Bot
  4. Copy the bot token
  5. Under Privileged Gateway Intents, enable Message Content Intent
  6. Go to OAuth2 > URL Generator, select bot scope and Send Messages + Read Message History permissions
  7. Copy the generated URL and open it to invite the bot to your server
openclaw channel add discord
# ? Bot token: paste-your-token-here
# ? Default server ID (optional): 123456789
# ? Default channel ID (optional): 987654321
# ✓ Discord connected

Configuration

~/.openclaw/openclaw.json
{
"channels": {
"discord": {
"enabled": true,
"botToken": "${DISCORD_BOT_TOKEN}",
"dmPolicy": "pairing",
"allowedGuildIds": [],
"allowedChannelIds": [],
"group": {
"requireMention": true,
"mentionPrefix": ["!bot", "/ask"]
},
"thread": {
"enabled": true,
"historyScope": "thread"
},
"reactions": "allowlist",
"typingIndicator": true
}
}
}

Features

  • Thread binding — Reply in threads with per-thread history isolation and spawn/idle/maxAge controls
  • Mention gating — Respond only when @mentioned or with custom prefixes
  • Guild/channel restrictions — Allowlist specific servers and channels
  • Typing indicator — Show "typing..." while processing
  • Reactions — Configurable: off, own, allowlist, all
  • Role-based access — Restrict bot interaction to specific Discord roles

Slack

Setup

  1. Go to api.slack.com/apps and create a new app
  2. Under OAuth & Permissions, add bot scopes: chat:write, channels:history, groups:history, im:history, users:read
  3. Install to your workspace
  4. Copy the Bot Token (xoxb-...) and App Token (xapp-...) for Socket Mode
openclaw channel add slack
# ? Bot token: xoxb-...
# ? App token: xapp-...
# ✓ Slack connected via Socket Mode

Configuration

~/.openclaw/openclaw.json
{
"channels": {
"slack": {
"enabled": true,
"botToken": "${SLACK_BOT_TOKEN}",
"appToken": "${SLACK_APP_TOKEN}",
"mode": "socket",
"nativeTransport": true,
"dmPolicy": "pairing",
"allowedChannels": ["ask-bot", "dev-ops"],
"thread": {
"enabled": true,
"historyScope": "thread"
}
}
}
}

Connection Modes

ModeRequiresBest For
Socket ModebotToken + appTokenMost setups — no public URL needed
HTTPbotToken + signingSecretProduction behind reverse proxy

Features

  • Native streaming — Enable with nativeTransport: true for real-time response streaming
  • Per-thread history — Thread conversations are isolated with historyScope: "thread"
  • Channel restrictions — Only respond in listed channels
  • Thread replies — Force responses into threads to reduce noise

Signal

The most private channel — full end-to-end encryption with minimal metadata exposure.

openclaw channel add signal

Link via phone number, similar to Signal Desktop. Follow the on-screen prompts to pair your device. Signal's privacy guarantees mean OpenClaw cannot see metadata about other participants beyond the message content.


iMessage

macOS only — uses native system integration.

openclaw channel add imessage

Requires macOS with Messages.app configured. Works with both iMessage (Apple devices) and SMS (non-Apple) conversations routed through your Mac.


Matrix

Self-hostable, optionally E2E encrypted. Install the plugin first:

openclaw plugins install @openclaw/channel-matrix
openclaw channel add matrix
# ? Homeserver URL: https://matrix.org
# ? Access token: paste-your-token

Matrix is the second-most downloaded channel plugin (13.3k downloads) after WhatsApp (43.1k).


Other Channels

Microsoft Teams

openclaw plugins install @openclaw/channel-teams
openclaw channel add teams

Requires Azure AD app registration with Bot Framework credentials. Supports enterprise SSO.

Feishu / Lark

openclaw plugins install @openclaw/channel-feishu
openclaw channel add feishu

Popular in Chinese enterprise environments. The larksuite/openclaw-lark community integration is also available.

Additional Plugin Channels

Install any plugin channel with:

openclaw plugins install @openclaw/channel-<name>
openclaw channel add <name>

Available: line, wechat, nostr, twitch, zalo, qqbot, mattermost, nextcloud-talk, synology-chat, sms, voice-call, tlon.


Twitter/X with TweetClaw

The base Twitter/X integration is limited. For full automation, use the TweetClaw plugin:

openclaw plugins install @xquik/tweetclaw

TweetClaw adds: tweet search, reply search, post tweets, post replies, follower export, user lookup, media upload/download, direct messages, tweet monitors, webhooks, and giveaway draws.


DM Access Control

Every channel enforces access control for direct messages. Four policies are available:

PolicyBehaviorUse Case
pairing (default)Users must enter an 8-character code to pairPersonal use — secure by default
allowlistOnly pre-approved contacts can DMTeam/family use
openAnyone can DM (requires explicit "*" wildcard)Public bots
disabledDMs are turned off entirelyGroup-only bots

Pairing Flow

When dmPolicy is "pairing":

  1. A new contact sends a message
  2. OpenClaw responds: "Send the pairing code to chat with me"
  3. The user gets the code from the gateway operator
  4. Code is 8 uppercase characters (excluding ambiguous chars: 0, O, 1, I)
  5. Codes expire after 1 hour, max 3 pending codes per channel
# Generate a pairing code
openclaw pairing create whatsapp

# List pending codes
openclaw pairing list

# Approve or reject
openclaw pairing approve whatsapp abc12345
openclaw pairing reject whatsapp abc12345

Allowlist

~/.openclaw/openclaw.json
{
"channels": {
"whatsapp": {
"dmPolicy": "allowlist",
"allowFrom": ["+1234567890", "+0987654321"]
},
"telegram": {
"dmPolicy": "allowlist",
"allowFrom": ["alice_username", "bob_username"]
},
"discord": {
"dmPolicy": "allowlist",
"allowFrom": ["alice#1234", "bob#5678"]
}
}
}

WhatsApp uses E.164-normalized phone numbers. Allowlists are stored at ~/.openclaw/credentials/<channel>-allowFrom.json.

caution

If no channel config block exists, the default is allowlist — which blocks all DMs with a startup warning. Always configure access control explicitly.


Group Chat Configuration

Groups need guard rails to prevent the bot from replying to every message.

Mention Gating

The most important group setting — the bot only responds when directly mentioned:

{
"channels": {
"discord": {
"group": {
"requireMention": true,
"mentionPrefix": ["!bot", "/ask"]
}
},
"telegram": {
"group": {
"requireMention": true
}
}
}
}

Channel Restrictions

Restrict the bot to specific channels within a server:

{
"channels": {
"discord": {
"allowedChannels": ["bot-chat", "ask-anything"],
"ignoreChannels": ["off-topic", "memes"]
},
"slack": {
"allowedChannels": ["ask-bot", "dev-ops"]
}
}
}

Group Access Policies

PolicyBehavior
allowlist (default)Only allowed groups — fail-closed
openAll groups the bot is in
disabledIgnore all group messages

Rate Limiting

{
"channels": {
"whatsapp": {
"maxMessagesPerHour": 30,
"cooldownSeconds": 5
}
}
}

Bot Loop Protection

A shared cross-channel mechanism prevents runaway bot-to-bot conversations using a sliding window budget (default: maxEventsPerWindow: 20).


Channel Permissions

Control what OpenClaw can do per channel:

{
"channels": {
"whatsapp": {
"permissions": {
"read": true,
"reply": true,
"initiate": false,
"send_media": false
}
}
}
}
PermissionDescription
readProcess incoming messages
replyRespond to messages
initiateStart new conversations unprompted
send_mediaSend images, files, audio, video

Multi-Channel Routing

The same agent can act across platforms — read from one, post to another:

You (Telegram): "Forward any Slack messages from my manager to me here"
→ Bot monitors Slack, pushes matching messages to your Telegram DM

You (Discord): "Summarize today's emails and post to #daily-updates on Slack"
→ Bot reads Gmail, compiles summary, posts to Slack channel

You (WhatsApp): "Check Discord for the last message from Alice in #project-alpha"
→ Bot reads from Discord, reports back on WhatsApp

Cross-channel routing requires the bot to have appropriate permissions on each platform. It can only read channels it's been added to and post where it has write access.


Channel Security

Prompt Injection Sanitization

OpenClaw sanitizes incoming messages to defend against prompt injection:

  1. Strips LLM special tokens — Removes chat-template delimiters from major model families (ChatML <|im_start|>, Llama <|start_header_id|>, Gemma <start_of_turn>, Mistral [INST], Phi, GPT-OSS tokens)
  2. Wraps in boundary markers — External content is enclosed in <<<EXTERNAL_UNTRUSTED_CONTENT ...>>> with Source: External metadata
info

This closes tokenizer-layer bypasses but does not replace other hardening measures. See Security Hardening for the full defense stack.

Credential Storage

Channel credentials are stored per-channel with configurable providers:

ProviderSyntaxExample
Environment variable${ENV_VAR}"botToken": "${DISCORD_BOT_TOKEN}"
File{"type": "file", "path": "..."}Read token from a file
Exec{"type": "exec", "command": "..."}Run a command to get token

SecretRef providers were expanded to channel credentials after v2026.2 (issue #28306). Telegram tokenFile rejects symlinks for security.

Encryption Comparison

ChannelEncryptionMetadata ExposureSelf-Hostable
SignalE2EMinimalNo
WhatsAppE2EMeta collects metadataNo
MatrixOptional E2EDepends on serverYes
TelegramServer-side TLSModeratePartial (Bot API)
DiscordTLS onlyHigh (server logs)No
SlackTLS onlyHigh (workspace logs)No
WebChatTLS (local)You control everythingYes
IRCTLS optionalHighYes
NostrNIP-44 E2ERelay sees metadataYes

Security Checklist

  • Set dmPolicy to pairing or allowlist on every channel
  • Enable requireMention: true in all group chats
  • Configure maxMessagesPerHour rate limits
  • Store tokens in environment variables, not config files
  • Bind gateway to 127.0.0.1 (never 0.0.0.0)
  • Enable gateway authentication token
  • Review Security Hardening for full defense stack

Managing Channels

# List active channels
openclaw channel list

# Check channel status
openclaw channel status whatsapp

# Disconnect a channel
openclaw channel remove telegram

# Reconnect after auth expires
openclaw channel reconnect discord

# Install a plugin channel
openclaw plugins install @openclaw/channel-matrix

# Check available channel plugins
openclaw plugins search channel

Plugin Architecture

Since v2026.3.22, channels follow a plugin architecture:

  • Bundled channels (installed with core): WhatsApp, Telegram, Slack, Discord, Signal, iMessage, WebChat, IRC
  • Plugin channels (install on demand): Teams, Matrix, Feishu, LINE, WeChat, Nostr, Twitch, Zalo, QQBot, Mattermost, Nextcloud Talk, Synology Chat, SMS, Voice Call, Tlon

Plugin channels are distributed via ClawHub and npm. Install with openclaw plugins install @openclaw/channel-<name>.

The channel plugin SDK is TypeScript-based with a ChannelPlugin interface using declarative builder APIs (createChatChannelPlugin, createChannelPluginBase). Core owns the shared message tool, prompt wiring, session-key shape, thread bookkeeping, and dispatch; plugins handle channel-specific adapters. See Custom Channels for the full SDK reference.


Troubleshooting

WhatsApp

ProblemCauseFix
QR code doesn't appearGateway not runningCheck openclaw status
Session disconnects frequentlyBaileys connection stormsUpdate OpenClaw, check issue #73016
Account bannedAutomated usage detectedReduce message volume, use backup channel
"Credentials corrupted"Bad shutdownAuto-restored from .bak; run openclaw doctor --fix
Voice notes not transcribedFeature regressionUpdate to v2026.4.26+ (fix for issue #52213)

Telegram

ProblemCauseFix
Bot doesn't respondMissing Message Content intentN/A for Telegram (no intents needed)
Rate limitedToo many API callsEnable polling mode (default), add proxy
Webhook not receivingFirewall/SSL issueVerify public URL, valid HTTPS cert
Forum topics not routingMissing topic configConfigure per-topic bindings

Discord

ProblemCauseFix
Bot doesn't respond in serverMissing Message Content IntentEnable in Developer Portal > Bot > Privileged Intents
Can't read messagesMissing permissionsRe-invite with Read Message History scope
Responds to everythingMention gating not setAdd "requireMention": true to group config

Slack

ProblemCauseFix
Socket Mode won't connectMissing App TokenGenerate under Basic Information > App-Level Tokens
Can't post to channelBot not in channelInvite bot to channel: /invite @botname
Thread context lostHistory scope wrongSet "historyScope": "thread"

General

ProblemCauseFix
Channel shows "disconnected"Token expired or network issueopenclaw channel reconnect <name>
Messages silently droppedDM policy blockingCheck dmPolicy setting, verify allowlist
Bot responds to other botsLoop protection disabledEnsure maxEventsPerWindow is set
High API costs from channelsToo many channels activeDisable unused channels, increase heartbeat interval

See Also