Synchronisation bidirectionnelle des processus Typebot et GitHub, avec l'API Typebot
Avancé
Ceci est unDevOpsworkflow d'automatisation du domainecontenant 31 nœuds.Utilise principalement des nœuds comme If, Set, Code, Merge, Github. Synchronisation bidirectionnelle entre les processus Typebot et GitHub, via l'API Typebot
Prérequis
- •Personal Access Token GitHub
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
Nœuds utilisés (31)
Catégorie
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": "00e9ec826c332aaa2865e65cdec318b633185c63a1cba1b3a2500858724cc85e",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "e770fbf4-8c4f-4aaa-b722-3140ecec28f2",
"name": "Au clic sur 'exécuter'",
"type": "n8n-nodes-base.manualTrigger",
"position": [
360,
640
],
"parameters": {},
"typeVersion": 1
},
{
"id": "49b53bc4-6441-4577-a851-bb7f2c580a39",
"name": "Note adhésive1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
480
],
"parameters": {
"color": 4,
"width": 371,
"height": 601,
"content": "## Typebot Backup to GitHub \nThis workflow will backup all instance typebots to GitHub and also deleted it if was deleted in your typebot workspace.\n\nThe files are saved `ID.json` for the filename.\n\n### Setup\nOpen `Globals` node and update the values below 👇\n\n- **repo.owner:** your Github username\n- **repo.name:** the name of your repository\n- **typebot.url:** default url or your self-hosted Typebot url\n- **typebot.workspace.id:** your Typebot workspace id\n\n\nIf your username was `john-doe` and your repository was called `n8n-backups`:\n\n- repo.owner - john-doe\n- repo.name - n8n-backups\n\nFor Typebot see its [documentation](https://docs.typebot.io/api-reference/how-to)\n\nThe workflow calls itself using a subworkflow, to help reduce memory usage."
},
"typeVersion": 1
},
{
"id": "7dede05f-8c5a-426e-a822-d21b7e50d976",
"name": "Déclencheur d'exécution de workflow",
"type": "n8n-nodes-base.executeWorkflowTrigger",
"position": [
-140,
1620
],
"parameters": {
"inputSource": "passthrough"
},
"typeVersion": 1.1
},
{
"id": "7469a576-e3ea-4e55-93f3-7f380f1a57e7",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
180,
480
],
"parameters": {
"color": 7,
"width": 1831,
"height": 601,
"content": "## Main workflow loop"
},
"typeVersion": 1
},
{
"id": "acb81c9e-152a-4bf3-ab23-1eb66e8d5510",
"name": "Note adhésive2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-220,
1100
],
"parameters": {
"color": 6,
"width": 2231,
"height": 941,
"content": "## Subworkflow"
},
"typeVersion": 1
},
{
"id": "6df6e830-5721-421f-9b46-f99f9164eb4d",
"name": "Lister les Typebots",
"type": "n8n-nodes-base.httpRequest",
"position": [
800,
740
],
"parameters": {
"url": "={{ $json.typebot.url }}/api/v1/typebots",
"options": {},
"sendQuery": true,
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth",
"queryParameters": {
"parameters": [
{
"name": "workspaceId",
"value": "={{ $json.typebot.workspace.id }}"
}
]
}
},
"typeVersion": 4.2
},
{
"id": "3d44e0b2-c404-424a-8eba-7ec111738939",
"name": "typebot",
"type": "n8n-nodes-base.set",
"position": [
1240,
640
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8fbbf5fa-0455-4066-80e0-1b2885343aea",
"name": "typebot.url",
"type": "string",
"value": "={{ $('Globals').item.json.typebot.url }}"
},
{
"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": "typebot"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "4be16d80-43fd-4cc1-b79c-11fec3c76829",
"name": "Obtenir Typebot",
"type": "n8n-nodes-base.httpRequest",
"position": [
300,
1360
],
"parameters": {
"url": "={{ $('Switch').item.json.typebot.url }}/api/v1/typebots/{{ $json.id }}",
"options": {},
"authentication": "genericCredentialType",
"genericAuthType": "httpBearerAuth"
},
"typeVersion": 4.2
},
{
"id": "952f2ff9-0421-4239-947d-3d8f0b7925fd",
"name": "Diviser",
"type": "n8n-nodes-base.splitOut",
"position": [
1020,
640
],
"parameters": {
"options": {},
"fieldToSplitOut": "typebots"
},
"typeVersion": 1
},
{
"id": "ef97c1ec-d175-44b7-a462-2c8c2a8221ad",
"name": "Modifier les champs",
"type": "n8n-nodes-base.set",
"position": [
520,
1460
],
"parameters": {
"mode": "raw",
"options": {},
"jsonOutput": "={{ $json.typebot }}"
},
"typeVersion": 3.4
},
{
"id": "ef0cd866-afcd-41b9-8fad-15d79a88041e",
"name": "Note adhésive4",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
600
],
"parameters": {
"color": 4,
"width": 150,
"height": 80,
"content": "## Edit this node 👇"
},
"typeVersion": 1
},
{
"id": "e68821d5-11ea-4324-9957-303433a8aad7",
"name": "Globals",
"type": "n8n-nodes-base.set",
"position": [
580,
740
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "45027581-a75b-4375-a0f1-ebfddb0531f7",
"name": "typebot.url",
"type": "string",
"value": "https://typebot.io"
},
{
"id": "5513c8d4-1aba-45f3-ab8c-498fa36f5f59",
"name": "typebot.workspace.id",
"type": "string",
"value": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
},
{
"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": "typebot-backup"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "3027c8bd-a477-4f47-a2a9-fd952d9f9698",
"name": "Déclencheur planifié",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
360,
840
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"typeVersion": 1.2
},
{
"id": "caff32a5-6d82-43c9-998c-3258342d66b3",
"name": "github",
"type": "n8n-nodes-base.set",
"position": [
1240,
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": "typebots",
"type": "array",
"value": "={{ $('List Typebots').item.json.typebots }}"
}
]
},
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "4333f695-81d9-4c87-8d68-9a6245dc12d5",
"name": "Lister les fichiers",
"type": "n8n-nodes-base.github",
"position": [
1020,
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": "7eab3efa-c3e0-420a-9fb8-9cd9ff52f90e",
"name": "Obtenir les données du fichier",
"type": "n8n-nodes-base.github",
"position": [
520,
1260
],
"webhookId": "5cf07ee9-70c6-48bf-b370-534315f2d48e",
"parameters": {
"owner": {
"__rl": true,
"mode": "name",
"value": "={{ $('Switch').item.json.repo.owner }}"
},
"filePath": "={{ $('Switch').item.json.id }}.json",
"resource": "file",
"operation": "get",
"repository": {
"__rl": true,
"mode": "name",
"value": "={{ $('Switch').item.json.repo.name }}"
},
"authentication": "oAuth2",
"asBinaryProperty": false,
"additionalParameters": {}
},
"credentials": {
"githubOAuth2Api": {
"id": "5UZFyU8iEpfKOIbY",
"name": "GitHub marskdev"
}
},
"typeVersion": 1,
"continueOnFail": true,
"alwaysOutputData": true
},
{
"id": "5e01d7b1-c09d-494f-8df1-c241db278084",
"name": "Créer un nouveau fichier",
"type": "n8n-nodes-base.github",
"position": [
1620,
1160
],
"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[\"typebot_data_stringy\"]}}",
"commitMessage": "={{$('Switch').first().json.name}} ({{$json.github_status}})",
"authentication": "oAuth2"
},
"credentials": {
"githubOAuth2Api": {
"id": "5UZFyU8iEpfKOIbY",
"name": "GitHub marskdev"
}
},
"typeVersion": 1
},
{
"id": "4b8b16d4-5363-4f08-b8b5-deac7f4250f3",
"name": "Modifier le fichier existant",
"type": "n8n-nodes-base.github",
"position": [
1620,
1360
],
"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[\"typebot_data_stringy\"]}}",
"commitMessage": "={{$('Switch').first().json.name}} ({{$json.github_status}})",
"authentication": "oAuth2"
},
"credentials": {
"githubOAuth2Api": {
"id": "5UZFyU8iEpfKOIbY",
"name": "GitHub marskdev"
}
},
"typeVersion": 1
},
{
"id": "c2cb20ab-07e5-41a3-8f7d-ed6474977226",
"name": "Retour",
"type": "n8n-nodes-base.set",
"position": [
1840,
1560
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "8d513345-6484-431f-afb7-7cf045c90f4f",
"name": "Done",
"type": "boolean",
"value": true
}
]
}
},
"typeVersion": 3.3
},
{
"id": "7ce14355-b3b9-4cd0-a09e-6d91bfe6bfcc",
"name": "Supprimer un fichier",
"type": "n8n-nodes-base.github",
"position": [
1620,
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": "c2252937-414f-446c-a2b1-96eef623f57e",
"name": "Si",
"type": "n8n-nodes-base.if",
"position": [
1400,
1780
],
"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": "10146994-a24f-4d9e-955d-f3e76f4abae0",
"name": "isDeleted",
"type": "n8n-nodes-base.code",
"position": [
1180,
1780
],
"parameters": {
"jsCode": "const flow = $input.first().json.typebots;\n\nconst some = flow.some(x => x.id === $input.first().json.name.split(\".\")[0])\n\nreturn [{json: { isDeleted: !some }}];"
},
"typeVersion": 2
},
{
"id": "d692e133-5184-4753-bbab-751f9903b1cb",
"name": "isDiffOrNew",
"type": "n8n-nodes-base.code",
"position": [
960,
1360
],
"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 origFlow = JSON.parse(Buffer.from($input.all()[0].json.content, 'base64').toString());\n const typebotFlow = $input.all()[1].json;\n \n // Order JSON objects\n const orderedOriginal = orderJsonKeys(origFlow);\n const orderedActual = orderJsonKeys(typebotFlow);\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.typebot_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 origFlow = JSON.parse($input.all()[0].json.data);\n const typebotFlow = $input.all()[1].json;\n \n // Order JSON objects\n const orderedOriginal = orderJsonKeys(origFlow);\n const orderedActual = orderJsonKeys(typebotFlow);\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.typebot_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 typebotFlow = $input.all()[1].json;\n const orderedActual = orderJsonKeys(typebotFlow);\n \n // Proper formatting\n $input.all()[0].json.github_status = \"new\";\n $input.all()[0].json.typebot_data_stringy = JSON.stringify(orderedActual, null, 2);\n}\n\n// Return items\nreturn $input.all();"
},
"typeVersion": 1
},
{
"id": "bcafd96c-6fd4-44ce-b975-33c7cf2dff84",
"name": "Vérifier l'état",
"type": "n8n-nodes-base.switch",
"position": [
1180,
1360
],
"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": "aaf2d938-ec55-4152-9e34-a2e2e6769760",
"name": "Fichier différent",
"type": "n8n-nodes-base.noOp",
"position": [
1400,
1360
],
"parameters": {},
"typeVersion": 1
},
{
"id": "f2759b0f-3ec3-434f-acfe-36c10ebb35bb",
"name": "Fichier nouveau",
"type": "n8n-nodes-base.noOp",
"position": [
1400,
1160
],
"parameters": {},
"typeVersion": 1
},
{
"id": "785fff83-40c4-4d38-9300-369e68779412",
"name": "Fichier identique",
"type": "n8n-nodes-base.noOp",
"position": [
1400,
1560
],
"parameters": {},
"typeVersion": 1
},
{
"id": "54804b0b-0001-4a41-afb5-12c0c6cf653c",
"name": "Fusionner",
"type": "n8n-nodes-base.merge",
"position": [
740,
1360
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "b9cb042f-d767-4c2a-86f8-5d567d23c32a",
"name": "Commutateur",
"type": "n8n-nodes-base.switch",
"position": [
80,
1620
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "typebot",
"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": "typebot"
}
]
},
"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": "eb4adeea-418b-4d2d-a8ce-36739c195d7e",
"name": "Boucler sur les éléments",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1460,
740
],
"parameters": {
"options": {
"reset": "={{ $node[\"Loop Over Items\"].context[\"done\"] }}"
}
},
"typeVersion": 3
},
{
"id": "58fb33e4-520e-4a58-b3ea-acdb5ef02208",
"name": "Exécuter le workflow",
"type": "n8n-nodes-base.executeWorkflow",
"position": [
1680,
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
}
],
"pinData": {},
"connections": {
"c2252937-414f-446c-a2b1-96eef623f57e": {
"main": [
[
{
"node": "7ce14355-b3b9-4cd0-a09e-6d91bfe6bfcc",
"type": "main",
"index": 0
}
],
[
{
"node": "c2cb20ab-07e5-41a3-8f7d-ed6474977226",
"type": "main",
"index": 0
}
]
]
},
"54804b0b-0001-4a41-afb5-12c0c6cf653c": {
"main": [
[
{
"node": "d692e133-5184-4753-bbab-751f9903b1cb",
"type": "main",
"index": 0
}
]
]
},
"b9cb042f-d767-4c2a-86f8-5d567d23c32a": {
"main": [
[
{
"node": "4be16d80-43fd-4cc1-b79c-11fec3c76829",
"type": "main",
"index": 0
}
],
[
{
"node": "10146994-a24f-4d9e-955d-f3e76f4abae0",
"type": "main",
"index": 0
}
]
]
},
"caff32a5-6d82-43c9-998c-3258342d66b3": {
"main": [
[
{
"node": "eb4adeea-418b-4d2d-a8ce-36739c195d7e",
"type": "main",
"index": 0
}
]
]
},
"e68821d5-11ea-4324-9957-303433a8aad7": {
"main": [
[
{
"node": "6df6e830-5721-421f-9b46-f99f9164eb4d",
"type": "main",
"index": 0
}
]
]
},
"3d44e0b2-c404-424a-8eba-7ec111738939": {
"main": [
[
{
"node": "eb4adeea-418b-4d2d-a8ce-36739c195d7e",
"type": "main",
"index": 0
}
]
]
},
"952f2ff9-0421-4239-947d-3d8f0b7925fd": {
"main": [
[
{
"node": "3d44e0b2-c404-424a-8eba-7ec111738939",
"type": "main",
"index": 0
}
]
]
},
"10146994-a24f-4d9e-955d-f3e76f4abae0": {
"main": [
[
{
"node": "c2252937-414f-446c-a2b1-96eef623f57e",
"type": "main",
"index": 0
}
]
]
},
"4333f695-81d9-4c87-8d68-9a6245dc12d5": {
"main": [
[
{
"node": "caff32a5-6d82-43c9-998c-3258342d66b3",
"type": "main",
"index": 0
}
]
]
},
"ef97c1ec-d175-44b7-a462-2c8c2a8221ad": {
"main": [
[
{
"node": "54804b0b-0001-4a41-afb5-12c0c6cf653c",
"type": "main",
"index": 1
}
]
]
},
"f2759b0f-3ec3-434f-acfe-36c10ebb35bb": {
"main": [
[
{
"node": "5e01d7b1-c09d-494f-8df1-c241db278084",
"type": "main",
"index": 0
}
]
]
},
"4be16d80-43fd-4cc1-b79c-11fec3c76829": {
"main": [
[
{
"node": "7eab3efa-c3e0-420a-9fb8-9cd9ff52f90e",
"type": "main",
"index": 0
},
{
"node": "ef97c1ec-d175-44b7-a462-2c8c2a8221ad",
"type": "main",
"index": 0
}
]
]
},
"d692e133-5184-4753-bbab-751f9903b1cb": {
"main": [
[
{
"node": "bcafd96c-6fd4-44ce-b975-33c7cf2dff84",
"type": "main",
"index": 0
}
]
]
},
"bcafd96c-6fd4-44ce-b975-33c7cf2dff84": {
"main": [
[
{
"node": "f2759b0f-3ec3-434f-acfe-36c10ebb35bb",
"type": "main",
"index": 0
}
],
[
{
"node": "aaf2d938-ec55-4152-9e34-a2e2e6769760",
"type": "main",
"index": 0
}
],
[
{
"node": "785fff83-40c4-4d38-9300-369e68779412",
"type": "main",
"index": 0
}
]
]
},
"785fff83-40c4-4d38-9300-369e68779412": {
"main": [
[
{
"node": "c2cb20ab-07e5-41a3-8f7d-ed6474977226",
"type": "main",
"index": 0
}
]
]
},
"7ce14355-b3b9-4cd0-a09e-6d91bfe6bfcc": {
"main": [
[
{
"node": "c2cb20ab-07e5-41a3-8f7d-ed6474977226",
"type": "main",
"index": 0
}
]
]
},
"7eab3efa-c3e0-420a-9fb8-9cd9ff52f90e": {
"main": [
[
{
"node": "54804b0b-0001-4a41-afb5-12c0c6cf653c",
"type": "main",
"index": 0
}
]
]
},
"6df6e830-5721-421f-9b46-f99f9164eb4d": {
"main": [
[
{
"node": "4333f695-81d9-4c87-8d68-9a6245dc12d5",
"type": "main",
"index": 0
},
{
"node": "952f2ff9-0421-4239-947d-3d8f0b7925fd",
"type": "main",
"index": 0
}
]
]
},
"5e01d7b1-c09d-494f-8df1-c241db278084": {
"main": [
[
{
"node": "c2cb20ab-07e5-41a3-8f7d-ed6474977226",
"type": "main",
"index": 0
}
]
]
},
"eb4adeea-418b-4d2d-a8ce-36739c195d7e": {
"main": [
[],
[
{
"node": "58fb33e4-520e-4a58-b3ea-acdb5ef02208",
"type": "main",
"index": 0
}
]
]
},
"58fb33e4-520e-4a58-b3ea-acdb5ef02208": {
"main": [
[
{
"node": "eb4adeea-418b-4d2d-a8ce-36739c195d7e",
"type": "main",
"index": 0
}
]
]
},
"3027c8bd-a477-4f47-a2a9-fd952d9f9698": {
"main": [
[
{
"node": "e68821d5-11ea-4324-9957-303433a8aad7",
"type": "main",
"index": 0
}
]
]
},
"aaf2d938-ec55-4152-9e34-a2e2e6769760": {
"main": [
[
{
"node": "4b8b16d4-5363-4f08-b8b5-deac7f4250f3",
"type": "main",
"index": 0
}
]
]
},
"4b8b16d4-5363-4f08-b8b5-deac7f4250f3": {
"main": [
[
{
"node": "c2cb20ab-07e5-41a3-8f7d-ed6474977226",
"type": "main",
"index": 0
}
]
]
},
"e770fbf4-8c4f-4aaa-b722-3140ecec28f2": {
"main": [
[
{
"node": "e68821d5-11ea-4324-9957-303433a8aad7",
"type": "main",
"index": 0
}
]
]
},
"7dede05f-8c5a-426e-a822-d21b7e50d976": {
"main": [
[
{
"node": "b9cb042f-d767-4c2a-86f8-5d567d23c32a",
"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é - DevOps
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.
Workflows recommandés
Sauvegarde automatisée des workflows n8n vers GitHub avec suivi des suppressions
Sauvegarde automatisée des workflows n8n vers GitHub et suivi des suppressions
If
N8n
Set
+
If
N8n
Set
31 NœudsMarcial Ambriz
DevOps
Tableau de bord de synchronisation GitHub - V2
Tableau de versionning des workflows GitHub avec historique de commits et fonction de rollback
If
N8n
Set
+
If
N8n
Set
94 NœudsEduard
DevOps
Sauvegarde des workflows sur GitHub (sous-dossier)
Sauvegarde des workflows dans GitHub (sous-dossier)
If
N8n
Set
+
If
N8n
Set
25 NœudsNazmy
Autres
Sauvegarde des workflows sur GitHub
Sauvegarde des workflows dans GitHub
If
N8n
Set
+
If
N8n
Set
23 NœudsSolomon
Autres
Sauvegarde des workflows N8N sur Github
Sauvegarde des workflows N8N vers Github
If
N8n
Set
+
If
N8n
Set
30 NœudsDat Proto
Explorer les nœuds n8n dans la bibliothèque de références visuelles
Explorer les nœuds n8n dans la base de références visuelles
If
Ftp
Set
+
If
Ftp
Set
113 NœudsI versus AI
Autres
Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds31
Catégorie1
Types de nœuds15
Description de la difficulté
Auteur
Marcial Ambriz
@marskdevLiens externes
Voir sur n8n.io →
Partager ce workflow