这份报告只回答你现在真正关心的一条链路:在信息获取群发一个链接,OpenClaw 为什么没有按你期待写入飞书表格。 它不讨论 issue、DailyRecord 或其他群的流程。基于当前 live 配置、message-log hook 代码、以及 2026 年 3 月 12 日到 2026 年 3 月 13 日 的运行日志,可以把这次问题拆成三件事: 目标表已漂移、Feishu 权限曾真实失败、以及失败默认静默。
这类问题最该听的不是“写 prompt 的人”,而是最懂系统漂移、事故复盘与可观测性的人。下面是本报告采用的三种视角,均为方法论转译,不是逐字引用。
关键词线索:Thinking in Systems、work-as-imagined vs work-as-done、observability / user-visible failure。
发一个链接 → OpenClaw 自动抓一点核心信息 → 写进你真正要看的分数表 / 表格 → 至少告诉你成功还是失败。
而且你现在并不要求很重的教程或大模型长分析,你更偏向一个简洁但有用的版本:标题、来源、大致情况、也许再加一两个核心字段。
发一个链接 → 命中被动 hook → 按 9 列“链接采集台账”模式写入 A41... → 默认不回 ACK。
如果站点抓取或飞书权限出错,群里也可以完全静默;如果成功,也不代表它写入的是你期待的 richer 表,而只是当前 live 的简化落点。
下面这张图只画你关心的单链路,不混入 issue / DailyRecord。它刻意把“可失败但用户看不到”的部分画了出来,因为那正是这次最伤排查效率的地方。
| 阶段 | 当前 live 在做什么 | 证据 | 最可能的问题 |
|---|---|---|---|
| 1. 群消息命中 | 只要消息含 URL,且群 ID 在白名单里,就进入被动写表链。 | ~/.openclaw/openclaw.json:433-446 | 如果群 ID、环境变量或 hook 加载错了,会直接不触发。 |
| 2. URL 提取 | extractUrls(content);没有 URL 就返回。 | ~/.openclaw/hooks/message-log/handler.js:1509-1513 | 消息里如果是特殊格式、短链被包裹、或根本没有被识别成 URL,会被静默跳过。 |
| 3. 元数据抽取 | 先用消息文本兜底,再尽量抓标题、作者、最终链接与状态。 | ~/.openclaw/hooks/message-log/handler.js:527-596 | 公众号 / 小红书等页面可能环境受限,导致只剩消息级兜底字段。 |
| 4. 行结构构建 | 固定构造成 9 列 link_library 行,不是 richer score schema。 | ~/.openclaw/hooks/message-log/handler.js:613-640 | 这里决定了“即使成功,也可能只是写了一个你不想要的简化台账”。 |
| 5. 写表策略 | intent 明写:写人类可读台账、禁止调用 LLM、禁止写 canonical ledger schema。 | ~/.openclaw/hooks/message-log/handler.js:1534-1556 | 这和群 prompt 的 richer AI 摘要预期直接冲突,是体验错位的关键原因。 |
| 6. Feishu API 写入 | 把行写进当前目标 Sheet;失败会进日志。 | ~/.openclaw/logs/feishu-sheet-auto.jsonl | 权限拒绝、目标表被换掉、sheet schema 不一致,都会在这里爆出来。 |
| 7. 群内回执 | 只有 ack=true 才会发;当前配置是关闭的。 | ~/.openclaw/openclaw.json:443 与 handler.js:1552-1589 | 所以对用户来说,失败、写错表、没触发,很容易全部看起来像“没有任何反应”。 |
这部分最关键。今天的问题不是简单的“先坏后好”或“先好后坏”,而是成功的含义本身也变了。
这是目前证据最硬的一层,因为日志已真实记录 1063002 Permission denied。只要权限有问题,前面步骤都走完,最后也会空手而归。
这不是“失败”,但对你来说几乎等同于失败。因为系统成功写入了 A41... 简化台账,却没有写进你期待的分数表或 richer 主表。
即便成功写表,公众号或其他站点也可能只返回消息兜底,导致字段变得很浅。这会让“内容看起来不对”,但它和“完全没写进去”不是同一类问题。
它不直接制造失败,但会把所有失败、漂移、降级都伪装成“没有任何提示”。这正是你排查成本被放大的主要原因。
当前配置里 FEISHU_SHEET_AUTO_ACK=false。在 hook 里,写表完成后会先判断这个开关;如果是 false,就直接 return,不再发任何群内 ACK。
于是三种完全不同的情况,在你的体感上会变得很像:
群配置里还写着:含 URL 时要抓正文、结构化提取 title / source / publish_time / summary / key_points / keywords,先 AI 摘要,再落表,再给表格链接和写入统计回执。
这就是为什么你会自然认为,“它应该能给我一个更像 summary / score sheet 的结果”。
但更底层的 passive hook 已明确写死:写入人类可读的链接采集台账、禁止调用 LLM、禁止写 canonical ledger schema,最终走的是 9 列 link_library 投影。
所以你不是想多了,而是系统内部本来就存在“上层承诺 richer,底层执行更简化”的冲突。
| 证据位置 | 它证明了什么 |
|---|---|
| ~/.openclaw/openclaw.json:433-446 | 当前 live 目标是 A41... 链接采集台账;ACK 关闭。 |
| ~/.openclaw/openclaw.json:551 以后 | 群 prompt 仍要求 richer AI 摘要、回执和更丰富字段。 |
| ~/.openclaw/hooks/message-log/handler.js:527-596 | 元数据抽取实际只围绕标题、作者、链接、snippet、状态等简化字段。 |
| ~/.openclaw/hooks/message-log/handler.js:613-640 | 最终构造成的是 link_library 的 9 列行。 |
| ~/.openclaw/hooks/message-log/handler.js:1492-1589 | 被动 hook 明确禁止 LLM,并把 ACK 逻辑放在开关后面。 |
| ~/.openclaw/logs/feishu-sheet-auto.jsonl | 2026-03-12 至 2026-03-13 期间同时存在权限失败、旧主账本成功、A41 新台账成功三类事件。 |
| docs/reports/report-20260313-180911.data.js | 此前已经有一次较宽范围的链路纠偏分析;本报告是在此基础上进一步缩窄到单链路。 |
一句话结论:你这次遇到的不是“为什么一条链接没写进去”这么简单,而是 同一条链路同时存在真实写入失败、目标表漂移、以及失败静默。
更重要的是,你想要的体验并不复杂。从当前证据看,真正挡住它的不是“还需要更复杂的大模型”,而是系统当前 live 语义已经偏离了你的目标,而且出了错也不告诉你。
本报告仅做静态与日志复盘。未改动 OpenClaw、未改动飞书表、未运行新的 E2E。