Skip to content

Channels 通道系统概述

OpenClaw 的通道系统将各种即时通讯平台(Telegram、Discord、WhatsApp、Slack 等)统一抽象成一致的接口,让 AI Agent 无需关心消息来自哪个平台。

源码位置

src/channels/                    # 通道抽象层
├── plugins/                    # 通道插件类型定义
│   └── types.ts               # ChannelPlugin 核心接口
├── dock.ts                     # ChannelDock 元数据注册
├── registry.ts                 # 通道注册表
├── channel-config.ts           # 通道配置解析
├── mention-gating.ts           # @提及 门控
├── command-gating.ts           # 命令门控
├── conversation-label.ts       # 对话标签
├── sender-identity.ts          # 发送者身份
├── sender-label.ts             # 发送者标签
├── session.ts                  # 通道会话
├── typing.ts                   # 输入状态
├── targets.ts                  # 消息目标
├── location.ts                 # 位置信息
├── ack-reactions.ts            # 确认反应
├── reply-prefix.ts             # 回复前缀
├── logging.ts                  # 通道日志
└── allowlists/                 # 白名单

src/telegram/                    # Telegram 实现 (~87 files)
src/discord/                     # Discord 实现 (~44 files)
src/slack/                       # Slack 实现 (~36 files)
src/signal/                      # Signal 实现 (~24 files)
src/imessage/                    # iMessage 实现 (~16 files)
src/line/                        # LINE 实现 (~36 files)
src/whatsapp/                    # WhatsApp 实现
src/web/                         # WebChat 实现 (~48 files)

双层抽象

OpenClaw 的通道系统使用双层抽象

文件职责加载时机
Pluginchannels/plugins/types.ts运行时操作:发送、接收、登录按需加载
Dockchannels/dock.ts轻量元数据:配置、能力、限制启动时加载

支持的通道

Source: src/channels/registry.ts

typescript
// src/channels/registry.ts (simplified)
const CHAT_CHANNEL_ORDER = [
  "telegram",
  "whatsapp",
  "discord",
  "googlechat",
  "slack",
  "signal",
  "imessage",
];

每个通道的元数据:

通道SDK分块限制特性
Telegramgrammy4000 字符Markdown, 按钮, 投票
Discorddiscord.js2000 字符Embed, 线程, 反应
WhatsAppBaileys不定媒体, 群组
Slack@slack/bolt不定Block Kit, 线程
Signalsignal-cli不定端到端加密
iMessageAppleScript不定macOS 专属
LINELINE SDK不定Flex Message

章节导航

  1. 通道抽象层 — ChannelPlugin 接口、ChannelDock 元数据
  2. Telegram 实现 — grammy 集成、消息发送与接收
  3. Discord 实现 — discord.js 集成、Embed 与线程
  4. 消息路由 — 出站投递、分块、幂等性

OpenClaw 源码学习教程