WeChat Publisher Skill

SkillDev tools

Say goodbye to WeChat Official Account formatting issues! Publish articles with a single command, 100% style retention. Supports three color scheme templates with one-click switching between cyan/orange and purple. Includes a complete workflow for auto-publishing to the WeChat drafts box, with Chine

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the WeChat Publisher Skill skill

What this skill tells your AI

The instructions your AI receives, as published by theneoai/awesome-skills in skills/persona/content/wechat-publisher/SKILL.md and read by ahel’s review.

版本历史

版本日期更新内容
v1.4.02026-04-06初版发布
v1.5.02026-04-16新增 API 发布实战经验、中文字体支持、IP 白名单解决方案
v1.6.02026-04-16移除硬编码 AppID,安全去敏
v1.7.02026-04-16新增 AI Agent 文章创作经验、多模型并行工作流

一、微信公众号 API 发布实战经验(2026-04-16)

1.1 IP 白名单问题

问题描述

  • 妙搭云电脑使用动态 IP(阿里云),IP 会变化
  • 微信公众号 API 调用需要 IP 在白名单中
  • 服务器直接调用 API 会失败:invalid ip 39.102.54.62, not in whitelist

解决方案

方案 A:通过浏览器获取 access_token(推荐)

# 在浏览器中打开以下 URL(替换 appid 和 secret):
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的AppID&secret=你的AppSecret

# 浏览器会返回 JSON 格式的 access_token
# 复制返回结果中的 access_token 值

方案 B:配置 IP 白名单

  • 在公众号后台添加可能的 IP 地址
  • 注意:服务器 IP 可能是动态的,需要添加多个可能的 IP
  • 妙搭云电脑当前 IP:39.102.54.6239.97.255.102(可能变化)

1.2 封面图生成(中文支持)

问题描述

  • 服务器默认字体不支持中文,导致生成的封面图文字是方块乱码
  • 需要使用支持中文的字体

解决方案

# 1. 先检查可用中文字体
fc-list :lang=zh

# 2. 推荐使用 Noto Sans CJK 字体
# 字体路径:/usr/share/fonts/opentype/noto/NotoSansCJK-Black.ttc

# 3. Python PIL 示例代码
from PIL import Image, ImageDraw, ImageFont

img = Image.new('RGB', (900, 383), color='#06b6d4')
draw = ImageDraw.Draw(img)
font = ImageFont.truetype('/usr/share/fonts/opentype/noto/NotoSansCJK-Black.ttc', 56)
draw.text((450, 191), '标题文字', fill='white', anchor='mm', font=font)
img.save('cover.png')

1.3 草稿箱发布完整流程

步骤 1:获取 access_token(通过浏览器)

1. 浏览器打开:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=你的AppID&secret=你的AppSecret
2. 复制返回的 access_token(有效期 2 小时)

步骤 2:上传封面图获取 media_id

# 使用 curl 上传图片
curl -s "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=你的TOKEN&type=thumb" \
  -F "media=@cover.png;type=image/png"

# 返回示例:
# {media_id":"vMrq-mSP3SIFyZbOzk_6TkpzzT22KaGPI6r5tTivqFzaskMCnN_U5F4-54CQ38VU",...}

步骤 3:创建草稿箱文章

curl -s "https://api.weixin.qq.com/cgi-bin/draft/add?access_token=你的TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "articles": [{
      "title": "文章标题",
      "author": "作者",
      "content": "<p>文章内容(HTML格式)</p>",
      "digest": "摘要",
      "thumb_media_id": "封面图media_id",
      "need_open_comment": 0,
      "only_fans_can_read": 0
    }]
  }'

1.4 常见错误处理

错误码错误信息解决方案
40164invalid ip not in whitelist通过浏览器获取 token,或添加 IP 到白名单
40007invalid media_id必须先上传封面图获取 media_id,不能为空
40137invalid image format图片格式问题,确保是 PNG/JPG 格式

二、AI Agent 文章创作工作流(2026-04-16 新增)

2.1 多模型并行搜索策略

核心思路:使用多个 AI 模型并行搜索,提高信息覆盖度和时效性

# 并行搜索多个主题
web_search "Agent AI 人工智能 2026年4月 最新技术 新闻"
web_search "OpenClaw GitHub 2026年4月 AI Agent 开源"
web_search "Claude Anthropic 2026年4月 最新动态"

搜索结果整合

  • 从多个搜索结果中提取关键信息
  • 交叉验证信息的准确性
  • 优先选择一手信息来源(官方公告、技术博客)

2.2 文章结构设计

深度分析文章标准结构

一、事件/现象级概述
   - 核心事件回顾
   - 数据支撑(用户量、下载量、市场占有率等)

二、技术原理深度剖析
   - 核心技术解读
   - 与竞品的技术对比

三、行业影响分析
   - 对既有格局的冲击
   - 新机会点识别

四、实操指南/应用场景
   - 普通人如何应对
   - 企业如何布局

五、未来展望
   - 趋势判断
   - 行动建议

2.3 爆款标题公式

公式:年份 + 核心事件 + 悬念/情绪词

优秀标题示例

  • "2026 AI Agent 爆发:从"回答问题"到"完成任务"的跨越"
  • "Claude 突然要查身份证了!AI 实名制时代正式来临"
  • "31万Star!2026最火开源AI神器深度解析"

2.4 长文创作要点

8000字深度文章要点

  • 每个核心观点至少 500 字的详细阐述
  • 引用真实数据和案例
  • 包含对比表格和示意图(用 HTML/CSS 模拟)
  • 提供可操作的建议
  • 结尾有金句升华主题

2.5 多模型协同工作流

推荐工具组合

场景推荐模型理由
资讯搜索MiniMax M2.7时效性强,多语言搜索
深度分析GLM-5.1长文本理解能力强
内容创作Miaoda Flash速度快,适合初稿
标题优化Qwen3.6中文语感好

三、微信公众号文章格式标准

3.1 格式保留关键

微信公众号文章格式保留关键:

  • ❌ 微信编辑器过滤 <style> 标签
  • ❌ 微信编辑器过滤 class 属性
  • ✅ 微信编辑器保留内联样式 style="..."
  • ✅ 微信编辑器保留基础 HTML 标签

列表格式关键:

  • ❌ 不用 <ul>/<li> 列表(会产生多余黑点)
  • ✅ 用 + 普通 <p> 段落

3.2 完整模板结构

<!DOCTYPE html>
<html>
<body style="font-family: -apple-system, 'PingFang SC', 'Microsoft YaHei', sans-serif; font-size: 15px; line-height: 1.6; color: #333; max-width: 640px; margin: 0 auto; padding: 20px;">

<!-- 标题 -->
<h1 style="font-size: 24px; font-weight: bold; color: #1a1a1a; margin-bottom: 8px;">文章标题</h1>
<p style="color: #999; font-size: 13px; margin-bottom: 20px;">日期 · 分类</p>

<!-- 标签(圆角胶囊) -->
<span style="display: inline-block; background: #e0f7fa; color: #06b6d4; padding: 2px 10px; border-radius: 20px; font-size: 13px; margin-right: 6px;">标签1</span>

<!-- 引言(青色左边框) -->
<p style="font-size: 16px; color: #555; margin: 20px 0; border-left: 4px solid #06b6d4; padding-left: 14px;">引言内容</p>

<!-- 二级标题 -->
<h2 style="font-size: 18px; font-weight: bold; color: #222; margin: 28px 0 14px; border-left: 4px solid #06b6d4; padding-left: 10px;">标题</h2>

<!-- 列表(用 • 符号,不用 <ul>/<li>) -->
<p style="margin: 8px 0; color: #444;">• 列表项1</p>
<p style="margin: 8px 0; color: #444;">• 列表项2</p>

<!-- 引用块 -->
<div style="background: #f0f9fa; border-left: 4px solid #06b6d4; padding: 12px 14px; margin: 16px 0; font-style: italic; color: #555;">
<p style="font-style: normal; color: #333;">引用内容</p>
</div>

<!-- 卡片(浅色背景+圆角+边框) -->
<div style="background: #f8feff; border-radius: 10px; padding: 14px; margin: 14px 0; border: 1px solid #cce8f0;">
<p style="font-weight: bold; color: #0891b2; font-size: 14px;">卡片标题</p>
<p style="color: #555; font-size: 13px;">卡片内容</p>
</div>

<!-- 警告块 -->
<div style="background: #fff8e1; border-left: 4px solid #ffc107; padding: 10px 14px; margin: 12px 0; font-size: 14px; color: #795548;">
<p style="margin: 0;">⚠️ 警告内容</p>
</div>

<!-- 双栏对比 -->
<div style="display: flex; gap: 12px; margin: 12px 0;">
<div style="flex: 1; background: #f8feff; border-radius: 10px; padding: 14px; border: 1px solid #cce8f0;">
<p style="font-weight: bold; color: #0891b2;">左栏标题</p>
<p style="color: #555; font-size: 12px;">左栏内容</p>
</div>
<div style="flex: 1; background: #fff5f5; border-radius: 10px; padding: 14px; border: 1px solid #ffcdd2;">
<p style="font-weight: bold; color: #c62828;">右栏标题</p>
<p style="color: #555; font-size: 12px;">右栏内容</p>
</div>
</div>

<!-- 签名 -->
<div style="text-align: center; color: #999; font-size: 13px; margin-top: 30px; padding-top: 16px; border-top: 1px solid #eee;">
<p>关注我,持续分享 👇</p>
<p style="color: #07c160; margin-top: 8px;">公众号名称</p>
</div>

</body>
</html>

四、配置(首次使用)

安全提示:凭证通过环境变量传递,不要硬编码!

export WECHAT_APP_ID="你的AppID"
export WECHAT_APP_SECRET="你的AppSecret"

获取方式:微信公众平台后台 → 设置与开发 → 基本配置


五、配色方案(固定风格)

用途颜色
主色(标题、标签、边框)#06b6d4(青色)
标题文字#1a1a1a
正文文字#444
次要文字#888
引用/卡片背景#f0f9fa / #f8feff
警告背景#fff8e1
代码块背景#1a1a2e
代码文字#a5f3fc

六、文件结构

wechat-publisher/
├── SKILL.md           # 本文档(v1.7.0)
└── publish.py         # 发布脚本(可选)

七、注意事项

  1. 封面图:必须先上传到微信永久素材,获取 media_id,不能为空
  2. 列表:永远用 + <p>,不用 <ul>/<li>
  3. 行距:固定 1.6
  4. 段落间距:正文 margin: 12px 0,列表 margin: 8px 0
  5. 中文字体:生成封面图时使用 /usr/share/fonts/opentype/noto/NotoSansCJK-Black.ttc
  6. access_token 有效期:2 小时,注意及时刷新

八、实战案例(2026-04-16)

案例1:Claude 实名制文章

  • 主题:Anthropic Claude 身份验证政策深度分析
  • 字数:8000字
  • 结构:7大章节 + FAQ
  • 发布:成功上传至草稿箱

案例2:AI Agent 爆发文章

  • 主题:2026 AI Agent 爆发深度剖析
  • 字数:8000字
  • 结构:10大章节
  • 来源:基于多个 AI 模型并行搜索的最新资讯
  • 发布:成功上传至草稿箱

Signals

GitHub stars
161
Forks
34
Last commit
May 2026
Advanced
Catalog kind
skill
Gateway key
wechat-publisher
Source
github.com/theneoai/awesome-skills