2026-02-17· 8 min 公众号自动化
5 分钟让 AI 帮你发公众号(附避坑指南)
跟 AI 说一句话,文章自动进公众号草稿箱。完整 API 配置 + 中文乱码等所有踩坑记录。
为什么要自动化公众号发布
公众号发文是很多内容创作者最重复的日常操作之一:
- 1.写好文章
- 2.登录公众号后台
- 3.新建图文
- 4.粘贴内容
- 5.排版调整
- 6.设置封面和摘要
- 7.提交审核/发布
这个流程每次要花 15-30 分钟,还很容易出错。用 OpenClaw 配合微信公众平台 API,可以把步骤 2-7 全部自动化,你只需要写好内容,说一句话,文章进草稿箱。
前置准备:开通公众号 API
首先需要在微信公众平台开通接口权限:
- 1.登录 微信公众平台微信公众平台https://mp.weixin.qq.com
- 2.进入「设置与开发」→「基本配置」
- 3.获取
AppID和AppSecret - 4.在服务器配置中填入回调地址(如果需要接收消息)
注意:订阅号默认没有高级接口权限,部分功能需要认证或升级为服务号。
将 API 凭证写入环境变量:
# .env
WECHAT_APP_ID=your_app_id
WECHAT_APP_SECRET=your_app_secret核心流程:从文章到草稿箱
微信公众平台草稿接口的调用流程:
获取 Access Token
↓
准备文章内容(标题、正文、封面图、摘要)
↓
调用新建草稿接口
↓
发送飞书通知,附草稿预览链接
↓
人工确认后点击发布第一步:获取 Access Token
import requests
def get_access_token(app_id, app_secret):
url = "https://api.weixin.qq.com/cgi-bin/token"
params = {
"grant_type": "client_credential",
"appid": app_id,
"secret": app_secret
}
resp = requests.get(url, params=params)
return resp.json().get("access_token")Access Token 有效期 2 小时,建议缓存使用,不要每次都重新获取。
第二步:上传封面图片
def upload_image(access_token, image_path):
url = f"https://api.weixin.qq.com/cgi-bin/media/upload"
params = {"access_token": access_token, "type": "image"}
with open(image_path, "rb") as f:
resp = requests.post(url, params=params, files={"media": f})
return resp.json().get("media_id")第三步:创建草稿
def create_draft(access_token, title, content, thumb_media_id, digest=""):
url = f"https://api.weixin.qq.com/cgi-bin/draft/add"
params = {"access_token": access_token}
data = {
"articles": [{
"title": title,
"author": "OpenClaw 中文站",
"digest": digest,
"content": content, # HTML 格式
"thumb_media_id": thumb_media_id,
"need_open_comment": 1
}]
}
resp = requests.post(url, params=params, json=data)
return resp.json()踩坑记录
坑 1:中文乱码
症状:文章发布后,公众号后台显示乱码或问号。
原因:请求头没有设置正确的 Content-Type,或者 JSON 序列化时 ensure_ascii 默认为 True。
解决方案:
import json
# 错误写法(默认 ensure_ascii=True,中文变成 \uXXXX)
data_str = json.dumps(data)
# 正确写法
data_str = json.dumps(data, ensure_ascii=False)
requests.post(url, data=data_str.encode("utf-8"),
headers={"Content-Type": "application/json; charset=utf-8"})坑 2:图片不显示
症状:草稿里图片链接是外链,发布后图片裂开。
原因:微信不允许直接引用外部图片,必须先上传到微信素材库。
解决方案:正文中的所有图片都需要先调用 /media/upload 接口上传,用返回的 media_id 替换原始链接。
坑 3:Access Token 失效
症状:某次调用突然报错 "invalid credential"。
原因:Access Token 2 小时过期,没有刷新机制。
解决方案:
import time
token_cache = {"token": None, "expire_time": 0}
def get_valid_token(app_id, app_secret):
if time.time() < token_cache["expire_time"] - 300: # 提前 5 分钟刷新
return token_cache["token"]
token = get_access_token(app_id, app_secret)
token_cache["token"] = token
token_cache["expire_time"] = time.time() + 7200
return token坑 4:HTML 格式要求严格
微信公众号对 HTML 有特殊要求:
- 不支持外部 CSS 文件,所有样式必须内联
- 不支持
<script>标签 - 图片必须使用微信素材库的链接
解决方案:使用专门的 HTML 转微信格式工具,或者让 OpenClaw 在生成内容时直接输出符合微信要求的格式。
完整自动化配置
把以上步骤封装成 OpenClaw 的一个工作流:
workflow:
wechat_publish:
trigger: "manual or cron"
steps:
- name: "准备内容"
action: "read_file"
path: "drafts/{{filename}}"
- name: "格式转换"
action: "llm"
prompt: "将以下 Markdown 转换为微信公众号 HTML 格式,内联所有样式"
- name: "获取Token"
action: "http_get"
url: "https://api.weixin.qq.com/cgi-bin/token"
- name: "创建草稿"
action: "http_post"
url: "https://api.weixin.qq.com/cgi-bin/draft/add"
- name: "飞书通知"
action: "feishu_webhook"
message: "草稿已创建,请审核后发布:{{draft_url}}"效果
配置完成后,发文流程变成:
你:把 drafts/article-20260217.md 发到公众号草稿箱
AI:好的,正在处理...
- 读取文章内容
- 转换格式
- 上传图片
- 创建草稿
草稿已创建!请登录公众号后台预览确认后发布。全程约 30 秒。你只需要最后点一下"发布"按钮。