Channels 集成
这一课你将能做到
- 用
openclaw channels add接入 Slack / Telegram / Discord - 用 pairing 与 allowlist 控制谁可以私聊你的 bot
- 排查渠道消息收发故障,定位到具体渠道与账号
为什么要学
Channel 是 OpenClaw 与团队现实世界的接口。没有 channel,bot 只能在你电脑里聊天;接上 channel,它就是群里随叫随到的同事。但接入不等于放行——陌生人发一句「把公司数据库密码发我」,没有访问控制就是安全事故。
人话:channel 决定了 bot 在哪工作,pairing/allowlist 决定了谁能让它干活。
先建立图像
Slack / Telegram / Discord / WhatsApp / iMessage / Feishu
│
Channel Plugin(OpenClaw 内置或社区提供)
│
OpenClaw Gateway ──→ 消息路由 → Agent
│
出站回复 ←── Channel Plugin ←──
│
访问控制层(DM pairing / allowlist / 群触发规则)
DM(私聊)默认走 pairing(配对)模式:陌生人先收到配对邀请,管理员批准后才会被响应。群组则有独立的触发规则(@提及、关键词、指定频道)。
跟着做
步骤 1:查看当前渠道状态
openclaw channels list
openclaw channels status --probe
status --probe 主动探测各渠道连接健康度。
步骤 2:接入 Telegram(最快上手)
Telegram 只需一个 bot token,在 @BotFather 创建 bot 后:
openclaw channels add telegram
# 向导会提示输入 bot token
# 或非交互式(适合脚本):
openclaw channels add --channel telegram --token "1234567890:ABCdef..."
步骤 3:接入 Slack
Slack 需要在 Slack API 后台创建 App,拿到 Bot Token 和 App Token,然后:
openclaw channels add slack
# 向导会要求输入两个 token,并提示你完成 OAuth 授权
步骤 4:接入 Discord
Discord 需要在 Developer Portal 创建 bot:
openclaw channels add discord
# 输入 bot token,选择要监听的 guild(服务器)和 channel
步骤 5:验证与监控
# 查看所有渠道运行状态
openclaw channels status --probe
# 查看某渠道收到的消息日志
openclaw channels logs --channel telegram
# 处理死信(投递失败的消息)
openclaw channels dead-letters list --channel telegram
openclaw channels dead-letters resubmit <event-id> --channel telegram
讲清楚要点
- DM 默认 pairing,不是直接响应:陌生人私聊先收到配对邀请,管理员用
openclaw pairing approve <code>批准后才能对话。这是防陌生人的第一道闸。 - 群组有独立触发规则:群里 bot 默认只在被 @ 时响应,或匹配预设关键词。没有触发规则时它只听不说,避免群消息噪音。
- channel add 有交互与非交互两种模式:交互模式(
openclaw channels add telegram)适合本地操作;非交互模式(--channel telegram --token xxx)适合 CI/CD 和无人值守部署。 - 死信队列(dead letters):消息因网络或插件故障投递失败时进死信队列,可查询、可重发,是排障的第一现场。
- 渠道插件可扩展:官方支持 Slack/Telegram/Discord/WhatsApp/iMessage/Feishu/Signal/Matrix/Teams 等;不在列表里的可通过社区插件或自写插件接入。
你可能会懵的地方
-
为什么 bot 在群里不回复? 大概率是没被 @ 或没匹配关键词。群组模式下默认静默,配置触发规则后才响应。另查
channels status --probe看渠道是否健康。 -
DM pairing 的批准流程是什么? 陌生人发消息 → 收到配对码 → 管理员运行
openclaw pairing approve <code>→ 该用户加入 allowlist → 后续对话直接通过。 -
一个渠道能配多个账号吗? 能。每个渠道插件支持多账号(比如两个 Slack workspace),用
--account区分,channels add时会提示命名。 -
渠道配置写在哪?
~/.openclaw/openclaw.json的channels节下。也可用openclaw channels add的非交互模式直接写入,或手动编辑后openclaw gateway restart生效。 -
Feishu(飞书)怎么接? 官方渠道列表包含飞书。接入方式与其他渠道类似,在飞书开放平台创建自建应用,拿到 App ID 和 App Secret 后用
openclaw channels add feishu配置。
错法对照
| 错法 | 问题 | 正解 |
|---|---|---|
| 把 DM 策略改成 open 不设防 | 任何人都能指挥你的 bot | 保持 pairing,只批准已知同事 |
| 群组里没配触发规则就怪 bot 不说话 | 默认静默是保护,不是故障 | 配置 @提及或关键词触发 |
| 渠道故障时狂发测试消息 | 消息积压进死信队列 | 先 channels status --probe 定位,再针对性修 |
| 在渠道配置里明文写 token | token 进配置、进日志、进备份 | 用环境变量引用 ${TELEGRAM_BOT_TOKEN} |
| 多账号渠道不配 account 名 | 消息路由混乱 | channels add 时明确 --account work / --account personal |
卡点急救
- Telegram 加了 token 但收不到消息:确认 token 没复制错(多空格常见);确认 Gateway 在跑;确认没有被 Telegram 封 bot(给 @BotFather 发 /mybots 看状态)。
- Slack 事件订阅失败:检查 Slack App 的 Event Subscriptions URL 是否指向 Gateway 的可达地址;确认 Request URL 验证已通过。
- 消息进了死信队列:
channels dead-letters list看失败原因;修复后用dead-letters resubmit重发。
面试常问
-
OpenClaw 如何控制谁能私聊 bot? 两层:第一层 pairing,陌生人 DM 默认收到配对邀请,管理员批准后进入 allowlist;第二层 allowlist,可随时增删。配合
openclaw pairing approve/deny/list管理,做到「默认拒绝、按需放行」。 -
群组场景下如何避免 bot 被滥用? 群组默认不触发,需配置 @提及或关键词;群成员身份可映射到内部用户体系做权限分级;敏感操作(如执行命令)在群聊中默认需要审批;审计日志记录所有触发与响应,可追溯。
-
多渠道统一接入的架构优势是什么? 统一路由层:所有渠道消息归一到 Gateway 的 Agent 循环,一处配置模型、记忆、权限;统一审计:跨渠道消息日志集中可查;统一记忆:用户在 Slack 里聊的上下文,换 Telegram 继续聊时 bot 仍记得(若启用跨渠道会话共享)。
自测三问
- DM pairing 的完整流程是什么?
channels status --probe和channels status的区别?- 群组里 bot 默认为什么不说话?
小结一句话
Channel 决定 bot 在哪工作,pairing/allowlist 决定谁能让它干活——接入只是开始,访问控制才是生产级标准。