n8n workflow deployer

工作流概述

这是一个包含21个节点的复杂工作流,主要用于自动化处理各种任务。

工作流源代码

下载
{
  "id": "bhWsUxipJ9wuTA5K",
  "meta": {
    "instanceId": "fd11e31161384d7618b8c5580f01ec2285d2165d3df82195429972f6a3f814eb",
    "templateCredsSetupCompleted": true
  },
  "name": "n8n workflow deployer",
  "tags": [],
  "nodes": [
    {
      "id": "8db6d045-5ef8-444a-ae3e-0f0611946008",
      "name": "Get Existing Workflow Tags",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -580,
        -580
      ],
      "parameters": {
        "url": "={{ $json.N8N_Instance_URL }}api/v1/tags",
        "options": {},
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "application/json"
            }
          ]
        },
        "nodeCredentialType": "n8nApi"
      },
      "credentials": {
        "n8nApi": {
          "id": "eOE2pATZyQiS1K4C",
          "name": "n8n account"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "da4aeef3-05a4-48c9-ae5c-9038f07e3693",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -300,
        -1040
      ],
      "parameters": {
        "color": 3,
        "width": 1460,
        "height": 760,
        "content": "## Setup Instructions

**1.** In Google Drive create a **ToDeploy** folder and a **Deployed** folder
+ Update \"**Google Drive Trigger -ToDeploy folder**\" to your ToDeploy folder
+ Update \"**Move JSON file to Deployed folder**\" to you Deployed folder


**2.** Create a **n8n API key**:
+Go to Settings > n8n API
+Select Create an API key
+Copy API Key

**3.** In \"**Get Existing Workflow Tags**\" node: 
Create n8n API Authentication
**Authentication:** Predefined Credential Type
**Credential Type:** n8n API

Create new credential:
+Paste in API key
+Baseurl: https://SUB.DOMAINNAME.com/api/v1/

**4.** Add n8n API authentication to: 
+ \"**Create n8n Workflow**\" node
+ \"**Set Workflow Tag**\" node


**5.** Add your N8N instance URL to the **N8N_Instance_URL** variable in \"**Set n8n URL variable**\" node.

**6.** Run **\"Get Workflow Tags\"** node and copy the ID of your chosen tag.

**7.** In \"**Set n8n API URL & Tag ID variables**\" node:
+ Add the Workflow Tag ID to the **N8N_Instance_Tag** variable
+ Add your N8N instance URL to the **N8N_Instance_URL** variable


**9.** Set workflow to Active

**10.** Add n8n json files to Google Drive folder 

"
      },
      "typeVersion": 1
    },
    {
      "id": "520aa22e-0456-4383-ba6d-fd89fd77f193",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -680,
        -140
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "height": 280,
        "content": "### Set variables:
**N8N_Instance_Tag** **N8N_Instance_URL** "
      },
      "typeVersion": 1
    },
    {
      "id": "2e0794eb-0213-48fd-a974-26301bfdfc8a",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        300,
        -120
      ],
      "parameters": {
        "color": 4,
        "width": 440,
        "height": 260,
        "content": "### Configure n8n API authentication"
      },
      "typeVersion": 1
    },
    {
      "id": "f77ad2ef-32e3-4d24-b79b-9898152cbbac",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1100,
        -780
      ],
      "parameters": {
        "color": 5,
        "width": 740,
        "height": 420,
        "content": "## 1. Get Workflow Tags"
      },
      "typeVersion": 1
    },
    {
      "id": "cf10c998-44fc-4f1a-8d61-9187a9eae82a",
      "name": "When clicking ‘Test workflow’",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -1040,
        -580
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "206fffc1-d7ee-41eb-b6ad-55be8ae60526",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -880,
        -700
      ],
      "parameters": {
        "color": 4,
        "width": 220,
        "height": 280,
        "content": "### Set variable:
**N8N_Instance_URL** "
      },
      "typeVersion": 1
    },
    {
      "id": "2bbe9b3e-c302-497f-a724-e8c51ce673ef",
      "name": "Extract JSON object from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -80,
        -40
      ],
      "parameters": {
        "options": {},
        "operation": "fromJson"
      },
      "typeVersion": 1
    },
    {
      "id": "2f0acb18-86c4-4f94-8f76-b72174809643",
      "name": "Clean JSON file ready for import",
      "type": "n8n-nodes-base.code",
      "position": [
        140,
        -40
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const fullWorkflow = $json.data || $json;

// Build settings with only allowed fields
const cleanSettings = {};
if (fullWorkflow.settings?.executionOrder) {
  cleanSettings.executionOrder = fullWorkflow.settings.executionOrder;
}
if (fullWorkflow.settings?.timezone) {
  cleanSettings.timezone = fullWorkflow.settings.timezone;
}

// Construct clean workflow object
const cleanWorkflow = {
  name: fullWorkflow.name,
  nodes: fullWorkflow.nodes,
  connections: fullWorkflow.connections,
  settings: cleanSettings,
};

return { json: cleanWorkflow };
"
      },
      "typeVersion": 2
    },
    {
      "id": "f0428a03-2194-4390-b14b-5149ea3a220b",
      "name": "Set n8n API URL & Tag ID variables",
      "type": "n8n-nodes-base.set",
      "position": [
        -600,
        -40
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "41afa23f-bacf-4c2b-9630-68483acc9fe6",
              "name": "N8N_Instance_URL",
              "type": "string",
              "value": "https://SUB.DOMAINNAME.com/"
            },
            {
              "id": "c27f2d9d-ee1f-4ada-90cc-20177017b342",
              "name": "N8N_Instance_Tag",
              "type": "string",
              "value": "mIzqUB1qBwewiiX3"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "9f59cba9-9452-4e05-9d95-3e405ec195cf",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -980,
        -140
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "height": 280,
        "content": "### Change Google Drive Folder"
      },
      "typeVersion": 1
    },
    {
      "id": "87ce4868-407c-461f-92e2-6b3bf1dd616e",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -640,
        -760
      ],
      "parameters": {
        "color": 4,
        "height": 340,
        "content": "### Configure n8n API authentication.

### Tag ID
Copy your chosen Tag ID to **N8N_Instance_Tag** "
      },
      "typeVersion": 1
    },
    {
      "id": "b1c3f693-a587-4928-a90a-8288eb84a879",
      "name": "Create n8n Workflow",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        360,
        -40
      ],
      "parameters": {
        "url": "={{ $('Set n8n API URL & Tag ID variables').item.json.N8N_Instance_URL }}api/v1/workflows",
        "body": "={{ $json }}",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "raw",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "rawContentType": "application/json",
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "application/json"
            },
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "nodeCredentialType": "n8nApi"
      },
      "credentials": {
        "n8nApi": {
          "id": "eOE2pATZyQiS1K4C",
          "name": "n8n account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "70ff3b11-3664-4fec-a220-72696a6083c5",
      "name": "Set Workflow Tag",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        600,
        -40
      ],
      "parameters": {
        "url": "={{ $('Set n8n API URL & Tag ID variables').item.json.N8N_Instance_URL }}api/v1/workflows/{{ $json.id }}/tags",
        "method": "PUT",
        "options": {},
        "jsonBody": "=[
  {
    \"id\": \"{{ $('Set n8n API URL & Tag ID variables').item.json.N8N_Instance_Tag }}\"
  }
]",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "n8nApi"
      },
      "credentials": {
        "n8nApi": {
          "id": "eOE2pATZyQiS1K4C",
          "name": "n8n account"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "55671121-7027-476b-8eff-9d9a16385cce",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        -120
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "height": 260,
        "content": "### Change Google Drive Deployed Folder"
      },
      "typeVersion": 1
    },
    {
      "id": "e8a9bbd8-a41d-4b82-931c-5570651d8583",
      "name": "Capture Name If Fails To Create Workflow",
      "type": "n8n-nodes-base.code",
      "position": [
        600,
        160
      ],
      "parameters": {
        "jsCode": "return [{
  json: {
    workflowName:   $json.name,
    errorMessage:   $json.error.message,
  }
}];
"
      },
      "typeVersion": 2
    },
    {
      "id": "0fee0939-f3bd-4fd1-b444-40509f4b0f50",
      "name": "Move JSON file to Deployed folder",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        880,
        -40
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Google Drive Trigger -ToDeploy folder').item.json.id }}"
        },
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "1nQb17Xf7ZTF75E-aettkFtBVKI_nOrsW",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1nQb17Xf7ZTF75E-aettkFtBVKI_nOrsW",
          "cachedResultName": "Deployed"
        },
        "operation": "move"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "SfLfcExz8PihKGNB",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "59567f07-4d69-4d30-a5ef-934198ff101d",
      "name": "Download n8n JSON File",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -320,
        -40
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Google Drive Trigger -ToDeploy folder').item.json.id }}"
        },
        "options": {
          "binaryPropertyName": "data"
        },
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "SfLfcExz8PihKGNB",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "a5837765-9787-43a5-bbfe-44e5f3728aee",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1100,
        -260
      ],
      "parameters": {
        "color": 5,
        "width": 2260,
        "height": 620,
        "content": "## 2. Import JSON Workflow Into n8n Instance"
      },
      "typeVersion": 1
    },
    {
      "id": "bcb77b34-36c8-4839-b3e2-72f8e60871ba",
      "name": "Set n8n URL variable",
      "type": "n8n-nodes-base.set",
      "position": [
        -820,
        -580
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "41afa23f-bacf-4c2b-9630-68483acc9fe6",
              "name": "N8N_Instance_URL",
              "type": "string",
              "value": "https://SUB.DOMAINNAME.com/"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7281ab81-d1e8-4a78-8e2f-e1049633d6e6",
      "name": "Google Drive Trigger -ToDeploy folder",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        -880,
        -40
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1EPGHT5fBn0Hx_EVDixJiJMJgRbNNdB0I",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1EPGHT5fBn0Hx_EVDixJiJMJgRbNNdB0I",
          "cachedResultName": "toDeploy"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "SfLfcExz8PihKGNB",
          "name": "Google Drive account"
        }
      },
      "typeVersion": 1
    }
  ],
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "77325a25-51f0-441a-8750-fe6d1d5a266f",
  "connections": {
    "Set Workflow Tag": {
      "main": [
        [
          {
            "node": "Move JSON file to Deployed folder",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create n8n Workflow": {
      "main": [
        [
          {
            "node": "Set Workflow Tag",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Capture Name If Fails To Create Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set n8n URL variable": {
      "main": [
        [
          {
            "node": "Get Existing Workflow Tags",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download n8n JSON File": {
      "main": [
        [
          {
            "node": "Extract JSON object from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract JSON object from File": {
      "main": [
        [
          {
            "node": "Clean JSON file ready for import",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Clean JSON file ready for import": {
      "main": [
        [
          {
            "node": "Create n8n Workflow",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking ‘Test workflow’": {
      "main": [
        [
          {
            "node": "Set n8n URL variable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set n8n API URL & Tag ID variables": {
      "main": [
        [
          {
            "node": "Download n8n JSON File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Drive Trigger -ToDeploy folder": {
      "main": [
        [
          {
            "node": "Set n8n API URL & Tag ID variables",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

功能特点

  • 自动检测新邮件
  • AI智能内容分析
  • 自定义分类规则
  • 批量处理能力
  • 详细的处理日志

技术分析

节点类型及作用

  • Httprequest
  • Stickynote
  • Manualtrigger
  • Extractfromfile
  • Code

复杂度评估

配置难度:
★★★★☆
维护难度:
★★☆☆☆
扩展性:
★★★★☆

实施指南

前置条件

  • 有效的Gmail账户
  • n8n平台访问权限
  • Google API凭证
  • AI分类服务订阅

配置步骤

  1. 在n8n中导入工作流JSON文件
  2. 配置Gmail节点的认证信息
  3. 设置AI分类器的API密钥
  4. 自定义分类规则和标签映射
  5. 测试工作流执行
  6. 配置定时触发器(可选)

关键参数

参数名称 默认值 说明
maxEmails 50 单次处理的最大邮件数量
confidenceThreshold 0.8 分类置信度阈值
autoLabel true 是否自动添加标签

最佳实践

优化建议

  • 定期更新AI分类模型以提高准确性
  • 根据邮件量调整处理批次大小
  • 设置合理的分类置信度阈值
  • 定期清理过期的分类规则

安全注意事项

  • 妥善保管API密钥和认证信息
  • 限制工作流的访问权限
  • 定期审查处理日志
  • 启用双因素认证保护Gmail账户

性能优化

  • 使用增量处理减少重复工作
  • 缓存频繁访问的数据
  • 并行处理多个邮件分类任务
  • 监控系统资源使用情况

故障排除

常见问题

邮件未被正确分类

检查AI分类器的置信度阈值设置,适当降低阈值或更新训练数据。

Gmail认证失败

确认Google API凭证有效且具有正确的权限范围,重新进行OAuth授权。

调试技巧

  • 启用详细日志记录查看每个步骤的执行情况
  • 使用测试邮件验证分类逻辑
  • 检查网络连接和API服务状态
  • 逐步执行工作流定位问题节点

错误处理

工作流包含以下错误处理机制:

  • 网络超时自动重试(最多3次)
  • API错误记录和告警
  • 处理失败邮件的隔离机制
  • 异常情况下的回滚操作