跳到主要内容OpenClaw 飞书机器人配置指南:多渠道 AI 助手集成 | 极客日志TypeScriptNode.jsAI
OpenClaw 飞书机器人配置指南:多渠道 AI 助手集成
介绍 OpenClaw 开源项目中飞书(Lark)机器人的配置流程,涵盖企业应用创建、权限管理、事件订阅及环境变量设置。支持 WebSocket 与 Webhook 双模式连接,包含群组策略、消息类型处理、功能测试及常见问题解决方案,助力开发者实现多渠道 AI 助手集成。
虚拟内存29 浏览 一、前言
1.1 为什么需要配置飞书机器人?
OpenClaw 作为开源万能个人助理框架,支持多渠道通信。飞书(Lark)作为企业级协作平台,是集成 AI 助手的理想选择:
- 多渠道接入 - 支持私聊、群组、频道
- 富媒体交互 - 支持文本、图片、卡片、表情
- 企业级安全 - 完善的权限管理
- 开放 API - 丰富的集成能力
1.2 飞书机器人支持的功能
OpenClaw 的飞书扩展支持以下功能:
| 功能 | 说明 |
|---|
| 私聊对话 | 与 AI 助手 1 对 1 交流 |
| 群组互动 | 群聊中@机器人对话 |
| 文档操作 | 飞书云文档读写 |
| 表情回应 | 支持各类消息互动 |
| Webhook | 实时消息推送 |
| 双模式 | WebSocket / Webhook |
二、准备工作
2.1 环境要求
Node.js 18+
pnpm 8+
Git
2.2 OpenClaw 安装
本篇主要介绍飞书端的配置,安装步骤如下:
git clone https://github.com/openclaw/openclaw.git
cd openclaw
pnpm install
cp .env.example .env
pnpm dev
2.3 飞书账号要求
- 拥有飞书管理员权限
- 可访问飞书开放平台
- 企业版或个人版飞书账号均可
三、飞书应用创建
3.1 创建企业应用
访问飞书开放平台
访问:https://open.feishu.cn/
登录你的飞书账号。
创建应用
点击「创建企业应用」,填写应用名称:OpenClaw 助手,上传应用图标。
-
填写应用基本信息
应用描述:基于 OpenClaw 的 AI 助手上传应用图标
配置应用信息
- 应用描述:基于 OpenClaw 的 AI 助手
- 应用主页:可选填
- 落地页:可选填
3.2 获取应用凭证
{
"appId": "your_app_id_here",
"appSecret": "your_app_secret_here"
}
⚠️ 注意:妥善保管 appSecret,泄露后需重新创建
3.3 开通权限
| 权限名称 | 权限说明 | 必要性 |
|---|
| im:message | 发送和接收消息 | ⭐ 必选 |
| im:chat | 群组管理 | ⭐ 必选 |
| im:contact | 联系人读取 | ⭐ 必选 |
| doc:document | 云文档读写 | 🔸 可选 |
| drive:file | 云空间文件 | 🔸 可选 |
| approval:instance | 审批流程 | 🔸 可选 |
3.4 配置事件订阅
Webhook URL 配置
https://your-domain.com/api/feishu/webhook
订阅事件
- im:message (接收消息事件)
- im.chat (群组事件)
3.5 发布应用
审核时间:1-3 工作日。企业自建应用可无需审核。
四、OpenClaw 配置
4.1 配置文件结构
openclaw/
├── .env
├── apps/
│ └── feishu/
│ └── config.ts
└── extensions/
└── feishu/
└── src/
├── client.ts
├── accounts.ts
└── types.ts
4.2 环境变量配置
FEISHU_APP_ID=your_app_id
FEISHU_APP_SECRET=your_app_secret
FEISHU_DOMAIN=feishu
FEISHU_CONNECTION_MODE=websocket
FEISHU_WEBHOOK_PATH=/api/feishu/webhook
FEISHU_VERIFICATION_TOKEN=your_token
4.3 飞书配置文件
export const FeishuConfig = {
credentials: {
appId: process.env.FEISHU_APP_ID,
appSecret: process.env.FEISHU_APP_SECRET,
},
domain: process.env.FEISHU_DOMAIN || 'feishu',
connectionMode: process.env.FEISHU_CONNECTION_MODE || 'websocket',
webhook: {
path: process.env.FEISHU_WEBHOOK_PATH || '/api/feishu/webhook',
verificationToken: process.env.FEISHU_VERIFICATION_TOKEN,
},
message: {
maxLength: 20000,
retryTimes: 3,
retryInterval: 1000,
},
logging: {
level: 'info',
format: 'json',
},
};
4.4 账号配置
export const feishuAccounts = [
{
accountId: 'main',
appId: process.env.FEISHU_APP_ID,
appSecret: process.env.FEISHU_APP_SECRET,
enabled: true,
configured: true,
domain: 'feishu',
connectionMode: 'websocket',
},
{
accountId: 'lark',
appId: 'your_lark_app_id',
appSecret: 'your_lark_app_secret',
enabled: false,
configured: false,
domain: 'lark',
},
];
五、核心配置详解
5.1 连接模式配置
WebSocket 模式(推荐)
const wsConfig = {
connectionMode: 'websocket',
heartbeatInterval: 30000,
reconnectInterval: 5000,
maxReconnectAttempts: 10,
};
Webhook 模式
const webhookConfig = {
connectionMode: 'webhook',
path: '/api/feishu/webhook',
methods: ['POST'],
};
5.2 消息类型支持
const supportedMessageTypes = [
'text',
'image',
'file',
'audio',
'video',
'rich_text',
'card',
'interactive',
];
5.3 消息发送配置
export interface FeishuMessageInfo {
messageId: string;
chatId: string;
senderId?: string;
messageType: string;
content: string;
timestamp: number;
}
const sendRichText = async (chatId: string, markdown: string) => {
await client.sendMessage({
receiveId: chatId,
msgType: 'rich_text',
content: JSON.stringify({
rich_text: {
elements: [
{
type: 'text',
text: markdown,
},
],
},
}),
});
};
六、群组策略配置
6.1 群白名单配置
export const groupPolicy = {
allowlist: {
enabled: true,
mode: 'whitelist',
matchSource: 'id',
allowedGroups: [
'oc_xxxxxxxxxxxxx',
],
matchRules: {
namePatterns: ['AI-*', '测试群'],
},
},
defaultPolicy: {
allowed: true,
responseMention: true,
typingIndicator: true,
},
};
6.2 群组功能开关
export const groupFeatures = {
mentionReply: {
enabled: true,
prefix: '@你的名字',
},
privateChat: {
enabled: true,
requireFollow: false,
},
document: {
enabled: true,
read: true,
write: true,
create: true,
},
media: {
upload: true,
download: true,
maxSize: 20 * 1024 * 1024,
},
};
6.3 权限控制
export const userPermissions = {
admins: [
'ou_xxxxxxxxxxxxx',
],
user: {
canUse: true,
dailyLimit: 100,
canUpload: true,
maxFileSize: 10 * 1024 * 1024,
},
anonymous: {
canUse: false,
},
};
七、功能测试
7.1 基础功能测试
测试 1:私聊对话
你好,OpenClaw!
你好!我是 OpenClaw AI 助手。有什么可以帮助你的吗?
测试 2:群组@互动
@OpenClaw 帮我总结今天的新闻
今天的主要新闻:
1. xxx
2. xxx
3. xxx
7.2 高级功能测试
测试 3:飞书文档操作
@OpenClaw 读取文档 [文档 ID]
@OpenClaw 在文档 [ID] 中添加以下内容:
- 项目进度更新
- 明日工作计划
测试 4:文件传输
@OpenClaw 上传图片 [图片文件]
@OpenClaw 下载这个文件
7.3 测试用例表
| 测试项 | 测试步骤 | 预期结果 | 实际结果 |
|---|
| 私聊对话 | 发送"你好" | 回复欢迎语 | ✅ |
| 群组@互动 | @机器人提问 | AI 回复 | ✅ |
| 文档读取 | 请求读取文档 | 返回文档内容 | ✅ |
| 文档写入 | 添加内容 | 内容成功添加 | ✅ |
| 图片发送 | 发送图片 | 图片正常显示 | ✅ |
| 文件上传 | 上传文件 | 文件上传成功 | ✅ |
| 断线重连 | 断开网络后重连 | 自动重连成功 | ✅ |
| 高频测试 | 连续发送 10 条 | 全部正常回复 | ✅ |
八、常见问题
Q1: WebSocket 连接失败?
Error: WebSocket connection failed
ping open.feishu.cn
sudo ufw status
netstat -tlnp | grep 443
FEISHU_LOG_LEVEL=debug pnpm dev
Q2: 消息发送失败?
Error: Failed to send message
if (message.length > 20000) {
}
const sendWithRetry = async (message, retries = 3) => {
for (let i = 0; i < retries; i++) {
try {
return await sendMessage(message);
} catch (e) {
if (i === retries - 1) throw e;
await sleep(1000 * (i + 1));
}
}
};
Q3: 机器人无响应?
curl http://localhost:3000/api/feishu/status
curl http://localhost:3000/api/feishu/events
tail -f logs/feishu.log
Q4: 权限不足?
Q5: 文档操作失败?
Error: Document operation failed
const checkDocPermission = async (docId: string) => {
const doc = await client.doc.get({
document_id: docId,
});
if (!doc.readable) {
throw new Error('文档无读取权限');
}
if (!doc.writable) {
throw new Error('文档无写入权限');
}
};
九、进阶技巧
9.1 多账号配置
export const multiAccount = {
accounts: [
{
name: '飞书',
domain: 'feishu',
config: feishuConfig,
},
{
name: 'Lark',
domain: 'lark',
config: larkConfig,
enabled: false,
},
],
loadBalancing: 'round_robin',
};
9.2 自定义消息卡片
const sendCard = async (chatId: string) => {
await client.sendMessage({
receiveId: chatId,
msgType: 'interactive',
content: JSON.stringify({
card: {
config: {
wide_screen_mode: true,
enable_forward: true,
},
elements: [
{
tag: 'div',
fields: [
{
is_short: false,
text: {
tag: 'lark_md',
content: '**AI 助手回复**\n你好!有什么可以帮你?',
},
},
],
},
{
tag: 'action',
actions: [
{
tag: 'button',
text: {
tag: 'plain_text',
content: '继续对话',
},
type: 'primary',
action_id: 'continue_chat',
},
{
tag: 'button',
text: {
tag: 'plain_text',
content: '结束对话',
},
type: 'default',
action_id: 'end_chat',
},
],
},
],
},
}),
});
};
9.3 消息缓存策略
export const messageCache = {
enabled: true,
maxSize: 1000,
ttl: 3600,
strategy: 'lru',
get: async (key: string) => {},
set: async (key: string, value: any) => {},
delete: async (key: string) => {},
clear: async () => {},
};
9.4 性能优化
export const performance = {
maxConcurrent: 10,
queueSize: 100,
batching: {
enabled: true,
maxBatchSize: 10,
maxWaitTime: 100,
},
pool: {
min: 2,
max: 10,
},
};
9.5 日志与监控
export const logging = {
level: 'info',
format: 'json',
fields: {
traceId: true,
userId: true,
chatId: true,
messageId: true,
timestamp: true,
},
outputs: [
{
type: 'console',
level: 'info',
},
{
type: 'file',
level: 'info',
path: './logs/feishu.log',
rotation: 'daily',
},
{
type: 'remote',
level: 'warn',
endpoint: 'https://your-log-service.com',
},
],
};
十、总结
10.1 配置要点回顾
- ✅ 创建飞书企业应用
- ✅ 获取并保管好应用凭证
- ✅ 开通必要权限
- ✅ 配置环境变量
- ✅ 选择连接模式(推荐 WebSocket)
- ✅ 配置群组白名单
- ✅ 测试各功能模块
相关免费在线工具
- RSA密钥对生成器
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
- Mermaid 预览与可视化编辑
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
- 随机西班牙地址生成器
随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online
- Base64 字符串编码/解码
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
- Base64 文件转换器
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
- Markdown转HTML
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online