19 KiB
N8N 内容转化流水线工作流设计(v6)
用于:AI 英文文章 → 中文公众号/X/视频 内容转化 工作流 ID:
iOf32aOKvTjfTDSM(v5 基础) 触发方式:OpenClaw 通过 Webhook 调用 管理平台:Mac mini 上的 n8n (https://n8n.ishenwei.online)v6 变更(相比 v5):
- ✅ 移除 Node 7(Build HTML)、Node 8(Write HTML)
- ✅ n8n 仅输出 Markdown 文件,HTML 转换不再需要
- ✅ 最终输出纯 Markdown,便于在 Obsidian 中编辑后再发布到公众号
- ⚠️ Telegram 通知中的 HTML 相关字段已移除
- ⚠️ 验收标准调整为仅检查 Markdown 文件
核心需求更新(v6)
输出要求
单一输出:中文 Markdown 文件
| 输出文件 | 路径 | 格式 | 用途 |
|---|---|---|---|
| Markdown 源文件 | content-output/{原文件名}.md |
中文 Markdown | Obsidian 留存、编辑、发布 |
不再生成公众号 HTML。公众号排版在 Obsidian 中手动完成,或通过其他工具转换。
Obsidian 目录结构
~/Workspace/nexus/openclaw/
├── content-queue/ # 原始英文文章(输入)
│ └── 2026-03-29-ai-solopreneur.md
│
└── content-output/ # 成品(输出,v6 仅 Markdown)
└── 2026-03-29-ai-solopreneur.md # 翻译后 Markdown ✅
工作流概述
OpenClaw (发现文章)
↓ (保存文件到 n8n-files 目录)
↓ (触发 Webhook)
┌─────────────────────────────────────────────────────────────┐
│ N8N 工作流 (v6): content-translation-pipeline-v6 │
│ │
│ [Webhook] → [Read File] → [Extract Text] → [AI Agent] │
│ ↓ ↑ (DeepSeek) │
│ [Build Markdown] → [Write .md] │
│ ↓ │
│ [Send Telegram] │
└─────────────────────────────────────────────────────────────┘
节点详细设计(v6)
节点 1️⃣:Webhook Trigger
类型: Webhook
名称: Webhook Trigger
Path: /content-translation-v6(新建 path)
Method: POST
接收数据格式:
{
"note_name": "2026-03-29-ai-solopreneur.md",
"source_path": "/Users/weishen/Workspace/nexus/openclaw/content-queue/2026-03-29-ai-solopreneur.md",
"output_name": "2026-03-29-ai-solopreneur",
"callback_url": "http://192.168.3.189:18789/webhook/yunce"
}
节点 2️⃣:Read Obsidian Note
类型: Read Binary File
名称: Read Obsidian Note
配置:
- File Path:
=/home/node/.n8n-files/{{ $json.body.note_name }}
节点 3️⃣:Extract from File
类型: Extract from File
名称: Extract from File
Operation: text
节点 4️⃣:AI Agent(翻译+改写)
类型: LangChain Agent
名称: AI Agent
Version: 3.1
Model: DeepSeek Chat Model
Prompt 模板:
你是一个专业的中文内容编辑,擅长将英文文章转化为适合中国读者的高质量内容。
## 你的任务
将以下英文原文转化为:
1. 公众号风格的深度文章(2000-3000字)
2. X/Twitter 风格的短文案(280字内,带钩子)
3. 视频口播脚本(3-5分钟,适合抖音/YouTube)
## 内容要求
- 语言:地道中文,无翻译腔
- 风格:专业、有干货、适合中国读者
- 调性:公众号大V风格,有观点有案例
- 商业化:可自然植入 AI Agent / 知识管理相关内容(软性,不硬广)
## 文章主题方向(供校准时参考)
- AI Agent 落地实践与工具推荐
- AI 赋能商业的最佳实践
- AI 时代的网络安全与运维
## 输出格式(严格按此 JSON 返回)
{
"wechat_title": "中文标题",
"wechat_excerpt": "公众号摘要(100字内)",
"wechat_content": "完整公众号文章(Markdown格式)",
"twitter_copy": "X/Twitter文案(280字内,带emoji)",
"video_title": "视频标题",
"video_script": "口播脚本(含时间戳和字幕)",
"cover_keywords": ["关键词1", "关键词2", "关键词3"]
}
## 原文内容
{{ $json.data }}
节点 5️⃣:Build Markdown(v6 精简版)
类型: Code
名称: Build Markdown
功能: 将 AI 输出的 JSON 组装成结构清晰的 Markdown 文件
const aiResult = $input.first().json.message;
const data = typeof aiResult === 'string' ? JSON.parse(aiResult) : aiResult;
const noteName = $('Webhook Trigger').first().json.body.note_name;
const outputName = noteName.replace('.md', '');
const markdown = `# ${data.wechat_title}
> ${data.wechat_excerpt}
${data.wechat_content}
---
## X/Twitter 文案
${data.twitter_copy}
---
## 视频信息
**标题:** ${data.video_title}
**口播脚本:**
${data.video_script}
---
*封面图关键词:${data.cover_keywords?.join(', ')}*
`;
return {
json: {
output_name: outputName,
output_content: markdown,
source_path: $('Webhook Trigger').first().json.body.source_path
}
};
节点 6️⃣:Write .md File
类型: Write Binary File / ReadWriteFile
名称: Write Markdown Note
配置:
- Operation:
write - File Path:
=/home/node/.n8n-files/{{ $json.output_name }}_output.md - Content:
={{ $json.output_content }}
注意: 输出到 n8n-files/ 目录,由 OpenClaw 负责复制回 Obsidian。
节点 7️⃣:Send Telegram Message
类型: Telegram
名称: Send Telegram Message
配置:
- Chat ID:
5038825565 - Text:
✅ 文章转换完成!
📝 标题:${$json.wechat_title}
📁 Markdown:/home/node/.n8n-files/${$json.output_name}_output.md
🐦 Twitter 文案:${$json.twitter_copy}
🎬 视频标题:${$json.video_title}
- Credentials:
Telegram XingJiang Bot
注意: OpenClaw 收到通知后负责将 Markdown 文件复制回 Obsidian。
节点连接图(v6)
┌─────────────────────────────────┐
│ Webhook Trigger │
│ POST /content-translation-v6 │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
│ Read Obsidian Note │
│ (Read Binary File) │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
│ Extract from File │
│ (text operation) │
└──────────────┬──────────────────┘
│
┌──────────┴──────────┐
│ │
│ ┌───────┴────────┐
│ │ DeepSeek │
│ │ Chat Model │
│ └───────┬────────┘
│ │
▼ ▼
┌─────────────────────────────────┐
│ AI Agent (LangChain) │
│ 输出 JSON 格式结果 │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
│ Build Markdown │
│ 组装中文 Markdown 文件 │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
│ Write Markdown Note │
│ → content-output/*.md │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
│ Send Telegram Message │
│ Markdown 文件路径通知 │
└─────────────────────────────────┘
调用方式(OpenClaw 侧)
核心约束:n8n 只能读写 /home/node/.n8n-files/ 目录,OpenClaw 负责文件搬运。
OpenClaw 完整流程(v6):
# =============================================
# 步骤 1:OpenClaw 复制原文到 n8n-files 目录
# =============================================
scp /Users/weishen/Workspace/nexus/openclaw/content-queue/article-2026-03-29.md \
macmini:/home/node/.n8n-files/article-2026-03-29.md
# =============================================
# 步骤 2:OpenClaw 触发 n8n Webhook
# =============================================
curl -X POST "https://n8n.ishenwei.online/webhook/content-translation-v6" \
-H "Content-Type: application/json" \
-d '{
"note_name": "article-2026-03-29.md",
"source_path": "/Users/weishen/Workspace/nexus/openclaw/content-queue/article-2026-03-29.md",
"output_name": "article-2026-03-29",
"callback_url": "http://192.168.3.189:18789/webhook/yunce"
}'
# =============================================
# 步骤 3:n8n 流程执行中...
# =============================================
# n8n 读取 /home/node/.n8n-files/article-2026-03-29.md
# 处理(翻译、改写)
# 输出到 /home/node/.n8n-files/article-2026-03-29_output.md
# 发送 Telegram 通知
# =============================================
# 步骤 4:OpenClaw 复制输出文件回 Obsidian(工作流完成后)
# =============================================
scp macmini:/home/node/.n8n-files/article-2026-03-29_output.md \
/Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.md
# =============================================
# 步骤 5:清理 n8n-files 临时文件(可选)
# =============================================
ssh macmini "rm /home/node/.n8n-files/article-2026-03-29.md \
/home/node/.n8n-files/article-2026-03-29_output.md"
OpenClaw Python 脚本模板(v6):
import subprocess
import sys
# ========== 配置区 ==========
N8N_BASE_URL = "https://n8n.ishenwei.online"
WEBHOOK_PATH = "content-translation-v6" # <-- 实际 webhook path
SOURCE_FILE = "/path/to/source/file.md" # <-- 实际源文件路径
N8N_FILES = "/home/node/.n8n-files"
NOTE_NAME = "source-file.md" # <-- 实际文件名
OUTPUT_NAME = "source-file" # <-- 输出文件名(无扩展名)
OUTPUT_DIR = "/Users/weishen/Workspace/nexus/openclaw/content-output"
# ===================================
n8n_input_path = f"{N8N_FILES}/{NOTE_NAME}"
print(f"[Step 1/5] 复制输入文件到 N8N 容器: {NOTE_NAME}")
result = subprocess.run(
['scp', SOURCE_FILE, f'macmini:{n8n_input_path}'],
capture_output=True, text=True
)
if result.returncode != 0:
print(f"X 文件复制失败: {result.stderr}")
sys.exit(1)
print(f"V 已复制到 {n8n_input_path}")
print(f"[Step 2/5] 触发 N8N Webhook: {WEBHOOK_PATH}")
webhook_url = f"{N8N_BASE_URL}/webhook/{WEBHOOK_PATH}"
payload = ("{"
"\"note_name\": \"" + NOTE_NAME + "\", "
"\"source_path\": \"" + SOURCE_FILE + "\", "
"\"output_name\": \"" + OUTPUT_NAME + "\""
"}")
result = subprocess.run(
['curl', '-X', 'POST', webhook_url,
'-H', 'Content-Type: application/json',
'-d', payload],
capture_output=True, text=True
)
print(f"Webhook 触发响应: {result.stdout[:200]}")
print("[Step 3/5] 等待 N8N 执行完成(Telegram 通知将发送到本会话)...")
print("请等待 Telegram 通知,收到后继续执行步骤 4。")
sys.exit(0) # <-- 退出等待通知
# ---- 以下为步骤 4 和 5,需在收到 Telegram 通知后执行 ----
print(f"[Step 4/5] 复制输出文件回 Obsidian...")
output_file = f"{OUTPUT_NAME}_output.md"
src = f"macmini:{N8N_FILES}/{output_file}"
dst = f"{OUTPUT_DIR}/{output_file}"
result = subprocess.run(['scp', src, dst], capture_output=True, text=True)
if result.returncode == 0:
print(f" V {output_file}")
else:
print(f" X {result.stderr}")
print("[Step 5/5] 清理 N8N 容器临时文件...")
files_to_clean = [NOTE_NAME, output_file]
result = subprocess.run(
['ssh', 'macmini', 'rm'] + [f"{N8N_FILES}/{f}" for f in files_to_clean],
capture_output=True, text=True
)
if result.returncode == 0:
print(" V 清理完成")
else:
print(f" ! 清理失败(不影响结果): {result.stderr}")
print("🎉 工作流执行完毕!")
Obsidian 最终目录结构(v6)
~/Workspace/nexus/openclaw/
├── content-queue/ # 原始英文(输入,OpenClaw 放置)
│ └── article-2026-03-29.md
│
└── content-output/ # 成品(v6 仅 Markdown)
└── article-2026-03-29.md # 中文 Markdown ✅
验收标准(v6)
- 触发后自动完成整个流程,无需人工干预
content-output/目录生成.md文件(v6 无 HTML)- Markdown 文件内容完整,包含:公众号正文 + Twitter 文案 + 视频脚本
- Telegram 收到完成通知(含标题和文件路径)
- 错误时 n8n 记录错误节点并停止流程
备注(v6)
- Markdown 源文件:保留中文原文,便于在 Obsidian 中编辑、排版后再发布
- 公众号排版:在 Obsidian 中手动完成,或通过 Markdown→公众号工具转换
- 文件路径:写入 Obsidian vault 的
content-output/子目录,需确保 n8n 容器有对应目录的写权限 - API Key:DeepSeek API 通过 n8n credential 配置,无需在代码中硬编码
📖 附录:OpenClaw ↔ N8N 通用工作流调用规范(v1.0)
本规范旨在为 OpenClaw 与 N8N 之间的每次交互建立统一标准,使星辉(XingHui)或其他 Agent 能够通过标准化步骤执行任意 N8N 工作流。
适用范围:任何由 OpenClaw 触发、N8N 执行的工作流(不仅限于内容转化流水线)
核心约束:N8N 容器只读写
/home/node/.n8n-files/目录,无法直接访问 Obsidian 或其他宿主机路径。OpenClaw 负责所有文件搬运。
架构总览
OpenClaw N8N 容器 其他存储
Agent (/home/node/.n8n-files/) 位置
│ │ │
│ ── ① 复制输入文件 ─────────────────→│ │
│ │ │
│ ── ② POST webhook ─────────────────→│ │
│ │ │
│ [N8N 执行工作流] │
│ │ │
│ ←── ③ Telegram / callback 通知 ───│ │
│ │ │
│ ←── ④ 复制输出文件 ─────────────────│──→ Obsidian 目录 │
│ │ │
│ ── ⑤ 清理 n8n-files ───────────────→│ │
标准化执行步骤(星辉操作指南)
步骤 ①:准备输入文件
规则:所有传递给 N8N 的文件,必须先复制到 N8N 容器可访问的路径。
通用格式:scp <源路径> macmini:/home/node/.n8n-files/<文件名>
步骤 ②:触发 Webhook
通用格式:
curl -X POST "<N8N_BASE_URL>/webhook/<webhook-path>" \
-H "Content-Type: application/json" \
-d '{
"note_name": "<文件名>",
"source_path": "<原始文件路径>"
}'
Webhook Path 查询方式:
- 在 n8n 管理界面(https://n8n.ishenwei.online)打开对应工作流
- 点击 Webhook 节点,查看右侧 Path 字段
步骤 ③:等待执行完成
规则:N8N 工作流完成后会发送通知,OpenClaw 需等待此信号后再执行后续复制操作。
通知方式优先级:Telegram Bot > Callback URL > 轮询 n8n API
步骤 ④:复制输出文件
通用格式:scp macmini:/home/node/.n8n-files/<输出文件名> <目标完整路径>
步骤 ⑤:清理临时文件
通用格式:ssh macmini "rm /home/node/.n8n-files/<输入文件> /home/node/.n8n-files/<输出文件>"
速查表:常见工作流配置
| 工作流 | Webhook Path | 输入文件规则 | 输出文件规则 | 通知方式 |
|---|---|---|---|---|
| 内容转化 v6 | content-translation-v6 |
content-queue/*.md |
content-output/*_output.md |
Telegram |
| (待补充) |
添加新工作流时:在此表新增一行,注明 Webhook Path 和文件路径规则,星辉即可照此执行。
异常处理规范
| 异常情况 | 处理方式 |
|---|---|
scp 文件复制失败 |
检查源文件是否存在、检查目标目录权限 |
curl Webhook 请求超时 |
重试 1 次(间隔 5 秒),仍失败则中止并通知用户 |
| Telegram 未收到完成通知 | 登录 n8n 管理界面 → 查看对应工作流执行记录 |
| 输出文件复制失败 | 检查 n8n-files 中是否已生成文件,确认文件名是否匹配 |
| N8N 工作流报错 | 登录 n8n 管理界面 → 打开对应工作流 → 查看错误节点日志 |
关键约束汇总
- N8N 容器路径:
/home/node/.n8n-files/(只读/写此目录) - 文件传输方式:
scpviamacmini主机名 - Webhook 触发:统一使用
curl -X POST,Content-Type 为application/json - 通知等待:必须等待 Telegram/callback 通知后再复制输出文件,不得跳过
- 清理时机:步骤 4 成功后再执行清理,步骤 4 失败时不清理(保留现场)
- 配置文件:
~/.openclaw/.env中的N8N_API_KEY和N8N_BASE_URL供脚本读取