ZON
Best Minds Board · Private Incident Review
Snapshot · 2026-03-13
OpenClaw · Feishu · Link Intake

信息获取群 → 飞书表格:
单链接写入链路故障复盘

这份报告只回答你现在真正关心的一条链路:在信息获取群发一个链接,OpenClaw 为什么没有按你期待写入飞书表格。 它不讨论 issue、DailyRecord 或其他群的流程。基于当前 live 配置、message-log hook 代码、以及 2026 年 3 月 12 日到 2026 年 3 月 13 日 的运行日志,可以把这次问题拆成三件事: 目标表已漂移Feishu 权限曾真实失败、以及失败默认静默

Project MINE/openclaw-info-group-link-sheet-chain
Category incident-analysis
Scope 仅限 oc_f7... 链接群 → 飞书表格
Verdict 不是单点 bug,而是链路语义漂移 + 权限失败 + 静默设计
Current Live Target
A41...
当前被配置为“OpenClaw 链接采集台账”,不是旧的 richer 分数表或主账本。
Current Schema
9 列
采集时间、平台、标题、作者、原始链接、最终链接、消息片段、状态、message_id。
Confirmed Hard Failure
1063002
2026-03-12 到 2026-03-13 多次出现 Feishu “Permission denied”。
User-visible ACK
Off
当前 FEISHU_SHEET_AUTO_ACK=false,失败时默认不回群。

TL;DR

你今天感受到的“明明我只想发一条链接让它写表格,为什么一天都没达到想要的效果”,从证据上看是合理的。 因为这不是一处简单 bug,而是系统正在做的事,已经和你以为它在做的事不再是同一件事

Best Minds

这类问题最该听的不是“写 prompt 的人”,而是最懂系统漂移、事故复盘与可观测性的人。下面是本报告采用的三种视角,均为方法论转译,不是逐字引用。

Donella Meadows
先看系统稳定产出什么,而不是它原本声称想做什么。放到这次,就是先看日志与 hook,而不是先看理想中的“输入链接自动建分数表”。
Sidney Dekker
work-as-imaginedwork-as-done 拆开。你脑中的链路仍是“更丰富的总结写表”;真实运行的链路已经变成“简化采集台账”。
Charity Majors
没有用户可见反馈的失败,会把所有问题都伪装成“像是没触发”。这正是 ACK 关闭后的体感:失败、写错表、写简化表,在群里看起来都很像。

关键词线索:Thinking in Systemswork-as-imagined vs work-as-doneobservability / user-visible failure

Scope Guard

本报告只看

In Scope

  • oc_f7b35e22556c6cb1161d6497dbdfbabf
  • 消息含 URL 后,message-log hook 是否命中。
  • 中间到底做了哪些处理:提 URL、补 metadata、写表、是否回 ACK。
  • 为什么有时能写进去,有时失败,有时虽然成功但写成了你不想要的形式。
暂不展开

Out of Scope

  • Issue intake 链路。
  • /task / /done → DailyRecord 链路。
  • 你正在让另一个 AI 做的端到端 smoke test 细节。
  • 如何修代码、如何改配置、如何重做未来产品方案。

理想链路 vs Live 链路

你真正想要的

Expected

发一个链接 → OpenClaw 自动抓一点核心信息 → 写进你真正要看的分数表 / 表格 → 至少告诉你成功还是失败。

而且你现在并不要求很重的教程或大模型长分析,你更偏向一个简洁但有用的版本:标题、来源、大致情况、也许再加一两个核心字段。

当前实际发生

Actual

发一个链接 → 命中被动 hook → 按 9 列“链接采集台账”模式写入 A41... → 默认不回 ACK。

如果站点抓取或飞书权限出错,群里也可以完全静默;如果成功,也不代表它写入的是你期待的 richer 表,而只是当前 live 的简化落点。

这就是今天最核心的偏差:你想要的是“输入链接写我真正想看的表”,而系统当前做的是“输入链接写当前 live 指向的简化台账”。 这两者都叫“写表”,但含义已经不一样了。

时序图

下面这张图只画你关心的单链路,不混入 issue / DailyRecord。它刻意把“可失败但用户看不到”的部分画了出来,因为那正是这次最伤排查效率的地方。

USER / GROUP OPENCLAW HOOK EXTERNAL EDGE VISIBILITY / UX 群里发链接 信息获取群 oc_f7... · 1 条 URL Feishu 消息入站 带 conversation_id / message_id 命中被动写表规则 group 白名单匹配 + 消息含 URL extractUrls 无 URL 直接返回 extractUrlMetadata 标题 / 作者 / snippet / 状态 buildSheetRowsForUrls 固定构造成 9 列 link_library fetchTextWithMetadata 可能受微信 / 外站环境限制 writeSheetRows 可能被 Feishu 权限拒绝 1063002 A41... 链接采集台账 当前 live target · projection=link_library ACK 默认关闭 FEISHU_SHEET_AUTO_ACK=false 只在日志留痕 messages.jsonl / feishu-sheet-auto.jsonl 用户体感:像是没写进去 失败、写错表、字段变浅都不易区分
单链路时序图:输入链接到最终写表,以及失败为何对用户静默。

中间到底经历了哪些过程

阶段 当前 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:443handler.js:1552-1589 所以对用户来说,失败、写错表、没触发,很容易全部看起来像“没有任何反应”。

为什么早些时候像是能写,后来又不对了

这部分最关键。今天的问题不是简单的“先坏后好”或“先好后坏”,而是成功的含义本身也变了

2026-03-13 10:22
真实失败:写入被拒
对公众号链接的写表记录显示 1063002 Permission denied。此时并不是“没触发”,而是确实触发了,但落表被 Feishu 拒绝。
2026-03-13 12:15
再次失败:还是权限问题
另一条样本再次出现同类权限拒绝。说明中午前后至少有一段时间,真正的硬失败点在 Feishu API / 目标表权限层。
2026-03-13 12:39
成功,但写的是旧主账本语义
smoke 样本成功写入 VL7...,而且写入量是 25 列 / 50 单元格 的 canonical ledger 风格,不是现在的 9 列 link library。
2026-03-13 13:07
成功,真实用户链接也进了旧账本
一条实际小红书链接同样成功进入 VL7...。这解释了“前面明明像是能写进去”的体感。
2026-03-13 14:26 以后
链路语义切换到 A41 简化台账
后续 smoke 已经明确写入 A41...,并且是 9 列 / projection=link_library。从此之后,“成功写入”不再等于“写入你期待的 richer 表”。
所以更准确的说法不是“它上午能写,下午不能写”,而是:2026 年 3 月 13 日这一天里,既出现过硬失败,也发生过落点和 schema 的切换。 这会让你感觉它“一波三折”,因为你看到的不是单一故障,而是系统一边排障、一边被改成了另一种语义。

最可能出问题的环节

1. 目标表 / 权限层 高概率

这是目前证据最硬的一层,因为日志已真实记录 1063002 Permission denied。只要权限有问题,前面步骤都走完,最后也会空手而归。

2. 落点语义漂移 高概率

这不是“失败”,但对你来说几乎等同于失败。因为系统成功写入了 A41... 简化台账,却没有写进你期待的分数表或 richer 主表。

3. 外站抓取受限 中概率

即便成功写表,公众号或其他站点也可能只返回消息兜底,导致字段变得很浅。这会让“内容看起来不对”,但它和“完全没写进去”不是同一类问题。

4. ACK 关闭造成的误判 高影响

它不直接制造失败,但会把所有失败、漂移、降级都伪装成“没有任何提示”。这正是你排查成本被放大的主要原因。

为什么没有任何提示和通知

直接原因

当前配置里 FEISHU_SHEET_AUTO_ACK=false。在 hook 里,写表完成后会先判断这个开关;如果是 false,就直接 return,不再发任何群内 ACK。

结果表现

于是三种完全不同的情况,在你的体感上会变得很像:

  • 根本没触发。
  • 触发了,但 Feishu 权限失败。
  • 触发且成功了,但写到了另一张表或更简化的 schema。
这就是为什么你会觉得“最终没有成功写入,而且没有任何提示和通知,这些都不利于排查”。从代码上看,这种静默并不是偶然,而是当前配置允许的设计结果

最关键的矛盾:群 Prompt 和被动 Hook 在说两套话

Prompt 层承诺

群配置里还写着:含 URL 时要抓正文、结构化提取 title / source / publish_time / summary / key_points / keywords,先 AI 摘要,再落表,再给表格链接和写入统计回执。

这就是为什么你会自然认为,“它应该能给我一个更像 summary / score sheet 的结果”。

Hook 层执行

但更底层的 passive hook 已明确写死:写入人类可读的链接采集台账、禁止调用 LLM、禁止写 canonical ledger schema,最终走的是 9 列 link_library 投影。

所以你不是想多了,而是系统内部本来就存在“上层承诺 richer,底层执行更简化”的冲突。

以后继续排这条链,先看哪几处

  1. 先看 ~/.openclaw/logs/feishu-sheet-auto.jsonl。这是最短路径,能先区分“完全没触发”还是“已经写表但失败”。
  2. 再看 ~/.openclaw/openclaw.json:433-446。确认当前 live 到底指向哪张表、ACK 是否关闭、extractMissing 是否开启。
  3. 然后看 ~/.openclaw/hooks/message-log/handler.js:1492-1589。这里决定是否写 LLM、写哪种 projection、是否回 ACK。
  4. 如果只是“字段不对”,再回到 handler.js:527-640 看它到底抽了哪些字段,以及为什么只能写 9 列。
  5. 只有在这些都确认后,才值得继续看更远处的 board、issue、DailyRecord 或其他链路。

证据索引

证据位置 它证明了什么
~/.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 此前已经有一次较宽范围的链路纠偏分析;本报告是在此基础上进一步缩窄到单链路。

Closing Summary

一句话结论:你这次遇到的不是“为什么一条链接没写进去”这么简单,而是 同一条链路同时存在真实写入失败、目标表漂移、以及失败静默

更重要的是,你想要的体验并不复杂。从当前证据看,真正挡住它的不是“还需要更复杂的大模型”,而是系统当前 live 语义已经偏离了你的目标,而且出了错也不告诉你。

本报告仅做静态与日志复盘。未改动 OpenClaw、未改动飞书表、未运行新的 E2E。

这次没达到效果,不是一处小 bug,而是三层叠加:当前 live 被改成 A41 简化链接台账、Feishu 在 2026-03-12 到 2026-03-13 期间多次出现 1063002 权限拒绝、而且 ACK 被显式关闭,所以群里几乎不会给失败提示。另一个关键矛盾是:群 prompt 仍承诺 richer AI 摘要,但被更底层的 passive hook 直接绕成了“禁止调用 LLM”的 9 列落表链路。
— One small system