Skip to content

微信公众号文章运营 Skill(v4 · 配图前置版)

基于历次实战复盘(v1 初版 → v2 系统化 → v3 浅色主题 → v4 配图前置),核心优化:

  • 配图调研前置:选题调研阶段就并行搜索 Pexels/Pixabay 配图,避免二次改文
  • 一次推送:写文章时即确定所有图片方案,一次性插入 ![配图] 标记
  • 搜索提示词模板化:每个环节的搜索词都标准化,直接复制使用

前置条件

环境变量说明获取方式
WX_APPID微信公众号 AppID公众号后台→开发→基本配置
WX_APPSECRET微信公众号 AppSecret同上
CNB_TOKENCNB API Token(可选)cnb.cool→个人设置→访问令牌

微信 IP 白名单

⚠️ 如果推送时报 40164: invalid ip,将报错中的 IP 加入白名单: 路径:公众号后台 → 设置与开发 → 基本配置 → IP 白名单


完整工作流(6 步,一步到位)

第一步:选题调研(并行 3 路搜索 + 配图调研)

1.1 了解账号定位

搜索提示词 → web: "微信公众号'{公众号名}' 内容定位 风格"

确认账号已有文章方向,确保新选题是延续或升级

1.2 选题搜索 + 写作技巧(并行 3 路)

text
# 路 1:行业热点
搜索提示词 → web: "AI人工智能 {当前月} 最新热点新闻趋势"
搜索提示词 → web: "{选题关键词} {当前年} 最新动态 行业分析"

# 路 2:爆款写作技巧
搜索提示词 → web: "微信公众号爆款文章 写作技巧 标题公式 {当前年}"
搜索提示词 → web: "公众号10万+文章 拆解 方法论"

# 路 3:配图灵感
搜索提示词 → web: "秀米编辑器 公众号排版 引导关注 {当前年}"

1.3 深度调研(sub-agent 并行)

选题确定后,拆成 2-3 个子任务并行调研:

text
# 子代理 1:选题核心内容(research 类型)
subagent_spawn(type=research): "搜索并整理以下信息:
1. {事件/政策/产品} 的核心细节、关键数据、时间线
2. {公司A}的相关动态、财报数据、行业排名
3. 行业专家观点、市场分析

要求:每条信息标注来源,数据精确到具体数字(不要用'约'、'近'等模糊词)"

# 子代理 2:写作技巧参考
subagent_spawn(type=research): "搜索并整理:
1. 公众号爆款标题公式(数字+冲突+悬念等模式),给出3个示例
2. 公众号文章开头钩子写法(数据冲击、反常识、场景共鸣3种),各给1个示例
3. 公众号文章结构设计方法论(建议的四段式比例和写法)"

# 子代理 3:配图素材搜索 ← v4 新增:提前搜索,避免事后补图
subagent_spawn(type=research): "搜索免费可商用配图素材,适配以下文章主题:
主题:{文章主题简述}

请同时在 Pexels (pexels.com) 和 Pixabay (pixabay.com) 搜索以下分类图片:
1. AI/科技/机器人类 — 文章开头用(关键词:AI, artificial intelligence, robot, technology)
2. 数据/图表/降价类 — 数据展示用(关键词:chart, data, price, discount, business)
3. 竞争/策略/博弈类 — 行业分析用(关键词:competition, strategy, chess, market)
4. 洞察/未来/灯泡类 — 结论启示用(关键词:lightbulb, insight, future, innovation)

要求:
- 优先找白色/浅色背景、留白多的图片(适配微信白底阅读环境)
- 检查 Pexels License 确保免署名可商用
- 每类推荐 1-2 张最佳选择,返回直接下载链接
- 标注图片风格(极简/科技/矢量等),方便统一搭配
- 优先使用 Pexels(URL 稳定),Pixabay 作为备选"

1.4 选题标准

  • 与账号已有内容形成延续或升级
  • 数据支撑(融资额、用户数、增长率等硬数字)
  • 对读者有实操启示(不只新闻搬运,给出解读)

1.5 配图方案确定(v4 关键步骤)

在写文章之前,先确定配图方案:

text
封面:{标题/副标题} → outputs/cover.jpg
数据图1(柱状图/卡片/时间线):{描述数据内容}
数据图2(可选):{描述数据内容}
实景插画1(Pexels/Pixabay):{用于文章哪个章节,什么风格}
实景插画2(Pexels/Pixabay):{用于文章哪个章节,什么风格}
实景插画3(可选):{用于文章哪个章节,什么风格}

推荐配图分布密度:1500字文章配4-5张图(2张数据图 + 2-3张实景插画),每300-400字有一处视觉停顿。

1.6 文章结构设计

标准四段式(1500-1800 字):

结构作用占比
开头钩子数据冲击 / 反常识 / 场景共鸣10%
主体 2-3 节层层递进:现象→原因→影响→未来55%
读者启示「对我们意味着什么?」3 点总结20%
CTA 收尾点赞/在看/关注 + 下期预告15%

第二步:撰写文章(含配图标记)

2.1 写作规范

  • 口语化,但信息密度高(每段至少含一个数据点或观点)
  • 忌词:当然、值得注意的是、总的来说、总而言之
  • 标题 ≤ 28 字,用「」引号突出关键词
  • 小标题用"一、二、三"编号 + 破折号式副标题

2.2 Markdown 模板(含配图标记占位)

markdown
# 主标题:核心冲突 + 悬念(≤ 28 字)

> 开头引用块:3 句内制造冲击感(可用数据冲击、反常识、场景共鸣)

---

![插画:robot]

![配图]   ← 实景插画1(Pexels/Pixabay AI科技类)

## 一、小标题(现象层:发生了什么?)

正文 + 数据表格(可选)

![配图]   ← 数据图1(柱状图/卡片图)

---

![插画:chart]

## 二、小标题(原因/影响层:为什么?意味着什么?)

正文

![配图]   ← 实景插画2(竞争/策略类,如象棋图)

---

![插画:chip]

## 三、小标题(行业影响层)

正文

![配图]   ← 数据图2(可选)

---

![插画:lamp]

![配图]   ← 实景插画3(洞察/未来类,如灯泡图)

## 四、写在最后:对我们意味着什么?

三点判断...

---

![插画:sparkle]

🔥 **下周看点**
- 预告 1
- 预告 2

---

*CTA 收尾:点赞/在看/转发/关注*
*关注「鸿爪派」,不追风口,只拆底层逻辑。*

2.3 特殊标记

标记渲染效果用途
![配图]全宽图片(从 --images 参数注入)数据图表、实景插画
![插画:xxx]居中蓝色 SVG 图标章节装饰、视觉节奏

插画图标速查(15 个内置 SVG):

  • 基础图标(金色):fire / like / star / bell / section / dot / qr
  • 插画图标(蓝色):robot / shield / chart / globe / lamp / chip / doc / sparkle

第三步:生成配图(一次性完成)

⚠️ 关键原则:所有配图在写文章时就确定方案,一次性生成、上传,避免二次修改。

3.1 下载实景插画(Pexels/Pixabay)

在第一步就确定好素材,直接下载:

bash
mkdir -p outputs/illustrations
curl -sL -o outputs/illustrations/插图1.jpg "Pexels/Pixabay 下载链接"
curl -sL -o outputs/illustrations/插图2.jpg "下载链接"

3.2 封面图(必须 · 900×383)

bash
python3 skills/wechat-article/gen_image.py cover \
  --title "主标题(≤12字)" \
  --subtitle "副标题(15字以内)" \
  -o outputs/cover.jpg

3.3 正文数据配图(建议 2 张)

⚠️ 数据必须用 JSON 数组格式,不能用对象:

bash
# ✅ 正确:数组格式
python3 gen_image.py bar --title "标题" \
  --data '[[\"名称\",数值,\"#色号\",\"标签\"],...]' \
  -o outputs/bar.png

python3 gen_image.py cards --title "标题" \
  --data '[[\"标题\",\"描述\",\"#色号\"],...]' \
  -o outputs/cards.png

python3 gen_image.py timeline --title "标题" \
  --data '[[\"日期\",\"标签\",\"描述\",\"#色号\"],...]' \
  -o outputs/timeline.png

# ❌ 错误:对象格式会导致 TypeError/ValueError
# --data '[{\"name\":\"...\",\"val\":...}]'

四种配图类型:

类型数据格式适用场景
covertitle + subtitle封面 900×383
bar[[\"名称\",数值,\"#色号\",\"标签\"]]对比数据
cards[[\"标题\",\"描述\",\"#色号\"]]并列要点
timeline[[\"日期\",\"标签\",\"描述\",\"#色号\"]]时间递进

3.4 一次性上传所有配图

先获取 Token,然后批量上传:

bash
# 获取 token
TOKEN=$(curl -s "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$WX_APPID&secret=$WX_APPSECRET" | python3 -c "import sys,json;print(json.load(sys.stdin)['access_token'])")

# 上传封面(永久素材,返回 thumb_media_id)
THUMB=$(curl -s -F media=@outputs/cover.jpg \
  "https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=$TOKEN&type=thumb" \
  | python3 -c "import sys,json;print(json.load(sys.stdin)['media_id'])")
echo "thumb_media_id: $THUMB"

# 上传正文配图(media/uploadimg,返回 URL)
# 注意:正文配图用 media/uploadimg,不是 material/add_material!
IMG1_URL=$(curl -s -F media=@outputs/illustrations/插图1.jpg \
  "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=$TOKEN" \
  | python3 -c "import sys,json;print(json.load(sys.stdin)['url'])")

IMG2_URL=$(curl -s -F media=@outputs/bar.png \
  "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=$TOKEN" \
  | python3 -c "import sys,json;print(json.load(sys.stdin)['url'])")

# ... 继续上传所有配图

# 拼接 images 字符串(与 article.md 中 ![配图] 顺序一致)
IMAGES="${IMG1_URL},${IMG2_URL},${IMG3_URL}"

第四步:Markdown → 微信 HTML

详见 push.js 的参数说明。push.js 自动处理:

  • 品牌头标渲染(🔥 鸿爪派 🔥)
  • SVG 插画图标渲染(![插画:xxx] → 蓝色居中 SVG)
  • 配图注入(![配图]--images 中的 URL)
  • 数据表格、引用块、列表等微信 HTML 转换
  • 品牌尾标渲染

配色方案(浅色主题 · 微信白底适配)

默认浅色主题(适合微信白色阅读背景),无需额外设置:

色号用途环境变量
#f8fafc底色(品牌头标等区域)WX_COLOR_BG
#1e293b正文/标题文字WX_COLOR_TEXT
#64748b辅助文字WX_COLOR_MUTED
#d97706品牌金色(强调、头标火焰)WX_COLOR_GOLD
#2563eb插画蓝色(章节装饰)WX_COLOR_ACCENT
#7c3aed强调紫色WX_COLOR_PURPLE
#f1f5f9卡片底色WX_COLOR_CARD
#94a3b8暗淡灰WX_COLOR_DIM

第五步:推送草稿箱(一次性推送)

bash
cd /sandbox/workspace
export WX_APPID="wx..." WX_APPSECRET="..."

node skills/wechat-article/push.js outputs/article.md \
  --brand "鸿爪派" \
  --slogan "不追风口,只拆底层逻辑" \
  --author "鸿爪派" \
  --digest "摘要(54字以内)" \
  --images "${IMG1_URL},${IMG2_URL},${IMG3_URL}" \
  --thumb "${THUMB_MEDIA_ID}"

第六步:验证草稿

bash
TOKEN=$(curl -s "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$WX_APPID&secret=$WX_APPSECRET" | python3 -c "import sys,json;print(json.load(sys.stdin)['access_token'])")
curl -s -X POST "https://api.weixin.qq.com/cgi-bin/draft/batchget?access_token=$TOKEN" \
  -H "Content-Type: application/json" -d '{"offset":0,"count":1}' | python3 -c "
import sys, json
d = json.load(sys.stdin)
items = d.get('item', [])
if not items:
    print('❌ 没有草稿')
    sys.exit(1)
n = items[0]['content']['news_item'][0]
c = n['content']
print(f'✅ 标题: {n[\"title\"]}')
print(f'✅ 作者: {n[\"author\"]}')
print(f'✅ 摘要: {n[\"digest\"]}')
print(f'✅ 图片数: {c.count(chr(60)+\"img \")}')
print(f'✅ SVG数: {c.count(chr(60)+\"svg\")}')
print(f'✅ 品牌头标: {\"鸿爪派\" in c}')
print(f'✅ 暗色残留: {c.count(\"#0f172a\")}(应为0)')
"

验证清单:

  • [ ] 标题、作者、摘要正确
  • [ ] 图片数量 = 封面+正文配图(≥ 3 张)
  • [ ] SVG 图标数量 ≥ 8(基础图标 + 插画图标)
  • [ ] 品牌头标和尾标存在
  • [ ] 暗色码 #0f172a 残留为 0

常见踩坑

症状原因解决
文字看不见浅色文字在微信白底上对比度太低默认浅色主题已解决;或设 WX_COLOR_TEXT="#1e293b"
gen_image.py TypeErrordata 用了对象格式 [{...}]改用数组格式 [[...]]
push 后无图片正文配图用了 material/add_material改用 media/uploadimg
40164: invalid ip沙箱 IP 不在白名单公众号后台添加 IP
插画图标不显示图标名称拼写错误检查 ![插画:xxx] 中名称是否在 15 个图标列表内
配图数不匹配![配图] 标记数 ≠ --images URL 数文章中的标记数量和 --images 参数数量必须一致
二次推送验证脚本失败草稿箱为空或返回格式不符先确认 push 成功,再用指定的验证命令

快速开始(一次性全流程速查)

bash
# 1. 设置环境变量
export WX_APPID="wx..." WX_APPSECRET="..."

# 2. 搜索配图素材(第一步调研时同步完成)
#    → Pexels/Pixabay 下载到 outputs/illustrations/

# 3. 生成封面 + 数据图
python3 skills/wechat-article/gen_image.py cover --title "..." --subtitle "..." -o outputs/cover.jpg
python3 skills/wechat-article/gen_image.py bar --title "..." --data '[[...]]' -o outputs/bar.png

# 4. 上传所有配图(一次性)
#    获取 TOKEN → 上传封面得 thumb_media_id → 上传正文配图得 URL

# 5. 写文章(Markdown,含所有 ![配图] 和 ![插画:xxx] 标记)

# 6. 推送(一次性)
node skills/wechat-article/push.js outputs/article.md \
  --brand "鸿爪派" --slogan "不追风口,只拆底层逻辑" \
  --author "鸿爪派" --digest "..." \
  --images "url1,url2,url3,url4,url5" \
  --thumb "thumb_media_id"

# 7. 验证
#    运行第六步中的验证脚本

由云锦鸿维护