Technical Guide
11. Channels:多平台消息入口怎么接入
看懂 OpenClaw 的 channel 层:Telegram、Feishu、Slack、Discord 等平台如何变成统一事件。
这篇解决什么问题
OpenClaw 支持很多聊天平台。
但 Agent Runtime 不应该关心“这条消息来自 Telegram 还是 Feishu”。它需要的是统一的内部事件。
Channel 层就是做这件事。
相关目录
src/channels/
src/channels/inbound-event/
src/channels/message/
src/channels/allowlists/
src/channels/transport/
src/pairing/
extensions/<channel>/
src/config/types.<channel>.ts
一些官方 channel 能力在 extensions/ 里。
Channel 的基本职责
一个 channel 通常要处理:
平台凭证
收消息
发消息
消息格式转换
文件/图片/语音附件
sender/account/thread 识别
allowlist / pairing
错误和限流
状态检查
这些都不应该塞进 Agent Runtime。
inbound event 为什么重要
平台消息进入 OpenClaw 后,要变成统一的 inbound event。
这样 Gateway 才能用同一套逻辑处理不同平台:路由到 agent、绑定 session、触发 auto-reply、调用 runtime。
pairing 和 allowlist
README 明确说:远程 DM 是不可信输入。
默认 DM policy 往往是 pairing。未知发送者会拿到 pairing code,而不是直接进入 Agent。
批准方式类似:
openclaw pairing approve <channel> <code>
所以“bot 不回复陌生 DM”不一定是故障,可能是安全策略生效。
写一个新 channel 要想什么
至少要处理:
如何接收平台消息
如何识别 sender / chat / thread
如何发回文本和附件
如何做认证和 allowlist
如何处理平台限流
如何暴露状态给 doctor/status
是否需要 plugin extension
排障顺序
1. channel token / app secret 是否正确
2. webhook 或长连接是否正常
3. Gateway 是否运行
4. allowlist / pairing 是否通过
5. inbound event 是否生成
6. session routing 是否命中正确 agent
7. outbound delivery 是否失败
下一篇看什么
下一篇看 Sessions。