北京展览自动更新系统 - 问题诊断与修复

📋 问题描述(2026-03-17)

用户反馈:北京展览飞书文档 10 天没更新(实际停在 3 月 7 日)

实际情况

  • 爬虫脚本每天正常执行 ✅
  • 日志显示"飞书同步成功" ✅
  • 但飞书文档内容没有更新

🔍 根本原因

系统设计缺陷

原有流程

daily_cron.sh
  ├─ python crawler.py → 爬取数据 ✅
  ├─ python feishu_sync.py → 输出 FEISHU_SYNC_COMMAND(JSON)⚠️
  └─ python heartbeat_check.py → 检查状态 ✅

问题

  1. feishu_sync.py 只输出 JSON 指令到 stdout,没有真正调用 feishu_doc
  2. shell 脚本无法直接调用 openclaw feishu_doc 工具
  3. 没有"上层调度器"解析并执行 FEISHU_SYNC_COMMAND
  4. 脚本声称"飞书同步成功",但实际没有执行同步操作

违反端到端验收原则

这是 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 ✅

核心改动

  1. feishu_sync.py:不再输出 JSON 到 stdout,而是写入 data/feishu_sync_pending.json
  2. heartbeat_check.py:读取 pending 文件,输出 FEISHU_DOC_SYNC 指令
  3. 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 点

  1. cron 触发 daily_cron.sh
  2. 爬虫执行成功
  3. feishu_sync.py 生成 pending 文件
  4. heartbeat_check.py 输出 FEISHU_DOC_SYNC 指令
  5. Travel Agent 心跳捕获指令并执行
  6. 飞书文档自动更新

验收标准

  • 飞书文档标题包含"2026-03-18"
  • 飞书文档内容非空
  • 用户收到飞书通知

📝 经验教训

核心原则

  1. 端到端验收 ⭐⭐⭐⭐⭐
    • 不验证中间步骤(如"脚本执行成功")
    • 只验证最终结果(如"飞书文档内容已更新")
  2. 不假设工具可用 ⭐⭐⭐⭐
    • shell 脚本无法直接调用 openclaw 工具
    • 需要设计合理的跨工具通信机制
  3. 文件作为通信媒介 ⭐⭐⭐⭐
    • 使用 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*