如何利用 DeepSeek + n8n 自动运营微信公众号
本文详细拆解如何利用 DeepSeek 的强大 API 结合开源 n8n 工作流,实现公众号内容的自动选题、生成及发布,彻底解放双手。
你将获得什么
跟着本教程走完全部 6 个步骤,你将搭建出一套 全自动公众号运营系统:
- 一套自动化公众号运营系统:从选题到草稿,全程无需手动干预
- 自动选题 → AI 生成 → 排版 → 草稿发布的完整流水线:覆盖公众号内容生产的每一个环节
- 每日自动产出 1-3 篇公众号文章草稿:保持账号持续活跃,节省 90% 人工时间
整套系统运行在你自己的服务器上,数据完全可控,每月总成本不超过 30 元。
前置条件
| 项目 | 要求 | 备注 |
|---|---|---|
| n8n | v1.30+ | 开源工作流引擎,通过 Docker 部署 |
| DeepSeek API | 已注册并获取 API Key | 前往 platform.deepseek.com 注册 |
| 微信公众号 | 已认证服务号或订阅号 | 需要开通开发者权限 |
| Docker | v20.10+ | 用于部署 n8n |
| 服务器 | 1 核 1G 以上的 VPS | 需要有公网 IP,用于微信 API 回调 |
| 基础技能 | 会用 SSH 终端、了解 JSON 格式 | 不需要编程经验 |
预计完成时间:60-90 分钟
整体架构
整个自动化流程如下:
RSS/热点源 → n8n 定时触发 → DeepSeek AI 生成 → 排版处理 → 微信草稿箱
详细拆解每个环节:
1. Cron 定时器(每天早上 8:00 触发)
↓
2. HTTP Request(抓取 RSS / 热点话题)
↓
3. Function 节点(提取标题和摘要)
↓
4. DeepSeek API(生成公众号风格文章)
↓
5. Function 节点(HTML 排版处理)
↓
6. HTTP Request(上传封面图到微信素材库)
↓
7. HTTP Request(创建微信草稿)
↓
8. 通知节点(企业微信/钉钉通知审核)
第 1 步:准备微信公众号 API 权限
1.1 获取 AppID 和 AppSecret
登录微信公众平台 (mp.weixin.qq.com),进入 设置与开发 → 基本配置,记录以下信息:
- AppID(开发者ID):以
wx开头的字符串 - AppSecret(开发者密码):点击重置后妥善保存,仅显示一次
1.2 配置 IP 白名单
在同一页面找到 IP 白名单 配置项,将你服务器的公网 IP 添加进去。如果你使用的是云服务器,填写该服务器的外网 IP 即可。
# 查看服务器公网 IP
curl -s ifconfig.me
将返回的 IP 地址填入白名单。
1.3 获取 access_token
微信公众号的所有 API 调用都需要 access_token,它的有效期为 2 小时。获取方式如下:
API 端点:
GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=YOUR_APPID&secret=YOUR_APPSECRET
测试命令:
curl -s "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx1234567890abcdef&secret=your_appsecret_here" | python3 -m json.tool
成功响应示例:
{
"access_token": "ACCESS_TOKEN_STRING",
"expires_in": 7200
}
失败响应示例:
{
"errcode": 40164,
"errmsg": "invalid ip 1.2.3.4 ipv6 ::ffff:1.2.3.4, not in whitelist rid: xxx"
}
如果遇到 40164 错误,说明你的服务器 IP 尚未加入白名单,回到上一步添加即可。
✅ 预期结果:成功获取 access_token,返回 JSON 中包含有效的 token 字符串
第 2 步:配置 n8n 和 DeepSeek
2.1 部署 n8n
如果你还没有部署 n8n,使用 Docker 快速启动:
docker run -d \
--name n8n \
--restart always \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
-e N8N_SECURE_COOKIE=false \
-e GENERIC_TIMEZONE=Asia/Shanghai \
n8nio/n8n:latest
启动后访问 http://你的服务器IP:5678,完成初始注册。
详细的 n8n Docker 部署指南可参考我们的 n8n + DeepSeek 自动建站教程。
2.2 配置 DeepSeek 凭证
在 n8n 中添加 DeepSeek API 凭证:
- 进入 Settings → Credentials → Add Credential
- 选择 Header Auth
- 配置如下:
- Name:
DeepSeek API - Header Name:
Authorization - Header Value:
Bearer sk-your-deepseek-api-key
- Name:
2.3 添加微信 Token 管理
由于微信 access_token 每 2 小时过期,我们需要在 n8n 中设置一个子工作流来自动刷新。创建一个新工作流命名为 WeChat Token Refresh:
节点 1 - HTTP Request(获取 Token):
- Method:GET
- URL:
https://api.weixin.qq.com/cgi-bin/token - Query Parameters:
grant_type:client_credentialappid:你的AppIDsecret:你的AppSecret
节点 2 - Set 节点(存储 Token):
将获取到的 access_token 存入 n8n 的静态数据中,供其他工作流调用:
// 在 Function 节点中
const token = $input.first().json.access_token;
const expireTime = Date.now() + 7000 * 1000; // 提前 200 秒刷新
// 存入工作流静态数据
const staticData = $getWorkflowStaticData('global');
staticData.wechat_token = token;
staticData.token_expire = expireTime;
return [{ json: { token, expireTime } }];
在主工作流的任何位置需要使用 token 时,通过以下方式获取:
const staticData = $getWorkflowStaticData('global');
const token = staticData.wechat_token;
// 检查是否过期
if (!token || Date.now() > staticData.token_expire) {
// 调用子工作流刷新 token
}
return [{ json: { access_token: token } }];
✅ 预期结果:n8n 可正常调用 DeepSeek API,微信 access_token 自动管理不过期
第 3 步:搭建热点选题抓取工作流
3.1 配置定时触发器
创建新工作流,第一个节点选择 Schedule Trigger:
- Trigger Interval:每天
- Hour:8(早上 8 点执行)
- Timezone:Asia/Shanghai
3.2 方案 A:RSS 热点源抓取
添加 RSS Feed Read 节点,订阅以下科技/AI 热点源:
# 推荐 RSS 源
https://36kr.com/feed # 36氪科技新闻
https://sspai.com/feed # 少数派
https://www.ifanr.com/feed # 爱范儿
https://rsshub.app/juejin/trending/all/daily # 掘金每日热门
https://rsshub.app/zhihu/hot # 知乎热榜
n8n RSS Feed Read 节点配置:
- URL:填入上方任一 RSS 地址
- Output:选择
items,限制最近 10 条
3.3 方案 B:百度热搜 / 微信指数
如果你希望更贴近大众热点,可以使用 HTTP Request 节点抓取百度热搜:
HTTP Request 节点配置:
- Method:GET
- URL:
https://top.baidu.com/api/board?platform=wise&tab=realtime - Response Format:JSON
用 Function 节点提取热搜关键词:
const items = $input.first().json.data.cards[0].content;
const topics = items.slice(0, 5).map(item => ({
json: {
title: item.word,
description: item.desc,
hotScore: item.hotScore
}
}));
return topics;
3.4 筛选与去重
添加 Function 节点对抓取到的话题进行筛选:
const items = $input.all();
const seen = new Set();
const filtered = [];
for (const item of items) {
const title = item.json.title || item.json.word;
if (!seen.has(title) && title.length > 4) {
seen.add(title);
filtered.push({
json: {
topic: title,
summary: item.json.description || item.json.contentSnippet || '',
source: item.json.link || ''
}
});
}
}
// 只保留前 3 个话题,每天生成 3 篇
return filtered.slice(0, 3);
✅ 预期结果:自动获取当日热门话题列表,输出 3 个筛选后的选题
第 4 步:AI 内容生成
4.1 配置 DeepSeek API 调用
添加 HTTP Request 节点:
- Method:POST
- URL:
https://api.deepseek.com/chat/completions - Authentication:选择之前创建的
DeepSeek API凭证 - Content-Type:
application/json
Request Body:
{
"model": "deepseek-chat",
"messages": [
{
"role": "system",
"content": "你是一位资深的微信公众号运营编辑,擅长撰写深度科技解读文章。你的文章风格需满足以下要求:\n1. 标题:使用吸引眼球的标题,可适当使用数字、疑问句式\n2. 开头:用一个引人入胜的场景或数据切入\n3. 正文:分段清晰,每段不超过3-4行,善用加粗和emoji增强可读性\n4. 结尾:给出明确的观点或行动建议\n5. 整体字数控制在 1500-2500 字\n6. 输出格式为 HTML,适配微信公众号编辑器"
},
{
"role": "user",
"content": "请根据以下话题撰写一篇微信公众号文章:\n\n话题:{{$json.topic}}\n背景摘要:{{$json.summary}}\n\n请直接输出 HTML 格式的文章内容,包含标题(用 h2 标签)和正文。"
}
],
"temperature": 0.7,
"max_tokens": 4096
}
4.2 完整的提示词模板
以下是经过优化的 System Prompt,你可以根据自己公众号的风格调整:
你是一位资深微信公众号运营编辑。请严格按照以下规范输出文章:
【格式要求】
- 使用 HTML 格式输出,不要使用 Markdown
- 标题使用 <h2> 标签
- 小标题使用 <h3> 标签
- 段落使用 <p> 标签,段落之间留空行
- 重点内容使用 <strong> 加粗
- 使用 <blockquote> 标签做金句引用
- 使用 <hr> 分割不同章节
- 每段正文不超过 4 行,保持微信端阅读体验
【内容结构】
1. 吸睛开头(100 字以内的场景化切入)
2. 背景分析(当前热点为什么值得关注)
3. 深度拆解(核心内容,分 3-4 个小节)
4. 实用建议(读者可以立即执行的行动)
5. 结尾金句(引发转发的观点)
【风格要求】
- 口语化但不失专业
- 善用类比和生活场景帮助理解技术概念
- 适当使用 emoji 增加亲和力(但不过度)
- 避免学术腔调,目标读者是对科技感兴趣的普通人
4.3 提取生成结果
在 DeepSeek API 节点之后添加 Function 节点,提取生成的文章内容:
const response = $input.first().json;
const content = response.choices[0].message.content;
// 提取标题(从 h2 标签中)
const titleMatch = content.match(/<h2[^>]*>(.*?)<\/h2>/);
const title = titleMatch ? titleMatch[1].replace(/<[^>]+>/g, '') : $json.topic;
// 清理内容
const articleContent = content
.replace(/```html\n?/g, '')
.replace(/```\n?/g, '')
.trim();
return [{
json: {
title: title,
content: articleContent,
topic: $json.topic,
digest: articleContent.replace(/<[^>]+>/g, '').substring(0, 120)
}
}];
✅ 预期结果:获得完整的公众号风格文章,包含 HTML 格式的标题、正文和排版
第 5 步:图文素材上传与草稿创建
5.1 上传封面图片
微信公众号草稿需要封面图(thumb),必须先上传到素材库获取 media_id。
方案 A:使用固定封面图
提前在公众号后台上传几张通用封面图,记录它们的 media_id,然后在 Function 节点中随机选择:
const thumbIds = [
'MEDIA_ID_1', // 科技类封面
'MEDIA_ID_2', // AI 类封面
'MEDIA_ID_3', // 通用类封面
];
const randomThumb = thumbIds[Math.floor(Math.random() * thumbIds.length)];
return [{
json: {
...$input.first().json,
thumb_media_id: randomThumb
}
}];
方案 B:通过 API 上传图片
使用微信永久素材上传接口:
POST https://api.weixin.qq.com/cgi-bin/material/add_material?access_token=ACCESS_TOKEN&type=image
在 n8n 中配置 HTTP Request 节点:
- Method:POST
- URL:
https://api.weixin.qq.com/cgi-bin/material/add_material - Query Parameters:
access_token:{{ $json.access_token }}type:image
- Body Content Type:
Form-Data/Multipart - Body Parameters:
media:上传的图片文件
5.2 创建草稿
使用微信草稿接口将文章添加到草稿箱:
API 端点:
POST https://api.weixin.qq.com/cgi-bin/draft/add?access_token=ACCESS_TOKEN
n8n HTTP Request 节点配置:
- Method:POST
- URL:
https://api.weixin.qq.com/cgi-bin/draft/add?access_token={{ $json.access_token }} - Content-Type:
application/json
Request Body:
{
"articles": [
{
"title": "{{ $json.title }}",
"author": "AI 编辑部",
"digest": "{{ $json.digest }}",
"content": "{{ $json.content }}",
"thumb_media_id": "{{ $json.thumb_media_id }}",
"need_open_comment": 1,
"only_fans_can_comment": 0,
"content_source_url": ""
}
]
}
成功响应:
{
"media_id": "DRAFT_MEDIA_ID"
}
5.3 错误处理
在 HTTP Request 节点后添加 IF 节点检查返回结果:
// 检查是否有错误码
const errcode = $input.first().json.errcode;
if (errcode && errcode !== 0) {
// 常见错误码
// 40001: access_token 无效 → 触发 token 刷新
// 45009: 接口调用超限 → 等待重试
// 40007: media_id 无效 → 检查素材
throw new Error(`微信 API 错误: ${errcode} - ${$input.first().json.errmsg}`);
}
return $input.all();
✅ 预期结果:微信公众号后台草稿箱中出现新文章,包含标题、正文和封面图
第 6 步:定时任务与人工审核
6.1 配置 Cron 定时执行
回到工作流的 Schedule Trigger 节点,推荐的执行策略:
| 时间 | 频率 | 说明 |
|---|---|---|
| 每天 08:00 | 1 次 | 抓取热点、生成文章 |
| 每天 12:00 | 可选 | 午间追加热点补充 |
| 每周一 09:00 | 1 次 | 生成周度总结文章 |
在 n8n 的 Schedule Trigger 中设置 Cron 表达式:
# 每天早上 8 点执行
0 8 * * *
# 工作日早上 8 点执行
0 8 * * 1-5
6.2 审核通知
在草稿创建成功后,添加通知节点提醒你审核。
方案 A:企业微信机器人通知
添加 HTTP Request 节点:
- Method:POST
- URL:
你的企业微信机器人 Webhook 地址 - Body:
{
"msgtype": "markdown",
"markdown": {
"content": "📝 **公众号新草稿已生成**\n\n> 标题:{{ $json.title }}\n> 来源话题:{{ $json.topic }}\n> 摘要:{{ $json.digest }}\n\n请前往 [公众号后台](https://mp.weixin.qq.com) 审核发布"
}
}
方案 B:邮件通知
使用 n8n 内置的 Send Email 节点,将草稿信息发送到你的邮箱。
6.3 人工审核流程
我们有意设计为 草稿模式 而非直接发布,原因如下:
- 质量把控:AI 生成的内容可能存在事实性错误,需要人工校验
- 合规审查:确保内容不触及敏感话题
- 个性化调整:根据账号调性微调标题和排版
- 最佳发布时间:手动选择阅读高峰期发布(通常为 12:00 或 20:00)
审核流程建议:
- 收到通知后,打开微信公众号后台
- 进入 内容管理 → 草稿箱
- 检查文章标题、内容和排版
- 必要时进行修改
- 选择合适时间点击 发布 或 定时发布
✅ 预期结果:每天定时收到通知,审核后一键发布
成本分析
| 项目 | 月费用 | 说明 |
|---|---|---|
| 云服务器 | ¥30-50 | 1 核 1G 轻量云,部署 n8n |
| DeepSeek API | ¥5-15 | 每天 3 篇约消耗 15K tokens/天,deepseek-chat 单价极低 |
| 微信公众号 | ¥0 | 开发者 API 免费使用 |
| 域名(可选) | ¥0-10 | 如需 n8n 配置 HTTPS 访问 |
| 合计 | ¥35-75/月 | 相当于每篇文章成本不到 1 元 |
对比人工运营成本(编辑月薪 8000-15000 元),这套方案的 ROI 非常可观。
常见问题
Q1:access_token 过期怎么办?
access_token 有效期为 2 小时。在第 2 步中我们已经设置了自动刷新机制。如果仍然遇到过期问题,可以在主工作流开头添加一个 Function 节点,每次执行前强制刷新 token:
// 强制刷新 token
const response = await this.helpers.httpRequest({
method: 'GET',
url: `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${YOUR_APPID}&secret=${YOUR_SECRET}`,
});
const staticData = $getWorkflowStaticData('global');
staticData.wechat_token = response.access_token;
return [{ json: { access_token: response.access_token } }];
Q2:文章排版不够好看?
微信公众号编辑器对 HTML 的支持有限。以下是优化建议:
- 使用内联样式:微信不支持外部 CSS,所有样式必须写在标签内,例如
<p style="font-size:16px;line-height:2;color:#333;"> - 调整 Prompt:在 System Prompt 中明确要求输出带内联样式的 HTML
- 添加排版后处理节点:用 Function 节点对 AI 输出进行二次处理
let content = $input.first().json.content;
// 添加统一段落样式
content = content.replace(/<p>/g,
'<p style="font-size:16px;line-height:2;color:#333;margin-bottom:20px;">');
// 添加标题样式
content = content.replace(/<h3>/g,
'<h3 style="font-size:18px;font-weight:bold;color:#1a1a1a;margin:30px 0 15px;">');
// 添加引用块样式
content = content.replace(/<blockquote>/g,
'<blockquote style="border-left:4px solid #07c160;padding:10px 15px;background:#f7f7f7;margin:20px 0;">');
return [{ json: { ...($input.first().json), content } }];
Q3:如何避免 AI 内容被平台检测?
- 人工审核是关键:始终在草稿阶段进行人工修改,加入个人观点和独特表达
- 调整 Prompt 温度:将
temperature设为 0.8-0.9,增加输出多样性 - 混合创作:AI 负责初稿框架,人工补充案例和个人经历
- 保持账号人设:在 Prompt 中融入固定的写作风格和口头禅
Q4:一天可以生成多少篇?
微信公众号草稿接口没有严格的每日限制,但建议:
- 订阅号每天最多发 1 次(包含 1-8 篇图文)
- 服务号每月只能发 4 次
- 生成草稿不受限,可以提前储备一周的内容
Q5:支持哪些类型的公众号?
认证和未认证的订阅号、服务号都可以使用草稿接口。但未认证账号的部分 API 权限可能受限,建议优先使用已认证的账号。
下一步扩展
搭建完基础流水线后,你可以继续优化:
- 多账号管理:在 n8n 中配置多个微信公众号凭证,一套工作流同时管理多个号
- AI 配图生成:接入 DALL-E 或 Stable Diffusion API,为每篇文章自动生成题图
- 数据分析闭环:定期抓取公众号后台的阅读数据,让 DeepSeek 分析哪类选题效果更好,自动优化选题策略
- 评论自动回复:利用微信消息回调接口 + DeepSeek,实现粉丝留言的智能回复
- 多平台分发:将同一篇文章同步发布到知乎、头条号、百家号等平台
- SEO 联动:结合我们的 自动建站教程,将公众号文章同步到个人网站,获取搜索引擎流量
这套系统的核心价值在于将公众号运营中最耗时的「选题 + 写作」环节交给 AI,而将最需要判断力的「审核 + 发布」环节留给人。自动化不是替代人,而是让人专注于更有价值的决策。