一、痛点引入
内容创作者和知识付费运营者常常面临一个困境:手动处理订单、发货、会员管理等工作占据了大量时间。每天需要重复检查爱发电订单状态、手动发送兑换码、统计收益数据,这些机械性工作不仅效率低下,还容易出错。更不用说知识星球的自动回复、内容归档、会员数据分析等需求。本文将介绍一套开源自动化工具方案,帮助创作者从繁琐的运营工作中解放出来,专注于内容本身。
二、工具介绍
核心工具栈
本方案基于以下开源工具构建:
- afdian-auto - 爱发电自动化脚本
- GitHub: github.com/sleepwood/a…
- 功能:订单监听、自动发货、收益统计、 webhook 通知
- 支持自定义触发条件和响应动作
- knowledge-planet-tools - 知识星球运营工具集
- GitHub: github.com/zsxsoft/zsx…
- 功能:内容爬取、自动回复、会员管理、数据导出
- 支持批量操作和定时任务
- n8n - 工作流自动化平台
- GitHub: github.com/n8n-io/n8n
- 功能:连接多个服务、构建自动化流程
- 可视化编排,无需编程基础
技术架构
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 爱发电 │────▶│ n8n │────▶│ 知识星球 │
│ Webhook │ │ 工作流引擎 │ │ API │
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ 数据库 │
│ (SQLite/ │
│ PostgreSQL)│
└─────────────┘
三、安装配置
环境准备
# 1. 安装 Node.js (v18+)
brew install node@18
# 2. 安装 Docker (运行 n8n)
brew install --cask docker
# 3. 创建项目目录
mkdir -p ~/automation/afdian-planet
**cd** ~/automation/afdian-planet
爱发电自动化脚本配置
# 克隆仓库
git clone https://github.com/sleepwood/afdian-bot.git
**cd** afdian-bot
# 安装依赖
npm install
# 配置环境变量
cp .env.example .env
编辑 .env 文件:
# 爱发电配置
AFDIAN_USER_ID=你的用户 ID
AFDIAN_TOKEN=你的 API Token
# 自动发货配置
AUTO_DELIVER=true
DELIVER_MESSAGE_TEMPLATE="感谢支持!这是您的兑换码:{code}"
# 数据库配置
DATABASE_URL=sqlite://./data/orders.db
# Webhook 端口
WEBHOOK_PORT=3000
n8n 部署配置
# 使用 Docker Compose 部署
cat > docker-compose.yml << 'EOF'
version: '3'
services:
n8n:
image: n8nio/n8n:latest
ports:
- "5678:5678"
environment:
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=your_password
- WEBHOOK_URL=http://localhost:5678/
volumes:
- ./n8n-data:/home/node/.n8n
restart: unless-stopped
EOF
docker-compose up -d
知识星球工具配置
# 克隆仓库
git clone https://github.com/zsxsoft/zsxq.git
**cd** zsxq
# 安装依赖
pip install -r requirements.txt
# 配置账号信息
cp config.example.json config.json
编辑 config.json:
{
"cookie": "你的知识星球 Cookie",
"group_id": "你的星球 ID",
"auto_reply": {
"enabled": **true**,
"keywords": [
{"keyword": "兑换码", "reply": "请私信我获取"},
{"keyword": "教程", "reply": "教程已置顶"}
]
}
}
四、使用教程
场景一:爱发电订单自动发货
步骤 1:创建 Webhook 接收器
在 n8n 中创建新工作流,添加 Webhook 节点:
{
"name": "爱发电订单处理",
"nodes": [
{
"name": "Webhook",
"type": "n8n-nodes-base.webhook",
"parameters": {
"httpMethod": "POST",
"path": "afdian-order",
"responseMode": "lastNode"
}
}
]
}
步骤 2:添加订单验证逻辑
使用 Function 节点验证订单数据:
// 验证订单签名
**const** crypto = require('crypto');
**const** payload = JSON.stringify($input.all()[0].json);
**const** signature = $request.header['x-afdian-signature'];
**const** secret = process.env.AFDIAN_SECRET;
**const** expectedSignature = crypto
.createHmac('sha256', secret)
.update(payload)
.digest('hex');
**if** (signature !== expectedSignature) {
**throw** **new** Error('Invalid signature');
}
**return** $input.all();
步骤 3:发送发货消息
添加 HTTP Request 节点调用爱发电 API:
// 发送发货通知
**const** orderData = $input.first().json;
**return** {
method: 'POST',
url: 'https://api.afdian.net/api/open/send-goods',
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${process.env.AFDIAN_TOKEN}`
},
body: {
order_id: orderData.order_id,
message: `感谢支持!您的订单已发货。兑换码:${generateCode()}`
}
};
**function** generateCode() {
**return** 'CODE-' + Math.random().toString(36).substr(2, 8).toUpperCase();
}
场景二:知识星球自动回复
创建自动回复脚本
#!/usr/bin/env python3
# auto_reply.py
**import** json
**import** time
**import** requests
**from** datetime **import** datetime
**class** PlanetAutoReply:
**def** __init__(self, config_path='config.json'):
**with** open(config_path) **as** f:
self.config = json.load(f)
self.session = requests.Session()
self.session.headers.update({
'Cookie': self.config['cookie'],
'User-Agent': 'Mozilla/5.0'
})
**def** get_recent_posts(self, limit=10):
"""获取最新帖子"""
url = f"https://api.zsxq.com/v1.1/groups/{self.config['group_id']}/topics"
response = self.session.get(url, params={'limit': limit})
**return** response.json().get('data', {}).get('topics', [])
**def** auto_reply(self, post):
"""自动回复匹配关键词的帖子"""
content = post.get('text', '')
**for** rule **in** self.config['auto_reply']['keywords']:
**if** rule['keyword'] **in** content:
self.send_reply(post['id'], rule['reply'])
print(f"[{datetime.now()}] 已回复帖子:{post['id']}")
**return** **True******
**return** **False******
**def** send_reply(self, post_id, message):
"""发送回复"""
url = f"https://api.zsxq.com/v1.1/topics/{post_id}/replies"
data = {'text': message}
self.session.post(url, json=data)
**def** run(self, interval=60):
"""运行自动回复循环"""
print(f"[{datetime.now()}] 开始监控...")
processed_ids = set()
**while** **True**:
posts = self.get_recent_posts()
**for** post **in** posts:
**if** post['id'] **not** **in** processed_ids:
self.auto_reply(post)
processed_ids.add(post['id'])
time.sleep(interval)
**if** __name__ == '__main__':
bot = PlanetAutoReply()
bot.run()
设置定时任务
# 使用 systemd 或 cron 运行
crontab -e
# 每 5 分钟检查一次
*/5 * * * * **cd** ~/automation/planet && python3 auto_reply.py >> logs/auto_reply.log 2>&1
场景三:收益数据自动统计
创建数据聚合工作流
# n8n 工作流导出格式
name: 收益统计日报
nodes:
- name: 定时触发器
type: n8n-nodes-base.schedule
parameters:
rule:
interval:
- field: hours
hoursInterval: 24
- name: 获取爱发电数据
type: n8n-nodes-base.httpRequest
parameters:
method: GET
url: https://api.afdian.net/api/open/get-orders
headers:
Authorization: Bearer {{ $env.AFDIAN_TOKEN }}
- name: 获取星球数据
type: n8n-nodes-base.httpRequest
parameters:
method: GET
url: https://api.zsxq.com/v1.1/groups/{{ $env.PLANET_ID }}/statistics
- name: 数据聚合
type: n8n-nodes-base.function
parameters:
function: |
const afdian = $input.item.json.afdian;
const planet = $input.item.json.planet;
return {
date: new Date().toISOString().split('T')[0],
afdian_revenue: afdian.total_amount,
afdian_orders: afdian.order_count,
planet_members: planet.member_count,
planet_posts: planet.post_count,
total_revenue: afdian.total_amount
};
- name: 发送日报
type: n8n-nodes-base.emailSend
parameters:
to: your@email.com
subject: "={{ new Date().toISOString().split('T')[0] }} 收益日报"
body: "={{ JSON.stringify($input.item.json, null, 2) }}"
场景四:会员数据同步
跨平台会员管理脚本
#!/usr/bin/env python3
# member_sync.py
**import** sqlite3
**from** datetime **import** datetime, timedelta
**class** MemberSync:
**def** __init__(self):
self.conn = sqlite3.connect('members.db')
self.create_tables()
**def** create_tables(self):
"""创建会员数据表"""
self.conn.execute('''
CREATE TABLE IF NOT EXISTS members (
id TEXT PRIMARY KEY,
platform TEXT NOT NULL,
username TEXT,
join_date TIMESTAMP,
expire_date TIMESTAMP,
status TEXT,
last_sync TIMESTAMP
)
''')
self.conn.commit()
**def** sync_afdian_members(self, orders):
"""同步爱发电会员数据"""
**for** order **in** orders:
self.conn.execute('''
INSERT OR REPLACE INTO members
(id, platform, username, join_date, expire_date, status, last_sync)
VALUES (?, ?, ?, ?, ?, ?, ?)
''', (
order['order_id'],
'afdian',
order['user_name'],
order['pay_time'],
order['expire_time'],
'active',
datetime.now()
))
self.conn.commit()
**def** get_expiring_members(self, days=7):
"""获取即将过期的会员"""
cursor = self.conn.execute('''
SELECT * FROM members
WHERE expire_date <= ? AND status = 'active'
''', (datetime.now() + timedelta(days=days),))
**return** cursor.fetchall()
**def** send_renewal_reminder(self, members):
"""发送续费提醒"""
**for** member **in** members:
print(f"提醒续费:{member[2]} ({member[1]})")
# 调用通知 API
五、效果展示
自动化前后对比
| 任务 | 手动操作 | 自动化后 | 效率提升 |
|------|---------|---------|---------|
| 订单发货 | 5 分钟/单 | 自动即时 | 100% |
| 日常回复 | 30 分钟/天 | 自动处理 | 95% |
| 数据统计 | 1 小时/天 | 自动生成 | 98% |
| 会员管理 | 2 小时/周 | 自动同步 | 90% |
实际运行日志
[2024-01-15 09:00:00] 系统启动
[2024-01-15 09:05:23] 收到新订单:ORD-20240115-001
[2024-01-15 09:05:24] 自动发货完成,兑换码:CODE-X7K9M2P4
[2024-01-15 09:15:00] 检测到新帖子,关键词匹配:兑换码
[2024-01-15 09:15:01] 自动回复已发送
[2024-01-15 10:00:00] 日报生成并发送
[2024-01-15 10:00:01] 今日收益:¥1,280 | 新增会员:15 人
监控仪表板
通过 n8n 的仪表板可以实时查看:
-
今日订单数量和金额
-
自动发货成功率
-
知识星球互动数据
-
会员增长趋势
六、总结与延伸资源
核心要点
-
Webhook 是关键 - 利用爱发电的 Webhook 功能实现实时订单监听
-
模块化设计 - 将发货、回复、统计等功能拆分为独立模块
-
错误处理 - 添加重试机制和异常通知,确保系统稳定运行
-
数据安全 - 敏感信息使用环境变量,定期备份数据库
延伸资源
-
n8n 官方文档: docs.n8n.io/
-
爱发电开放平台: afdian.net/open
-
自动化最佳实践: github.com/n8n-io/awes…
-
Python 定时任务: github.com/dbader/sche…
进阶方向
-
接入企业微信/钉钉通知
-
构建会员专属内容自动推送
-
实现多维度数据分析报表
-
集成 AI 自动回复(基于大模型)
通过这套自动化方案,内容创作者可以将运营效率提升 10 倍以上,把宝贵的时间投入到内容创作和粉丝互动中。