Mise à jour automatique de n8n (Docker)
Ceci est unAIworkflow d'automatisation du domainecontenant 26 nœuds.Utilise principalement des nœuds comme If, Set, Ssh, Telegram, HttpRequest, combinant la technologie d'intelligence artificielle pour une automatisation intelligente. Metteur à jour automatique de n8n (Docker)
- •Token Bot Telegram
- •Peut nécessiter les informations d'identification d'authentification de l'API cible
- •Clé API Google Gemini
Catégorie
{
"meta": {
"instanceId": "e409ea34548a2afe2dffba31130cd1cf2e98ebe2afaeed2a63caf2a0582d1da0",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "d8e5e551-4018-4e17-8a4e-ca946c8ae8f5",
"name": "Chemin Docker",
"type": "n8n-nodes-base.set",
"position": [
300,
-240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "9027cc7c-e73f-4e9b-9cfc-537e038f735c",
"name": "docker_path",
"type": "string",
"value": "./n8n-docker-caddy"
},
{
"id": "8ddad746-f3c9-40fa-86f9-b62c5616317b",
"name": "worker_command",
"type": "string",
"value": "--scale n8n-worker=4"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "7ae77004-c55b-4f72-8015-99d061b1d23a",
"name": "Mettre à jour Docker",
"type": "n8n-nodes-base.ssh",
"position": [
3380,
-380
],
"parameters": {
"cwd": "={{ $('Docker Path').last().json.docker_path }}",
"command": "=nohup sh -c \"docker compose pull && docker compose down && docker compose up -d {{ $json.worker_command }}\" > update.log 2>&1 &"
},
"credentials": {
"sshPassword": {
"id": "a8H4iJwMRDIdjKPi",
"name": "SSH root N8N Hetzner"
}
},
"typeVersion": 1
},
{
"id": "f76323fa-b464-498c-bb88-e8df8f49d9fc",
"name": "Obtenir la version actuelle de n8n",
"type": "n8n-nodes-base.ssh",
"position": [
600,
-240
],
"parameters": {
"cwd": "={{ $('Docker Path').last().json.docker_path }}",
"command": "=docker inspect $(docker ps -q --filter \"name=n8n\")"
},
"credentials": {
"sshPassword": {
"id": "a8H4iJwMRDIdjKPi",
"name": "SSH root N8N Hetzner"
}
},
"typeVersion": 1
},
{
"id": "ae4196a1-0eff-4628-8eeb-e12f0e78f14f",
"name": "Obtenir les paramètres de l'instance",
"type": "n8n-nodes-base.httpRequest",
"position": [
-200,
-240
],
"parameters": {
"url": "={{ $env.WEBHOOK_URL }}rest/settings",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "51b5d013-9027-4f98-a3d7-26d0e08a6968",
"name": "Est Docker",
"type": "n8n-nodes-base.if",
"position": [
20,
-240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "loose"
},
"combinator": "and",
"conditions": [
{
"id": "4021cef9-daa5-448e-9df3-d38e2cafe2ed",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.data.isDocker }}",
"rightValue": ""
}
]
},
"looseTypeValidation": true
},
"typeVersion": 2.2
},
{
"id": "bb82d25b-9419-4887-ba38-710f0803b66a",
"name": "Obtenir la dernière mise à jour de la version",
"type": "n8n-nodes-base.httpRequest",
"position": [
1040,
-240
],
"parameters": {
"url": "=https://registry.hub.docker.com/v2/repositories/n8nio/n8n/tags/{{ $json.n8n_target_version }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "390d5794-d41a-4544-b27b-c07028116e2f",
"name": "Version cible",
"type": "n8n-nodes-base.set",
"position": [
820,
-240
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "3eb04423-6d04-4371-8dfe-a092996a9235",
"name": "n8n_target_version",
"type": "string",
"value": "={{ $json.stdout.parseJson()[0].Config.Image.replaceAll(\"docker.n8n.io/n8nio/n8n:\", \"\").trim() }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "760cfb7e-9b50-4075-9bb2-b804650dc591",
"name": "Obtenir la version actuelle",
"type": "n8n-nodes-base.httpRequest",
"position": [
1260,
-240
],
"parameters": {
"url": "=https://registry.hub.docker.com/v2/repositories/n8nio/n8n/tags/{{ $('Get Instance\\'s Settings').last().json.data.versionCli }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "6694185e-3b73-436f-93fb-4595e0719c65",
"name": "Mise à jour nécessaire ?",
"type": "n8n-nodes-base.if",
"position": [
1480,
-240
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "79ba3ace-f894-438f-a8da-0616419ffff7",
"operator": {
"type": "string",
"operation": "notEquals"
},
"leftValue": "={{ $json.digest }}",
"rightValue": "={{ $('Get Version\\'s Last Update').item.json.digest }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "35e1a71d-048e-4b20-a618-f8172a386d2f",
"name": "Modèle de chat Google Gemini",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
2440,
-240
],
"parameters": {
"options": {
"temperature": 0
},
"modelName": "models/gemma-3n-e4b-it"
},
"credentials": {
"googlePalmApi": {
"id": "946zxjAmpu4T9iRc",
"name": "Auto-Credential-ff526bee-2ab1-400a-9934-c5808dab40af"
}
},
"typeVersion": 1
},
{
"id": "a20184f7-031f-4170-a8a3-e33b458445e9",
"name": "Approuvé ?",
"type": "n8n-nodes-base.if",
"position": [
2960,
-340
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "7590024e-2f4d-491f-a6c1-aa906e7aa755",
"operator": {
"type": "boolean",
"operation": "true",
"singleValue": true
},
"leftValue": "={{ $json.data.approved }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "076a776b-7423-4baf-89ea-05f7518a4999",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
1700,
-920
],
"parameters": {
"color": 6,
"width": 1460,
"height": 840,
"content": "## ⚠️ MANUAL APPROVAL SECTION\n\nThis entire block handles fetching release notes and waiting for your approval on Telegram.\n\n**To enable fully automatic updates**, delete all nodes in this section and connect the `Needs Update ?` node's \"true\" output directly to the `Update Docker` node."
},
"typeVersion": 1
},
{
"id": "7bda6df1-dc3c-4e91-90e6-a35139214829",
"name": "Toutes les heures",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-420,
-240
],
"parameters": {
"rule": {
"interval": [
{
"field": "hours"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "998f0a3c-7982-4f52-9ff8-14af41efc0b8",
"name": "Publié dans les dernières heures ?",
"type": "n8n-nodes-base.if",
"position": [
2080,
-460
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "d91e9b77-800d-455f-9a10-109b9177a7d3",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.published_at }}",
"rightValue": "={{ $now.minus(1, 'hour') }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "ab634afa-8c58-4245-bea3-27bf7fde7362",
"name": "Note adhésive 1",
"type": "n8n-nodes-base.stickyNote",
"position": [
2660,
-540
],
"parameters": {
"color": 3,
"width": 260,
"height": 380,
"content": "### 💬 APPROVAL NOTIFICATION\n\n1. Select your **Telegram Bot** credential.\n2. Set the **Chat ID** to your personal Telegram chat ID to receive the update notifications."
},
"typeVersion": 1
},
{
"id": "4a627e14-42da-4df5-884b-3160f24da852",
"name": "Note adhésive 2",
"type": "n8n-nodes-base.stickyNote",
"position": [
2300,
-700
],
"parameters": {
"color": 7,
"width": 340,
"height": 600,
"content": "### 🤖 AI Release Summary\n\nThese nodes fetch the official release notes and use an AI model to create a simple, easy-to-read summary.\n\nYou can replace the Google Gemini node with any other LLM node (OpenAI, Anthropic, etc.). The prompt is designed to be robust so feel free to use a small and cheap LLM."
},
"typeVersion": 1
},
{
"id": "a1e0423e-de37-4ede-a32f-4e7a3632d9c2",
"name": "Note adhésive 3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1980,
-760
],
"parameters": {
"color": 7,
"width": 300,
"height": 460,
"content": "### 🕒 Time Check\n\nThis node checks if the new version was published within the last hour. This prevents sending duplicate notifications for the same update, as the main workflow trigger runs hourly.\n\n**IMPORTANT:** If you change the **Schedule Trigger** interval (e.g., to daily), you should adjust the time check in this node accordingly (e.g., `now.minus(1, 'day')`) to avoid missing updates."
},
"typeVersion": 1
},
{
"id": "9bc3cc2e-5153-4bfa-9886-2f95a58693c9",
"name": "Note adhésive 4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1720,
-640
],
"parameters": {
"color": 7,
"height": 480,
"content": "### 📝 Fetch Release Notes\n\nThis node retrieves the official release notes for the new version directly from the n8n GitHub repository API.\n\nThis provides the raw content for the AI to summarize. If this node fails (e.g., due to a GitHub API issue), the workflow will still send an update notification but without the detailed summary."
},
"typeVersion": 1
},
{
"id": "fe5322e0-af4a-4280-b548-e6e79f05abff",
"name": "Aperçu de la version",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2340,
-460
],
"parameters": {
"text": "=<role>\nYou are an expert technical writer and software release analyst specializing in the n8n automation platform. You have a deep understanding of the n8n user base, which ranges from non-technical business users to experienced developers. Your expertise lies in quickly parsing technical changelogs and identifying the changes that have the most significant impact on users.\n</rol>\n\n<instructions>\n<goal>\nYour goal is to analyze raw n8n release notes and extract a concise, human-readable summary of the most important changes. The summary should be easily digestible for n8n users and developers, highlighting only the key new features, critical fixes, and major enhancements.\n</goal>\n\n<context>\nThe n8n release notes are provided in a markdown-like format, typically generated from GitHub. They are structured with headings like `### Features`, `### Bug Fixes`, and `### Enhancements`.\n\nYour task is to prioritize the information based on its impact:\n1. **Highest Priority:** New Features (especially new nodes or major core functionalities) and Breaking Changes.\n2. **High Priority:** Significant Enhancements to existing popular nodes or core platform capabilities.\n3. **Medium Priority:** Critical Bug Fixes, especially those related to security (XSS, authorization), data integrity, or core execution failures.\n4. **Low Priority (to be ignored):** Minor bug fixes, documentation updates, internal refactoring, dependency updates, or changes to very niche nodes.\n\nYou must filter out the noise and focus only on what a user *needs* to know about the new version.\n</context>\n\n<examples>\n<example_1>\n<inputs>\n<release_notes>\n### [1.99.1](https://github.com/n8n-io/n8n/compare/n8n@1.99.0...n8n@1.99.1) (2025-06-19)\n\n\n### Bug Fixes\n\n* **core:** Fix pdf extract not working ([#16463](https://github.com/n8n-io/n8n/issues/16463)) ([0d69ea4](https://github.com/n8n-io/n8n/commit/0d69ea4f5bdd1216bd06ad5ae4e60eec6cc948b3))\n* **core:** Prevent unauthorised workflow termination ([#16405](https://github.com/n8n-io/n8n/issues/16405)) ([e5edc60](https://github.com/n8n-io/n8n/commit/e5edc60e344924230baafb11fa1f0af788e9ca9a))\n* **n8n Form Node:** Prevent XSS with video and source tags ([#16329](https://github.com/n8n-io/n8n/issues/16329)) ([7940384](https://github.com/n8n-io/n8n/commit/7940384a85041a1890b1203d69c092c887312500))\n</release_notes>\n</inputs>\n<output>\nThis release focuses on important security and stability fixes:\n- A critical security vulnerability (XSS) in the n8n Form Node has been patched.\n- An issue that could allow unauthorized workflow termination has been resolved.\n- The PDF extraction functionality in the core has been fixed.\n</output>\n</example_1>\n\n<example_2>\n<inputs>\n<release_notes>\n## [1.98.0](https://github.com/n8n-io/n8n/compare/n8n@1.97.2...n8n@1.98.0) (2025-06-12)\n\n\n### Features\n\n* **Airtable Trigger Node:** Add new trigger node ([#16201](https://github.com/n8n-io/n8n/issues/16201)) ([a1b2c3d](https://github.com/n8n-io/n8n/commit/a1b2c3d...))\n\n### Enhancements\n\n* **Google Sheets Node:** Add 'overwrite' option for writing data ([#16115](https://github.com/n8n-io/n8n/issues/16115)) ([e4f5g6h](https://github.com/n8n-io/n8n/commit/e4f5g6h...))\n\n### Bug Fixes\n\n* **UI:** Corrected typo in settings panel ([#16300](https://github.com/n8n-io/n8n/issues/16300)) ([i7j8k9l](https://github.com/n8n-io/n8n/commit/i7j8k9l...))\n</release_notes>\n</inputs>\n<output>\nKey highlights for this version:\n- **New Node:** A new Airtable Trigger node has been introduced, allowing workflows to start based on Airtable record changes.\n- **Google Sheets Node:** The node has been enhanced with a new 'overwrite' option when writing data to a sheet.\n</output>\n</example_2>\n\n<example_3>\n<inputs>\n<release_notes>\n## [1.97.3](https://github.com/n8n-io/n8n/compare/n8n@1.97.2...n8n@1.97.3) (2025-06-10)\n\n\n### Chores\n\n* **deps:** update dependency `some-package` to v2.5.1\n* **docs:** clarify wording in credentials page\n</release_notes>\n</inputs>\n<output>\nThis release contains minor maintenance and documentation updates.\n</output>\n</example_3>\n</examples>\n\n<output_format>\n- A short, unordered bulleted list (using `-`) or a brief paragraph.\n- Use clear, benefit-oriented language. (e.g., \"You can now...\" or \"Resolved an issue that caused...\").\n- Rephrase the technical commit messages into plain English.\n- Do not include the version number, date, GitHub issue numbers, or commit hashes in your output.\n- If there are no significant changes (e.g., only chores, docs, or minor dependency updates), you MUST output the exact phrase: `This release contains minor maintenance and documentation updates.`\n</output_format>\n</instructions>\n\n<inputs>\n<release_notes>\n{{ $json.body }}\n</release_notes>\n</inputs",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "66ea6a79-47f5-4f21-9eb9-8ac1176c3d73",
"name": "Approuver la mise à jour",
"type": "n8n-nodes-base.telegram",
"position": [
2740,
-340
],
"webhookId": "d7023716-c968-44bb-b888-d20a7c6d544a",
"parameters": {
"message": "=New n8n Version {{ $('Get n8n Github Release').item.json.name || \"\"}}\n\n{{ $('Release Overview').last().json.text }}",
"options": {
"limitWaitTime": {
"values": {
"resumeUnit": "days"
}
},
"appendAttribution": true
},
"operation": "sendAndWait",
"approvalOptions": {
"values": {
"approvalType": "double",
"approveLabel": "✅ Update",
"disapproveLabel": "❌ Ignore"
}
}
},
"credentials": {
"telegramApi": {
"id": "gSws2Z84sGJFBxoz",
"name": "n8n_ai_workflow_bot"
}
},
"typeVersion": 1.2
},
{
"id": "64444209-7876-4ec7-b8c1-b7fba75468ae",
"name": "Note adhésive 5",
"type": "n8n-nodes-base.stickyNote",
"position": [
200,
-520
],
"parameters": {
"color": 5,
"width": 300,
"height": 440,
"content": "### ⚙️ CONFIGURE YOUR SERVER PATHS HERE\n\n* **`docker_path`**: Set this to the **absolute path** on your server where your `docker-compose.yml` file is located.\n * Example: `/home/user/n8n-docker`\n* **`worker_command`**: If you use n8n workers, set the scale command here (e.g., `--scale n8n-worker=4`). Leave blank if you don't use workers."
},
"typeVersion": 1
},
{
"id": "a2a8d86a-85cd-4911-86a2-265260529093",
"name": "Note adhésive 6",
"type": "n8n-nodes-base.stickyNote",
"position": [
520,
-400
],
"parameters": {
"color": 3,
"width": 260,
"height": 320,
"content": "### 🔒 SSH Connection\n\nSelect your SSH credential for the server hosting your n8n instance in **both** of these nodes."
},
"typeVersion": 1
},
{
"id": "fcc4251e-9f4d-48c0-82fd-7e7adad0158b",
"name": "Note adhésive 7",
"type": "n8n-nodes-base.stickyNote",
"position": [
980,
-420
],
"parameters": {
"color": 7,
"width": 660,
"height": 340,
"content": "### 💡 How Update Detection Works\n\nThis workflow compares the unique `digest` of your running Docker image with the latest `digest` on Docker Hub for your tag (e.g., `latest`).\n\nIf they are different, an update is available."
},
"typeVersion": 1
},
{
"id": "ef12ba27-3b50-47a2-8a2a-6feaef6e8be7",
"name": "Obtenir la version Github de n8n",
"type": "n8n-nodes-base.httpRequest",
"onError": "continueErrorOutput",
"position": [
1780,
-340
],
"parameters": {
"url": "=https://api.github.com/repos/n8n-io/n8n/releases/{{ $('Target Version').last().json.n8n_target_version }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "bb657976-70ce-496e-8620-eed07d2cb1c9",
"name": "Note adhésive 8",
"type": "n8n-nodes-base.stickyNote",
"position": [
-280,
-480
],
"parameters": {
"color": 7,
"width": 260,
"height": 400,
"content": "### 🔎 Get Instance Info\n\nThis node fetches local instance settings, like the current version and whether it's running on Docker.\n\nThis step ensures the workflow only proceeds if it's on a compatible (Docker) setup. No configuration is needed here."
},
"typeVersion": 1
},
{
"id": "c89f3f43-7af1-4778-811b-e545743f1cbd",
"name": "Note adhésive 9",
"type": "n8n-nodes-base.stickyNote",
"position": [
3180,
-820
],
"parameters": {
"color": 4,
"width": 520,
"height": 620,
"content": "### 🚀 Final Step: Execute Update\n\nThis is the final action node. It connects to your server via SSH and runs the command to update your n8n Docker instance.\n\n**How it works:**\nThe command performs three key actions:\n1. `docker compose pull`: Downloads the newest n8n image.\n2. `docker compose down`: Safely stops your current n8n containers.\n3. `docker compose up -d`: Starts the new containers in the background.\n\n**Important Details:**\n* **Background Process:** It uses `nohup ... &` to run the update in the background. This is critical because it allows this workflow to finish immediately without waiting for the Docker update to complete, preventing a crash when the docker instance is stopped.\n* **Log File:** Any output or errors from the update process are saved to a file named `update.log` in your n8n Docker directory on the server. **Check this file if you encounter issues after an update.**"
},
"typeVersion": 1
}
],
"pinData": {},
"connections": {
"51b5d013-9027-4f98-a3d7-26d0e08a6968": {
"main": [
[
{
"node": "d8e5e551-4018-4e17-8a4e-ca946c8ae8f5",
"type": "main",
"index": 0
}
]
]
},
"a20184f7-031f-4170-a8a3-e33b458445e9": {
"main": [
[
{
"node": "7ae77004-c55b-4f72-8015-99d061b1d23a",
"type": "main",
"index": 0
}
]
]
},
"7bda6df1-dc3c-4e91-90e6-a35139214829": {
"main": [
[
{
"node": "ae4196a1-0eff-4628-8eeb-e12f0e78f14f",
"type": "main",
"index": 0
}
]
]
},
"d8e5e551-4018-4e17-8a4e-ca946c8ae8f5": {
"main": [
[
{
"node": "f76323fa-b464-498c-bb88-e8df8f49d9fc",
"type": "main",
"index": 0
}
]
]
},
"7ae77004-c55b-4f72-8015-99d061b1d23a": {
"main": [
[]
]
},
"66ea6a79-47f5-4f21-9eb9-8ac1176c3d73": {
"main": [
[
{
"node": "a20184f7-031f-4170-a8a3-e33b458445e9",
"type": "main",
"index": 0
}
]
]
},
"6694185e-3b73-436f-93fb-4595e0719c65": {
"main": [
[
{
"node": "ef12ba27-3b50-47a2-8a2a-6feaef6e8be7",
"type": "main",
"index": 0
}
]
]
},
"390d5794-d41a-4544-b27b-c07028116e2f": {
"main": [
[
{
"node": "bb82d25b-9419-4887-ba38-710f0803b66a",
"type": "main",
"index": 0
}
]
]
},
"fe5322e0-af4a-4280-b548-e6e79f05abff": {
"main": [
[
{
"node": "66ea6a79-47f5-4f21-9eb9-8ac1176c3d73",
"type": "main",
"index": 0
}
]
]
},
"760cfb7e-9b50-4075-9bb2-b804650dc591": {
"main": [
[
{
"node": "6694185e-3b73-436f-93fb-4595e0719c65",
"type": "main",
"index": 0
}
]
]
},
"ef12ba27-3b50-47a2-8a2a-6feaef6e8be7": {
"main": [
[
{
"node": "998f0a3c-7982-4f52-9ff8-14af41efc0b8",
"type": "main",
"index": 0
}
],
[
{
"node": "66ea6a79-47f5-4f21-9eb9-8ac1176c3d73",
"type": "main",
"index": 0
}
]
]
},
"ae4196a1-0eff-4628-8eeb-e12f0e78f14f": {
"main": [
[
{
"node": "51b5d013-9027-4f98-a3d7-26d0e08a6968",
"type": "main",
"index": 0
}
]
]
},
"f76323fa-b464-498c-bb88-e8df8f49d9fc": {
"main": [
[
{
"node": "390d5794-d41a-4544-b27b-c07028116e2f",
"type": "main",
"index": 0
}
]
]
},
"35e1a71d-048e-4b20-a618-f8172a386d2f": {
"ai_languageModel": [
[
{
"node": "fe5322e0-af4a-4280-b548-e6e79f05abff",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"bb82d25b-9419-4887-ba38-710f0803b66a": {
"main": [
[
{
"node": "760cfb7e-9b50-4075-9bb2-b804650dc591",
"type": "main",
"index": 0
}
]
]
},
"998f0a3c-7982-4f52-9ff8-14af41efc0b8": {
"main": [
[
{
"node": "fe5322e0-af4a-4280-b548-e6e79f05abff",
"type": "main",
"index": 0
}
]
]
}
}
}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é - Intelligence Artificielle
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
Lucas Peyrin
@lucaspeyrinInnovative builder with a passion for crafting automation solutions that solve real-world challenges. From streamlining workflows to driving efficiency, my work empowers teams and individuals to achieve more with less effort. Experienced in developing scalable tools and strategies that deliver results with n8n, supabase and cline.
Partager ce workflow