微信公众号草稿发布
目标:把用户已经写好的 Markdown 或 HTML 内容,稳定发布到微信公众号草稿箱,而不是正式自动发表。
核心原则
- 只发布到草稿箱,绝不替用户正式群发。
- 先检查 API key,再做账号查询和发布,尽早失败。
- 先确认目标公众号账号;如果只有一个账号可自动使用,多个账号则让用户选择。
- 尽量保持用户原始内容,不擅自改写正文。
- 如果内容来自
wechat-article-writer,优先保存为 Markdown 后再发布。 - 用户明确要“小绿书/图文消息”时,使用
newspic类型;否则默认news。
目录结构
scripts/wechat_api.py:调用 wx.limyai.com API,支持列账号和发布
前置条件
执行前检查以下条件:
- 环境变量
WECHAT_API_KEY已设置 - Python 3.9+
- 用户的公众号已在 wx.limyai.com 完成授权
- 待发布文件是以下格式之一:
.md.markdown.html.htm
默认工作流
Step 1:确认发布输入
先确认以下信息:
- 要发布的文件路径
- 文件格式:Markdown 还是 HTML
- 发布类型:
news:普通公众号文章newspic:小绿书/图文消息
- 是否已指定公众号 appid
如果用户只说“帮我发布这篇公众号文章”,但没有给路径或内容,需要先补齐。
Step 2:检查 API key
使用脚本先检查 API 能否正常调用。推荐先执行列账号命令,因为它天然能同时验证 key 是否有效:
python /absolute/path/to/scripts/wechat_api.py list-accounts
如果报错:
API_KEY_MISSING:说明没有设置 keyAPI_KEY_INVALID:说明 key 无效或已失效
此时不要继续发布,先把错误明确告诉用户。
Step 3:获取公众号账号
执行:
python /absolute/path/to/scripts/wechat_api.py list-accounts
处理逻辑:
- 如果只有 1 个账号:直接使用该账号的
wechatAppid - 如果有多个账号:列出名称、appid、状态,让用户选
- 如果账号为空:提示用户先去 wx.limyai.com 授权公众号
- 如果账号 token 过期:提示用户重新授权
Step 4:识别文件格式
按文件扩展名判断:
.md/.markdown→ 使用--markdown.html/.htm→ 使用--html
如果扩展名不明确,但用户明确说是 HTML/Markdown,可按用户指定处理。
Step 5:发布到草稿箱
发布 Markdown
python /absolute/path/to/scripts/wechat_api.py publish \
--appid <wechatAppid> \
--markdown /path/to/article.md
发布 HTML
python /absolute/path/to/scripts/wechat_api.py publish \
--appid <wechatAppid> \
--html /path/to/article.html
发布小绿书/图文消息
python /absolute/path/to/scripts/wechat_api.py publish \
--appid <wechatAppid> \
--markdown /path/to/article.md \
--type newspic
Step 6:回报结果
成功后要明确告诉用户:
- 已经进入公众号草稿箱
- 还需要用户去微信公众平台手动预览和正式发布
- 返回关键 ID 方便排查:
publicationIdmaterialIdmediaId
与 wechat-article-writer 的衔接
如果用户先让你写文章,再要求发布:
- 先用
wechat-article-writer生成定稿 - 把终稿保存为 Markdown 文件
- 如用户没有指定账号,先查账号
- 再调用本 skill 发布到草稿箱
- 最终提醒用户:需要人工登录公众号后台审核与发布
推荐命令
以下路径都要使用绝对路径,当前 skill 目录下脚本路径为:
/Users/mrzhaoyi/Workspace/LLM/My-Skills/wechat-article-publisher/scripts/wechat_api.py
列出账号
python /Users/mrzhaoyi/Workspace/LLM/My-Skills/wechat-article-publisher/scripts/wechat_api.py list-accounts
发布 Markdown
python /Users/mrzhaoyi/Workspace/LLM/My-Skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid <wechatAppid> \
--markdown /absolute/path/to/article.md
发布 HTML
python /Users/mrzhaoyi/Workspace/LLM/My-Skills/wechat-article-publisher/scripts/wechat_api.py publish \
--appid <wechatAppid> \
--html /absolute/path/to/article.html
错误处理
API_KEY_MISSING
现象:没配置 WECHAT_API_KEY
处理:提醒用户配置环境变量后再试
API_KEY_INVALID
现象:key 无效
处理:提醒用户检查 .env 或重新生成有效 key
ACCOUNT_NOT_FOUND
现象:账号不存在或未授权 处理:提醒用户先在 wx.limyai.com 授权公众号
ACCOUNT_TOKEN_EXPIRED
现象:授权过期 处理:提醒用户重新授权
INVALID_PARAMETER
现象:参数不合法,比如 appid 错、文件路径错、格式不支持 处理:检查命令参数,尤其是文件路径和格式
WECHAT_API_ERROR
现象:微信接口调用失败 处理:可能是临时故障,可稍后重试
最佳实践
- 发布前先确认标题是否合适,不要把临时草稿直接发上去
- 标题尽量控制在 64 字以内
- 摘要尽量控制在 120 字以内
- HTML 适合复杂排版;Markdown 适合常规写作流
- 如果只是测试 API,优先准备一篇最小 Markdown 文件进行验证
- 遇到多个账号时,不要猜,必须让用户选
最小测试流程
当用户说“测试发布文章”时,默认这样做:
- 先执行
list-accounts验证 API key - 如果 key 正常,再确认测试文件路径
- 自动识别文件类型
- 选定账号后发布到草稿箱
- 返回发布结果或错误原因
输出要求
发布成功时,答复至少包含:
- 目标公众号 appid 或账号名
- 发布文件路径
- 发布类型:
news或newspic - 是否成功进入草稿箱
- 后续提醒:请去公众号后台预览并手动发布
发布失败时,答复至少包含:
- 失败阶段:检查 key / 列账号 / 发布内容
- 错误码或错误信息
- 下一步建议
一句话总结
这个 skill 负责把已经写好的文章安全送进微信公众号草稿箱,重点是“稳定、可核查、不自动正式发布”。