feishu-automation
$
npx mdskill add aAAaqwq/AGI-Super-Team/feishu-automationAutomate Feishu workflows, data sync, and notifications instantly.
- Execute complex tasks like table management, messaging, and document automation.
- Depends on lark-mcp tools and Bash for execution.
- Uses MCP tool prefixes to identify and run specific Feishu operations.
- Delivers results through direct message delivery and data updates.
SKILL.md
.github/skills/feishu-automationView on GitHub ↗
---
name: feishu-automation
description: 飞书(Lark)全通道自动化。使用 lark-mcp 工具操作飞书多维表格(Bitable)、发送消息、管理文档、创建群组、自动化工作流等。当用户需要操作飞书平台、同步数据到飞书表格、发送飞书通知、管理飞书文档或自动化飞书业务流程时使用此技能。
allowed-tools: mcp__lark-mcp_*, Bash, Read, Write, Edit
---
# 飞书全通道自动化
使用 lark-mcp 工具实现飞书平台的全面自动化操作。
## 核心功能
### 1. 多维表格(Bitable)
- 创建多维表格和数据表
- 添加、修改、删除字段
- 增删改查记录数据
- 批量导入导出数据
- 数据筛选和排序
### 2. 消息发送
- 发送文本、富文本、卡片消息
- 群组消息和私聊消息
- 消息模板和交互式卡片
- 文件和图片发送
### 3. 文档管理
- 搜索云文档
- 创建新文档
- 编辑文档内容
- 文档权限管理
- 文档协作者管理
### 4. 群组管理
- 创建群组
- 添加/移除成员
- 获取群组列表
- 群组信息查询
### 5. 知识库(Wiki)
- 搜索知识库节点
- 获取节点详情
- 创建和管理知识库内容
### 6. 日历和任务
- 创建和查询日历事件
- 创建和管理任务
- 任务分配和跟踪
## 快速开始
### 检查 MCP 可用性
```javascript
// 检查 lark-mcp 工具是否可用
// 可用工具前缀:mcp__lark-mcp_
```
### 发送测试消息
```javascript
// 发送文本消息到群组
await mcp__lark-mcp_sendMessage({
receive_id: "oc_xxxxxxxxx",
msg_type: "text",
content: JSON.stringify({
text: "Hello from Clawdbot!"
})
});
```
## 工作流程
### 数据同步流程
1. 连接数据源
2. 转换数据格式
3. 创建/更新多维表格
4. 批量写入数据
5. 发送通知
### 消息推送流程
1. 触发事件(定时/事件驱动)
2. 构建消息内容
3. 获取接收者 ID
4. 发送消息
5. 记录日志
### 文档自动化流程
1. 获取文档模板
2. 填充内容
3. 创建新文档
4. 设置权限
5. 分享给团队
## API 工具参考
### 多维表格相关
- `createBitable` - 创建多维表格
- `createTable` - 创建数据表
- `addRecord` - 添加记录
- `updateRecord` - 更新记录
- `deleteRecord` - 删除记录
- `searchRecords` - 搜索记录
- `getRecord` - 获取记录详情
### 消息相关
- `sendMessage` - 发送消息
- `getMessages` - 获取消息历史
- `replyMessage` - 回复消息
### 文档相关
- `searchDocs` - 搜索文档
- `createDoc` - 创建文档
- `getDoc` - 获取文档内容
- `updateDoc` - 更新文档
- `setDocPermission` - 设置文档权限
### 📄 Markdown 导入云文档(推荐方式)
**最佳实践**:将本地 Markdown 文件直接导入为飞书云文档,格式完整保留。
```bash
# 1. 获取 access_token
TOKEN=$(curl -s -X POST 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal' \
-H 'Content-Type: application/json' \
-d '{"app_id":"YOUR_APP_ID","app_secret":"YOUR_APP_SECRET"}' \
| python3 -c "import sys,json; print(json.load(sys.stdin).get('tenant_access_token',''))")
# 2. 上传 md 文件到飞书云盘
FILE_TOKEN=$(curl -s -X POST 'https://open.feishu.cn/open-apis/drive/v1/files/upload_all' \
-H "Authorization: Bearer $TOKEN" \
-F "file_name=document.md" \
-F "parent_type=explorer" \
-F "parent_node=" \
-F "size=$(stat -c%s /path/to/document.md)" \
-F "file=@/path/to/document.md" \
| python3 -c "import sys,json; print(json.load(sys.stdin).get('data',{}).get('file_token',''))")
# 3. 导入为飞书云文档
TICKET=$(curl -s -X POST 'https://open.feishu.cn/open-apis/drive/v1/import_tasks' \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"file_extension": "md",
"file_token": "'"$FILE_TOKEN"'",
"type": "docx",
"point": {"mount_type": 1, "mount_key": ""}
}' | python3 -c "import sys,json; print(json.load(sys.stdin).get('data',{}).get('ticket',''))")
# 4. 等待导入完成,获取文档链接
sleep 2
curl -s -X GET "https://open.feishu.cn/open-apis/drive/v1/import_tasks/$TICKET" \
-H "Authorization: Bearer $TOKEN" \
| python3 -c "import sys,json; d=json.load(sys.stdin); print(d.get('data',{}).get('result',{}).get('url',''))"
```
**支持的导入格式**:
- `md` → Markdown
- `docx` → Word 文档
- `xlsx` → Excel 表格
**注意事项**:
- 导入是异步操作,需要轮询 `import_tasks/{ticket}` 获取结果
- `mount_type: 1` 表示导入到"我的空间"
- 导入后的文档 URL 格式:`https://xxx.feishu.cn/docx/{token}`
### 📤 完整输出云文档流程(标准操作)
**每次输出云文档时,必须完成以下步骤**:
1. **生成本地 Markdown 文件**
2. **上传到飞书云盘** → `drive/v1/files/upload_all`
3. **导入为云文档** → `drive/v1/import_tasks`
4. **设置权限为组织内可编辑** → `drive/v1/permissions/{token}/public`
5. **发送链接到目标群**
```bash
# 完整流程脚本
TOKEN=$(curl -s -X POST 'https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal' \
-H 'Content-Type: application/json' \
-d '{"app_id":"APP_ID","app_secret":"APP_SECRET"}' \
| python3 -c "import sys,json; print(json.load(sys.stdin).get('tenant_access_token',''))")
# 1. 上传文件
FILE_TOKEN=$(curl -s -X POST 'https://open.feishu.cn/open-apis/drive/v1/files/upload_all' \
-H "Authorization: Bearer $TOKEN" \
-F "file_name=document.md" \
-F "parent_type=explorer" \
-F "parent_node=" \
-F "size=$(stat -c%s document.md)" \
-F "file=@document.md" \
| python3 -c "import sys,json; print(json.load(sys.stdin).get('data',{}).get('file_token',''))")
# 2. 导入为云文档
TICKET=$(curl -s -X POST 'https://open.feishu.cn/open-apis/drive/v1/import_tasks' \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"file_extension":"md","file_token":"'"$FILE_TOKEN"'","type":"docx","point":{"mount_type":1,"mount_key":""}}' \
| python3 -c "import sys,json; print(json.load(sys.stdin).get('data',{}).get('ticket',''))")
sleep 2
# 3. 获取文档 token
DOC_RESULT=$(curl -s -X GET "https://open.feishu.cn/open-apis/drive/v1/import_tasks/$TICKET" \
-H "Authorization: Bearer $TOKEN")
DOC_TOKEN=$(echo "$DOC_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('data',{}).get('result',{}).get('token',''))")
DOC_URL=$(echo "$DOC_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('data',{}).get('result',{}).get('url',''))")
# 4. 设置权限:组织内可编辑
curl -s -X PATCH "https://open.feishu.cn/open-apis/drive/v1/permissions/$DOC_TOKEN/public?type=docx" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"external_access_entity":"open","security_entity":"anyone_can_view","comment_entity":"anyone_can_view","share_entity":"anyone","link_share_entity":"tenant_editable"}'
# 5. 发送到群
curl -s -X POST "https://open.feishu.cn/open-apis/im/v1/messages?receive_id_type=chat_id" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"receive_id":"CHAT_ID","msg_type":"text","content":"{\"text\":\"📄 文档已上传:\\n\\n'"$DOC_URL"'\"}"}'
```
**权限设置说明**:
- `link_share_entity: "tenant_editable"` → 组织内获得链接的人可编辑
- `comment_entity: "anyone_can_view"` → 任何人可评论
- `share_entity: "anyone"` → 任何人可分享
### 群组相关
- `createGroup` - 创建群组
- `addMember` - 添加成员
- `getGroupList` - 获取群组列表
- `getGroupInfo` - 获取群组信息
## 实用场景
### 1. 自动化日报收集
- 每日定时创建表格记录
- 成员填写日报
- 自动汇总统计
- 发送到群组
### 2. 审批流程
- 创建审批表格
- 监听状态变更
- 自动通知审批人
- 记录审批历史
### 3. 任务管理
- 创建任务表格
- 分配任务给成员
- 发送任务提醒
- 跟踪完成状态
### 4. 客户管理
- 客户信息表格
- 跟进记录
- 自动提醒
- 数据可视化
### 5. 报表生成
- 从表格提取数据
- 生成统计报表
- 创建飞书文档
- 定期推送更新
## 最佳实践
### 认证配置
- 使用提供的 App ID 和 App Secret
- 遵守 API 调用频率限制
- 缓存 access_token
### 数据操作
- 批量操作使用分页
- 数据写入前验证格式
- 错误处理和重试
- 记录操作日志
### 消息发送
- 使用交互式卡片提升体验
- 合理控制发送频率
- 避免发送敏感信息
- 支持用户交互
### 权限管理
- 最小权限原则
- 定期审查权限
- 协作者生命周期管理
## 错误处理
### 常见错误
- 权限不足 - 检查应用权限配置
- 限流错误 - 实现重试和等待
- 无效 ID - 验证用户/群组 ID 格式
- 网络错误 - 实现重试机制
### 重试策略
- 指数退避算法
- 最大重试次数限制
- 记录失败请求
- 通知管理员
## 安全注意事项
- 保护 App Secret
- 不要在日志中记录敏感信息
- 使用环境变量管理凭证
- 定期轮换访问令牌
- 遵守数据隐私法规
## 示例代码
### 创建多维表格并添加数据
```javascript
// 创建多维表格
const bitable = await mcp__lark-mcp_createBitable({
name: "项目管理",
folder_token: "folder_token"
});
// 创建数据表
const table = await mcp__lark-mcp_createTable({
app_token: bitable.app_token,
table: {
name: "任务列表",
fields: [
{ field_name: "任务名称", type: 1 },
{ field_name: "负责人", type: 13 },
{ field_name: "状态", type: 3 },
{ field_name: "截止日期", type: 5 }
]
}
});
// 添加记录
await mcp__lark-mcp_addRecord({
app_token: bitable.app_token,
table_id: table.table_id,
fields: {
"任务名称": "完成项目文档",
"负责人": "user_id",
"状态": "进行中",
"截止日期": Date.now()
}
});
```
### 发送卡片消息
```javascript
await mcp__lark-mcp_sendMessage({
receive_id: "chat_id",
msg_type: "interactive",
content: JSON.stringify({
config: {
wide_screen_mode: true
},
header: {
template: "turquoise",
title: {
content: "重要通知",
tag: "plain_text"
}
},
elements: [
{
tag: "div",
text: {
content: "**项目里程碑已完成**",
tag: "lark_md"
}
},
{
tag: "action",
actions: [
{
tag: "button",
text: {
content: "查看详情",
tag: "plain_text"
},
type: "primary",
url: "https://example.com"
}
]
}
]
})
});
```
### 批量导入数据
```javascript
const data = [
{ name: "张三", phone: "13800138000" },
{ name: "李四", phone: "13900139000" }
];
for (const item of data) {
await mcp__lark-mcp_addRecord({
app_token: "app_token",
table_id: "table_id",
fields: {
"姓名": item.name,
"电话": item.phone
}
});
// 避免限流
await new Promise(resolve => setTimeout(resolve, 100));
}
```
## 配置验证
### 检查 MCP 服务器
```bash
# 检查 .claude.json 中的 lark-mcp 配置
cat ~/.claude.json | grep -A 15 "lark-mcp"
```
### 测试连接
```javascript
// 发送测试消息验证连接
await mcp__lark-mcp_sendMessage({
receive_id: "your_chat_id",
msg_type: "text",
content: JSON.stringify({
text: "🎉 飞书 MCP 连接成功!"
})
});
```
## 进阶用法
### Webhook 集成
- 监听飞书 Webhook 事件
- 自动触发工作流
- 实时数据同步
### 自动化定时任务
- 定时发送报告
- 自动数据备份
- 定期清理
### 跨平台集成
- 与 GitHub 集成(Issue 同步)
- 与邮件集成(通知推送)
- 与日历集成(日程管理)
## 故障排查
### MCP 工具不可用
1. 重启 Claude Desktop
2. 检查网络连接
3. 验证凭证是否有效
4. 查看错误日志
### API 调用失败
1. 检查应用权限配置
2. 验证用户/群组 ID
3. 查看限流状态
4. 检查数据格式
### 权限不足
1. 登录飞书开放平台
2. 检查应用权限范围
3. 重新授权
4. 等待权限生效