OpenClaw 把 Ghost 发布能力做成 skill 的过程
这篇记录一次具体实现:让 OpenClaw 能稳定创建、更新并发布 Ghost 文章。目标很简单,流程要能复用,配置要能收敛,出错时也要知道卡在哪一步。
目标
我们想让 OpenClaw 做三件事:
- 读懂 Ghost 的发布链路
- 把发布流程整理成一个可复用的 skill
- 用本地环境变量完成鉴权和发布,不把密钥写进代码
先看了哪些文档
先看的不是文章样例,而是 Ghost 官方文档里和接口、鉴权相关的部分,重点确认两件事:
- 哪些接口只负责读取
- 哪些接口可以创建和更新内容
看完之后,结论很明确:Content API 适合读取,真正写入要走 Admin API。
这个 skill 做什么
我们把流程整理成了 `ghost-publisher`。
它的职责很窄,也很明确:
- 接收标题、正文、slug、标签等发布字段
- 处理 Markdown 或 HTML 输入
- 发布前规范化内容结构
- 调用 Ghost Admin API 创建或更新文章
- 返回可验证的结果,例如文章 id、slug、URL 和状态
这样做的好处是,OpenClaw 不需要每次都临时解释 Ghost 规则,直接走这个 skill 就行。
需要哪些环境变量
概念上只需要两类配置:
- Ghost 的站点地址
- Ghost 的 Admin API key
这两个值都应该放在 `.env` 里,由 OpenClaw 启动时读取。不要把它们写进文章、日志或提示词里。
为什么第一次没成功
一开始我们拿的是 Ghost Integration 里常见的 Content API key。它能读内容,但不能写内容。
这就是第一次失败的根因:
- Content API key 是只读的
- 要写文章,必须使用 Admin API key
- Admin API key 需要在 Ghost 后台创建 Custom Integration 后才能拿到
权限模型没理顺之前,流程看起来都对,实际就是发不出去。
为什么改了 `.env` 还要重启 OpenClaw
因为 OpenClaw 读取环境变量是在启动时完成的。
所以 `.env` 改完以后,必须重启 OpenClaw,新的 host 和 key 才会真正生效。只改文件不重启,进程里还是旧配置。
实际踩到的格式问题
这次也确认了几个发布时的约束,后面继续做文章时可以直接沿用:
- 正文里不要重复顶层标题,Ghost 已经有 `title` 字段
- 发布前先规范化 Markdown,避免混乱的空行、缩进和重复列表符号
- slug 要清楚,和主题一致,英文通常比硬拼中文更直观
这些问题不解决,页面就会显得乱,也会让内容更像临时拼出来的。
怎么安全地让 AI 处理带密钥的环境
如果让 AI 参与这类工作,边界要先写清楚:
- 只使用指定的环境变量
- 不要输出 `.env` 全文
- 不要回显任何 key 的值
- 只返回非敏感的验证结果
也就是说,AI 可以告诉你“配置是否生效”“文章是否已发布”“返回的 slug 是什么”,但不能把密钥内容带出来。
结果
这套流程跑通以后,OpenClaw 现在已经可以稳定地:
- 读取本地配置
- 通过 `ghost-publisher` 处理文章
- 用 Admin API 写入 Ghost
- 返回可核验的发布结果
后面如果还要扩展到更新文章、批量发文或更复杂的内容格式,基础已经在了,直接沿用这条链路就行。
Member discussion