OpenClaw
返回博客
2026-02-17· 8 min 公众号自动化

5 分钟让 AI 帮你发公众号(附避坑指南)

跟 AI 说一句话,文章自动进公众号草稿箱。完整 API 配置 + 中文乱码等所有踩坑记录。

为什么要自动化公众号发布

公众号发文是很多内容创作者最重复的日常操作之一:

  1. 1.写好文章
  2. 2.登录公众号后台
  3. 3.新建图文
  4. 4.粘贴内容
  5. 5.排版调整
  6. 6.设置封面和摘要
  7. 7.提交审核/发布

这个流程每次要花 15-30 分钟,还很容易出错。用 OpenClaw 配合微信公众平台 API,可以把步骤 2-7 全部自动化,你只需要写好内容,说一句话,文章进草稿箱。

前置准备:开通公众号 API

首先需要在微信公众平台开通接口权限:

  1. 1.登录 微信公众平台微信公众平台https://mp.weixin.qq.com
  2. 2.进入「设置与开发」→「基本配置」
  3. 3.获取 AppIDAppSecret
  4. 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 秒。你只需要最后点一下"发布"按钮。

想从零开始搭建自己的 OpenClaw?

专业工程师远程安装,安装完成即可上手,无需自己踩坑。

扫码联系专家 →