automation 难度: 进阶级

如何利用 DeepSeek + n8n 自动运营微信公众号

本文详细拆解如何利用 DeepSeek 的强大 API 结合开源 n8n 工作流,实现公众号内容的自动选题、生成及发布,彻底解放双手。

你将获得什么

跟着本教程走完全部 6 个步骤,你将搭建出一套 全自动公众号运营系统

  • 一套自动化公众号运营系统:从选题到草稿,全程无需手动干预
  • 自动选题 → AI 生成 → 排版 → 草稿发布的完整流水线:覆盖公众号内容生产的每一个环节
  • 每日自动产出 1-3 篇公众号文章草稿:保持账号持续活跃,节省 90% 人工时间

整套系统运行在你自己的服务器上,数据完全可控,每月总成本不超过 30 元。


前置条件

项目要求备注
n8nv1.30+开源工作流引擎,通过 Docker 部署
DeepSeek API已注册并获取 API Key前往 platform.deepseek.com 注册
微信公众号已认证服务号或订阅号需要开通开发者权限
Dockerv20.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 凭证:

  1. 进入 Settings → Credentials → Add Credential
  2. 选择 Header Auth
  3. 配置如下:
    • NameDeepSeek API
    • Header NameAuthorization
    • Header ValueBearer sk-your-deepseek-api-key

2.3 添加微信 Token 管理

由于微信 access_token 每 2 小时过期,我们需要在 n8n 中设置一个子工作流来自动刷新。创建一个新工作流命名为 WeChat Token Refresh

节点 1 - HTTP Request(获取 Token):

  • Method:GET
  • URLhttps://api.weixin.qq.com/cgi-bin/token
  • Query Parameters
    • grant_typeclient_credential
    • appid你的AppID
    • secret你的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
  • URLhttps://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
  • URLhttps://api.deepseek.com/chat/completions
  • Authentication:选择之前创建的 DeepSeek API 凭证
  • Content-Typeapplication/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
  • URLhttps://api.weixin.qq.com/cgi-bin/material/add_material
  • Query Parameters
    • access_token{{ $json.access_token }}
    • typeimage
  • Body Content TypeForm-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
  • URLhttps://api.weixin.qq.com/cgi-bin/draft/add?access_token={{ $json.access_token }}
  • Content-Typeapplication/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:001 次抓取热点、生成文章
每天 12:00可选午间追加热点补充
每周一 09:001 次生成周度总结文章

在 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 人工审核流程

我们有意设计为 草稿模式 而非直接发布,原因如下:

  1. 质量把控:AI 生成的内容可能存在事实性错误,需要人工校验
  2. 合规审查:确保内容不触及敏感话题
  3. 个性化调整:根据账号调性微调标题和排版
  4. 最佳发布时间:手动选择阅读高峰期发布(通常为 12:00 或 20:00)

审核流程建议:

  1. 收到通知后,打开微信公众号后台
  2. 进入 内容管理 → 草稿箱
  3. 检查文章标题、内容和排版
  4. 必要时进行修改
  5. 选择合适时间点击 发布定时发布

✅ 预期结果:每天定时收到通知,审核后一键发布


成本分析

项目月费用说明
云服务器¥30-501 核 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 的支持有限。以下是优化建议:

  1. 使用内联样式:微信不支持外部 CSS,所有样式必须写在标签内,例如 <p style="font-size:16px;line-height:2;color:#333;">
  2. 调整 Prompt:在 System Prompt 中明确要求输出带内联样式的 HTML
  3. 添加排版后处理节点:用 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 内容被平台检测?

  1. 人工审核是关键:始终在草稿阶段进行人工修改,加入个人观点和独特表达
  2. 调整 Prompt 温度:将 temperature 设为 0.8-0.9,增加输出多样性
  3. 混合创作:AI 负责初稿框架,人工补充案例和个人经历
  4. 保持账号人设:在 Prompt 中融入固定的写作风格和口头禅

Q4:一天可以生成多少篇?

微信公众号草稿接口没有严格的每日限制,但建议:

  • 订阅号每天最多发 1 次(包含 1-8 篇图文)
  • 服务号每月只能发 4 次
  • 生成草稿不受限,可以提前储备一周的内容

Q5:支持哪些类型的公众号?

认证和未认证的订阅号、服务号都可以使用草稿接口。但未认证账号的部分 API 权限可能受限,建议优先使用已认证的账号。


下一步扩展

搭建完基础流水线后,你可以继续优化:

  1. 多账号管理:在 n8n 中配置多个微信公众号凭证,一套工作流同时管理多个号
  2. AI 配图生成:接入 DALL-E 或 Stable Diffusion API,为每篇文章自动生成题图
  3. 数据分析闭环:定期抓取公众号后台的阅读数据,让 DeepSeek 分析哪类选题效果更好,自动优化选题策略
  4. 评论自动回复:利用微信消息回调接口 + DeepSeek,实现粉丝留言的智能回复
  5. 多平台分发:将同一篇文章同步发布到知乎、头条号、百家号等平台
  6. SEO 联动:结合我们的 自动建站教程,将公众号文章同步到个人网站,获取搜索引擎流量

这套系统的核心价值在于将公众号运营中最耗时的「选题 + 写作」环节交给 AI,而将最需要判断力的「审核 + 发布」环节留给人。自动化不是替代人,而是让人专注于更有价值的决策。

最后更新: 2026/3/10
#DeepSeek #n8n #微信公众号 #自动化