我用扣子+Python实现了公众号全自动发文,完整过程分享
01
为什么要做这件事
说实话,做公众号的人,谁没被发文这件事折腾过?
以前我的流程是这样的:
前前后后至少半小时,而且每次排版效果还不一定统一。
更头疼的是,AI生成的内容直接发出去,要么像机器写的没人看,要么踩了违禁词的坑。
我就想,能不能把整个流程全部自动化?
从内容生成,到去AI味,到排版,再到发布草稿箱,全程不用我动手。
说干就干,用扣子(Coze)+ Python,花了几天时间,真的做出来了。
现在我的流程是这样的:
这篇文章就把完整过程分享给你,从思路到代码到踩坑,全是干货。
💡 如果你也想做公众号自动化,或者对AI工具有兴趣,建议收藏,相对用得上。
02
整体架构思路
先给大家看一张全景图,知道我们要做什么。
整个工作流分四层:
前列层:内容生成层
第二层:去AI味处理层
三层过滤:七步润色 → 公众号风格适配 → 违禁词检测
第三层:排版渲染层
第四层:发布层
四个环节串起来,就是一条完整的自动化流水线。
下面一步步讲具体怎么做。
03
前列步:搞定公众号API
这是挺基础的一步,也是坑挺多的一步。
### 3.1 开通接口能力
首先你得有一个公众号,订阅号或者服务号都行。
登录微信公众平台,在「开发」→「基本配置」里可以找到你的AppID和AppSecret。
这两个东西很重要,后面调用API都要用到。
### 3.2 IP白名单的坑
这是前列个大坑,很多人卡在这里。
微信公众平台为了安全,要求调用API的服务器IP必须在白名单里。
如果你是在本地电脑上调用,那没问题,把你家的IP加进去就行。
但如果你是用云端的Agent或者服务器,问题就来了——
比如我用扣子的云端环境,每次调用API的IP都不一样,根本没法加白名单。
解决方案:用一台固定IP的服务器做中转。
思路是这样的: 1. 云端Agent把文章内容发给你的服务器 2. 服务器用固定IP调用微信API 3. 服务器把结果返回给Agent
这样只需要把服务器的IP加到白名单里就行,一劳永逸。
### 3.3 服务器中转的具体实现
我用的是一台轻量应用服务器,Linux系统,配置不用太高,能跑Python就行。
核心代码很简单:
# 服务器端:接收内容,调用微信API
import requests
def get_access_token(appid, secret):
url = f"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}"
resp = requests.get(url)
return resp.json()['access_token']
def add_draft(access_token, title, content, author, thumb_media_id):
url = f"https://api.weixin.qq.com/cgi-bin/draft/add?access_token={access_token}"
data = {
"articles": [{
"title": title,
"author": author,
"content": content,
"thumb_media_id": thumb_media_id,
"need_open_comment": 1,
"only_fans_can_comment": 0
}]
}
resp = requests.post(url, json=data)
return resp.json()
然后在Agent端,用SSH连接服务器,把文章传过去执行。
我用的是paramiko库:
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('你的服务器IP', port=22, username='root', password='你的密码')
# 上传HTML文件
sftp = ssh.open_sftp()
sftp.put(local_html_path, remote_html_path)
sftp.close()
# 执行发布脚本
stdin, stdout, stderr = ssh.exec_command(f'python3 {remote_script_path}')
result = stdout.read().decode()
就这么简单,完美解决IP白名单问题。
💡 💡 小提示:服务器不用太好,挺便宜的轻量应用服务器就行,一年几十块钱。能跑Python、能联网就够了。
04
第二步:三层去AI味机制
很多人用AI写公众号文章,效果不好,要么像机器人,要么被平台限流。
核心原因就是——AI味太重。
我设计了一套三层去AI味机制,层层过滤,效果提升很明显。
### 前列层:七步专业润色
这一步是基础,解决"一听就是AI写的"这个问题。
具体做这七件事:
1. 拆分长句:AI喜欢写长句子,真人不会。把超过30个字的句子拆成短句。 2. 替换正式表达:把"总的来说"改成"总的来说",把"大家都知道"改成"大家都知道"。 3. 去除AI套话:删掉""""这种废话。 4. 增加语气词:适当加一些"说实话""讲真""你懂吧"之类的口语词。 5. 加入个人视角:多用"我觉得""我发现""在我看来",像真人在说话。 6. 具体化描述:把抽象的说法换成具体的例子。 7. 调整节奏:长短句结合,有快有慢,读着不累。
### 第二层:公众号风格适配
光像真人写的还不够,还要符合公众号的调性。
公众号文章有它自己的特点:
我做了这些处理:
**增加反问**:在合适的地方加"你说对不对?""是不是这个道理?"
**加入互动引导**:开头引入、结尾总结、引导评论
### 第三层:违禁词合规检测
这是保命的一步,不能省。
公众号有很多不能碰的词,碰了轻则限流重则封号。
我整理了几类高风险词:
**挺高级**:挺、前列、少有的、优质、出色、完善
**夸大承诺**:被动收入、财富增长、必赚、风险较低、包会
检测到之后,自动替换成安全的说法:
三层过完,一篇AI生成的文章,基本就跟真人写的没差了,而且安全合规。
05
第三步:自动化HTML排版
很多人可能不知道,公众号文章本质上就是HTML。
你在编辑器里看到的排版,背后都是HTML标签和CSS样式。
既然是HTML,那我们就可以用代码自动生成。
### 为什么不用现成的编辑器?
很简单,因为不自动化。
每次写完文章,你都要:
而且每次的效果还不一定完全一样。
用代码生成的好处是:
### 模板化思路
我的做法是这样的:
1. 先设计一套好看的排版样式(标题、正文、引用、列表、卡片) 2. 把这些样式写成HTML模板 3. 写一个渲染器,把Markdown内容转换成带样式的HTML
核心是这个渲染函数:
def render_article(title, content, template='motivational'):
# 1. 解析Markdown内容
sections = parse_markdown(content)
# 2. 逐个渲染段落块
html = ''
for section in sections:
if section['type'] == 'heading2':
html += render_heading2(section['number'], section['title'])
elif section['type'] == 'text':
html += render_paragraph(section['content'])
elif section['type'] == 'quote':
html += render_quote(section['content'])
elif section['type'] == 'list':
html += render_list(section['items'])
# ... 更多类型
# 3. 套入页面模板
full_html = render_page(title, html)
return full_html
### 常用排版元素
我整理了几个公众号挺常用的排版元素:
**二级标题**:带数字编号,左边一条色线,醒目又好看
**引用块**:浅色背景,左边一条粗线,放金句正好
**卡片列表**:每一项一个浅灰卡片,比纯列表好看
每个元素都写好对应的HTML和CSS,用的时候拼起来就行。
效果嘛,你现在正在看的这篇文章,就是自动生成的,你觉得怎么样?
06
第四步:整合为完整工作流
四个环节都做好之后,把它们串起来,就是一条完整的流水线。
我把它做成了一个Python项目,目录结构是这样的:
公众号工作流/
├── config.py # 配置文件
├── main.py # 主入口
├── modules/
│ ├── ai_detox.py # 去AI味模块
│ ├── html_renderer.py # HTML排版模块
│ └── wechat_publisher.py # 微信发布模块
├── templates/ # 排版模板
├── default_cover.jpg # 默认封面图
└── output/ # 输出目录
### 使用方式
超简单,一行命令搞定:
# 给个主题,自动生成并发布
python main.py --topic "普通人的3个睡后收入方法"
# 给篇文章,处理后发布
python main.py --content my_article.md
# 只生成不发布,先看看效果
python main.py --topic "主题" --no-publish
输入一个主题,等个几十秒,草稿箱里就有一篇排版精美的文章了。
### 模块化设计的好处
为什么要拆成一个个模块?
因为好维护、好扩展。
比如:
以后想换排版风格,改`html_renderer.py`就行
想升级去AI味的算法,改`ai_detox.py`就行
想加个群发功能,在`wechat_publisher.py`里加
每个模块各司其职,互不干扰。
07
踩过的坑,都是经验
做这件事的过程中,踩了不少坑,分享给大家,让你们少走弯路。
### 坑1:IP白名单
这个前面说过了,但还是要再强调一遍—— 云端环境的IP是不固定的,不要白费力气去加白名单。
老老实实搞一台服务器做中转,挺稳妥。
### 坑2:封面图必须有
调用发布接口的时候,`thumb_media_id` 这个参数是必填的。
也就是说,每篇文章必须有封面图。
没有封面图的话,接口会报错:`invalid media_id`。
解决方案:
### 坑3:HTML里不能有外部图片
公众号文章里的图片,必须上传到微信的服务器,用微信的图片链接。
如果你的HTML里引用了外部图片链接,发布后会显示不出来。
所以如果文章里有图片,要先调用上传图片的接口,换成微信的图片URL。
### 坑4:去AI味不能过度
一开始我把去AI味的强度调得很高,结果文章反而变得怪怪的。
比如口语词加太多,显得很油腻;句子拆太碎,读着不连贯。
适度就好,自然挺重要。
### 坑5:不要迷信完全自动化
虽然我们做的是自动化,但我建议至少发布前看一眼。
AI偶尔会犯一些低级错误,比如数字不对、人名写错。
全自动发布之前,先人工过一遍,稳一点。
💡 💡 我的做法是:自动生成草稿,人工审核后再群发。既省时间,又不会出错。
08
效果与后续规划
目前这套系统跑下来,效果比我预期的还好。
以前发一篇文章要半小时,现在30秒搞定草稿,剩下的就是审核一下群发。
质量方面,去AI味之后的文章,读者反馈说"读着很舒服""不像AI写的"。
接下来我还打算做这些优化:
**接入更好的AI生成**:现在是模板生成,以后换成大模型生成
**多模板支持**:不同类型的文章用不同的排版风格
**封面图自动生成**:用AI生成封面图,连图都不用找了
**数据回传**:把阅读、点赞数据传回来,分析什么内容受欢迎
总之,这只是个开始。
09
挺后
说了这么多,总结一下:
做公众号自动化,本质上是把自己从重复性的工作里解放出来。
把时间花在更重要的事情上——比如选题、比如思考、比如跟读者交流。
工具是为人服务的,不要为了用工具而用工具。
如果你也在做公众号,或者想做,希望这篇文章能给你一点启发。
有什么问题欢迎在评论区交流。
---
*内容创作自动化工具箱主理人,专注于用AI工具提升内容生产效率。*
觉得有用的话,点个「在看」支持一下吧~
关注「内容创作自动化工具箱」,用工具放大你的价值