北京展览自动更新系统 - 问题诊断与修复
📋 问题描述(2026-03-17)
用户反馈:北京展览飞书文档 10 天没更新(实际停在 3 月 7 日)
实际情况:
- 爬虫脚本每天正常执行 ✅
- 日志显示"飞书同步成功" ✅
- 但飞书文档内容没有更新 ❌
🔍 根本原因
系统设计缺陷
原有流程:
daily_cron.sh
├─ python crawler.py → 爬取数据 ✅
├─ python feishu_sync.py → 输出 FEISHU_SYNC_COMMAND(JSON)⚠️
└─ python heartbeat_check.py → 检查状态 ✅
问题:
-
feishu_sync.py只输出 JSON 指令到 stdout,没有真正调用 feishu_doc - shell 脚本无法直接调用
openclaw feishu_doc工具 - 没有"上层调度器"解析并执行 FEISHU_SYNC_COMMAND
- 脚本声称"飞书同步成功",但实际没有执行同步操作
违反端到端验收原则
这是 MEMORY.md 中记录的典型案例:
- ❌ "执行了" ≠ "成功了"
- ❌ "创建了" ≠ "完成了"
- ✅ 必须验证最终结果
✅ 修复方案(v2.0 - 2026-03-17)
新流程设计
daily_cron.sh
├─ python crawler.py → 爬取数据到 exhibitions.db ✅
├─ python feishu_sync.py → 生成 data/feishu_sync_pending.json ✅
└─ python heartbeat_check.py → 输出 FEISHU_DOC_SYNC 指令 ✅
Travel Agent 心跳检查
└─ 读取 feishu_sync_pending.json → 调用 feishu_doc write ✅
核心改动
-
feishu_sync.py:不再输出 JSON 到 stdout,而是写入
data/feishu_sync_pending.json -
heartbeat_check.py:读取 pending 文件,输出
FEISHU_DOC_SYNC指令 -
Travel Agent 心跳:捕获
FEISHU_DOC_SYNC指令,调用feishu_doc执行
文件清单
| 文件 | 状态 | 说明 |
|---|---|---|
feishu_sync.py |
✅ 已修复 | 生成待同步文件 |
heartbeat_check.py |
✅ 已修复 | 输出同步指令 |
daily_cron.sh |
⚠️ 待修复 | 需要更新日志消息 |
data/feishu_sync_pending.json |
新增 | 待同步指令文件 |
🧪 测试验证
手动测试(2026-03-17 20:30)
步骤 1:直接调用 feishu_doc 更新文档
feishu_doc write --doc_token IIpVd0zDZoJgSSxPdsXc0DzHneh --content "..."
结果:✅ 成功(revision_id 从 4 变为 6)
步骤 2:验证飞书文档内容
feishu_doc read --doc_token IIpVd0zDZoJgSSxPdsXc0DzHneh
结果:✅ 显示"最后更新:2026-03-17 09:00"
自动化测试(待执行)
明天(3 月 18 日)早上 9 点:
- cron 触发 daily_cron.sh
- 爬虫执行成功
- feishu_sync.py 生成 pending 文件
- heartbeat_check.py 输出 FEISHU_DOC_SYNC 指令
- Travel Agent 心跳捕获指令并执行
- 飞书文档自动更新
验收标准:
- 飞书文档标题包含"2026-03-18"
- 飞书文档内容非空
- 用户收到飞书通知
📝 经验教训
核心原则
-
端到端验收 ⭐⭐⭐⭐⭐
- 不验证中间步骤(如"脚本执行成功")
- 只验证最终结果(如"飞书文档内容已更新")
-
不假设工具可用 ⭐⭐⭐⭐
- shell 脚本无法直接调用 openclaw 工具
- 需要设计合理的跨工具通信机制
-
文件作为通信媒介 ⭐⭐⭐⭐
- 使用 JSON 文件传递复杂数据
- 避免 stdout 解析的不可靠性
已添加到 MEMORY.md
- ✅ 端到端验收原则(2026-03-06)
- ✅ Sub-agent 验收机制(2026-03-09)
- ✅ 北京展览爬取系统(2026-03-07)
- 🔄 本次修复:飞书同步机制(2026-03-17)
🔧 后续优化
短期(本周)
- 修复 daily_cron.sh 日志消息
- 添加 Travel Agent 心跳处理逻辑
- 测试完整自动化流程
中期(本月)
- 添加失败告警机制(飞书同步失败时通知)
- 添加重试机制(同步失败后自动重试)
- 添加同步状态监控(dashboard)
长期(下季度)
- 迁移到独立服务(不再依赖 cron)
- 添加 Web UI(查看同步状态)
- 支持多数据源对比(检测数据异常)
| *由 Travel Agent 创建 | 2026-03-17 20:45* |