Système automatisé de sauvegarde de workflows avec Google Drive, GitHub et alertes par message

Avancé

Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 20 nœuds.Utilise principalement des nœuds comme If, N8n, Set, Code, Merge. Système automatisé de sauvegarde de workflows avec Google Drive, GitHub et alertes par message

Prérequis
  • Personal Access Token GitHub
  • Token Bot Discord ou Webhook
  • Token Bot Telegram
  • Informations d'identification Google Drive API
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "meta": {
    "instanceId": "c2650793f644091dc80fb900fe63448ad1f4b774008de9608064d67294f8307c",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "d6f2026a-4e1e-4067-b150-8a8cd5b6726d",
      "name": "Déclencheur manuel",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        -2016,
        576
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "85bccad1-b418-479b-95e3-b59d788a1093",
      "name": "Configuration",
      "type": "n8n-nodes-base.set",
      "position": [
        -1792,
        672
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "repo_owner",
              "name": "repo_owner",
              "type": "string",
              "value": "khmuhtadin"
            },
            {
              "id": "repo_name",
              "name": "repo_name",
              "type": "string",
              "value": "n8n-backup"
            },
            {
              "id": "repo_path",
              "name": "repo_path",
              "type": "string",
              "value": "n8n-backup/"
            },
            {
              "id": "gdrive_folder_id",
              "name": "gdrive_folder_id",
              "type": "string",
              "value": "124XMTeN20Huad4vYkTsiGBwildi4Ea9x"
            },
            {
              "id": "backup_timestamp",
              "name": "backup_timestamp",
              "type": "string",
              "value": "={{ $now.format('yyyy-MM-dd_HH-mm-ss') }}"
            },
            {
              "id": "backup_folder_name",
              "name": "backup_folder_name",
              "type": "string",
              "value": "=wfBackup - {{ $now.format('yyyy-MM-dd_HH-mm-ss') }}"
            },
            {
              "id": "a27de573-1591-4afa-97e5-e38d7b4e9839",
              "name": "telegram_chat_id",
              "type": "number",
              "value": 621412350
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5612fac5-9a76-4f04-a1ab-ca7b36d65742",
      "name": "Créer un dossier GDrive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1568,
        672
      ],
      "parameters": {
        "name": "={{ $json.backup_folder_name }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.gdrive_folder_id }}"
        },
        "resource": "folder"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "nTWGelaHlbvHrG66",
          "name": "Khaisa Studio"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "ba92f30e-c74b-4902-9406-d1e47410b8a3",
      "name": "Obtenir tous les workflows",
      "type": "n8n-nodes-base.n8n",
      "position": [
        -1344,
        672
      ],
      "parameters": {
        "filters": {},
        "requestOptions": {}
      },
      "credentials": {
        "n8nApi": {
          "id": "pSE0NDiUNmtDaZ5J",
          "name": "khmuhtadin"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "77790a4b-8144-47c2-9016-a421b9b7d4a1",
      "name": "Boucler sur les workflows",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -1120,
        672
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "e93f44ca-c46c-4af8-b291-4beea32ce7ce",
      "name": "Convertir en fichier JSON",
      "type": "n8n-nodes-base.convertToFile",
      "position": [
        -896,
        288
      ],
      "parameters": {
        "options": {
          "format": true,
          "fileName": "={{ $json.name }}.json"
        },
        "operation": "toJson"
      },
      "typeVersion": 1.1
    },
    {
      "id": "c4362690-ceb3-4c7b-aefd-96a917be43c3",
      "name": "Préparer les données GitHub",
      "type": "n8n-nodes-base.code",
      "position": [
        -672,
        384
      ],
      "parameters": {
        "jsCode": "// Get workflow data from the Loop Over Workflows node\nconst workflow = $('Loop Over Workflows').item.json;\nconst config = $('Config').first().json;\n\n// Prepare GitHub path using workflow name instead of ID\nconst date = new Date();\nconst year = date.getFullYear();\nconst month = String(date.getMonth() + 1).padStart(2, '0');\n\n// Sanitize workflow name for use as filename\n// Remove special characters and replace spaces with underscores\nconst sanitizedName = workflow.name\n  .replace(/[^a-zA-Z0-9\\s-_]/g, '') // Remove special characters except spaces, hyphens, underscores\n  .replace(/\\s+/g, '_')              // Replace spaces with underscores\n  .replace(/_+/g, '_')               // Remove multiple underscores\n  .trim();                           // Remove leading/trailing spaces\n\n// Create the GitHub path with sanitized name\nconst githubPath = `${config.repo_path}${year}/${month}/${sanitizedName}.json`;\n\n// Order JSON keys for consistency\nconst orderJsonKeys = (jsonObj) => {\n  const ordered = {};\n  Object.keys(jsonObj).sort().forEach(key => {\n    ordered[key] = jsonObj[key];\n  });\n  return ordered;\n};\n\n// Prepare workflow data\nconst orderedWorkflow = orderJsonKeys(workflow);\nconst workflowJson = JSON.stringify(orderedWorkflow, null, 2);\n\n// Return both the original data and GitHub-specific data\nreturn {\n  ...workflow,\n  github_path: githubPath,\n  workflow_json: workflowJson,\n  year: year,\n  month: month,\n  sanitized_name: sanitizedName\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "24f1655a-bcab-4034-8a55-3bf436c1c32c",
      "name": "Téléverser vers Google Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        0,
        96
      ],
      "parameters": {
        "name": "={{ $('Loop Over Workflows').item.json.name }}.json",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $('Create GDrive Folder').item.json.id }}"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "id": "nTWGelaHlbvHrG66",
          "name": "Khaisa Studio"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "a2380ef2-20ab-4d6d-adab-c2ca130e40ac",
      "name": "Vérifier si le fichier existe",
      "type": "n8n-nodes-base.github",
      "position": [
        -448,
        384
      ],
      "webhookId": "8987819b-d306-48c8-bd8d-58eac1610c75",
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "expression",
          "value": "={{ $('Config').item.json.repo_owner }}"
        },
        "filePath": "={{ $('Prepare GitHub Data').item.json.github_path }}",
        "resource": "file",
        "operation": "get",
        "repository": {
          "__rl": true,
          "mode": "expression",
          "value": "={{ $('Config').item.json.repo_name }}"
        },
        "authentication": "oAuth2",
        "asBinaryProperty": false,
        "additionalParameters": {}
      },
      "credentials": {
        "githubOAuth2Api": {
          "id": "WlWFMqmgPWeyIthW",
          "name": "khmuhtadin"
        }
      },
      "typeVersion": 1,
      "continueOnFail": true,
      "alwaysOutputData": true
    },
    {
      "id": "87c2b084-0755-4f80-b768-619fc97d03f6",
      "name": "Le fichier existe ?",
      "type": "n8n-nodes-base.if",
      "position": [
        -224,
        384
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "has-content",
              "operator": {
                "type": "string",
                "operation": "exists"
              },
              "leftValue": "={{ $json.content }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "683d43dc-3511-4dbb-bdd8-649bd57cd122",
      "name": "Mettre à jour le fichier GitHub",
      "type": "n8n-nodes-base.github",
      "onError": "continueRegularOutput",
      "position": [
        0,
        288
      ],
      "webhookId": "d3e6f63d-a808-40cf-8f71-6e6b7fb1a4e5",
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "expression",
          "value": "={{ $('Config').item.json.repo_owner }}"
        },
        "filePath": "={{ $('Prepare GitHub Data').item.json.github_path }}",
        "resource": "file",
        "operation": "edit",
        "repository": {
          "__rl": true,
          "mode": "expression",
          "value": "={{ $('Config').item.json.repo_name }}"
        },
        "fileContent": "={{ $('Prepare GitHub Data').item.json.workflow_json }}",
        "commitMessage": "=Update: {{ $('Loop Over Workflows').item.json.name }} - {{ $('Config').item.json.backup_timestamp }}",
        "authentication": "oAuth2"
      },
      "credentials": {
        "githubOAuth2Api": {
          "id": "WlWFMqmgPWeyIthW",
          "name": "khmuhtadin"
        }
      },
      "typeVersion": 1,
      "alwaysOutputData": true
    },
    {
      "id": "486829d1-c66d-4b0f-9038-1c8f98a42f65",
      "name": "Créer le fichier GitHub",
      "type": "n8n-nodes-base.github",
      "position": [
        0,
        576
      ],
      "webhookId": "15aff88f-3b60-4232-adcd-b1ddbcc22794",
      "parameters": {
        "owner": {
          "__rl": true,
          "mode": "expression",
          "value": "={{ $('Config').item.json.repo_owner }}"
        },
        "filePath": "={{ $('Prepare GitHub Data').item.json.github_path }}",
        "resource": "file",
        "repository": {
          "__rl": true,
          "mode": "expression",
          "value": "={{ $('Config').item.json.repo_name }}"
        },
        "fileContent": "={{ $('Prepare GitHub Data').item.json.workflow_json }}",
        "commitMessage": "=Create: {{ $('Loop Over Workflows').item.json.name }} - {{ $('Config').item.json.backup_timestamp }}",
        "authentication": "oAuth2"
      },
      "credentials": {
        "githubOAuth2Api": {
          "id": "WlWFMqmgPWeyIthW",
          "name": "khmuhtadin"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7b40e9a2-c182-4b60-84a8-ff468e9a3b24",
      "name": "Fusionner les résultats GitHub",
      "type": "n8n-nodes-base.merge",
      "position": [
        224,
        288
      ],
      "parameters": {},
      "typeVersion": 3
    },
    {
      "id": "d478e490-bbbe-4b12-a20a-305ebdafde70",
      "name": "Marquer comme terminé",
      "type": "n8n-nodes-base.set",
      "position": [
        448,
        656
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "backup_complete",
              "name": "backup_complete",
              "type": "boolean",
              "value": true
            },
            {
              "id": "workflow_name",
              "name": "workflow_name",
              "type": "string",
              "value": "={{ $('Loop Over Workflows').item.json.name }}"
            },
            {
              "id": "workflow_id",
              "name": "workflow_id",
              "type": "string",
              "value": "={{ $('Loop Over Workflows').item.json.id }}"
            },
            {
              "id": "gdrive_backup",
              "name": "gdrive_backup",
              "type": "boolean",
              "value": true
            },
            {
              "id": "github_backup",
              "name": "github_backup",
              "type": "boolean",
              "value": true
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b0325d2f-51c6-4147-b1fc-e336d26e4a78",
      "name": "Résumé final",
      "type": "n8n-nodes-base.set",
      "position": [
        -896,
        672
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "total_workflows",
              "name": "total_workflows",
              "type": "number",
              "value": "={{ $('Get All Workflows').all().length }}"
            },
            {
              "id": "backup_timestamp",
              "name": "backup_timestamp",
              "type": "string",
              "value": "={{ $('Config').first().json.backup_timestamp }}"
            },
            {
              "id": "gdrive_folder",
              "name": "gdrive_folder",
              "type": "string",
              "value": "={{ $('Create GDrive Folder').first().json.name }}"
            },
            {
              "id": "status",
              "name": "status",
              "type": "string",
              "value": "Backup completed successfully"
            }
          ]
        }
      },
      "executeOnce": true,
      "typeVersion": 3.4
    },
    {
      "id": "6aa32c53-f0e5-44a4-9a4c-0a785575f661",
      "name": "Notification : Discord",
      "type": "n8n-nodes-base.discord",
      "position": [
        -672,
        768
      ],
      "webhookId": "cc8e8a13-3f8f-4d81-848d-770fbd16f26d",
      "parameters": {
        "content": "={{ $json.status }}\n\nTotal workflow: {{ $json.total_workflows }}\nTimestamp: {{ $json.backup_timestamp }}\nDrive Folder: {{ $json.gdrive_folder }}\nRepo Name: {{ $('Config').item.json.repo_name }}",
        "guildId": {
          "__rl": true,
          "mode": "list",
          "value": "924339263372406844",
          "cachedResultUrl": "https://discord.com/channels/924339263372406844",
          "cachedResultName": "Khaisa Studio"
        },
        "options": {},
        "resource": "message",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "1418253548193447936",
          "cachedResultUrl": "https://discord.com/channels/924339263372406844/1418253548193447936",
          "cachedResultName": "monitoring"
        }
      },
      "credentials": {
        "discordBotApi": {
          "id": "dJMKbc7ZDni2mvkT",
          "name": "Khaisa-n8n-bot"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "bde9e6db-95e5-4b36-8ee2-9b3489816c7e",
      "name": "Notification : Telegram",
      "type": "n8n-nodes-base.telegram",
      "position": [
        -672,
        576
      ],
      "webhookId": "bb4dfcba-1411-4242-9302-b23a369fc4a7",
      "parameters": {
        "text": "=<b>✅ Backup Status:</b> {{ $json.status }}<br>\n<b>Total Workflows:</b> {{ $json.total_workflows }}<br>\n<b>Timestamp:</b> {{ $json.backup_timestamp }}<br>\n<b>Drive Folder:</b> {{ $json.gdrive_folder }}<br>\n<b>Repo Name:</b> {{ $('Config').item.json.repo_name }}<br><br>\n<i>Your n8n backup has been completed successfully!</i>",
        "chatId": "={{ $('Config').item.json.telegram_chat_id }}",
        "additionalFields": {
          "parse_mode": "HTML",
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "id": "wlH3um2hoPAGI8XX",
          "name": "Khaisa Dev Bot"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d8638508-4230-4384-8202-7e7a15fd2852",
      "name": "Planifier toutes les 12 heures",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2016,
        768
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 12
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "71b29f3d-cf30-4f71-86dc-bee8fc18c2d8",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1792,
        896
      ],
      "parameters": {
        "color": 5,
        "width": 448,
        "height": 640,
        "content": "## 🚀 n8n Workflow Backup System\n\n### 📋 Requirements\n- **n8n API Credentials** - For fetching workflows\n- **Google Drive OAuth2** - For cloud backup storage  \n- **GitHub OAuth2** - For version control backup\n- **Telegram Bot API** (Optional) - For notifications\n- **Discord Bot API** (Optional) - For notifications\n\n### 🔗 Resource URLs\n- **n8n API**: [docs.n8n.io/api](https://docs.n8n.io/api/)\n- **Google Drive API**: [console.cloud.google.com](https://console.cloud.google.com/)\n- **GitHub OAuth**: [github.com/settings/developers](https://github.com/settings/developers)\n- **Telegram Bot**: [@BotFather](https://t.me/botfather)\n- **Discord Bot**: [discord.com/developers](https://discord.com/developers/applications)\n\n### ✨ Features\n- Dual backup (Google Drive + GitHub)\n- Version control with Git history\n- Sanitized filenames (removes special characters)\n- Error handling with fallback\n- Optional notifications on completion\n- Runs automatically twice daily"
      },
      "typeVersion": 1
    },
    {
      "id": "7672fb85-001c-48e5-8181-b48175e45b5a",
      "name": "Note adhésive 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1312,
        896
      ],
      "parameters": {
        "color": 5,
        "width": 448,
        "height": 640,
        "content": "## ⚙️ Configuration\nEdit the **Config** node with your settings:\n- `repo_owner` - Your GitHub username\n- `repo_name` - Repository name for backups\n- `repo_path` - Folder path in repo (e.g., \"n8n-backup/\")\n- `gdrive_folder_id` - Google Drive parent folder ID\n- `telegram_chat_id` - Your Telegram chat ID (optional)\n\n### 📊 Workflow Process\n\n1. **Trigger** → Manual or scheduled every 12 hours\n2. **Setup** → Creates timestamped backup folder in Google Drive\n3. **Fetch** → Gets all workflows from n8n instance\n4. **Loop Process** → For each workflow:\n   - Converts to formatted JSON file\n   - Uploads to Google Drive folder\n   - Checks if file exists on GitHub\n   - Creates new or updates existing GitHub file\n5. **Complete** → Sends summary notifications to Telegram & Discord\n\n### 📁 Backup Structure\n- **Google Drive**: `/wfBackup - YYYY-MM-DD_HH-mm-ss/workflow_name.json`\n- **GitHub**: `/n8n-backup/YYYY/MM/workflow_name.json`\n\n"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "85bccad1-b418-479b-95e3-b59d788a1093": {
      "main": [
        [
          {
            "node": "5612fac5-9a76-4f04-a1ab-ca7b36d65742",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "87c2b084-0755-4f80-b768-619fc97d03f6": {
      "main": [
        [
          {
            "node": "683d43dc-3511-4dbb-bdd8-649bd57cd122",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "486829d1-c66d-4b0f-9038-1c8f98a42f65",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "b0325d2f-51c6-4147-b1fc-e336d26e4a78": {
      "main": [
        [
          {
            "node": "bde9e6db-95e5-4b36-8ee2-9b3489816c7e",
            "type": "main",
            "index": 0
          },
          {
            "node": "6aa32c53-f0e5-44a4-9a4c-0a785575f661",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d478e490-bbbe-4b12-a20a-305ebdafde70": {
      "main": [
        [
          {
            "node": "77790a4b-8144-47c2-9016-a421b9b7d4a1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d6f2026a-4e1e-4067-b150-8a8cd5b6726d": {
      "main": [
        [
          {
            "node": "85bccad1-b418-479b-95e3-b59d788a1093",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "ba92f30e-c74b-4902-9406-d1e47410b8a3": {
      "main": [
        [
          {
            "node": "77790a4b-8144-47c2-9016-a421b9b7d4a1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "486829d1-c66d-4b0f-9038-1c8f98a42f65": {
      "main": [
        [
          {
            "node": "7b40e9a2-c182-4b60-84a8-ff468e9a3b24",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "683d43dc-3511-4dbb-bdd8-649bd57cd122": {
      "main": [
        [
          {
            "node": "7b40e9a2-c182-4b60-84a8-ff468e9a3b24",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "77790a4b-8144-47c2-9016-a421b9b7d4a1": {
      "main": [
        [
          {
            "node": "b0325d2f-51c6-4147-b1fc-e336d26e4a78",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "e93f44ca-c46c-4af8-b291-4beea32ce7ce",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c4362690-ceb3-4c7b-aefd-96a917be43c3": {
      "main": [
        [
          {
            "node": "a2380ef2-20ab-4d6d-adab-c2ca130e40ac",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "a2380ef2-20ab-4d6d-adab-c2ca130e40ac": {
      "main": [
        [
          {
            "node": "87c2b084-0755-4f80-b768-619fc97d03f6",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e93f44ca-c46c-4af8-b291-4beea32ce7ce": {
      "main": [
        [
          {
            "node": "24f1655a-bcab-4034-8a55-3bf436c1c32c",
            "type": "main",
            "index": 0
          },
          {
            "node": "c4362690-ceb3-4c7b-aefd-96a917be43c3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "5612fac5-9a76-4f04-a1ab-ca7b36d65742": {
      "main": [
        [
          {
            "node": "ba92f30e-c74b-4902-9406-d1e47410b8a3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7b40e9a2-c182-4b60-84a8-ff468e9a3b24": {
      "main": [
        [
          {
            "node": "d478e490-bbbe-4b12-a20a-305ebdafde70",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "24f1655a-bcab-4034-8a55-3bf436c1c32c": {
      "main": [
        [
          {
            "node": "7b40e9a2-c182-4b60-84a8-ff468e9a3b24",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "d8638508-4230-4384-8202-7e7a15fd2852": {
      "main": [
        [
          {
            "node": "85bccad1-b418-479b-95e3-b59d788a1093",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Avancé - Création de contenu, IA Multimodale

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds20
Catégorie2
Types de nœuds14
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34