Files
dc-docs/docs/technical-workflow-share.md
Evilom 5616622a05 docs: 添加技术分享文档 - 钉钉群聊飞书文档收集与知识库构建
- 完整的技术架构说明
- 详细的工具配置指南
- 关键代码示例
- 部署和使用指南
- 经验总结和最佳实践

文档内容:
1. 项目概述与成果
2. 技术架构与流程
3. 详细技术方案(dws + lark-cli + Python)
4. 关键代码示例
5. 配置与部署指南
6. 关键经验与最佳实践
7. 使用指南与扩展方向
2026-06-03 11:06:10 +08:00

308 lines
6.5 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.
# 钉钉群聊飞书文档收集与知识库构建 - 技术分享
> 分享人:大师 | 日期:2026-06-03 | 版本:v1.0
---
## 一、项目概述
### 1.1 背景
公司战略研究团队每天在钉钉群中分享飞书文档(研究报告、竞品分析、日报等),手动收集和整理效率低下。本项目实现了:
- **自动化采集**:从钉钉群聊中提取消息、链接和文件
- **批量下载**:自动下载飞书文档和文件附件
- **知识结构化**:构建知识图谱和 Obsidian 知识库
- **定时更新**:支持每日自动采集最新内容
### 1.2 成果
| 指标 | 数量 |
|------|------|
| 消息总数 | 388 条 |
| 飞书文档 | 159 篇 |
| 文件附件 | 19 个 |
| 活跃人员 | 28 位 |
| 时间范围 | 2026-05-01 ~ 2026-06-03 |
---
## 二、技术架构
### 2.1 整体流程
```
钉钉群聊消息
消息采集(dws CLI
链接提取(Python
文档下载(lark-cli
内容解析(Python + BeautifulSoup
知识图谱构建(Python
Obsidian 知识库生成(Python
可视化展示(HTML + Mermaid
```
### 2.2 核心工具
| 工具 | 用途 | 版本 |
|------|------|------|
| **dws CLI** | 钉钉消息采集、文件下载 | 悟空 CLI |
| **lark-cli** | 飞书文档下载 | v1.0.32 |
| **Python** | 数据处理、脚本开发 | 3.10+ |
| **BeautifulSoup** | HTML 解析 | 4.x |
| **Obsidian** | 知识库管理 | 最新版 |
---
## 三、详细技术方案
### 3.1 钉钉消息采集
#### 工具:dws CLI(悟空)
**安装路径**`C:\Users\admin\.real\.bin\dws\bin\dws.exe`
**认证信息**
- Corp ID`ding9385b4aebd9af88635c2f4657eb6378f`
- User ID`347672497`
**核心命令**
```bash
# 获取群聊消息
dws chat message list --group <group_id> --time <time> --forward true --format json --limit 200
# 下载文件附件
dws drive download --node <fileId> --output <path>
```
**群组 ID**
| 群组 | openConversationId |
|------|-------------------|
| 创新组 | `cidMuM+itt5PeY7xNSWsv3M0g==` |
| dc战略问题研究院 | `cidoUneRB4Db8TAXaTrKxkQAw==` |
**分页策略**
由于 API 返回消息有数量限制,需要分多次拉取:
```python
# 分段拉取策略
segments = [
("2026-05-01", "true"), # 从5月1日向前
("2026-05-19", "true"), # 从5月19日向前
("2026-05-24", "true"), # 从5月24日向前
("2026-06-03", "false"), # 从6月3日向后
]
# 去重:使用 openMessageId
all_msgs = {}
for msg in msgs:
all_msgs[msg["openMessageId"]] = msg
```
### 3.2 链接提取
#### 正则表达式
```python
# 飞书文档链接
feishu_re = re.compile(r'https?://[a-zA-Z0-9.-]+\.feishu\.cn/(?:wiki|docx)/[A-Za-z0-9]+')
# 文件附件
file_re = re.compile(r'\[文件\]\s+(.+?)\s+fileId:\s+(\S+)')
```
### 3.3 飞书文档下载
#### 工具:lark-cli(官方飞书 CLI
**安装**
```bash
npm install -g @larksuite/cli
```
**配置**
```bash
# 初始化配置
lark-cli config init
# 登录授权
lark-cli auth login --domain docs,drive,wiki --recommend
```
**核心命令**
```bash
# 获取文档内容
lark-cli api GET /open-apis/docx/v1/documents/<doc_id>/blocks --format json
```
### 3.4 文件附件下载
#### 使用 dws CLI
```bash
# 下载文件
dws drive download --node <fileId> --output <path>
```
---
## 四、关键代码
### 4.1 消息采集脚本
```python
def fetch(group_id, time_str, forward="true"):
cmd = [DWS, "chat", "message", "list",
"--group", group_id,
"--time", time_str,
"--forward", forward,
"--format", "json",
"--limit", "200"]
result = subprocess.run(cmd, capture_output=True, timeout=60)
output = result.stdout.decode("utf-8", errors="replace")
json_start = output.find("{")
data = json.loads(output[json_start:])
return data.get("result", {}).get("messages", [])
```
### 4.2 链接提取脚本
```python
feishu_re = re.compile(r'https?://[a-zA-Z0-9.-]+\.feishu\.cn/(?:wiki|docx)/[A-Za-z0-9]+')
for msg in messages:
content = msg.get("content", "")
for link in feishu_re.findall(content):
all_links.append({"url": link, "sender": msg.get("sender", "")})
```
### 4.3 文档下载脚本
```python
def get_document_content(doc_id):
cmd = [LARK_CLI, "api", "GET",
f"/open-apis/docx/v1/documents/{doc_id}/blocks",
"--format", "json"]
result = subprocess.run(cmd, capture_output=True, timeout=30)
if result.returncode == 0:
data = json.loads(result.stdout.decode("utf-8", errors="replace"))
if data.get("code") == 0:
return data["data"]
return None
```
---
## 五、配置与部署
### 5.1 环境要求
```
Python 3.10+
Node.js 18+
npm 9+
```
### 5.2 依赖安装
```bash
# Python 依赖
pip install beautifulsoup4 requests
# Node.js 依赖
npm install -g @larksuite/cli
```
### 5.3 定时任务
```powershell
# 创建定时任务(每天18:00执行)
schtasks /create /tn "FeishuDocCollector" /tr "python D:\desktop\feishu_docs_summary\scripts\daily_feishu_collector.py" /sc daily /st 18:00
```
---
## 六、关键经验
### 6.1 API 限制与应对
| 问题 | 解决方案 |
|------|----------|
| 消息分页 | 分多次拉取 + openMessageId 去重 |
| 飞书文档权限 | 使用 lark-cli(已授权) |
| 文件下载超时 | 增加 timeout 参数 |
### 6.2 性能优化
- **并发控制**API 调用间隔 0.5 秒
- **增量更新**:只下载新文档
- **缓存机制**:已下载文档不重复下载
---
## 七、使用指南
### 7.1 快速开始
```bash
# 1. 全量拉取消息
python scripts/fetch_all.py
# 2. 提取链接
python scripts/extract_links.py
# 3. 下载文档
python scripts/download_feishu_docs.py
# 4. 构建知识图谱
python scripts/build_graph.py
# 5. 生成 Obsidian 知识库
python scripts/write_obsidian.py
```
### 7.2 每日更新
```bash
# 运行每日采集脚本
python scripts/daily_feishu_collector.py
```
---
## 八、总结
本项目通过 **dws CLI + lark-cli + Python** 实现了钉钉群聊飞书文档的自动化收集和知识库构建,大幅提升了团队知识管理效率。
**核心价值**
- ✅ 自动化采集,节省人工时间
- ✅ 结构化存储,便于检索
- ✅ 知识图谱,发现关联关系
- ✅ Obsidian 集成,支持双向链接
- ✅ 定时更新,保持内容新鲜
**技术亮点**
- ✅ 多工具协同(dws + lark-cli + Python
- ✅ 增量更新机制
- ✅ 完整的错误处理
- ✅ 灵活的配置系统
---
> 文档版本:v1.0
> 最后更新:2026-06-03
> 维护人:大师