自动化n8n工作流备份至GitHub并追踪删除
高级
这是一个DevOps领域的自动化工作流,包含 31 个节点。主要使用 If, N8n, Set, Code, Merge 等节点。 自动化n8n工作流备份至GitHub并追踪删除
前置要求
- •GitHub Personal Access Token
- •可能需要目标 API 的认证凭证
使用的节点 (31)
分类
工作流预览
可视化展示节点连接关系,支持缩放和平移
导出工作流
复制以下 JSON 配置到 n8n 导入,即可使用此工作流
{
"meta": {
"instanceId": "00e9ec826c332aaa2865e65cdec318b633185c63a1cba1b3a2500858724cc85e",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "638dcc28-8b20-40e6-81fd-96efec4d4111",
"name": "点击\"执行\"时",
"type": "n8n-nodes-base.manualTrigger",
"position": [
260,
640
],
"parameters": {},
"typeVersion": 1
},
{
"id": "287eabd3-013d-41cd-a9c3-ae71b8d26ef9",
"name": "返回",
"type": "n8n-nodes-base.set",
"position": [
1800,
1680
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8d513345-6484-431f-afb7-7cf045c90f4f",
"name": "Done",
"type": "boolean",
"value": true
}
]
}
},
"typeVersion": 3.3
},
{
"id": "edc8da3b-fcf1-4487-8963-464c18c209b5",
"name": "获取文件",
"type": "n8n-nodes-base.httpRequest",
"position": [
920,
1140
],
"parameters": {
"url": "={{ $json.download_url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "63859d24-34b7-4545-a3fb-fe45b3678cef",
"name": "如果文件过大",
"type": "n8n-nodes-base.if",
"position": [
700,
1160
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 1,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "45ce825e-9fa6-430c-8931-9aaf22c42585",
"operator": {
"type": "string",
"operation": "empty",
"singleValue": true
},
"leftValue": "={{ $json.content }}",
"rightValue": ""
},
{
"id": "9619a55f-7fb1-4f24-b1a7-7aeb82365806",
"operator": {
"type": "string",
"operation": "notExists",
"singleValue": true
},
"leftValue": "={{ $json.error }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "8509afb5-c772-445d-af47-de54c9deae6e",
"name": "是否差异或新增",
"type": "n8n-nodes-base.code",
"position": [
920,
1420
],
"parameters": {
"jsCode": "const orderJsonKeys = (jsonObj) => {\n const ordered = {};\n Object.keys(jsonObj).sort().forEach(key => {\n ordered[key] = jsonObj[key];\n });\n return ordered;\n}\n\n// Check if file returned with content\nif (Object.keys($input.all()[0].json).includes(\"content\")) {\n // Decode base64 content and parse JSON\n const origWorkflow = JSON.parse(Buffer.from($input.all()[0].json.content, 'base64').toString());\n const n8nWorkflow = $input.all()[1].json;\n \n // Order JSON objects\n const orderedOriginal = orderJsonKeys(origWorkflow);\n const orderedActual = orderJsonKeys(n8nWorkflow);\n\n // Determine difference\n if (JSON.stringify(orderedOriginal) === JSON.stringify(orderedActual)) {\n $input.all()[0].json.github_status = \"same\";\n } else {\n $input.all()[0].json.github_status = \"different\";\n $input.all()[0].json.n8n_data_stringy = JSON.stringify(orderedActual, null, 2);\n }\n $input.all()[0].json.content_decoded = orderedOriginal;\n// No file returned / new workflow\n} else if (Object.keys($input.all()[0].json).includes(\"data\")) {\n const origWorkflow = JSON.parse($input.all()[0].json.data);\n const n8nWorkflow = $input.all()[1].json;\n \n // Order JSON objects\n const orderedOriginal = orderJsonKeys(origWorkflow);\n const orderedActual = orderJsonKeys(n8nWorkflow);\n\n // Determine difference\n if (JSON.stringify(orderedOriginal) === JSON.stringify(orderedActual)) {\n $input.all()[0].json.github_status = \"same\";\n } else {\n $input.all()[0].json.github_status = \"different\";\n $input.all()[0].json.n8n_data_stringy = JSON.stringify(orderedActual, null, 2);\n }\n $input.all()[0].json.content_decoded = orderedOriginal;\n\n} else {\n // Order JSON object\n const n8nWorkflow = $input.all()[1].json;\n const orderedActual = orderJsonKeys(n8nWorkflow);\n \n // Proper formatting\n $input.all()[0].json.github_status = \"new\";\n $input.all()[0].json.n8n_data_stringy = JSON.stringify(orderedActual, null, 2);\n}\n\n// Return items\nreturn $input.all();"
},
"typeVersion": 1
},
{
"id": "ac50a21b-f850-495a-9e41-8fdd075c3c62",
"name": "相同文件 - 不执行操作",
"type": "n8n-nodes-base.noOp",
"position": [
1360,
1600
],
"parameters": {},
"typeVersion": 1
},
{
"id": "293179e5-9ef0-4f75-b39c-987ebf13a9b5",
"name": "文件不同",
"type": "n8n-nodes-base.noOp",
"position": [
1360,
1420
],
"parameters": {},
"typeVersion": 1
},
{
"id": "ab03b5e9-61eb-4512-9675-afd048a761c6",
"name": "文件是新的",
"type": "n8n-nodes-base.noOp",
"position": [
1360,
1240
],
"parameters": {},
"typeVersion": 1
},
{
"id": "a0431fdb-41ff-4bf0-8618-c743d6be159e",
"name": "创建新文件",
"type": "n8n-nodes-base.github",
"position": [
1580,
1240
],
"webhookId": "93cca36a-a5f4-4919-b655-e0fa2cc2ca36",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $('Switch').item.json.repo.owner }}"
},
"filePath": "={{$('Switch').first().json.id}}.json",
"resource": "file",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $('Switch').item.json.repo.name }}"
},
"fileContent": "={{$('isDiffOrNew').item.json[\"n8n_data_stringy\"]}}",
"commitMessage": "={{$('Switch').first().json.name}} ({{$json.github_status}})",
"authentication": "oAuth2"
},
"credentials": {
"githubOAuth2Api": {
"id": "5UZFyU8iEpfKOIbY",
"name": "GitHub marskdev"
}
},
"typeVersion": 1
},
{
"id": "e0a9e1f0-bd40-4009-8945-24a264ddbf0d",
"name": "编辑现有文件",
"type": "n8n-nodes-base.github",
"position": [
1580,
1420
],
"webhookId": "286cabce-a3ec-4202-9d94-d005502d73cc",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $('Switch').item.json.repo.owner }}"
},
"filePath": "={{$('Switch').first().json.id}}.json",
"resource": "file",
"operation": "edit",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $('Switch').item.json.repo.name }}"
},
"fileContent": "={{$('isDiffOrNew').item.json[\"n8n_data_stringy\"]}}",
"commitMessage": "={{$('Switch').first().json.name}} ({{$json.github_status}})",
"authentication": "oAuth2"
},
"credentials": {
"githubOAuth2Api": {
"id": "5UZFyU8iEpfKOIbY",
"name": "GitHub marskdev"
}
},
"typeVersion": 1
},
{
"id": "a4d50217-3d8c-48f3-a486-fb3c033fcef4",
"name": "遍历项目",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1580,
740
],
"parameters": {
"options": {
"reset": "={{ $node[\"Loop Over Items\"].context[\"done\"] }}"
}
},
"typeVersion": 3
},
{
"id": "4f529f31-26a2-4f19-b8f3-42ce583b11ad",
"name": "计划触发器",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
260,
840
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.2
},
{
"id": "c8c0bc8a-3538-4c63-8882-3dd846830649",
"name": "便签1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
480
],
"parameters": {
"color": 4,
"width": 371,
"height": 601,
"content": "## 备份到 GitHub"
},
"typeVersion": 1
},
{
"id": "d527bac6-971b-4be7-8481-97dd023e85e1",
"name": "获取文件数据",
"type": "n8n-nodes-base.github",
"position": [
480,
1160
],
"webhookId": "5cf07ee9-70c6-48bf-b370-534315f2d48e",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $json.repo.owner }}"
},
"filePath": "={{ $('Switch').item.json.id }}.json",
"resource": "file",
"operation": "get",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $json.repo.name }}"
},
"authentication": "oAuth2",
"asBinaryProperty": false,
"additionalParameters": {}
},
"credentials": {
"githubOAuth2Api": {
"id": "5UZFyU8iEpfKOIbY",
"name": "GitHub marskdev"
}
},
"typeVersion": 1,
"continueOnFail": true,
"alwaysOutputData": true
},
{
"id": "6c7b66fa-bfdd-47ea-9161-835415d116dd",
"name": "执行工作流触发器",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
-100,
1540
],
"parameters": {
"inputSource": "passthrough"
},
"typeVersion": 1.1
},
{
"id": "a3021ade-6778-49df-8ad4-4d43f28d51e2",
"name": "执行工作流",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
1800,
740
],
"parameters": {
"mode": "each",
"options": {},
"workflowId": {
"__rl": true,
"mode": "id",
"value": "={{ $workflow.id }}"
},
"workflowInputs": {
"value": {},
"schema": [],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": true
}
},
"typeVersion": 1.2
},
{
"id": "e6675677-07ac-48d9-a920-58065cc79d77",
"name": "全局变量",
"type": "n8n-nodes-base.set",
"position": [
480,
740
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "6cf546c5-5737-4dbd-851b-17d68e0a3780",
"name": "repo.owner",
"type": "string",
"value": "john-doe"
},
{
"id": "452efa28-2dc6-4ea3-a7a2-c35d100d0382",
"name": "repo.name",
"type": "string",
"value": "n8n-backup"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "fba69d35-d05b-45a1-bdd9-93a83fddf63e",
"name": "列出文件",
"type": "n8n-nodes-base.github",
"position": [
1140,
840
],
"webhookId": "244ea8da-851f-4afb-980c-5e5973b6a1af",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $('Globals').item.json.repo.owner }}"
},
"resource": "file",
"operation": "list",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $('Globals').item.json.repo.name }}"
},
"authentication": "oAuth2"
},
"credentials": {
"githubOAuth2Api": {
"id": "5UZFyU8iEpfKOIbY",
"name": "GitHub marskdev"
}
},
"executeOnce": true,
"typeVersion": 1.1
},
{
"id": "f235efb7-3ff9-497d-bc32-c94f38f76183",
"name": "分支",
"type": "n8n-nodes-base.switch",
"position": [
120,
1540
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "n8n",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "8f6b31b0-a75c-4299-a530-d15b3ff65c9a",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.origin }}",
"rightValue": "n8n"
}
]
},
"renameOutput": true
},
{
"outputKey": "github",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "09e36861-1120-4343-8d38-4797e9d67eec",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.origin }}",
"rightValue": "github"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "7c35c3da-b364-4ad0-b192-3691cb73eb6f",
"name": "批量获取工作流",
"type": "n8n-nodes-base.n8n",
"position": [
700,
740
],
"parameters": {
"filters": {},
"requestOptions": {
"allowUnauthorizedCerts": true
}
},
"credentials": {
"n8nApi": {
"id": "DIni9LRQu8XLEdh7",
"name": "n8n account"
}
},
"typeVersion": 1
},
{
"id": "12a90225-5a32-4b69-bee6-d61bc4369eb2",
"name": "工作流",
"type": "n8n-nodes-base.aggregate",
"position": [
920,
840
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "799e5c1f-43aa-4375-b8f2-25a3335ddb18",
"name": "合并",
"type": "n8n-nodes-base.merge",
"position": [
700,
1420
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "5acad04e-0c07-4663-be6f-d8cdf4ecee4e",
"name": "检查状态",
"type": "n8n-nodes-base.switch",
"position": [
1140,
1420
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "new",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "aea200f9-9f83-4e4e-a965-65fddcbb6a5f",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{$json.github_status}}",
"rightValue": "new"
}
]
},
"renameOutput": true
},
{
"outputKey": "different",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "706ebf35-6f74-43b6-9f98-94cf14107947",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{$json.github_status}}",
"rightValue": "different"
}
]
},
"renameOutput": true
},
{
"outputKey": "same",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "30c8c5a8-269f-424a-93ed-d2cbe52acf7c",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{$json.github_status}}",
"rightValue": "same"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "a5979392-d277-4580-aa16-09d18e3eb577",
"name": "已删除",
"type": "n8n-nodes-base.code",
"position": [
920,
1740
],
"parameters": {
"jsCode": "const workflows = $input.first().json.workflows;\n\nconst some = workflows.some(x => x.id === $input.first().json.name.split(\".\")[0])\n\nreturn [{json: { isDeleted: !some }}];"
},
"typeVersion": 2
},
{
"id": "c08dde95-3a3a-4ac1-a92b-c9bcd5c7743b",
"name": "删除文件",
"type": "n8n-nodes-base.github",
"position": [
1580,
1860
],
"webhookId": "592f888e-3e41-49ce-b88a-d73f8756eac8",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $('Switch').item.json.repo.owner }}"
},
"filePath": "={{$('Switch').first().json.name}}",
"resource": "file",
"operation": "delete",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $('Switch').item.json.repo.name }}"
},
"commitMessage": "={{$('Switch').first().json.name}} (deleted)",
"authentication": "oAuth2"
},
"credentials": {
"githubOAuth2Api": {
"id": "5UZFyU8iEpfKOIbY",
"name": "GitHub marskdev"
}
},
"typeVersion": 1.1
},
{
"id": "1e769761-5f93-4d67-b801-e2d6a8443aed",
"name": "条件判断",
"type": "n8n-nodes-base.if",
"position": [
1140,
1740
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "bb927e0c-f27b-4dce-80df-8d7611467045",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.isDeleted }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "39ad6ee3-acde-4019-b850-7a8add4e795a",
"name": "n8n",
"type": "n8n-nodes-base.set",
"position": [
1360,
640
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5e73d2e7-4b1a-4180-8af2-047e52eb8a0a",
"name": "repo.owner",
"type": "string",
"value": "={{ $('Globals').item.json.repo.owner }}"
},
{
"id": "22445c28-5431-45a5-86ca-0ab2ff26cff5",
"name": "repo.name",
"type": "string",
"value": "={{ $('Globals').item.json.repo.name }}"
},
{
"id": "232d9947-a43f-48a9-b385-da1aa8f5139e",
"name": "origin",
"type": "string",
"value": "n8n"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "fc83af27-10a8-4ec4-94e7-15ab074c8ab6",
"name": "github",
"type": "n8n-nodes-base.set",
"position": [
1360,
840
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "5e73d2e7-4b1a-4180-8af2-047e52eb8a0a",
"name": "repo.owner",
"type": "string",
"value": "={{ $('Globals').item.json.repo.owner }}"
},
{
"id": "22445c28-5431-45a5-86ca-0ab2ff26cff5",
"name": "repo.name",
"type": "string",
"value": "={{ $('Globals').item.json.repo.name }}"
},
{
"id": "232d9947-a43f-48a9-b385-da1aa8f5139e",
"name": "origin",
"type": "string",
"value": "github"
},
{
"id": "456ec816-8c15-498b-bbc5-a96abce95d59",
"name": "workflows",
"type": "array",
"value": "={{ $('Workflows').item.json.data }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "99e64b8f-3446-4b74-8ce6-5eccd47d0aa7",
"name": "便签3",
"type": "n8n-nodes-base.stickyNote",
"position": [
460,
600
],
"parameters": {
"color": 4,
"width": 150,
"height": 80,
"content": "## 编辑此节点 👇"
},
"typeVersion": 1
},
{
"id": "734112c4-9175-4f50-a2d6-7970d2938624",
"name": "便签",
"type": "n8n-nodes-base.stickyNote",
"position": [
180,
480
],
"parameters": {
"color": 7,
"width": 1831,
"height": 601,
"content": "## 主工作流循环"
},
"typeVersion": 1
},
{
"id": "0dbfd9fc-e5c8-4a98-8435-5a44c1f3d56d",
"name": "便签2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
1100
],
"parameters": {
"color": 6,
"width": 2231,
"height": 941,
"content": "## 子工作流"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"If": {
"main": [
[
{
"node": "Delete a file",
"type": "main",
"index": 0
}
],
[
{
"node": "Return",
"type": "main",
"index": 0
}
]
]
},
"n8n": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Merge": {
"main": [
[
{
"node": "isDiffOrNew",
"type": "main",
"index": 0
}
]
]
},
"Return": {
"main": [
[]
]
},
"Switch": {
"main": [
[
{
"node": "Get file data",
"type": "main",
"index": 0
},
{
"node": "Merge",
"type": "main",
"index": 1
}
],
[
{
"node": "isDeleted",
"type": "main",
"index": 0
}
]
]
},
"github": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Globals": {
"main": [
[
{
"node": "Get many workflows",
"type": "main",
"index": 0
}
]
]
},
"Get File": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Workflows": {
"main": [
[
{
"node": "List files",
"type": "main",
"index": 0
}
]
]
},
"isDeleted": {
"main": [
[
{
"node": "If",
"type": "main",
"index": 0
}
]
]
},
"List files": {
"main": [
[
{
"node": "github",
"type": "main",
"index": 0
}
]
]
},
"File is new": {
"main": [
[
{
"node": "Create new file",
"type": "main",
"index": 0
}
]
]
},
"isDiffOrNew": {
"main": [
[
{
"node": "Check Status",
"type": "main",
"index": 0
}
]
]
},
"Check Status": {
"main": [
[
{
"node": "File is new",
"type": "main",
"index": 0
}
],
[
{
"node": "File is different",
"type": "main",
"index": 0
}
],
[
{
"node": "Same file - Do nothing",
"type": "main",
"index": 0
}
]
]
},
"Delete a file": {
"main": [
[
{
"node": "Return",
"type": "main",
"index": 0
}
]
]
},
"Get file data": {
"main": [
[
{
"node": "If file too large",
"type": "main",
"index": 0
}
]
]
},
"Create new file": {
"main": [
[
{
"node": "Return",
"type": "main",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[],
[
{
"node": "Execute Workflow",
"type": "main",
"index": 0
}
]
]
},
"Execute Workflow": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Globals",
"type": "main",
"index": 0
}
]
]
},
"File is different": {
"main": [
[
{
"node": "Edit existing file",
"type": "main",
"index": 0
}
]
]
},
"If file too large": {
"main": [
[
{
"node": "Get File",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Edit existing file": {
"main": [
[
{
"node": "Return",
"type": "main",
"index": 0
}
]
]
},
"Get many workflows": {
"main": [
[
{
"node": "Workflows",
"type": "main",
"index": 0
},
{
"node": "n8n",
"type": "main",
"index": 0
}
]
]
},
"On clicking 'execute'": {
"main": [
[
{
"node": "Globals",
"type": "main",
"index": 0
}
]
]
},
"Same file - Do nothing": {
"main": [
[
{
"node": "Return",
"type": "main",
"index": 0
}
]
]
},
"Execute Workflow Trigger": {
"main": [
[
{
"node": "Switch",
"type": "main",
"index": 0
}
]
]
}
}
}常见问题
如何使用这个工作流?
复制上方的 JSON 配置代码,在您的 n8n 实例中创建新工作流并选择「从 JSON 导入」,粘贴配置后根据需要修改凭证设置即可。
这个工作流适合什么场景?
高级 - 开发运维
需要付费吗?
本工作流完全免费,您可以直接导入使用。但请注意,工作流中使用的第三方服务(如 OpenAI API)可能需要您自行付费。
相关工作流推荐
Typebot 流程与 GitHub 双向同步,使用 Typebot API
Typebot 流程与 GitHub 双向同步,使用 Typebot API
If
Set
Code
+12
31 节点Marcial Ambriz
开发运维
GitHub 同步仪表板 - V2
具有提交历史和回滚功能的 GitHub 工作流版本控制仪表板
If
N8n
Set
+20
94 节点Eduard
开发运维
备份工作流到 GitHub(子文件夹)
备份工作流到 GitHub(子文件夹)
If
N8n
Set
+12
25 节点Nazmy
其他
备份工作流到 GitHub
备份工作流到 GitHub
If
N8n
Set
+12
23 节点Solomon
其他
备份 N8N 工作流到 Github
备份 N8N 工作流到 Github
If
N8n
Set
+13
30 节点Dat Proto
在可视化参考库中探索n8n节点
在可视化参考库中探索n8n节点
If
Ftp
Set
+93
113 节点I versus AI
其他