yunce: TOOLS.md新增N8N内容翻译流水线完整调用指南
This commit is contained in:
@@ -294,4 +294,243 @@ message \
|
|||||||
7. 如果pull成功,也可以告诉用户目录已经更新。
|
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