diff --git a/openclaw/yunce/n8n-content-pipeline-workflow-v5.md.bak b/openclaw/yunce/n8n-content-pipeline-workflow-v5.md.bak
new file mode 100644
index 00000000..3df5f59a
--- /dev/null
+++ b/openclaw/yunce/n8n-content-pipeline-workflow-v5.md.bak
@@ -0,0 +1,827 @@
+# N8N 内容转化流水线工作流设计(v4 → v5 升级)
+
+> 用于:AI 英文文章 → 中文公众号/X/视频 内容转化
+> 工作流ID:`iOf32aOKvTjfTDSM`(v4基础)
+> 触发方式:OpenClaw 通过 Webhook 调用
+> 管理平台:Mac mini 上的 n8n (`https://n8n.ishenwei.online`)
+
+---
+
+## 📋 核心需求更新(v5)
+
+### 输出要求(重要!)
+
+**必须同时输出两个版本:**
+
+| 输出文件 | 路径 | 格式 | 用途 |
+|---------|------|------|------|
+| **Markdown 源文件** | `content-output/{原文件名}.md` | 中文 Markdown | Obsidian 留存、溯源 |
+| **公众号 HTML** | `content-output/{原文件名}.html` | 带样式的 HTML | 直接复制到公众号编辑器 |
+
+### Obsidian 目录结构
+
+```
+~/Workspace/nexus/openclaw/
+├── content-queue/ # 原始英文文章(输入)
+│ └── 2026-03-29-ai-solopreneur.md
+│
+└── content-output/ # 成品(输出)
+ ├── 2026-03-29-ai-solopreneur.md # 翻译后 Markdown
+ └── 2026-03-29-ai-solopreneur.html # 公众号 HTML(新增)
+```
+
+---
+
+## 📋 工作流概述
+
+```
+OpenClaw (发现文章)
+ ↓ (保存文件到 n8n-files 目录)
+ ↓ (触发 Webhook)
+
+┌─────────────────────────────────────────────────────────────┐
+│ N8N 工作流 (v5): content-translation-pipeline-v5 │
+│ │
+│ [Webhook] → [Read File] → [Extract Text] → [AI Agent] │
+│ ↓ ↑ (DeepSeek) │
+│ [Build Markdown] → [Write .md] → [Build HTML] → [Write .html] │
+│ ↓ │
+│ [Send Telegram] │
+└─────────────────────────────────────────────────────────────┘
+```
+
+---
+
+## 🔌 节点详细设计(v5)
+
+### 节点 1️⃣:Webhook Trigger
+
+**类型:** Webhook
+**名称:** `Webhook Trigger`
+**Path:** `/content-translation-v5`(新建 path)
+**Method:** POST
+
+**接收数据格式:**
+```json
+{
+ "note_name": "2026-03-29-ai-solopreneur.md",
+ "source_path": "/Users/weishen/Workspace/nexus/openclaw/content-queue/2026-03-29-ai-solopreneur.md",
+ "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`
+
+**输出:**
+```json
+{
+ "original_content": "...",
+ "note_name": "2026-03-29-ai-solopreneur.md",
+ "source_path": "/Users/weishen/Workspace/nexus/openclaw/content-queue/..."
+}
+```
+
+---
+
+### 节点 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 / 知识管理相关内容(软性,不硬广)
+
+## 输出格式(严格按此 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(新增)
+
+**类型:** Code
+**名称:** `Build Markdown`
+
+**功能:** 将 AI 输出组装成 Markdown 文件
+
+```javascript
+const aiResult = $input.first().json.message;
+const data = typeof aiResult === 'string' ? JSON.parse(aiResult) : aiResult;
+
+const noteName = $('Webhook Trigger').first().json.body.note_name;
+// 去掉 .md 后缀,输出到 content-output
+const outputName = noteName.replace('.md', '.md');
+const outputPath = '/Users/weishen/Workspace/nexus/openclaw/content-output/' + outputName;
+
+const markdown = `# ${data.wechat_title}
+
+${data.wechat_content}
+
+---
+
+## X/Twitter 文案
+
+${data.twitter_copy}
+
+---
+
+## 视频信息
+
+**标题:** ${data.video_title}
+
+**口播脚本:**
+
+${data.video_script}
+
+---
+
+*封面图关键词:${data.cover_keywords?.join(', ')}*
+`;
+
+return {
+ json: {
+ output_path: outputPath,
+ 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.body.output_name }}_output.md`
+- Content: `={{ $json.output_content }}`
+
+**注意:** 输出到 n8n-files/ 目录,由 OpenClaw 负责复制回 Obsidian。
+
+---
+
+### 节点 7️⃣:Build HTML(新增,核心)
+
+**类型:** Code
+**名称:** `Build WeChat HTML`
+
+**功能:** 将 Markdown 转为带样式的公众号 HTML
+
+```javascript
+const aiResult = $input.first().json.message;
+const data = typeof aiResult === 'string' ? JSON.parse(aiResult) : aiResult;
+
+const outputName = $('Webhook Trigger').first().json.body.output_name;
+const htmlPath = '/home/node/.n8n-files/' + outputName + '_output.html';
+
+// 公众号 HTML 模板
+const html = `
+
+
+
+
+
+
+
+${data.wechat_title}
+
+${data.wechat_content.split('\n').map(line => {
+ if (line.startsWith('# ')) return `${line.slice(2)}
`;
+ if (line.startsWith('## ')) return `${line.slice(3)}
`;
+ if (line.startsWith('### ')) return `${line.slice(4)}
`;
+ if (line.trim() === '---') return '
';
+ if (line.startsWith('- ') || line.startsWith('* ')) return `${line.slice(2)}`;
+ if (line.trim() === '') return '';
+ return `${line}
`;
+}).join('\n')}
+
+
+
+
+
🎬 视频标题:${data.video_title}
+
+ 口播脚本:
+ ${data.video_script.replace(/\n/g, '
')}
+
+
+
+
+ 封面图关键词:${data.cover_keywords?.join(' | ')}
+ 原文路径:${$('Webhook Trigger').first().json.body.source_path}
+
+
+
+`;
+
+return {
+ json: {
+ html_path: htmlPath,
+ html_content: html
+ }
+};
+```
+
+---
+
+### 节点 8️⃣:Write .html File(新增)
+
+**类型:** Write Binary File / ReadWriteFile
+**名称:** `Write WeChat HTML`
+
+**配置:**
+- Operation: `write`
+- File Path: `=/home/node/.n8n-files/{{ $json.body.output_name }}_output.html`
+- Content: `={{ $json.html_content }}`
+
+**注意:** 输出到 n8n-files/ 目录,由 OpenClaw 负责复制回 Obsidian。
+
+---
+
+### 节点 9️⃣:Send Telegram Message
+
+**类型:** Telegram
+**名称:** `Send Telegram Message`
+
+**配置:**
+- Chat ID: `5038825565`
+- Text:
+```
+✅ 文章转换完成!
+
+📝 标题:{{ $json.wechat_title }}
+📁 Markdown:/home/node/.n8n-files/{{ $json.body.output_name }}_output.md
+🌐 HTML:/home/node/.n8n-files/{{ $json.body.output_name }}_output.html
+🐦 Twitter 文案:{{ $json.twitter_copy }}
+```
+- Credentials: `Telegram XingJiang Bot`
+
+**注意:** Telegram 只通知完成,OpenClaw 收到通知后负责将文件复制回 Obsidian。
+
+---
+
+## 🔗 完整节点连接图(v5)
+
+```
+┌─────────────────────────────────┐
+│ Webhook Trigger │
+│ POST /content-translation-v5 │
+└──────────────┬──────────────────┘
+ │
+ ▼
+┌─────────────────────────────────┐
+│ Read Obsidian Note │
+│ (Read Binary File) │
+└──────────────┬──────────────────┘
+ │
+ ▼
+┌─────────────────────────────────┐
+│ Extract from File │
+│ (text operation) │
+└──────────────┬──────────────────┘
+ │
+ ┌──────────┴──────────┐
+ │ │
+ │ ┌───────┴────────┐
+ │ │ DeepSeek │
+ │ │ Chat Model │
+ │ └───────┬────────┘
+ │ │
+ ▼ ▼
+┌─────────────────────────────────┐
+│ AI Agent (LangChain) │
+│ - system prompt │
+│ - original content │
+└──────────────┬──────────────────┘
+ │
+ ▼
+┌─────────────────────────────────┐
+│ Build Markdown (NEW) │
+│ 组装中文 Markdown 文件 │
+└──────────────┬──────────────────┘
+ │
+ ▼
+┌─────────────────────────────────┐
+│ Write Markdown Note (NEW) │
+│ → content-output/*.md │
+└──────────────┬──────────────────┘
+ │
+ ▼
+┌─────────────────────────────────┐
+│ Build WeChat HTML (NEW) │
+│ Markdown → 带样式 HTML │
+└──────────────┬──────────────────┘
+ │
+ ▼
+┌─────────────────────────────────┐
+│ Write WeChat HTML (NEW) │
+│ → content-output/*.html │
+└──────────────┬──────────────────┘
+ │
+ ▼
+┌─────────────────────────────────┐
+│ Send Telegram Message │
+│ 文章转换完成通知 │
+└─────────────────────────────────┘
+```
+
+---
+
+## 🔄 调用方式(OpenClaw 侧)
+
+**重要说明:n8n 只能读写 `/home/node/.n8n-files/` 目录,无法直接访问 Obsidian 目录。因此 OpenClaw 负责文件搬运,n8n 专注处理。**
+
+### OpenClaw 完整流程:
+
+```bash
+# =============================================
+# 步骤 1:OpenClaw 复制原文到 n8n-files 目录
+# =============================================
+# SSH 到 MacMini,将源文件复制到 n8n 容器可访问的目录
+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-v5" \
+ -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
+# 输出到 /home/node/.n8n-files/article-2026-03-29_output.html
+# 发送 Telegram 通知
+
+# =============================================
+# 步骤 4:OpenClaw 复制输出文件回 Obsidian(工作流完成后)
+# =============================================
+# 复制 Markdown 成品
+scp macmini:/home/node/.n8n-files/article-2026-03-29_output.md \
+ /Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.md
+
+# 复制 HTML 成品
+scp macmini:/home/node/.n8n-files/article-2026-03-29_output.html \
+ /Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.html
+
+# =============================================
+# 步骤 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 \
+ /home/node/.n8n-files/article-2026-03-29_output.html"
+```
+
+### 简化版 OpenClaw 代码流程:
+
+```python
+import subprocess
+
+note_name = "article-2026-03-29.md"
+source_path = "/Users/weishen/Workspace/nexus/openclaw/content-queue/" + note_name
+output_name = note_name.replace('.md', '')
+n8n_files = "/home/node/.n8n-files"
+
+# 1. 复制原文到 n8n-files
+subprocess.run(['scp', source_path, f'macmini:{n8n_files}/{note_name}'])
+
+# 2. 触发 Webhook
+subprocess.run(['curl', '-X', 'POST',
+ 'https://n8n.ishenwei.online/webhook/content-translation-v5',
+ '-H', 'Content-Type: application/json',
+ '-d', f'{{"note_name": "{note_name}", "output_name": "{output_name}", ...}}'
+])
+
+# 3. 等待 Telegram 通知(工作流完成)
+
+# 4. 复制输出回 Obsidian
+subprocess.run(['scp',
+ f'macmini:{n8n_files}/{output_name}_output.md',
+ f'/Users/weishen/Workspace/nexus/openclaw/content-output/{output_name}.md'])
+subprocess.run(['scp',
+ f'macmini:{n8n_files}/{output_name}_output.html',
+ f'/Users/weishen/Workspace/nexus/openclaw/content-output/{output_name}.html'])
+```
+
+---
+
+## 📁 最终 Obsidian 目录结构
+
+```
+~/Workspace/nexus/openclaw/
+├── content-queue/ # 原始英文(输入,OpenClaw 放置)
+│ └── article-2026-03-29.md
+│
+└── content-output/ # 成品(OpenClaw 从 n8n-files/ 复制回来)
+ ├── article-2026-03-29.md # 中文 Markdown ✅
+ └── article-2026-03-29.html # 公众号 HTML ✅
+```
+
+**文件来源说明:**
+- n8n 工作流只读写 `/home/node/.n8n-files/` 目录
+- OpenClaw 在工作流完成后负责将输出文件复制到 Obsidian 目录
+
+---
+
+## ✅ 验收标准
+
+1. 触发后自动完成整个流程,无需人工干预
+2. `content-output/` 目录同时生成 `.md` 和 `.html` 两个文件
+3. HTML 文件可直接复制粘贴到微信公众号编辑器,格式基本正确
+4. Telegram 收到完成通知(含标题和文件路径)
+5. 错误时 n8n 记录错误节点并停止流程
+
+---
+
+## 📝 备注
+
+- **Markdown 源文件**:保留中文原文,方便后续修改和溯源
+- **HTML 文件**:带内联样式,兼容微信公众号编辑器,复制后格式不走形
+- **文件路径**:写入 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 容器可访问的路径。
+
+**源路径**(由具体任务决定)× → **目标路径**:`macmini:/home/node/.n8n-files/{文件名}`
+
+**示例(内容转化流水线 v5)**:
+```bash
+scp /Users/weishen/Workspace/nexus/openclaw/content-queue/article-2026-03-29.md \
+ macmini:/home/node/.n8n-files/article-2026-03-29.md
+```
+
+---
+
+### 步骤 ②:触发 Webhook
+
+**规则**:通过 `curl` 向 N8N Webhook 端点发送 POST 请求,JSON 数据包含工作流所需的所有元数据。
+
+**通用格式**:
+```bash
+curl -X POST "/webhook/" \
+ -H "Content-Type: application/json" \
+ -d '{
+ "note_name": "<文件名>",
+ "source_path": "<原始文件路径>",
+ "output_name": "<输出文件名(不含扩展名)>",
+ "callback_url": "<完成后通知地址(可选)>"
+ }'
+```
+
+**具体示例(内容转化流水线 v5)**:
+```bash
+curl -X POST "https://n8n.ishenwei.online/webhook/content-translation-v5" \
+ -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"
+ }'
+```
+
+**Webhook Path 查询方式**:
+如不知道目标工作流的 Webhook path,可通过以下方式确认:
+1. 在 n8n 管理界面(https://n8n.ishenwei.online)打开对应工作流
+2. 点击 Webhook 节点,查看右侧 Path 字段
+3. 或参考本文档相关章节的「Webhook Trigger」配置
+
+---
+
+### 步骤 ③:等待执行完成
+
+**规则**:N8N 工作流完成后会发送通知,OpenClaw 需等待此信号后再执行后续复制操作。
+
+**通知方式**(由具体工作流决定,优先级如下):
+
+| 方式 | 说明 | 适用场景 |
+|------|------|---------|
+| **Telegram Bot** | N8N 通过 Telegram 节点发送消息到指定 Chat ID | 推荐,已知用户 Chat ID |
+| **Callback URL** | N8N POST 到指定 URL(OpenClaw Webhook) | 需要 OpenClaw 监听端口 |
+| **轮询 n8n API** | 定期查询工作流执行状态 | 无通知配置时兜底 |
+
+**Telegram 通知格式(示例)**:
+```
+✅ [工作流名称] 执行完成!
+
+📝 标题:
+📁 输出文件:/home/node/.n8n-files/_output.md
+🌐 HTML:/home/node/.n8n-files/_output.html
+```
+
+---
+
+### 步骤 ④:复制输出文件
+
+**规则**:收到完成通知后,从 N8N 容器的 `n8n-files/` 目录复制输出文件到目标存储位置。
+
+**通用格式**:
+```bash
+# 单文件
+scp macmini:/home/node/.n8n-files/<输出文件名> <目标完整路径>
+
+# 多文件(循环)
+for file in <输出文件1> <输出文件2>; do
+ scp macmini:/home/node/.n8n-files/$file <目标目录>/$file
+done
+```
+
+**具体示例(内容转化流水线 v5)**:
+```bash
+# 复制 Markdown 成品
+scp macmini:/home/node/.n8n-files/article-2026-03-29_output.md \
+ /Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.md
+
+# 复制 HTML 成品
+scp macmini:/home/node/.n8n-files/article-2026-03-29_output.html \
+ /Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.html
+```
+
+---
+
+### 步骤 ⑤:清理临时文件
+
+**规则**:工作流完成后,删除 `n8n-files/` 下的临时文件,保持容器目录整洁。
+
+**通用格式**:
+```bash
+ssh macmini "rm /home/node/.n8n-files/<输入文件> /home/node/.n8n-files/<输出文件1> /home/node/.n8n-files/<输出文件2>"
+```
+
+**具体示例(内容转化流水线 v5)**:
+```bash
+ssh macmini "rm /home/node/.n8n-files/article-2026-03-29.md \
+ /home/node/.n8n-files/article-2026-03-29_output.md \
+ /home/node/.n8n-files/article-2026-03-29_output.html"
+```
+
+---
+
+## 🔧 OpenClaw 自动化脚本模板(Python)
+
+以下为通用 Python 模板,适用于任何 OpenClaw → N8N 的文件处理工作流。星辉可直接复制修改使用。
+
+```python
+import subprocess
+import time
+import sys
+
+# ========== 配置区(每个工作流需修改) ==========
+N8N_BASE_URL = "https://n8n.ishenwei.online"
+WEBHOOK_PATH = "content-translation-v5" # <-- 修改为实际 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"
+# ============================================
+
+source_path = SOURCE_FILE
+n8n_input_path = f"{N8N_FILES}/{NOTE_NAME}"
+
+print(f"[Step 1/5] 复制输入文件到 N8N 容器: {NOTE_NAME}")
+result = subprocess.run(
+ ['scp', source_path, 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_path + "\", "
+ "\"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。")
+print("如需手动检查状态,请访问: https://n8n.ishenwei.online")
+sys.exit(0) # <-- 此处退出,等待 Telegram 通知后再手动执行步骤 4
+
+# ---- 以下为步骤 4 和 5,需在收到 Telegram 通知后执行 ----
+
+output_files = [f"{OUTPUT_NAME}_output.md", f"{OUTPUT_NAME}_output.html"]
+
+print(f"[Step 4/5] 复制输出文件回 Obsidian...")
+for file in output_files:
+ src = f"macmini:{N8N_FILES}/{file}"
+ dst = f"{OUTPUT_DIR}/{file}"
+ result = subprocess.run(['scp', src, dst], capture_output=True, text=True)
+ if result.returncode == 0:
+ print(f" V {file}")
+ else:
+ print(f" X {file}: {result.stderr}")
+
+print(f"[Step 5/5] 清理 N8N 容器临时文件...")
+files_to_clean = [NOTE_NAME] + output_files
+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("🎉 工作流执行完毕!")
+```
+
+---
+
+## 📦 速查表:常见工作流配置
+
+| 工作流 | Webhook Path | 输入文件规则 | 输出文件规则 | 通知方式 |
+|--------|-------------|-------------|-------------|---------|
+| 内容转化 v5 | `content-translation-v5` | `content-queue/*.md` | `content-output/*_output.md` + `*_output.html` | Telegram |
+| (待补充) | | | | |
+
+> **添加新工作流时**:在此表新增一行,注明 Webhook Path 和文件路径规则,星辉即可照此执行。
+
+---
+
+## ⚠️ 异常处理规范
+
+| 异常情况 | 处理方式 |
+|---------|---------|
+| `scp` 文件复制失败 | 检查源文件是否存在、检查目标目录权限 |
+| `curl` Webhook 请求超时 | 重试 1 次(间隔 5 秒),仍失败则中止并通知用户 |
+| Telegram 未收到完成通知 | 登录 n8n 管理界面 → 查看对应工作流执行记录 |
+| 输出文件复制失败 | 检查 n8n-files 中是否已生成文件,确认文件名是否匹配 |
+| N8N 工作流报错 | 登录 n8n 管理界面 → 打开对应工作流 → 查看错误节点日志 |
+
+---
+
+## 🔑 关键约束汇总
+
+1. **N8N 容器路径**:`/home/node/.n8n-files/`(只读/写此目录)
+2. **文件传输方式**:`scp` via `macmini` 主机名
+3. **Webhook 触发**:统一使用 `curl -X POST`,Content-Type 为 `application/json`
+4. **通知等待**:必须等待 Telegram/callback 通知后再复制输出文件,不得跳过
+5. **清理时机**:步骤 4 成功后再执行清理,步骤 4 失败时不清理(保留现场)
+6. **配置文件**:`~/.openclaw/.env` 中的 `N8N_API_KEY` 和 `N8N_BASE_URL` 供脚本读取
diff --git a/openclaw/yunce/n8n-content-pipeline-workflow.md b/openclaw/yunce/n8n-content-pipeline-workflow.md
index 3df5f59a..f1a43bb4 100644
--- a/openclaw/yunce/n8n-content-pipeline-workflow.md
+++ b/openclaw/yunce/n8n-content-pipeline-workflow.md
@@ -1,22 +1,30 @@
-# N8N 内容转化流水线工作流设计(v4 → v5 升级)
+# N8N 内容转化流水线工作流设计(v6)
> 用于:AI 英文文章 → 中文公众号/X/视频 内容转化
-> 工作流ID:`iOf32aOKvTjfTDSM`(v4基础)
+> 工作流 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 文件
---
-## 📋 核心需求更新(v5)
+## 核心需求更新(v6)
-### 输出要求(重要!)
+### 输出要求
-**必须同时输出两个版本:**
+**单一输出:中文 Markdown 文件**
| 输出文件 | 路径 | 格式 | 用途 |
|---------|------|------|------|
-| **Markdown 源文件** | `content-output/{原文件名}.md` | 中文 Markdown | Obsidian 留存、溯源 |
-| **公众号 HTML** | `content-output/{原文件名}.html` | 带样式的 HTML | 直接复制到公众号编辑器 |
+| **Markdown 源文件** | `content-output/{原文件名}.md` | 中文 Markdown | Obsidian 留存、编辑、发布 |
+
+> 不再生成公众号 HTML。公众号排版在 Obsidian 中手动完成,或通过其他工具转换。
### Obsidian 目录结构
@@ -25,14 +33,13 @@
├── content-queue/ # 原始英文文章(输入)
│ └── 2026-03-29-ai-solopreneur.md
│
-└── content-output/ # 成品(输出)
- ├── 2026-03-29-ai-solopreneur.md # 翻译后 Markdown
- └── 2026-03-29-ai-solopreneur.html # 公众号 HTML(新增)
+└── content-output/ # 成品(输出,v6 仅 Markdown)
+ └── 2026-03-29-ai-solopreneur.md # 翻译后 Markdown ✅
```
---
-## 📋 工作流概述
+## 工作流概述
```
OpenClaw (发现文章)
@@ -40,25 +47,25 @@ OpenClaw (发现文章)
↓ (触发 Webhook)
┌─────────────────────────────────────────────────────────────┐
-│ N8N 工作流 (v5): content-translation-pipeline-v5 │
+│ N8N 工作流 (v6): content-translation-pipeline-v6 │
│ │
│ [Webhook] → [Read File] → [Extract Text] → [AI Agent] │
-│ ↓ ↑ (DeepSeek) │
-│ [Build Markdown] → [Write .md] → [Build HTML] → [Write .html] │
-│ ↓ │
-│ [Send Telegram] │
+│ ↓ ↑ (DeepSeek) │
+│ [Build Markdown] → [Write .md] │
+│ ↓ │
+│ [Send Telegram] │
└─────────────────────────────────────────────────────────────┘
```
---
-## 🔌 节点详细设计(v5)
+## 节点详细设计(v6)
### 节点 1️⃣:Webhook Trigger
**类型:** Webhook
**名称:** `Webhook Trigger`
-**Path:** `/content-translation-v5`(新建 path)
+**Path:** `/content-translation-v6`(新建 path)
**Method:** POST
**接收数据格式:**
@@ -66,6 +73,7 @@ OpenClaw (发现文章)
{
"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"
}
```
@@ -88,15 +96,6 @@ OpenClaw (发现文章)
**名称:** `Extract from File`
**Operation:** `text`
-**输出:**
-```json
-{
- "original_content": "...",
- "note_name": "2026-03-29-ai-solopreneur.md",
- "source_path": "/Users/weishen/Workspace/nexus/openclaw/content-queue/..."
-}
-```
-
---
### 节点 4️⃣:AI Agent(翻译+改写)
@@ -124,6 +123,11 @@ OpenClaw (发现文章)
- 调性:公众号大V风格,有观点有案例
- 商业化:可自然植入 AI Agent / 知识管理相关内容(软性,不硬广)
+## 文章主题方向(供校准时参考)
+- AI Agent 落地实践与工具推荐
+- AI 赋能商业的最佳实践
+- AI 时代的网络安全与运维
+
## 输出格式(严格按此 JSON 返回)
{
@@ -142,24 +146,24 @@ OpenClaw (发现文章)
---
-### 节点 5️⃣:Build Markdown(新增)
+### 节点 5️⃣:Build Markdown(v6 精简版)
**类型:** Code
**名称:** `Build Markdown`
-**功能:** 将 AI 输出组装成 Markdown 文件
+**功能:** 将 AI 输出的 JSON 组装成结构清晰的 Markdown 文件
```javascript
const aiResult = $input.first().json.message;
const data = typeof aiResult === 'string' ? JSON.parse(aiResult) : aiResult;
const noteName = $('Webhook Trigger').first().json.body.note_name;
-// 去掉 .md 后缀,输出到 content-output
-const outputName = noteName.replace('.md', '.md');
-const outputPath = '/Users/weishen/Workspace/nexus/openclaw/content-output/' + outputName;
+const outputName = noteName.replace('.md', '');
const markdown = `# ${data.wechat_title}
+> ${data.wechat_excerpt}
+
${data.wechat_content}
---
@@ -185,7 +189,7 @@ ${data.video_script}
return {
json: {
- output_path: outputPath,
+ output_name: outputName,
output_content: markdown,
source_path: $('Webhook Trigger').first().json.body.source_path
}
@@ -194,163 +198,21 @@ return {
---
-### 节点 6️⃣:Write .md File(新增)
+### 节点 6️⃣:Write .md File
**类型:** Write Binary File / ReadWriteFile
**名称:** `Write Markdown Note`
**配置:**
- Operation: `write`
-- File Path: `=/home/node/.n8n-files/{{ $json.body.output_name }}_output.md`
+- File Path: `=/home/node/.n8n-files/{{ $json.output_name }}_output.md`
- Content: `={{ $json.output_content }}`
**注意:** 输出到 n8n-files/ 目录,由 OpenClaw 负责复制回 Obsidian。
---
-### 节点 7️⃣:Build HTML(新增,核心)
-
-**类型:** Code
-**名称:** `Build WeChat HTML`
-
-**功能:** 将 Markdown 转为带样式的公众号 HTML
-
-```javascript
-const aiResult = $input.first().json.message;
-const data = typeof aiResult === 'string' ? JSON.parse(aiResult) : aiResult;
-
-const outputName = $('Webhook Trigger').first().json.body.output_name;
-const htmlPath = '/home/node/.n8n-files/' + outputName + '_output.html';
-
-// 公众号 HTML 模板
-const html = `
-
-
-
-
-
-
-
-${data.wechat_title}
-
-${data.wechat_content.split('\n').map(line => {
- if (line.startsWith('# ')) return `${line.slice(2)}
`;
- if (line.startsWith('## ')) return `${line.slice(3)}
`;
- if (line.startsWith('### ')) return `${line.slice(4)}
`;
- if (line.trim() === '---') return '
';
- if (line.startsWith('- ') || line.startsWith('* ')) return `${line.slice(2)}`;
- if (line.trim() === '') return '';
- return `${line}
`;
-}).join('\n')}
-
-
-
-
-
🎬 视频标题:${data.video_title}
-
- 口播脚本:
- ${data.video_script.replace(/\n/g, '
')}
-
-
-
-
- 封面图关键词:${data.cover_keywords?.join(' | ')}
- 原文路径:${$('Webhook Trigger').first().json.body.source_path}
-
-
-
-`;
-
-return {
- json: {
- html_path: htmlPath,
- html_content: html
- }
-};
-```
-
----
-
-### 节点 8️⃣:Write .html File(新增)
-
-**类型:** Write Binary File / ReadWriteFile
-**名称:** `Write WeChat HTML`
-
-**配置:**
-- Operation: `write`
-- File Path: `=/home/node/.n8n-files/{{ $json.body.output_name }}_output.html`
-- Content: `={{ $json.html_content }}`
-
-**注意:** 输出到 n8n-files/ 目录,由 OpenClaw 负责复制回 Obsidian。
-
----
-
-### 节点 9️⃣:Send Telegram Message
+### 节点 7️⃣:Send Telegram Message
**类型:** Telegram
**名称:** `Send Telegram Message`
@@ -361,23 +223,23 @@ return {
```
✅ 文章转换完成!
-📝 标题:{{ $json.wechat_title }}
-📁 Markdown:/home/node/.n8n-files/{{ $json.body.output_name }}_output.md
-🌐 HTML:/home/node/.n8n-files/{{ $json.body.output_name }}_output.html
-🐦 Twitter 文案:{{ $json.twitter_copy }}
+📝 标题:${$json.wechat_title}
+📁 Markdown:/home/node/.n8n-files/${$json.output_name}_output.md
+🐦 Twitter 文案:${$json.twitter_copy}
+🎬 视频标题:${$json.video_title}
```
- Credentials: `Telegram XingJiang Bot`
-**注意:** Telegram 只通知完成,OpenClaw 收到通知后负责将文件复制回 Obsidian。
+**注意:** OpenClaw 收到通知后负责将 Markdown 文件复制回 Obsidian。
---
-## 🔗 完整节点连接图(v5)
+## 节点连接图(v6)
```
┌─────────────────────────────────┐
│ Webhook Trigger │
-│ POST /content-translation-v5 │
+│ POST /content-translation-v6 │
└──────────────┬──────────────────┘
│
▼
@@ -402,61 +264,47 @@ return {
▼ ▼
┌─────────────────────────────────┐
│ AI Agent (LangChain) │
-│ - system prompt │
-│ - original content │
+│ 输出 JSON 格式结果 │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
-│ Build Markdown (NEW) │
+│ Build Markdown │
│ 组装中文 Markdown 文件 │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
-│ Write Markdown Note (NEW) │
+│ Write Markdown Note │
│ → content-output/*.md │
└──────────────┬──────────────────┘
│
▼
┌─────────────────────────────────┐
-│ Build WeChat HTML (NEW) │
-│ Markdown → 带样式 HTML │
-└──────────────┬──────────────────┘
- │
- ▼
-┌─────────────────────────────────┐
-│ Write WeChat HTML (NEW) │
-│ → content-output/*.html │
-└──────────────┬──────────────────┘
- │
- ▼
-┌─────────────────────────────────┐
│ Send Telegram Message │
-│ 文章转换完成通知 │
+│ Markdown 文件路径通知 │
└─────────────────────────────────┘
```
---
-## 🔄 调用方式(OpenClaw 侧)
+## 调用方式(OpenClaw 侧)
-**重要说明:n8n 只能读写 `/home/node/.n8n-files/` 目录,无法直接访问 Obsidian 目录。因此 OpenClaw 负责文件搬运,n8n 专注处理。**
+**核心约束:n8n 只能读写 `/home/node/.n8n-files/` 目录,OpenClaw 负责文件搬运。**
-### OpenClaw 完整流程:
+### OpenClaw 完整流程(v6):
```bash
# =============================================
# 步骤 1:OpenClaw 复制原文到 n8n-files 目录
# =============================================
-# SSH 到 MacMini,将源文件复制到 n8n 容器可访问的目录
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-v5" \
+curl -X POST "https://n8n.ishenwei.online/webhook/content-translation-v6" \
-H "Content-Type: application/json" \
-d '{
"note_name": "article-2026-03-29.md",
@@ -471,95 +319,130 @@ curl -X POST "https://n8n.ishenwei.online/webhook/content-translation-v5" \
# n8n 读取 /home/node/.n8n-files/article-2026-03-29.md
# 处理(翻译、改写)
# 输出到 /home/node/.n8n-files/article-2026-03-29_output.md
-# 输出到 /home/node/.n8n-files/article-2026-03-29_output.html
# 发送 Telegram 通知
# =============================================
# 步骤 4:OpenClaw 复制输出文件回 Obsidian(工作流完成后)
# =============================================
-# 复制 Markdown 成品
scp macmini:/home/node/.n8n-files/article-2026-03-29_output.md \
/Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.md
-# 复制 HTML 成品
-scp macmini:/home/node/.n8n-files/article-2026-03-29_output.html \
- /Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.html
-
# =============================================
# 步骤 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 \
- /home/node/.n8n-files/article-2026-03-29_output.html"
+ /home/node/.n8n-files/article-2026-03-29_output.md"
```
-### 简化版 OpenClaw 代码流程:
+### OpenClaw Python 脚本模板(v6):
```python
import subprocess
+import sys
-note_name = "article-2026-03-29.md"
-source_path = "/Users/weishen/Workspace/nexus/openclaw/content-queue/" + note_name
-output_name = note_name.replace('.md', '')
-n8n_files = "/home/node/.n8n-files"
+# ========== 配置区 ==========
+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"
+# ===================================
-# 1. 复制原文到 n8n-files
-subprocess.run(['scp', source_path, f'macmini:{n8n_files}/{note_name}'])
+n8n_input_path = f"{N8N_FILES}/{NOTE_NAME}"
-# 2. 触发 Webhook
-subprocess.run(['curl', '-X', 'POST',
- 'https://n8n.ishenwei.online/webhook/content-translation-v5',
- '-H', 'Content-Type: application/json',
- '-d', f'{{"note_name": "{note_name}", "output_name": "{output_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}")
-# 3. 等待 Telegram 通知(工作流完成)
+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]}")
-# 4. 复制输出回 Obsidian
-subprocess.run(['scp',
- f'macmini:{n8n_files}/{output_name}_output.md',
- f'/Users/weishen/Workspace/nexus/openclaw/content-output/{output_name}.md'])
-subprocess.run(['scp',
- f'macmini:{n8n_files}/{output_name}_output.html',
- f'/Users/weishen/Workspace/nexus/openclaw/content-output/{output_name}.html'])
+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 目录结构
+## Obsidian 最终目录结构(v6)
```
~/Workspace/nexus/openclaw/
-├── content-queue/ # 原始英文(输入,OpenClaw 放置)
+├── content-queue/ # 原始英文(输入,OpenClaw 放置)
│ └── article-2026-03-29.md
│
-└── content-output/ # 成品(OpenClaw 从 n8n-files/ 复制回来)
- ├── article-2026-03-29.md # 中文 Markdown ✅
- └── article-2026-03-29.html # 公众号 HTML ✅
+└── content-output/ # 成品(v6 仅 Markdown)
+ └── article-2026-03-29.md # 中文 Markdown ✅
```
-**文件来源说明:**
-- n8n 工作流只读写 `/home/node/.n8n-files/` 目录
-- OpenClaw 在工作流完成后负责将输出文件复制到 Obsidian 目录
-
---
-## ✅ 验收标准
+## 验收标准(v6)
1. 触发后自动完成整个流程,无需人工干预
-2. `content-output/` 目录同时生成 `.md` 和 `.html` 两个文件
-3. HTML 文件可直接复制粘贴到微信公众号编辑器,格式基本正确
+2. `content-output/` 目录生成 `.md` 文件(v6 无 HTML)
+3. Markdown 文件内容完整,包含:公众号正文 + Twitter 文案 + 视频脚本
4. Telegram 收到完成通知(含标题和文件路径)
5. 错误时 n8n 记录错误节点并停止流程
---
-## 📝 备注
+## 备注(v6)
-- **Markdown 源文件**:保留中文原文,方便后续修改和溯源
-- **HTML 文件**:带内联样式,兼容微信公众号编辑器,复制后格式不走形
+- **Markdown 源文件**:保留中文原文,便于在 Obsidian 中编辑、排版后再发布
+- **公众号排版**:在 Obsidian 中手动完成,或通过 Markdown→公众号工具转换
- **文件路径**:写入 Obsidian vault 的 `content-output/` 子目录,需确保 n8n 容器有对应目录的写权限
- **API Key**:DeepSeek API 通过 n8n credential 配置,无需在代码中硬编码
+
+---
+
+---
+
# 📖 附录:OpenClaw ↔ N8N 通用工作流调用规范(v1.0)
> 本规范旨在为 OpenClaw 与 N8N 之间的每次交互建立统一标准,使星辉(XingHui)或其他 Agent 能够通过标准化步骤执行任意 N8N 工作流。
@@ -570,7 +453,7 @@ subprocess.run(['scp',
---
-## 🏗️ 架构总览
+## 架构总览
```
OpenClaw N8N 容器 其他存储
@@ -591,26 +474,16 @@ OpenClaw N8N 容器 其他存储
---
-## 📋 标准化执行步骤(星辉操作指南)
+## 标准化执行步骤(星辉操作指南)
### 步骤 ①:准备输入文件
**规则**:所有传递给 N8N 的文件,必须先复制到 N8N 容器可访问的路径。
-**源路径**(由具体任务决定)× → **目标路径**:`macmini:/home/node/.n8n-files/{文件名}`
-
-**示例(内容转化流水线 v5)**:
-```bash
-scp /Users/weishen/Workspace/nexus/openclaw/content-queue/article-2026-03-29.md \
- macmini:/home/node/.n8n-files/article-2026-03-29.md
-```
-
----
+**通用格式**:`scp <源路径> macmini:/home/node/.n8n-files/<文件名>`
### 步骤 ②:触发 Webhook
-**规则**:通过 `curl` 向 N8N Webhook 端点发送 POST 请求,JSON 数据包含工作流所需的所有元数据。
-
**通用格式**:
```bash
curl -X POST "/webhook/" \
@@ -618,194 +491,42 @@ curl -X POST "/webhook/" \
-d '{
"note_name": "<文件名>",
"source_path": "<原始文件路径>",
- "output_name": "<输出文件名(不含扩展名)>",
- "callback_url": "<完成后通知地址(可选)>"
- }'
-```
-
-**具体示例(内容转化流水线 v5)**:
-```bash
-curl -X POST "https://n8n.ishenwei.online/webhook/content-translation-v5" \
- -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"
+ "output_name": "<输出文件名(不含扩展名)>"
}'
```
**Webhook Path 查询方式**:
-如不知道目标工作流的 Webhook path,可通过以下方式确认:
1. 在 n8n 管理界面(https://n8n.ishenwei.online)打开对应工作流
2. 点击 Webhook 节点,查看右侧 Path 字段
-3. 或参考本文档相关章节的「Webhook Trigger」配置
-
----
### 步骤 ③:等待执行完成
**规则**:N8N 工作流完成后会发送通知,OpenClaw 需等待此信号后再执行后续复制操作。
-**通知方式**(由具体工作流决定,优先级如下):
-
-| 方式 | 说明 | 适用场景 |
-|------|------|---------|
-| **Telegram Bot** | N8N 通过 Telegram 节点发送消息到指定 Chat ID | 推荐,已知用户 Chat ID |
-| **Callback URL** | N8N POST 到指定 URL(OpenClaw Webhook) | 需要 OpenClaw 监听端口 |
-| **轮询 n8n API** | 定期查询工作流执行状态 | 无通知配置时兜底 |
-
-**Telegram 通知格式(示例)**:
-```
-✅ [工作流名称] 执行完成!
-
-📝 标题:
-📁 输出文件:/home/node/.n8n-files/_output.md
-🌐 HTML:/home/node/.n8n-files/_output.html
-```
-
----
+**通知方式优先级**:Telegram Bot > Callback URL > 轮询 n8n API
### 步骤 ④:复制输出文件
-**规则**:收到完成通知后,从 N8N 容器的 `n8n-files/` 目录复制输出文件到目标存储位置。
-
-**通用格式**:
-```bash
-# 单文件
-scp macmini:/home/node/.n8n-files/<输出文件名> <目标完整路径>
-
-# 多文件(循环)
-for file in <输出文件1> <输出文件2>; do
- scp macmini:/home/node/.n8n-files/$file <目标目录>/$file
-done
-```
-
-**具体示例(内容转化流水线 v5)**:
-```bash
-# 复制 Markdown 成品
-scp macmini:/home/node/.n8n-files/article-2026-03-29_output.md \
- /Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.md
-
-# 复制 HTML 成品
-scp macmini:/home/node/.n8n-files/article-2026-03-29_output.html \
- /Users/weishen/Workspace/nexus/openclaw/content-output/article-2026-03-29.html
-```
-
----
+**通用格式**:`scp macmini:/home/node/.n8n-files/<输出文件名> <目标完整路径>`
### 步骤 ⑤:清理临时文件
-**规则**:工作流完成后,删除 `n8n-files/` 下的临时文件,保持容器目录整洁。
-
-**通用格式**:
-```bash
-ssh macmini "rm /home/node/.n8n-files/<输入文件> /home/node/.n8n-files/<输出文件1> /home/node/.n8n-files/<输出文件2>"
-```
-
-**具体示例(内容转化流水线 v5)**:
-```bash
-ssh macmini "rm /home/node/.n8n-files/article-2026-03-29.md \
- /home/node/.n8n-files/article-2026-03-29_output.md \
- /home/node/.n8n-files/article-2026-03-29_output.html"
-```
+**通用格式**:`ssh macmini "rm /home/node/.n8n-files/<输入文件> /home/node/.n8n-files/<输出文件>"`
---
-## 🔧 OpenClaw 自动化脚本模板(Python)
-
-以下为通用 Python 模板,适用于任何 OpenClaw → N8N 的文件处理工作流。星辉可直接复制修改使用。
-
-```python
-import subprocess
-import time
-import sys
-
-# ========== 配置区(每个工作流需修改) ==========
-N8N_BASE_URL = "https://n8n.ishenwei.online"
-WEBHOOK_PATH = "content-translation-v5" # <-- 修改为实际 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"
-# ============================================
-
-source_path = SOURCE_FILE
-n8n_input_path = f"{N8N_FILES}/{NOTE_NAME}"
-
-print(f"[Step 1/5] 复制输入文件到 N8N 容器: {NOTE_NAME}")
-result = subprocess.run(
- ['scp', source_path, 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_path + "\", "
- "\"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。")
-print("如需手动检查状态,请访问: https://n8n.ishenwei.online")
-sys.exit(0) # <-- 此处退出,等待 Telegram 通知后再手动执行步骤 4
-
-# ---- 以下为步骤 4 和 5,需在收到 Telegram 通知后执行 ----
-
-output_files = [f"{OUTPUT_NAME}_output.md", f"{OUTPUT_NAME}_output.html"]
-
-print(f"[Step 4/5] 复制输出文件回 Obsidian...")
-for file in output_files:
- src = f"macmini:{N8N_FILES}/{file}"
- dst = f"{OUTPUT_DIR}/{file}"
- result = subprocess.run(['scp', src, dst], capture_output=True, text=True)
- if result.returncode == 0:
- print(f" V {file}")
- else:
- print(f" X {file}: {result.stderr}")
-
-print(f"[Step 5/5] 清理 N8N 容器临时文件...")
-files_to_clean = [NOTE_NAME] + output_files
-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("🎉 工作流执行完毕!")
-```
-
----
-
-## 📦 速查表:常见工作流配置
+## 速查表:常见工作流配置
| 工作流 | Webhook Path | 输入文件规则 | 输出文件规则 | 通知方式 |
|--------|-------------|-------------|-------------|---------|
-| 内容转化 v5 | `content-translation-v5` | `content-queue/*.md` | `content-output/*_output.md` + `*_output.html` | Telegram |
+| 内容转化 v6 | `content-translation-v6` | `content-queue/*.md` | `content-output/*_output.md` | Telegram |
| (待补充) | | | | |
> **添加新工作流时**:在此表新增一行,注明 Webhook Path 和文件路径规则,星辉即可照此执行。
---
-## ⚠️ 异常处理规范
+## 异常处理规范
| 异常情况 | 处理方式 |
|---------|---------|
@@ -817,7 +538,7 @@ print("🎉 工作流执行完毕!")
---
-## 🔑 关键约束汇总
+## 关键约束汇总
1. **N8N 容器路径**:`/home/node/.n8n-files/`(只读/写此目录)
2. **文件传输方式**:`scp` via `macmini` 主机名