feishu-automation

$npx mdskill add aAAaqwq/AGI-Super-Team/feishu-automation

Automate 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. 等待权限生效

More from aAAaqwq/AGI-Super-Team