用途
wechat-publisher 是一个独立的微信公众号文章发布 Skill,不依赖外部 skill,直接调用微信 API 将文章同步到微信公众号草稿箱。适用于需要快速把主题、Markdown 文件或已有内容转为公众号文章的写作与发布场景。
主要能力
- 直接发布:无需预览,直接同步到微信公众号草稿箱,返回 Media ID。
- 内置生图:集成 Gemini Pro 与魔搭 ModelScope 生图模块,不依赖外部 skill。
- 自动排版:转换为微信兼容的 HTML 格式,支持 default(经典)与 magazine(杂志风)两种主题。
- 图片/视频上传:自动上传图片和视频到微信 CDN/素材库。
- 独立运行:完全独立,可直接分享。
使用方式
配置
在 ~/.openclaw/workspace/.env 或 OpenClaw 配置中添加:
WECHAT_APPID=your_appid WECHAT_APPSECRET=your_appsecret MODELSCOPE_API_KEY=your_token # 魔搭生图(国内推荐,免费)
GEMINI_API_KEY=your_gemini_key # Gemini 生图(需代理,可选)
GEMINI_PRO_PROXY=http://127.0.0.1:7890 # Gemini 代理(可选)
WECHAT_DEFAULT_AUTHOR=龙虾 # 默认作者(可选)
三种创建方式
- 从主题创建:如“写一篇关于‘如何使用 AI 提升工作效率’的公众号文章,直接发布”。AI 会生成 5-8 个候选标题,用户选择标题后生成文章内容、封面图,转换为微信 HTML,上传图片到微信 CDN,创建草稿并同步,返回 Media ID。
- 从 Markdown 文件创建:如“把这个 Markdown 文件发布到微信公众号[附件: article.md]”。
- 从已有内容创建:如“把我刚才说的内容整理成公众号文章发布”。
工作流程
用户输入 → 生成标题(AI) → 用户选择标题 → 生成封面(Gemini Pro,后台) → 生成/解析内容 → 等待封面生成完成 → 转换为微信 HTML → 上传所有图片到微信 CDN → 创建草稿 → 完成并返回 Media ID。
核心脚本
主脚本 scripts/publish.mjs:
node ~/.openclaw/workspace/skills/wechat-publisher/scripts/publish.mjs
--title "文章标题"
--content "文章内容(Markdown)"
--author "龙虾"
参数:--title 文章标题(必填);--content 文章内容,Markdown 格式(必填);--author 作者名(可选,默认“龙虾”);--no-cover 不生成封面,使用默认封面;--image-provider 生图提供方 modelscope(魔搭)或 gemini(可选,默认自动选择);--theme 排版主题 default(经典)或 magazine(杂志风,可选,默认 default)。
其他脚本:markdown-to-sections.mjs 将 Markdown 转为 Section 数据结构,支持 H1-H3 标题、段落、有序/无序列表、引用块、代码块、分隔线、图片、视频、表格,默认主题下 H2 自动包装为带蓝色左边框的卡片样式,杂志风主题下 H2 直接输出为 heading;wechat-renderer.mjs 将 Section 数据渲染为微信兼容 HTML,所有样式纯内联,代码块为 macOS 风格;modelscope-imagegen.mjs 调用 Qwen-Image-2512 模型,国内直连、免费、支持中英文 prompt,默认输出 1024x576(16:9 封面比例);gemini-imagegen.mjs 调用 Gemini Pro API 生成封面图,需代理配置。
标题生成规则
核心原则:字数 20-27 字最佳,不超过 32 字;勾起好奇心;明确利益;简洁直接;包含关键词便于搜索收录;禁止 emoji。标题类型模板包括数字+结果型(推荐)、痛点+解决方案型、对比+选择型、经验分享型、疑问+答案型,各附示例格式。
生图功能
支持两种生图提供方,优先级:魔搭 > Gemini。
魔搭 Qwen-Image-2512(推荐):国内可直接访问、免费、生成速度快、中文理解能力强。配置 MODELSCOPE_API_KEY 即可使用,Token 获取地址:https://modelscope.cn/my/myaccesstoken。示例:
import { generateImage } from './modelscope-imagegen.mjs'; await generateImage(prompt, '/tmp/cover.png', MODELSCOPE_API_KEY, { model: 'Qwen/Qwen-Image-2512', size: '1024x576', // 16:9 封面比例 timeout: 120000 });
Gemini Pro(备选):需代理访问,适合海外环境。配置 GEMINI_API_KEY,可选 GEMINI_PRO_PROXY。示例:
import { generateImage } from './gemini-imagegen.mjs'; await generateImage(prompt, '/tmp/cover.png', GEMINI_API_KEY, { model: 'gemini-3-pro-image-preview', timeout: 600000 });
选择逻辑:若配置了 MODELSCOPE_API_KEY,默认使用魔搭;若只配置了 GEMINI_API_KEY,使用 Gemini;可通过 --image-provider modelscope|gemini 强制指定;魔搭失败时自动回退到 Gemini(如果可用)。封面要求:横版 16:9、主题相关、现代扁平设计风格、所有文字必须使用中文。
排版与视频支持
提供 default 与 magazine 两套主题;代码块采用 macOS 风格(红黄绿三圆点 + 横向滚动),并给出微信兼容的关键实现要点(三圆点标签间不能有空白字符、header 用 line-height:0;font-size:0、每行用 <p white-space:nowrap>、空格转 等)。
视频支持:Markdown 中可用与图片相同的 语法插入视频,解析器按扩展名区分,支持 .mp4、.mov、.avi、.wmv、.webm。发布时脚本自动上传本地视频到微信永久素材库,并在文章中放置显示视频标题和 media_id 的占位卡片;发布后需在公众号后台手动删除占位卡片并从素材库插入视频。
编程接口示例:
const mediaId = await uploadVideo('/path/to/video.mp4', '视频标题', '视频简介');
限制与注意事项
- 微信公众号视频素材大小上限 20MB;推荐 MP4;视频上传为永久素材,占用素材库配额。
- 微信 API 不支持在文章内容中嵌入视频,视频需在后台手动插入。
- 标题禁止 emoji。
- 内容合规:禁止翻墙、梯子、VPN、科学上网等敏感词,禁止政治敏感内容及违反国内法律法规的内容。
- 图片必须用 Pro 模型(flash 中文效果差),Pro 模型后台运行耗时 1-3 分钟。
- 错误处理:Token 过期自动重试;图片上传失败回退到默认封面;网络错误重试 3 次;详细的错误日志。
分享与依赖
可通过 ClawHub 分享:创建 GitHub 仓库、推送代码、在 ClawHub 上发布,其他用户可通过 clawhub install wechat-publisher 安装。依赖 Node.js 18+、Gemini API Key(用于生图)、微信公众号 AppID 和 AppSecret。License:MIT。