拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用 OpenClaw skill 把 Markdown 自动发布到微信公众号:TaoToken 配置与验证全流程

用 OpenClaw skill 把 Markdown 自动发布到微信公众号:TaoToken 配置与验证全流程

1. 从 Markdown 到公众号草稿,卡住的从来不是写作

AI 把文章写完,真正的体力活才刚开始。公众号后台不支持外链图片,每张图要手动上传;封面图得单独传成永久素材;代码块、引用块、高亮段落要在编辑器里一个个调样式;头部的星标提示、底部的关注引导,每次都得复制粘贴。一篇三千字的稿子,光发布环节就能吃掉三四十分钟。

我想要的链路很明确:本地一个 Markdown 文件,跑一条命令,草稿箱里出现排版好的文章,我只需要审核和点发布。执行载体用 OpenClaw skill,鉴权和模型调用统一走 TaoToken 的 Key/API 通道,这样写作、配图、发布三个环节共用一套凭证,不用在多个平台之间来回切。

这篇就把这套链路拆开讲:config.toml 和 settings.json 怎么写、skill 怎么触发、图片怎么自动上传、Markdown 怎么渲染成微信能认的内联样式 HTML,最后附一次从本地文件到草稿箱的端到端验证。适合已经在用 OpenClaw 做内容工作流、或者正准备把发布环节自动化的人。

2. TaoToken 前置:统一 Key 与 API 通道

2.1 为什么发布链路也要接 TaoToken

很多人以为发布环节只跟微信接口打交道,跟模型无关。实际不是。发布 skill 里至少有三个地方要调模型:标题二次润色、摘要生成、以及图片 alt 文本和封面文案的补全。如果这些调用散落在不同平台,Key 管理会变成灾难。

TaoToken 在这里的角色是统一入口:一个 Key 覆盖对话模型和编码类模型,API 地址固定,skill 里只配一次。官网在 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,API 端点用 https://taotoken.net/api ,注意 API 地址不带 UTM 参数,直接写进配置即可。

2.2 拿 Key 与确认模型

登录后进控制台,在 API Keys 页面创建一个新 Key。建议按用途分 Key,比如openclaw-publish单独一个,方便后续排查是哪个环节在消耗额度。创建入口在 https://taotoken.net/console/api-keys?utm_source=taotoken_aicg_blog_end&utm_content=api_keys&utm_campaign=rewrite 。

创建完先别急着写进配置,用模型对话页面确认一下 Key 可用、模型列表能正常返回: https://taotoken.net/models?utm_source=taotoken_aicg_blog_end&utm_content=models&utm_campaign=rewrite 。这一步能省掉后面大量「到底是 Key 错还是配置错」的排查时间。

2.3 微信侧的准备工作

公众号这边需要三样东西:AppID、AppSecret、以及一个已认证的服务号或订阅号(草稿箱接口对账号类型有要求)。AppID 和 AppSecret 在公众平台「设置与开发 - 基本配置」里。另外要把服务器出口 IP 加进白名单,否则调接口会直接返回 IP 不在白名单的错误。

注意:AppSecret 只在生成时显示一次,务必当场保存。丢了只能重置,重置后旧的全部失效。

3. 可复制配置:config.toml 与 settings.json 骨架

3.1 目录结构先定下来

OpenClaw 的工作区建议这样组织,发布 skill 只认这个结构,图片和文章放一起,缓存文件跟着文章走:

openclawworkspace/ ├── config.toml ├── skills/ │ └── wechat-publisher/ │ ├── settings.json │ └── scripts/publish.py └── articles/ └── 2026-03-07/ └── 主题名/ ├── article.md ├── cover.png ├── img-01.png └── meta.json

3.2 config.toml:模型与 Key 通道

这是 OpenClaw 主配置,重点是 provider 段。base_url 指向 TaoToken 的 API 地址,api_key 从环境变量读,避免明文进版本库:

[provider.taotoken] type = "openai-compatible" base_url = "https://taotoken.net/api" api_key_env = "TAOTOKEN_API_KEY" default_model = "claude-sonnet-4-5" timeout_seconds = 120 [workspace] root = "~/Documents/openclawworkspace" articles_dir = "articles" [logging] level = "info" file = "~/Documents/openclawworkspace/logs/publish.log"

环境变量在 shell 里导出,写进~/.bashrc或~/.zshrc:

export TAOTOKEN_API_KEY="sk-你的Key"

3.3 settings.json:发布 skill 的专属配置

这个文件管微信侧凭证和渲染开关,跟 config.toml 分开,方便单独备份和轮换:

{ "wechat": { "app_id": "wx你的AppID", "app_secret_env": "WECHAT_APP_SECRET", "author": "你的署名", "default_thumb_media_id": "" }, "render": { "enable_header": true, "enable_footer": true, "highlight_color": "#1a73e8", "code_theme": "github" }, "publish": { "auto_update_draft": true, "image_cache": true, "notify_on_success": true } }

auto_update_draft设为 true 后,重复执行不会产生重复草稿,而是更新已有草稿。image_cache打开后,已上传图片的微信 CDN 地址会写进 meta.json,改稿重发不重复上传。

3.4 skill 触发配置

OpenClaw 的 skill 靠触发词和命令绑定。在 skill 目录下加一个 manifest,声明什么时候调用它:

{ "name": "wechat-publisher", "trigger": ["发布公众号", "推送到草稿箱", "publish wechat"], "entry": "scripts/publish.py", "args_schema": { "article_dir": "string", "force_new": "boolean" } }

配好之后,你在对话里说「把这篇发布公众号」,OpenClaw 就会带上当前文章目录去调 publish.py。

4. 端到端验证:从本地 Markdown 到草稿箱

4.1 准备一篇最小测试文章

先别拿正式稿试,建一个测试目录,放一篇带图片和隐藏标签的短文章:

# 测试标题 <!-- wechat:lead --> 这里是导读内容,渲染后会变成蓝色左边框的导读框。 <!-- /wechat:lead --> 正文第一段,包含一个行内代码 `print("hello")`。 ![测试图](./img-01.png) <!-- wechat:highlight --> 这句话会被渲染成加粗高亮。 <!-- /wechat:highlight -->

隐藏标签用 HTML 注释实现,在飞书、GitHub 里完全不可见,只有微信渲染器会识别并套样式。

4.2 执行发布命令

cd ~/Documents/openclawworkspace python3 skills/wechat-publisher/scripts/publish.py \ --article-dir ~/Documents/openclawworkspace/articles/2026-03-07/测试主题/

脚本内部按顺序做四件事:扫描目录收集图片、调微信 upload-img 接口上传并替换链接、把 Markdown 渲染成内联样式 HTML、调草稿创建接口写入草稿箱。

4.3 看返回结果

成功时终端会打印类似输出:

[1/4] 扫描图片: 找到 2 张 (cover.png, img-01.png) [2/4] 上传图片: cover.png -> media_id=xxx, img-01.png -> https://mmbiz.qpic.cn/... [3/4] 渲染 HTML: 识别隐藏标签 2 处, 内联样式 47 个 [4/4] 创建草稿: media_id=yyy, 状态=success 草稿已写入,请到公众号后台草稿箱查看。

同时 meta.json 里会多出wechat_image_map和media_id两个字段。第二次改稿重跑,日志里图片上传那步会显示「命中缓存,跳过」,草稿走更新接口,不会多出一条。

4.4 验证草稿内容

进公众号后台草稿箱,检查三件事:图片是否正常显示(不是裂图)、隐藏标签样式是否生效、封面图是否已设置。三项都对,链路就通了。

5. 本篇常见错排查

5.1 图片上传报 40001 或 invalid credential

这是 access_token 失效或 AppSecret 配错。access_token 有效期两小时,脚本一般会缓存,但如果服务器时间漂移或者多进程并发刷新,会出现旧 token 被覆盖的情况。排查顺序:先确认WECHAT_APP_SECRET环境变量能读到,再手动调一次 token 接口看返回。

curl "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的AppID&secret=你的Secret"

返回里带access_token说明凭证没问题,问题在脚本缓存逻辑。

5.2 IP 不在白名单

错误信息通常是errcode: 40164。公众号后台把服务器出口 IP 加进白名单即可。注意如果服务器走的是动态出口,IP 会变,这种情况要么固定出口,要么每次发布前先查当前 IP 再更新白名单。

5.3 草稿重复创建

说明 meta.json 里的 media_id 没被读到。检查两点:article_dir 是否指对了目录(meta.json 必须和 article.md 同级),以及 settings.json 里auto_update_draft是否为 true。如果确实想强制新建,加--force-new参数。

5.4 隐藏标签没生效

渲染器识别的是固定格式的 HTML 注释,<!-- wechat:lead -->和<!-- /wechat:lead -->必须成对,中间不能有嵌套。如果标签名拼错,渲染器会当普通注释忽略,内容照常显示但没样式。用grep -n "wechat:" article.md快速核对标签。

5.5 模型调用超时

发布 skill 里的润色和摘要调用走 TaoToken 通道,如果超时先确认TAOTOKEN_API_KEY环境变量在当前 shell 生效(echo $TAOTOKEN_API_KEY看有没有值)。如果是在 systemd 或 cron 里跑,环境变量不会自动继承,需要在 service 文件里显式声明 Environment。

6. 把发布环节接进你的工作流

这套链路跑通之后,日常操作就变成:AI 写完文章落到本地目录,你说一句「发布公众号」,草稿箱里出现排版好的稿子,你审核完点发布。发布决策始终在你手里,自动化只处理排版和上传这些重复劳动。

如果你还在手动排版,建议先从最小测试文章跑一遍第 4 节的验证流程,把图片上传和隐藏标签这两块确认无误,再换成正式稿。长期做内容的话,把发布 skill 和写作 skill 串起来,配合 Coding Plan 管理模型调用额度,整条链路会更稳: https://taotoken.net/coding-plan?utm_source=taotoken_aicg_blog_end&utm_content=coding_plan&utm_campaign=rewrite 。接入过程中遇到鉴权或接口报错,先查接入文档: https://taotoken.net/doc?utm_source=taotoken_aicg_blog_end&utm_content=doc&utm_campaign=rewrite ,大部分错误码在里面都有对应说明。

返回列表