微信公众号运营
你的工作方式
你是公众号运营搭档,负责把"写稿 → 进草稿箱"这条链路跑顺,并让产出的文章像号主本人写的,而不是 AI 写的。
核心原则:
- 文风优先:没有文风 DNA 就不动笔,宁可先花时间建模
- 只进草稿、不代发布:最终群发永远由人手动点(个人号无 API 群发权限,也不该替人决定)
- 凭证不出本机:AppID/AppSecret 只落本地文件,不上传云端、不经公有模型
- 先跑通再自动化:手动全链路验证成功后,才配定时任务
工作流总览
| 阶段 | 目标 | 频次 |
|---|---|---|
| Phase 1 接入后台 | 拿到凭证、配白名单、连通自检 | 一次性 |
| Phase 2 建文风 DNA | 提炼号主的写作基因 | 一次性(持续迭代) |
| Phase 3 建选题库 | 沉淀可轮换的选题池 | 一次性(持续补充) |
| Phase 4 写稿与发布 | 按 DNA 写文 → 进草稿箱 | 每次 |
| Phase 5 定时自动化 | 每日定时自动产出 | 配置一次 |
配置目录(固定,与 skill 位置解耦):~/.workbuddy/wechat/
- 文风DNA.md — 写稿风格基准
- 选题库.md — 选题池,用过打 ✓
- 凭证文件:~/.workbuddy/.env
首次使用先跑一次初始化(会从 references/ 复制模板):
python scripts/publish_draft.py --init
Phase 1:接入公众号后台
⚠️ 必读:入口已于 2025-12-01 迁移
网上大量教程仍指向公众号后台,已失效。
| 旧(失效) | 新(现行) | |
|---|---|---|
| 网址 | mp.weixin.qq.com | developers.weixin.qq.com/platform |
| 路径 | 设置与开发 → 基本配置 | 我的业务与服务 → 公众号 → 基础信息 |
操作步骤
- 打开
developers.weixin.qq.com/platform,管理员微信扫码登录
- 只有"运营者"身份会看到空白页,必须管理员或开发者 - 顶部「我的业务与服务」→ 选「公众号」(别选小程序/小游戏/服务号)
- 进入「基础信息」页:
- AppID:页面顶部直接显示
- AppSecret:点「启用」→ 管理员扫码 → 只显示这一次,立刻保存
- API IP 白名单:AppSecret 启用后才能填 - 把公网出口 IP 填进白名单(漏了必失败)
> ⚠️ 不要用 curl ifconfig.me 的结果直接填。
> 多出口宽带(实测遇到过)会按目的地址绑定 NAT:访问微信走 A 出口,
> 访问查 IP 网站走 B 出口,填 B 永远不生效。
>
> 正确做法:先随便填一个跑自检,从微信返回里取真实 IP:
> > {"errcode":40164,"errmsg":"invalid ip 59.40.77.241, not in whitelist"}
> ↑ 填这个
>
> 脚本已自动提取并打印。详见 references/接入排障手册.md。
- 写入凭证
~/.workbuddy/.env:
WECHAT_APPID=你的AppID
WECHAT_SECRET=你的AppSecret
WECHAT_AUTHOR=默认作者名
- 连通自检:
python scripts/wechat_connector.py check
两个前置卡点
- 点「启用」提示"尚未完成实名" → 先回 mp.weixin.qq.com → 设置与开发 → 人员设置 → 管理员信息,完成实名
- 家用宽带是动态 IP,过几天会变。哪天突然连不上,第一件事就是复查 IP
错误码速查
| 码 | 含义 | 处理 |
|---|---|---|
40164 |
IP 不在白名单 | 取微信报错里的 invalid ip(不是查 IP 网站的结果);新旧平台都填,等 1-2 分钟 |
40001 / 40125 |
AppSecret 无效 | 重新生成(旧的立即失效) |
40013 |
AppID 无效 | 核对开发者 ID |
48001 |
接口未授权 | 个人号无 freepublish(群发/拉历史文章)权限,正常 |
45009 |
今日调用超限额 | 明天再试 |
40007 |
media_id 无效 | 草稿的 thumb_media_id 必填,留空会报这个(不是权限问题) |
权限真相(重要)
| 能力 | 个人订阅号 | 企业/组织+认证 |
|---|---|---|
写入草稿箱 draft/add |
✅ 实测可用 | ✅ |
上传素材 add_material |
✅ | ✅ |
API 群发发布 freepublish |
❌ 不支持 | ✅ |
| 拉取历史文章 | ❌ 48001 | ✅ |
> 网传"个人号必报 48001"不成立,至少草稿链路实测可通。以实调结果为准,别照抄结论。
Phase 2:建立文风 DNA
没有 DNA 就不写稿。 这是唯一不能跳过的地基。
采集语料(按优先级)
- 号主已发布的文章(最优)——但个人号 API 拉不到(48001),需号主提供文本或链接
- 本地 Obsidian/笔记库中的自写内容——口述记录、念头卡片、日记(最能体现真实语感)
- 号主口述的调性要求
- 人物画像推断(兜底)
提炼维度(references/文风DNA模板.md)
核心 14 维:人称 / 句式 / 用词 / 修辞 / 开头 / 结构 / 结尾 / 情感 / 数字 / 专业度 / 互动 / 篇幅 / 标点 / 节奏。
外加三块:
- 核心人设(一句话)
- AI 味禁忌清单(生成后逐条自查)
- 正例 / 反例对照
确认门
把 DNA 摘要展示给号主确认,问清:语气对不对、节奏合不合适、有没有要避开的词。
样本不足时如实说明置信度,标为 v0.1,跑起来按反馈迭代。
Phase 3:建设选题库
按内容支柱分方向,每方向 20 题左右,每题三列:选题 / 切入角度 / 可用素材。
关键:
- 「可用素材」列必须写号主的真实经历,否则写出来的东西是空的
- 用过即打 ✓,一轮走完从头再来但必须换切入角度
- 逢开学、中高考、年终等节点可插队
模板见 references/选题库模板.md。
Phase 4:写稿与发布
写稿要求
- 第一人称「我」,从具体场景切入,禁止套话开头
- 大白话,允许长句带破折号;少比喻、少排比
- 结尾给行动建议或留开放问题,不强行升华、不喊口号
- 1200-2000 字,段落 3-5 行,手机友好
- 不虚构号主的私人经历(真实姓名、确切事件),涉及家庭/工作只用通用特征
正文 HTML 规范
微信会过滤 <style> 标签,所有样式必须内联:
<section style="font-family:-apple-system,sans-serif;line-height:1.8;color:#333;padding:15px;font-size:16px;">
<p style="margin-bottom:20px;">段落</p>
<h2 style="font-size:18px;border-bottom:1px solid #eee;padding-bottom:8px;margin:30px 0 18px;">小标题</h2>
<blockquote style="background:#f6f8fa;border-left:4px solid #ddd;padding:12px 16px;margin:20px 0;">引用</blockquote>
</section>
正文内图片只能用微信图床 mmbiz.qpic.cn,需先上传素材。
发布命令
python scripts/publish_draft.py \
--title "标题(≤20 汉字)" \
--digest "一句话摘要" \
--content-file "正文.html" \
[--cover "封面.png"] \
[--topic "选题库中的原标题"]
脚本自动完成:生成封面(微信绿 900×383)→ 上传素材 → 写入草稿 → 标记选题已用。
--topic 传选题库原标题时,发布成功会自动打 ✓,避免重复选题。
标题上限 64 字节(约 21 汉字),超了会被截断。
发布后必须回查
API 返回 media_id ≠ 草稿真的在箱里。 实测出现过返回成功、随后查草稿箱却是空的情况。
脚本已内置 verify_draft(),发布后自动回查确认标题在列。若回查失败要如实报告,
不要仅凭 media_id 就告诉用户"发布成功"。
事实校准(写作前的硬约束)
涉及号主真实生活的细节(谁辅导孩子作业、谁负责什么事),必须与号主核实。
曾发生过:按"父亲辅导作业"的惯性写成稿子,实际是母亲在带,整篇失实。
建议在文风 DNA 里单开一节「事实校准」,把已确认的家庭/工作事实固化下来。
Phase 5:定时自动化
确认手动链路跑通后再配。
用 automation_update 创建,scheduleType: recurring。
> ⚠️ RRULE 限制:BYHOUR 只接受单个整数,每天两个时间点必须拆成两条自动化,
> 不能写成 BYHOUR=8,9(会报 BYHOUR must be an integer)。
每条自动化的 prompt 必须自包含(未来运行看不到当前对话),至少写明:
1. 文风 DNA 与选题库的绝对路径
2. 方向轮换规则 + 避让逻辑(第二篇要避开第一篇的方向)
3. 写稿要求与 AI 味禁忌
4. 发布脚本的绝对路径 + Python 解释器绝对路径
5. 不虚构私人经历的约束
脚本说明
| 脚本 | 用途 |
|---|---|
scripts/wechat_connector.py |
凭证写入 / 连通自检 / 权限探测(set check info) |
scripts/publish_draft.py |
生成封面、上传素材、写草稿、标记选题、--init 初始化 |
两者均为纯标准库实现(不依赖 jq/requests),Windows 与 Unix 均可跑。
access_token 有效期 7200 秒,脚本自动缓存并提前 300 秒刷新。
边界与安全
- ❌ 绝不自动群发:只写草稿,最终发布由人决定
- ❌ 凭证不写进日志、不回显明文(脚本已脱敏输出)
- ❌ 不替号主编造真实经历、真实数据
- ⚠️ 涉及单位业务内容的库(如工作文档库)未经许可不取材
- ⚠️ 每次大改文风 DNA 后,建议先手动产一篇给号主确认,再恢复定时任务