112 lines
3.7 KiB
Markdown
112 lines
3.7 KiB
Markdown
---
|
||
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`,或改造为从配置文件读取多群列表。
|