yunce: TOOLS.md新增N8N内容翻译流水线完整调用指南
This commit is contained in:
@@ -294,4 +294,243 @@ message \
|
||||
7. 如果pull成功,也可以告诉用户目录已经更新。
|
||||
|
||||
### 异常处理
|
||||
如果在处理git命令过程中出现任何问题,请第一时间联系用户。并把错误消息贴给用户看。
|
||||
如果在处理git命令过程中出现任何问题,请第一时间联系用户。并把错误消息贴给用户看。
|
||||
|
||||
## N8N 工作流管理 (2026-03-29)
|
||||
用户可能说: "帮我看看n8n上的工作流"、"触发n8n工作流"、"查看n8n执行记录"
|
||||
|
||||
### 连接配置
|
||||
| 配置项 | 值 |
|
||||
|--------|-----|
|
||||
| **Base URL** | `https://n8n.ishenwei.online` |
|
||||
| **API Key** | `~/.openclaw/.env` 中的 `N8N_API_KEY` |
|
||||
| **管理界面** | https://n8n.ishenwei.online |
|
||||
|
||||
### 核心脚本路径
|
||||
- **技能位置**: `~/.openclaw/skills/n8n/`
|
||||
- **n8n_api.py**: 工作流管理、触发执行、查看状态
|
||||
- **n8n_tester.py**: 验证工作流、dry-run 测试
|
||||
- **n8n_optimizer.py**: 性能分析与优化建议
|
||||
|
||||
### 环境变量(已在 `~/.openclaw/.env`)
|
||||
```
|
||||
N8N_API_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
||||
N8N_BASE_URL=https://n8n.ishenwei.online
|
||||
```
|
||||
|
||||
### 常用操作
|
||||
```bash
|
||||
# 查看工作流列表
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_api.py list-workflows --pretty
|
||||
|
||||
# 查看执行记录
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_api.py list-executions --id <workflow-id> --limit 20 --pretty
|
||||
|
||||
# 手动触发工作流
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_api.py execute --id <workflow-id>
|
||||
|
||||
# 带数据触发
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_api.py execute --id <workflow-id> --data '{"key": "value"}'
|
||||
|
||||
# 激活/停用
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_api.py activate --id <workflow-id>
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_api.py deactivate --id <workflow-id>
|
||||
```
|
||||
|
||||
### 测试与验证
|
||||
```bash
|
||||
# 验证工作流结构
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_tester.py validate --id <workflow-id> --pretty
|
||||
|
||||
# Dry Run 测试
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_tester.py dry-run --id <workflow-id> --data '{}'
|
||||
```
|
||||
|
||||
### 创建工作流
|
||||
```bash
|
||||
# 从 JSON 文件创建
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_api.py create --from-file workflow.json
|
||||
|
||||
# 创建后激活
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_api.py activate --id <new-workflow-id>
|
||||
```
|
||||
|
||||
### 性能分析
|
||||
```bash
|
||||
# 分析性能
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_optimizer.py analyze --id <workflow-id> --pretty
|
||||
|
||||
# 获取优化建议
|
||||
python3 ~/.openclaw/skills/n8n/scripts/n8n_optimizer.py suggest --id <workflow-id> --pretty
|
||||
```
|
||||
|
||||
### Webhook 触发
|
||||
```bash
|
||||
# 直接调用 Webhook
|
||||
curl -X POST "https://n8n.ishenwei.online/webhook/<webhook-path>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"key": "value"}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## N8N 内容翻译流水线 (2026-03-29)
|
||||
|
||||
**用途**:英文文章 → 中文(公众号Markdown + HTML)+ Twitter文案 + 视频脚本
|
||||
|
||||
**架构说明**:
|
||||
- n8n 只能读写容器内的 `/home/node/.n8n-files/` 目录
|
||||
- OpenClaw 负责文件搬运:复制到 n8n → 触发 → 复制回 Obsidian
|
||||
- 完整设计文档:`~/Obsidian/shenwei/openclaw/yunce/n8n-content-pipeline-workflow.md`
|
||||
|
||||
### 工作流版本
|
||||
| 版本 | ID | 状态 | 说明 |
|
||||
|------|-----|------|------|
|
||||
| **v5(最新)** | `iOf32aOKvTjfTDSM` | 未激活 | 双输出:Markdown + HTML |
|
||||
| v3 | `tOGMiC6qOJPOY89E` | 活跃 | 单输出(Markdown) |
|
||||
|
||||
### 调用前的文件准备
|
||||
n8n 的 Read/Write File 节点使用 `/home/node/.n8n-files/` 目录,**不是** Obsidian 目录。
|
||||
|
||||
```
|
||||
n8n 容器内路径: /home/node/.n8n-files/
|
||||
MacMini Obsidian: /Users/weishen/Workspace/nexus/openclaw/
|
||||
```
|
||||
|
||||
### OpenClaw 完整调用流程
|
||||
|
||||
#### 第一步:复制原文到 n8n-files
|
||||
```bash
|
||||
# SSH 到 MacMini,将源文件复制到 n8n 容器可访问的目录
|
||||
scp /Users/weishen/Workspace/nexus/openclaw/content-queue/{文件名}.md \
|
||||
macmini:/home/node/.n8n-files/{文件名}.md
|
||||
```
|
||||
|
||||
#### 第二步:触发 Webhook
|
||||
```bash
|
||||
# 注意:v5 使用 /content-translation-v5
|
||||
# note_name = n8n-files 里的文件名
|
||||
# output_name = 输出的文件名(不含扩展名)
|
||||
# source_path = Obsidian 原文路径(用于记录溯源)
|
||||
|
||||
curl -X POST "https://n8n.ishenwei.online/webhook/content-translation-v5" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{
|
||||
\"note_name\": \"{文件名}.md\",
|
||||
\"output_name\": \"{文件名}\",
|
||||
\"source_path\": \"/Users/weishen/Workspace/nexus/openclaw/content-queue/{文件名}.md\",
|
||||
\"callback_url\": \"http://192.168.3.189:18789/webhook/yunce\"
|
||||
}"
|
||||
```
|
||||
|
||||
#### 第三步:等待 Telegram 通知
|
||||
- Telegram Bot (`y1NdRSaJwl0LoY37`) 会发送完成消息
|
||||
- 消息格式:`✅ 文章转换完成!📝 标题:xxx`
|
||||
|
||||
#### 第四步:复制输出回 Obsidian
|
||||
```bash
|
||||
# 复制 Markdown 成品
|
||||
scp macmini:/home/node/.n8n-files/{output_name}_output.md \
|
||||
/Users/weishen/Workspace/nexus/openclaw/content-output/{output_name}.md
|
||||
|
||||
# 复制 HTML 成品(公众号用)
|
||||
scp macmini:/home/node/.n8n-files/{output_name}_output.html \
|
||||
/Users/weishen/Workspace/nexus/openclaw/content-output/{output_name}.html
|
||||
```
|
||||
|
||||
#### 第五步:清理 n8n-files 临时文件
|
||||
```bash
|
||||
ssh macmini "rm /home/node/.n8n-files/{文件名}.md \
|
||||
/home/node/.n8n-files/{output_name}_output.md \
|
||||
/home/node/.n8n-files/{output_name}_output.html"
|
||||
```
|
||||
|
||||
### 完整 Python 调用示例
|
||||
```python
|
||||
import subprocess
|
||||
import time
|
||||
import json
|
||||
|
||||
def trigger_content_translation(source_note_name, source_path, output_name):
|
||||
"""完整的内容翻译流水线调用"""
|
||||
|
||||
n8n_files_dir = "/home/node/.n8n-files"
|
||||
obsidian_root = "/Users/weishen/Workspace/nexus/openclaw"
|
||||
|
||||
# ========== 第一步:复制原文到 n8n ==========
|
||||
source_full_path = f"{obsidian_root}/content-queue/{source_note_name}"
|
||||
print(f"[1/5] 复制原文到 n8n-files: {source_note_name}")
|
||||
subprocess.run([
|
||||
'scp', source_full_path,
|
||||
f'macmini:{n8n_files_dir}/{source_note_name}'
|
||||
], check=True)
|
||||
|
||||
# ========== 第二步:触发 Webhook ==========
|
||||
print(f"[2/5] 触发 n8n 工作流...")
|
||||
webhook_url = "https://n8n.ishenwei.online/webhook/content-translation-v5"
|
||||
payload = json.dumps({
|
||||
"note_name": source_note_name,
|
||||
"output_name": output_name,
|
||||
"source_path": source_path,
|
||||
"callback_url": "http://192.168.3.189:18789/webhook/yunce"
|
||||
})
|
||||
subprocess.run([
|
||||
'curl', '-X', 'POST', webhook_url,
|
||||
'-H', 'Content-Type: application/json',
|
||||
'-d', payload
|
||||
], check=True)
|
||||
|
||||
# ========== 第三步:等待处理 ==========
|
||||
print("[3/5] 等待 Telegram 完成通知...")
|
||||
# Agent 应等待 Telegram 消息后再继续
|
||||
time.sleep(5) # 示意用,实际应监听 Telegram
|
||||
|
||||
# ========== 第四步:复制输出回 Obsidian ==========
|
||||
print(f"[4/5] 复制输出到 content-output...")
|
||||
output_md = f"{n8n_files_dir}/{output_name}_output.md"
|
||||
output_html = f"{n8n_files_dir}/{output_name}_output.html"
|
||||
dest_root = f"{obsidian_root}/content-output"
|
||||
|
||||
subprocess.run(['scp', f'macmini:{output_md}', f'{dest_root}/{output_name}.md'], check=True)
|
||||
subprocess.run(['scp', f'macmini:{output_html}', f'{dest_root}/{output_name}.html'], check=True)
|
||||
|
||||
# ========== 第五步:清理 ==========
|
||||
print(f"[5/5] 清理 n8n-files...")
|
||||
subprocess.run(['ssh', 'macmini', f'rm {n8n_files_dir}/{source_note_name} {output_md} {output_html}'])
|
||||
|
||||
print(f"✅ 完成!输出: {dest_root}/{output_name}.md + .html")
|
||||
|
||||
# 调用示例
|
||||
trigger_content_translation(
|
||||
source_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"
|
||||
)
|
||||
```
|
||||
|
||||
### Obsidian 目录结构
|
||||
```
|
||||
~/Workspace/nexus/openclaw/
|
||||
├── content-queue/ # 原始英文文章
|
||||
│ └── article-2026-03-29.md
|
||||
│
|
||||
└── content-output/ # 翻译成品(Markdown + HTML)
|
||||
├── article-2026-03-29.md # 中文 Markdown(留存溯源)
|
||||
└── article-2026-03-29.html # 公众号 HTML(直接复制粘贴)
|
||||
```
|
||||
|
||||
### 输出文件说明
|
||||
| 文件 | 格式 | 用途 |
|
||||
|------|------|------|
|
||||
| `*.md` | 中文 Markdown | Obsidian 留存、溯源、可修改 |
|
||||
| `*.html` | 带样式 HTML | 复制到公众号编辑器,几乎零调整 |
|
||||
|
||||
### 常见问题
|
||||
**Q: n8n API 返回 401?**
|
||||
A: 检查 `~/.openclaw/.env` 里的 `N8N_API_KEY` 是否完整(应为 3 段 JWT)
|
||||
|
||||
**Q: 文件复制到 n8n-files 失败?**
|
||||
A: 确认 MacMini 上 `/home/node/.n8n-files/` 目录存在且有写权限
|
||||
|
||||
**Q: 如何查看工作流状态?**
|
||||
A: 用 `n8n_api.py list-executions --id <workflow-id> --limit 10 --pretty` 查看最近执行
|
||||
Reference in New Issue
Block a user