From 9a91e7b02f26d5f158777f597290035f177093b2 Mon Sep 17 00:00:00 2001 From: weishen Date: Mon, 30 Mar 2026 11:08:38 +0800 Subject: [PATCH] =?UTF-8?q?yunce:=20=E8=BF=BD=E5=8A=A0=20N8N=20=E9=80=9A?= =?UTF-8?q?=E7=94=A8=E5=B7=A5=E4=BD=9C=E6=B5=81=E8=B0=83=E7=94=A8=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E9=99=84=E5=BD=95=20v1.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- openclaw/xingshu/memory/2026-03-30.md | 16 ++ .../yunce/n8n-content-pipeline-workflow.md | 265 ++++++++++++++++++ 2 files changed, 281 insertions(+) create mode 100644 openclaw/xingshu/memory/2026-03-30.md diff --git a/openclaw/xingshu/memory/2026-03-30.md b/openclaw/xingshu/memory/2026-03-30.md new file mode 100644 index 00000000..32a6b040 --- /dev/null +++ b/openclaw/xingshu/memory/2026-03-30.md @@ -0,0 +1,16 @@ +# 2026-03-30 每日记忆 + +## 今日事件 + +### 会话启动 +- 时间:上午 10:51 AM +- 触发:新会话启动 (Telegram direct) + +### 失职记录 +- ⚠️ 未遵循 AGENTS.md "每日必做"规程 +- 应于首次对话时自动创建 `memory/2026-03-30.md`,实际未执行 +- 经用户提醒后补建 + +### 待跟进 +- [ ] 无 + diff --git a/openclaw/yunce/n8n-content-pipeline-workflow.md b/openclaw/yunce/n8n-content-pipeline-workflow.md index 6755b072..834c5ab5 100644 --- a/openclaw/yunce/n8n-content-pipeline-workflow.md +++ b/openclaw/yunce/n8n-content-pipeline-workflow.md @@ -565,3 +565,268 @@ subprocess.run(['scp', - **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_name>_output.md +🌐 HTML:/home/node/.n8n-files/<output_name>_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` 供脚本读取