ZON
Best Minds Board · Private Review
Snapshot · 2026-03-11
OpenClaw · Feishu · UX Governance

OpenClaw × Feishu 403 体验治理复盘:
从“丢响应”到“按群柔性降级”

这轮修复真正改变的不是某个模型能不能跑,而是整条链路的成功定义:从“AI 成功才算成功”,切换成“链接先入账、群内体验先收敛、AI 结果可延后补跑”。 截至 2026 年 3 月 11 日,统一主表、历史补齐、无 AI 保底入账、信息获取群软化回执、以及跨群 403 降级文案都已落地;剩余的关键动作只剩一轮真实 Feishu 群 smoke test。

Project MINE/openclaw-feishu-ux-retro
Category workflow
Tags OpenClaw · Feishu · 403 · UX · 飞书表格
Summary 链接先保底入账,错误按群柔性降级
Original Goals
5
统一主表、历史回填、无 AI 保底、柔和回执、减少原始错误外露。
Root Causes
4
表结构混乱、ACK 通路失效、主链路错误透传、缺少按群降级策略。
Patched Layers
5
配置、回填脚本、message-log hook、可读表结构、OpenClaw reply pipeline。
Remaining Gate
1
还差一轮真实 Feishu 群端到端验收,确认群内最终文案与表格状态一致。

Best Minds

这次最值得听的不是“谁最懂 OpenClaw”,而是谁最懂“故障时的用户体验”和“系统退化策略”。

Don Norman
系统不该把内部故障直接甩给用户。用户真正关心的是:我的内容有没有被接住?下一步要不要我处理?
Charity Majors
原始 provider 报错应该进入日志、指标和运维面;业务群里应该展示的是业务状态,而不是底层错误原文。
Steve Krug
群消息必须“一眼就懂”。最好的提示只回答三件事:收到了没、现在做到哪、我要不要动作。
所以这轮最关键的设计决策是:把成功标准从“AI 一次性完成”改成“先留痕,再补处理”。这就是为什么表格保底、友好 ACK、以及按群文案分层,比单纯修模型更重要。

What Changed

最初目标与当前状态对照

最初目标

  • 信息获取群里,用户发了链接,系统要自动处理或至少自动记录
  • 即使模型欠费或额度不足,每条链接也必须先进同一张总表
  • 历史刚发的几条以及后续新增内容,要补回统一账本
  • 群里不要再回生硬的 403 / 欠费 / 购买链接
  • 表格要人能看懂,能按日期、状态、备注判断发生了什么。

当前状态

  • 已完成 统一主表已固定,不再漂移到语义误判的其它表。
  • 已完成 历史记录已重建为可读 schema,日期与状态可直接查看。
  • 已完成 无 AI 保底写表已落地,欠费时会写“待补提取”备注。
  • 已完成 信息获取群主链路 403 已改为静默,由柔和 ACK 承担用户可见反馈。
  • 待验收 跨群软化文案已打到 reply pipeline,但还差真实群消息 smoke test。

Principles

这轮治理真正成立,靠的是四个清晰原则,而不是一堆零散 patch。

要点 1 · 先留痕,再谈 AI

Funnel · ledger-first

先保证链接、消息 ID、时间、来源群进账本;AI 摘要和相关链接只是后续 enrichment。

要点 2 · 用户看业务状态,不看 provider 错误

Matrix · user-facing vs internal 业务群 = 柔和状态 原始 403 不进群 运维面看详细错误 日志 / DM 透明

群里展示“已入账 / 待补提取”,日志里保留真正的 403 / billing / rate-limit 原文。

要点 3 · 同一件事,只允许一个主账本

Score · canonical sheet stability 95 pin to one canonical sheet

这轮不是“再造一张表”,而是明确:这个群的所有记录都应该被 pin 到同一张全局主表。

要点 4 · 体验分层必须按群来做

Risk · same error, different audience 业务 协作 运维

同样的底层错误,在信息获取群、自媒体群、运维私聊里应该是三种完全不同的用户体验。

Visual Diagnostics

把这轮治理拆成五张诊断小图:状态、拥塞、剩余工作、反馈回路与验收路径。

Timeline · 03-06 → 03-11
症状 → 治理 → 验收
Heatmap · group sensitivity
不同群,对错误的耐受度不同
Radar · closure balance
入账、回执、历史、降级、验收
Swimlane · hook / sheet / reply
每层各做一件事
Feedback Loop · smoke test next
最后一环:真实群验收

Timeline

从 2026-03-06 到 2026-03-11 的关键推进节点

2026-03-06
开始出现“看不到今天记录”和“跑去别的表”
日志显示同一个群的 URL 写入曾被语义复用到另一张表;同时表内存在 7 列可读区 + 25 列账本尾区混排,导致“其实写进去了,但肉眼看不到”。
2026-03-09
用户反馈升级:没回复、没日期、不是那张表
问题从“单次写表异常”升级成“系统成功定义错误”:只要 AI 失败,用户主观感受就是整件事失败。
2026-03-10 上午
统一主表 + 可读回填完成
主表被固定到同一 URL,回填脚本重写为人类可读 schema,并把历史记录重建进统一账本。
2026-03-10 下午
信息获取群无 AI 保底 + 柔和 ACK 完成
message-log hook 改成直接用 Feishu API 回 ACK;额度不足时写“已入账|待 AI 补提取”,而不是原始 provider 文案。
2026-03-11
跨群 403 文案分层治理完成
把 OpenClaw reply pipeline 本身也补上“按群降级”逻辑:业务群隐藏 403、协作群降级说明、DM 保留结构化 FAILED。

Root Causes

不是一个 bug,而是四层设计同时漏水。

1. 表格层

症状:用户说“没有今天的日期”。

真实原因:同一张表里混了可读行与 25 列 canonical ledger 尾区,后者视觉上像“消失了”。

2. 选表层

症状:有时会写到另一张相似语义的表。

真实原因:早期依赖语义复用候选,未对这个群显式 pin 到同一张总表。

3. ACK 通路层

症状:用户发链接后“像是没反应”。

真实原因:旧 ACK 走 openclaw message send,但配置校验导致发送失败,用户看不到“已入账”的反馈。

4. Reply Pipeline 层

症状:群里直接冒出生硬 403 / 欠费文案。

真实原因:OpenClaw 主链路会把 assistant billing / rate-limit error 直接格式化成用户可见回复,没有业务群分层策略。

System Shift

真正的架构变化:从“AI-first”切到“ledger-first”。

INBOUND 飞书消息 / 链接 HOOK URL 提取 + 去重 LEDGER 先写统一主表 USER FEEDBACK 按群返回柔和状态 AI ENRICH 正文 / 相关链接补提取 信息获取群:静默主错误 + 已入账 ACK 其它群:按群软化 403 / timeout / rate-limit 额度恢复后继续补,不再把“AI 成功”当成唯一成功条件
这就是本次复盘最重要的结构变化:任何链接先入账,再决定 AI 是否同步完成

What We Patched

配置层、日志层、表格层、回复层同时补齐。

配置层
把信息获取群默认主表固定到同一张总账本,关闭 mention 依赖,并把 ACK 前缀统一成“已入全局账本”。
回填脚本层
把历史重建脚本改为人类可读 schema:平台 / 原文链接 / 预览相关链接 / 标题主题 / 摘要 / 关键词 / 状态 / 可信度 / 采集时间 / 备注 / 消息 ID / 来源群 / 发送者。
message-log hook 层
修 URL 提取、用 Feishu Open API 直接发 ACK、欠费时落“待 AI 补提取”状态和备注。
表格层
重建统一主表,清理掉混在尾部的难读 canonical row,让用户按日期和状态就能看懂。
reply pipeline 层
把 OpenClaw 主链路原本直接对用户显示的 403 / billing / rate-limit 错误,改成按群分层的柔性文案,并加入 6 小时去重。

Per Group UX

同样是“模型有问题”,但不同群应该看见完全不同的话。

群/场景 之前 现在 设计原则
信息获取群
业务群 / 链接处理
可能看到原始 403,或像“没有回复”。 主错误静默 + ACK 显示“已入全局账本 / 待补提取”。 用户只需知道:链接已接住
actions tips
协作群 / 动作建议
原始 403 打断讨论节奏。 软化为“本次先保留上下文,AI 总结待补”。 给状态,但不把 provider 细节抛给群友。
自媒体
内容工作台
失败文案像“系统崩了”。 软化为“选题与来源已保留,标题/正文待补生成”。 围绕“今天能不能发”来讲状态。
🎶 新专辑
创作群
技术错误直喷,体验很硬。 软化为“灵感已记录,歌词/风格建议待补生成”。 先保护创作节奏,再谈系统状态。
私聊 / 运维 原始 403 或笼统失败。 保留 FAILED,但改成结构化人话:影响 / 下一步。 这里只有运维才需要更透明的失败说明。

Scoreboard

“实现了多少”需要拆成两个维度:工程落地度真实验收度

工程落地度

统一主表固定100%
历史记录回填重建100%
无 AI 保底入账100%
信息获取群柔和体验95%
跨群 403 文案分层90%

真实验收度

主表可见性验证100%
历史样本回填验证100%
欠费场景落表验证95%
跨群软化文案 live smoke35%
本轮总体闭环度88%
这 88% 不是“代码写了 88%”,而是“系统行为在真实用户体验上闭环了 88%”。剩下的 12% 主要不是改代码,而是做一次真实群验收,确认群里看到的最后一句话与你想要的完全一致。

Risks

还没完全收口的地方,主要集中在“验证”而不是“设计”。

Risk 1 · Live 验收缺口

中风险

按群软化 403 已进入 reply pipeline,但尚未针对每个目标群各发 1 条真实消息完成 smoke test。

Risk 2 · Dist Patch 可升级性

中风险

本轮对 OpenClaw 已安装 dist 做了手术式 patch;未来升级 OpenClaw 后,需把这套策略迁回正式源码或重新补丁。

Risk 3 · Quota 检测仍偏启发式

中风险

message-log hook 的“额度不足”判断仍主要依赖近期日志特征,还不是 per-message 强绑定。

Files

这轮真正改变行为的关键文件

  • ~/.openclaw/openclaw.json:主表固定、ACK 前缀、目标群无需 mention。
  • ~/.openclaw/hooks/message-log/handler.js:URL 提取、可读写表、Feishu API ACK、待补提取备注。
  • scripts/openclaw/feishu-url-ledger-backfill.mjs:历史账本重建为人类可读结构。
  • /opt/homebrew/lib/node_modules/openclaw/dist/subagent-registry-*.js:主 reply pipeline 新增按群软化错误逻辑。
  • /opt/homebrew/lib/node_modules/openclaw/dist/reply-*.js:并行构建产物同步 patch,避免入口不一致。
  • tmp/_codex/openclaw/url-ledger-backfill/runs/2026-03-10T03-54-59-123Z.json:历史回填执行记录。
复盘口径说明:为兼顾私有发布与可读性,报告中群 ID / 表 token / 本地路径已做最小必要遮蔽;绝对路径与敏感信息将继续由 private publish 链路做二次脱敏与泄露扫描。
这次治理的核心不是“把模型修好”,而是把信息获取链路从“AI 成功才算成功”改成“链接先入账、错误按群降级、AI 结果可补跑”。到 2026-03-11 为止,统一主表、历史补齐、无 AI 保底入账与按群软化 403 文案都已落地,剩余工作主要是一轮真实 Feishu 群 smoke test。
— One small system