feishu-group-msg-sync.xiaokui/SKILL.md
2026-04-10 19:57:15 +08:00

112 lines
3.7 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: feishu-group-msg-sync
description: 定期同步飞书群聊消息到飞书电子表格。以Bot身份拉取群消息文本/图片/视频/音频/文件非文本媒体上传到腾讯COS生成可访问链接所有记录追加写入飞书电子表格。支持crontab定时执行。触发场景群消息记录、群聊同步到表格、群聊数据采集、群反馈收集。
---
# 飞书群聊消息同步到电子表格
定期将飞书群聊消息同步到飞书电子表格非文本媒体上传到COS。
## 工作流程
1. 以Bot身份从飞书群拉取增量消息基于上次同步时间
2. 文本消息直接记录内容
3. 媒体消息(图片/视频/音频/文件下载后上传到腾讯COS记录可访问URL
4. 所有记录追加写入飞书电子表格
## 前置条件
- Bot已加入目标飞书群
- Bot有权读取群消息`im:message` / `im:message.group_at_msg` scope
- Bot有权写入目标电子表格已被添加为协作者
- 腾讯COS凭证可用参考 `tencent-cos-upload` skill
- Python依赖`cos-python-sdk-v5`、`lark-cli`
## 使用方式
### 快速部署
1. 复制脚本模板并修改配置:
```bash
cp scripts/sync_group_to_sheet.py /path/to/your/scripts/
# 编辑脚本顶部的配置区域
```
2. 修改脚本中的配置常量:
```python
CHAT_ID = "oc_xxx" # 目标群ID
SPREADSHEET_TOKEN = "xxx" # 电子表格token
SHEET_ID = "xxx" # sheet页ID
LARK_CLI_CONFIG = "/root/.openclaw/credentials/<agent>" # Bot凭证目录
```
3. 设置crontab
```bash
# 每小时执行
0 * * * * /usr/bin/python3 /path/to/sync_group_to_sheet.py >> /var/log/sync.log 2>&1
```
### 关键配置说明
#### 获取群ID
搜索群或从群设置中获取 `chat_id`(格式 `oc_xxx`)。
#### 获取电子表格信息
```bash
# 如果是wiki下的表格先获取obj_token
LARKSUITE_CLI_CONFIG_DIR=<credentials> lark-cli wiki spaces get_node \
--params '{"token":"<wiki_token>"}' --as bot
# 获取sheet_id
LARKSUITE_CLI_CONFIG_DIR=<credentials> lark-cli sheets +info \
--spreadsheet-token <token> --as bot
```
#### 电子表格列结构
脚本默认写入4列在表格首行设置表头
| 列 | 内容 | 示例 |
|----|------|------|
| A | 时间 | 2026-04-10 15:30 |
| B | 反馈人 | 张三 |
| C | 信息类型 | 文本/图片/视频(15s)/语音/文件 |
| D | 信息内容(或地址) | 文本内容 或 https://domain/path/file.png |
## COS目录结构
媒体文件按类型和日期组织:
```
{cos_base_path}/
├── image/{date}/{msgid}.png
├── video/{date}/{msgid}.mp4
├── audio/{date}/{msgid}.ogg
└── file/{date}/{msgid}.ext
```
## 增量同步机制
- 同步时间记录在 `LAST_SYNC_FILE`(默认 `/tmp/last_feedback_sync_time`
- 每次同步拉取 `上次同步时间 → 当前时间` 的消息
- 仅在写入成功后更新同步时间,确保不丢消息
- 首次运行自动从1小时前开始
## 消息类型处理
| 消息类型 | 处理方式 |
|----------|---------|
| text/post | 直接记录文本内容 |
| image | 下载 → 上传COS → 记录URL |
| media(视频) | 下载 → 上传COS → 记录URL类型含时长 |
| audio | 下载 → 上传COS → 记录URL |
| file | 下载 → 上传COS → 记录URL |
| sticker | 记录为"表情包" |
| system | 跳过(入群退群等系统消息) |
| 已删除 | 跳过 |
## 自定义扩展
如需修改表格列结构、增加字段如message_id、是否为回复等编辑脚本中的 `process_message()` 函数返回的行数据。
如需同步多个群到同一表格,复制脚本并修改 `CHAT_ID`,或改造为从配置文件读取多群列表。