你不做 iOS 也完全没问题:这个方案本质是“飞书发指令 + 自动部署网页 + 回链接”。网页可以直接在飞书内打开(WebView),也可以分享给外部浏览器。
你的诉求(简化版)
- 在“部署群”里发任何内容 → AI 自动分析并生成/更新单页。
- 默认直接部署到 Vercel
Prod。 - 群里回 3 条链接(不贴日志):本次快照(report-*.html) + 滚动最新(latest.html) + 合集(history.html)。
- 尽量避免
*.vercel.app在国内不稳定:走你的自定义域名入口。 - 公开页面绝不泄露私密信息。
当前实现(可跑通)
web-ship 智能体把页面镜像到 Board。对外入口建议直接用 /topics/web-ship/latest.html(不依赖 rewrite)。
/ship 仍可保留为“好记的快捷入口”(rewrite → /topics/web-ship/latest.html)。
工作流
实现要点(脱敏)
这个闭环的关键是把“可变的 Vercel 预览快照 URL”变成“固定的自定义域名入口”:
对外优先分享 https://board.zondev.top/topics/web-ship/latest.html(永远最新);同时每次部署也会给出一个版本化链接便于追溯。
- 生成输出:
site/index.html(单文件 HTML,内联 CSS/JS,无外链资源)。 - 对外镜像:
Board /topics/web-ship/latest.html(作为稳定入口的真实落点)。 - 滚动最新(直链):
/topics/web-ship/latest.html(不依赖 rewrite)。 - 合集/历史(直链):
/topics/web-ship/history.html(最近版本化快照列表)。 - (可选)好记入口:
/shiprewrite →/topics/web-ship/latest.html。 -
返回格式:每次部署都会生成一个版本化页面,并在群里回三条链接:
① 本次固定快照(形如/topics/web-ship/report-YYYYMMDD-HHMMSS-xxxx.html)
② 滚动最新https://board.zondev.top/topics/web-ship/latest.html
③ 合集/历史https://board.zondev.top/topics/web-ship/history.html -
稳定性:为避免“点太快导致 404”,群里只在Prod Ready 后回链接;部署日志写入本机
.ship-logs,不在群里刷屏。
排障(为什么没回)
如果你在部署群里发了消息却没收到回复,常见原因是 OpenClaw 网关在 dispatch 过程中发生了重启
(日志里会出现 SIGTERM / service restart),导致这条消息的执行中断。
- 先确认滚动最新是否可打开:
https://board.zondev.top/topics/web-ship/latest.html。 - 再查看最近一次部署日志(不需要在群里贴):
7_AGENT/openclaw/web-ship/.ship-logs/last_log.txt。 - 如果日志显示部署失败,优先修复 Vercel 鉴权/网络问题;修复后在群里再发一句话触发即可。
排障(为什么点开是 404)
现在脚本会在 Prod Ready 之后才把链接发回群里,所以“刚点就 404”应当变得很少见。 如果仍然遇到 404,优先按下面几步定位:
- 先刷新一次
latest.html与history.html,确认 Board 已更新。 - 如果“滚动最新”可打开但“本次快照”404,说明本次部署可能失败:查看
7_AGENT/openclaw/web-ship/.ship-logs/last_log.txt。 - 如果你更喜欢好记入口,也可以用
/ship(rewrite 到/topics/web-ship/latest.html),但群里回链以直链为准。
可行性与边界
OpenClaw Showcase 里有“通过 Telegram 开发 iOS 应用并发布到 TestFlight”的社区案例——说明它可以把聊天当作交互入口,远程驱动本地开发环境完成构建/发布。
迁移到飞书在思路上是等价的(换一个消息渠道而已),但 iOS 链路涉及 Xcode、签名、证书与 Apple 账号安全,建议先把网页自动部署跑稳,再决定是否上 iOS。
隐私原则:公开网页里不放任何 token/appSecret/内部 ID。群里也尽量不贴长日志(需要排查时看本机日志即可)。
下一步:在部署群发一句话,确认 Bot 回 3 条直链:report-*.html + latest.html + history.html。
One action · Verify end-to-end