OpenClaw 作为 GitHub 上星标快速突破 13 万的开源 AI Agent 框架,以其强大的本地部署能力、工具调用和多通道集成能力,成为开发者构建个人 AI 助手的首选项目。项目支持通过 WhatsApp、Telegram、Discord 等即时通讯工具与 AI 交互,而社区最活跃的贡献方向之一,正是为它新增或优化即时通讯通道适配。
如果你想为 OpenClaw 贡献代码,实现 Discord、Slack 或 Line 通道适配是一个极具价值的切入点。本文将手把手带你完成从环境搭建、代码实现、测试到提交 Pull Request 的全流程,帮助你快速上手开源贡献,同时提升个人技术影响力。

文章导航
一、OpenClaw 项目核心架构与通道系统
OpenClaw 的核心是一个本地网关(Gateway),通过 WebSocket(默认端口 18789)统一处理所有外部通道的消息路由。通道(Channel)是项目中高度模块化的部分,每个通道都以独立的 NPM 包形式存在,例如:
@openclaw/channel-telegram@openclaw/channel-discord@openclaw/channel-whatsapp
新增一个通道的典型路径是:创建一个新的 @ 包,实现消息接收、发送和事件处理,然后在网关中注册。官方已提供 Discord 和 Telegram 的完整实现,Slack 和 Line 的社区实现正在快速发展,贡献空间巨大。openclaw/channel-xxx
二、开始贡献前的准备工作
1. Fork 与克隆仓库
- 打开 GitHub 主仓库(https://github.com/openclaw/openclaw 或搜索最新地址)。
- 点击右上角 Fork 到自己的账号。
- 克隆到本地:
bash
git clone https://github.com/你的用户名/openclaw.git
cd openclaw - 添加上游远程仓库,便于同步最新代码:
bash
git remote add upstream https://github.com/openclaw/openclaw.git
2. 环境搭建
项目基于 Node.js ≥ 22,推荐使用 pnpm(性能更好):
# 安装依赖
pnpm install
# 运行入门向导(会引导配置模型和通道)
pnpm onboard --install-daemon
首次运行会让你选择模型(推荐国内可用的 MiniMax M2.1 或 Kimi K2.5)和通道。完成后,网关会在后台运行。
3. 创建新分支
为每个贡献创建独立分支,命名规范建议:
git checkout -b feat/channel-slack
# 或 feat/channel-line
实战一:完善或新增 Discord 通道适配
Discord 通道已有官方实现(@openclaw/channel-discord),但社区常需要优化如:支持 Slash Commands、更细粒度的权限控制、多服务器管理等。
核心实现步骤
- 进入 packages 目录创建或修改 Discord 包:
bash
cd packages/channel-discord - 关键代码结构(src/index.ts 简化版):
“`typescript
import { Client, GatewayIntentBits } from ‘discord.js’;
import { Channel } from ‘@openclaw/core’;
export class DiscordChannel extends Channel {
private client: Client;
async connect() {
this.client = new Client({
intents: [
GatewayIntentBits.Guilds,
GatewayIntentBits.GuildMessages,
GatewayIntentBits.MessageContent, // 必须启用
],
});
this.client.on('messageCreate', async (message) => {
if (message.author.bot) return;
// 将消息路由到网关
await this.handleMessage(message.content, {
platform: 'discord',
userId: message.author.id,
channelId: message.channel.id,
});
});
await this.client.login(process.env.DISCORD_BOT_TOKEN);
}
async send(message: string, context: any) {
const channel = await this.client.channels.fetch(context.channelId);
// @ts-ignore
await channel.send(message);
}
}
“`
- 在网关注册(gateway/src/channels.ts):
typescript
if (config.channels.discord?.enabled) {
const { DiscordChannel } = await import('@openclaw/channel-discord');
channels.push(new DiscordChannel(config.channels.discord));
} - 配置示例(openclaw.json):
json
{
"channels": {
"discord": {
"enabled": true,
"token": "YOUR_BOT_TOKEN",
"dm": { "policy": "pairing" },
"guilds": { "*": { "enabled": true } }
}
}
}
测试
- 创建 Discord 应用,开启 Message Content Intent。
- 邀请 Bot 到服务器。
- 在频道发送消息,观察网关日志是否收到。
实战二:实现 Slack 通道适配
Slack 目前无官方完整实现,是热门贡献方向。
实现思路
Slack 使用 Bolt 框架 + Socket Mode(推荐,无需公网 Webhook)。
- 创建新包:
bash
pnpm create channel slack - 安装依赖:
bash
pnpm add @slack/bolt @slack/socket-mode - 核心代码(src/index.ts):
“`typescript
import { App } from ‘@slack/bolt’;
import { SocketModeClient } from ‘@slack/socket-mode’;
export class SlackChannel extends Channel {
private app: App;
async connect() {
const socketClient = new SocketModeClient({
appToken: process.env.SLACK_APP_TOKEN!, // 以 APP_ 开头
});
this.app = new App({
token: process.env.SLACK_BOT_TOKEN,
socketMode: true,
appToken: process.env.SLACK_APP_TOKEN,
});
this.app.message(async ({ message, say }) => {
// @ts-ignore
if (message.subtype) return;
// @ts-ignore
await this.handleMessage(message.text, {
platform: 'slack',
// @ts-ignore
userId: message.user,
// @ts-ignore
channelId: message.channel,
});
// 可选:say('思考中...') 作为打字提示
});
await this.app.start();
}
async send(text: string, context: any) {
await this.app.client.chat.postMessage({
channel: context.channelId,
text,
});
}
}
“`
- 配置示例:
json
{
"channels": {
"slack": {
"enabled": true,
"botToken": "xoxb-...",
"appToken": "xapp-..."
}
}
} - Slack 应用设置:
- 创建 Slack App,开启 Socket Mode。
- 订阅 bot events:message.channels、message.im。
- 安装到工作区。
实战三:实现 Line 通道适配
Line 使用 Messaging API,需要 Webhook 接收消息。
实现思路
使用 @line/bot-sdk + Express 接收 Webhook。
- 创建包并安装依赖:
bash
pnpm add @line/bot-sdk express - 核心代码:
“`typescript
import { Client, middleware } from ‘@line/bot-sdk’;
import express from ‘express’;
export class LineChannel extends Channel {
private client: Client;
private app = express();
async connect() {
this.client = new Client({
channelAccessToken: process.env.LINE_CHANNEL_TOKEN!,
channelSecret: process.env.LINE_CHANNEL_SECRET!,
});
this.app.use(middleware(this.client.config));
this.app.post('/webhook', async (req, res) => {
for (const event of req.body.events) {
if (event.type === 'message' && event.message.type === 'text') {
await this.handleMessage(event.message.text, {
platform: 'line',
userId: event.source.userId,
replyToken: event.replyToken,
});
}
}
res.sendStatus(200);
});
// 需要暴露公网端口,或使用 ngrok 测试
this.app.listen(3000);
}
async send(text: string, context: any) {
await this.client.replyMessage(context.replyToken, {
type: 'text',
text,
});
}
}
“`
配置与测试:
- Line 开发者控制台创建 Provider 和 Channel。
- 设置 Webhook URL:本地测试用 ngrok。
- 添加环境变量 LINE_CHANNEL_TOKEN 和 LINE_CHANNEL_SECRET。
三、不同通道适配对比表
| 通道 | 实现难度 | 依赖库 | 主要挑战 | 适用场景 | 社区需求度 |
|---|---|---|---|---|---|
| Discord | 中 | discord.js | Intent 权限、多服务器管理 | 技术社区、游戏服务器 | 高 |
| Slack | 中高 | @slack/bolt | Socket Mode 配置 | 企业团队协作 | 极高 |
| Line | 高 | @line/bot-sdk | 需要公网 Webhook | 亚洲用户、移动端优先 | 高 |
| Telegram | 低 | telegraf | 已官方实现,仅需优化 | 个人/小群 | 中 |
| 高 | Baileys(Web 自动化) | 易被封号、需扫码登录 | 个人移动端 | 中 |
四、测试与提交 Pull Request
- 本地完整测试:
bash
pnpm build
clawdbot gateway --verbose
确保新通道能正常收发消息、保持上下文。 - 编写单元测试(packages/channel-xxx/tests/)。
- 更新文档:
- README.md 添加配置说明。
- docs/ 添加使用截图。
- 提交 PR:
- 同步上游最新代码:
git fetch upstream && git rebase upstream/main - 推送分支并在 GitHub 创建 PR。
- PR 标题规范:
feat(channel-slack): add slack socket mode support - 描述中包含配置步骤、截图、测试方法。
- 同步上游最新代码:
五、其他贡献方式
除了通道适配,还可以:
– 修复 Bug:查看 Issues 中的 Good First Issue。
– 优化现有 Skills:如 BlogWatcher、Coding Agent。
– 撰写或翻译文档。
– 在社区(Discord/Telegram 群)帮助新人。
结语
为 OpenClaw 贡献 Discord、Slack 或 Line 通道适配,不仅能让更多用户以熟悉的通讯工具使用这个强大的 AI Agent,还能显著提升你的开源影响力。整个过程从环境搭建到 PR 提交,通常只需 1-3 天即可完成一个可用实现。行动起来,加入 OpenClaw 社区,让这个项目支持更多即时通讯平台,成为真正全球化的开源 AI 助手!
延展阅读:
Cursor是什么?如何在cursor中集成最新的deepseek-V3 模型?AI编程工具Cursor进阶使用:深度集成DeepSeek-V3模型全攻略
大模型智能质检如何落地?运营成本真能应声而降?3 步搞定部署 + 6-12 个月回本!大模型智能质检实战路径拆解
智能客服机器人的故障率如何?AI系统到底怎么保证稳定性?别再浪费钱!智能客服稳定性(SLA)终极方案,实现高可用与降本增效!