WeChat Draft · 微信公众号图文草稿自动创建
> 接收文章参数 → 全自动完成封面上传 + 草稿创建 → 输出 MediaID
> 全程无人干预、自动容错、闭环落地
一、技能概述
1.1 能力定位
通用型公众号内容发布基建技能,面向所有上层创作、文案、内容生产模块提供标准化、零运维、高容错的公众号草稿入库能力。
接收标准化图文参数,自动完成:
- Token 获取(每次刷新,不缓存)
- 封面素材上传(支持自定义/默认兜底/无封面降级)
- 正文合规处理(HTML 清洗、域名检测)
- 草稿结构化创建
- 结果回显 + 资源清理
1.2 权责边界
| ✅ 负责 | ❌ 不负责 |
|---|---|
| 参数校验 | 内容原创写作 |
| 权限鉴权(Token 获取) | 素材 AI 生成 |
| 封面兜底上传 | 网络文章采集 |
| HTML 合规适配 | 正文排版美化 |
| 草稿结构化创建 | 内容审核 |
| 异常捕获与日志 | 正式推送发布 |
| 临时资源清理 | 用户粉丝运营 |
| 标准化结果返回 |
二、调用入参规范
2.1 脚本参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
--title |
string | ✅ | 文章标题,最大 64 字节(约 21 个中文字符) |
--digest |
string | ✅ | 分享卡片摘要 |
--content-html |
string | ✅ | 正文 HTML,强制内联样式 |
--cover |
string | ❌ | 封面图本地路径 |
--author |
string | ❌ | 文章作者(默认取环境变量) |
2.2 环境变量
| 变量 | 必填 | 说明 | 默认值 |
|---|---|---|---|
WECHAT_APPID |
✅ | 公众号应用 ID | - |
WECHAT_SECRET |
✅ | 公众号应用密钥 | - |
WECHAT_AUTHOR |
❌ | 默认作者名 | koo AI |
DEFAULT_COVER_URL |
❌ | 默认封面兜底链接 | 空 |
三、执行流程(八段式工业链路)
参数接收 → 标题校验 → HTML 合规 → Token 获取 → 封面上传 → 草稿创建 → 结果校验 → 资源清理
Step 1:参数接收与兜底适配
- 被动等待调用方传参,不主动提问交互
- 无自定义封面路径时,自动下载全局默认封面至临时目录
- 无默认配置则草稿空白无封面(降级模式)
Step 2:标题校验
- UTF-8 编码后字节长度 ≤ 64
- 超长直接拦截,返回长度超限提示
Step 3:HTML 合规检查
- 自动移除外部
<style>标签(微信不支持) - 检测非
mmbiz.qpic.cn域名的图片,主动告警 - 不阻断流程,仅输出 WARN 级别日志
Step 4:权限令牌获取
- 动态实时获取微信 access_token(有效期 2 小时)
- 每次执行强制刷新,不缓存
- 获取失败则终止流程,返回鉴权错误
Step 5:封面素材上传
- 将本地封面图上传至微信素材库
- 解析返回
thumb_media_id,作为草稿封面唯一标识 - 上传失败降级为"无封面草稿",不阻断主流程
Step 6:标准化草稿构建 & 创建
- 通过 JSON 结构化组装草稿数据
- 统一配置评论权限(开启评论、仅全部粉丝可评论关闭)
- 严格遵循微信公众号接口规范
- 自动规避中文乱码(
ensure_ascii=False)
Step 7:结果校验与资源清理
- 校验草稿
media_id是否生成成功 - 失败则返回原始报错日志
- 成功后自动清理临时文件和 JSON 载荷
Step 8:标准化输出
- 成功 → 结构化输出文章信息 + 后台核验地址
- 失败 → 输出异常类型 + 原始报错 + 排查建议
四、强制合规规范
所有传入内容必须遵守以下规则:
| 规范 | 要求 |
|---|---|
| 样式 | 仅支持 HTML 内联 style 样式,禁止外部 <style> 标签 |
| 图片 | 正文所有图片必须为 mmbiz.qpic.cn 域名 |
| 编码 | JSON 序列化强制 ensure_ascii=False |
| 令牌 | access_token 不缓存,每次全新获取 |
| 标题 | ≤ 64 字节,超长直接拦截 |
五、异常容错体系
| 异常场景 | 处理方式 |
|---|---|
| Token 获取失败 | 终止流程,返回鉴权失败提示 |
| 封面上传失败 | 降级为无封面草稿,不阻断主流程 |
| 标题超长 | 直接拦截,返回长度超限提示 |
| HTML 不合规 | 主动告警,提示改写 |
| 中文乱码 | 强制 UTF-8 + ensure_ascii=False |
| 临时文件残留 | 无论成败自动清理 |
六、标准化输出
6.1 成功输出
{
"status": "success",
"media_id": "{DRAFT_MEDIA_ID}",
"title": "{标题}",
"digest": "{摘要}",
"author": "{作者}",
"cover_status": "自定义封面 | 默认兜底封面 | 无封面",
"check_url": "https://mp.weixin.qq.com"
}
6.2 失败输出
{
"status": "failed",
"error_type": "Token鉴权失败 | 参数非法 | 接口报错 | 未知异常",
"message": "{原始报错信息}",
"suggestion": "{排查建议}"
}
七、配套 HTML 基础模板
<section style="font-family: -apple-system, sans-serif; line-height: 1.8; color: #333; padding: 15px;">
<p style="margin-bottom: 20px;">段落内容</p>
<h2 style="border-bottom: 1px solid #eee; padding-bottom: 8px;">二级标题</h2>
<p style="text-align: center; margin: 25px 0;">
<img src="{mmbiz_qpic_url}" style="max-width: 100%; border-radius: 6px;">
</p>
<blockquote style="background: #f6f8fa; border-left: 4px solid #ddd; padding: 12px 16px;">引用内容</blockquote>
</section>
八、使用方式
8.1 直接调用
python3 /root/.openclaw/workspace/skills/wechat-draft/create_draft.py \
--title "文章标题" \
--digest "分享摘要" \
--content-html "<p>正文HTML</p>" \
--cover /path/to/cover.jpg \
--author "作者名"
8.2 上层技能调用
上层技能(如电商文案、内容创作)通过 exec 工具调用此脚本,传入标准化参数,获取 media_id 结果。
8.3 前置配置
首次使用前需配置环境变量:
export WECHAT_APPID="你的公众号 AppID"
export WECHAT_SECRET="你的公众号 Secret"
export WECHAT_AUTHOR="文章作者名"
export DEFAULT_COVER_URL="https://example.com/default-cover.jpg"
或使用 OpenClaw 的环境变量配置机制注入。
九、适配场景
本技能为全场景通用基建,无业务绑定:
- 日常资讯推文 / 知识科普图文
- 品牌宣传 / 活动营销 / 推广种草
- 企业公告 / 通知 / 公示类正式图文
- 干货长文 / 教程图文 / 复盘总结
- 上层文案技能、创作技能的自动化发布收尾
十、运行约束
| 约束项 | 说明 |
|---|---|
| 运行模式 | 被动调用式,纯参数驱动执行 |
| 接口依赖 | 微信公众号官方开放平台 API |
| Token 有效期 | 2 小时,每次调用实时刷新 |
| 依赖库 | requests(Python 标准 HTTP 库) |
| 临时文件 | 自动创建/自动清理,不残留 |
| 版本状态 | V1.0 通用生产稳定版 |
本技能包由团子 🦐 创建,知灵技舍维护。
Wechat Draft v1.0 | 2026-07-03