Retour aux modèles
MODÈLE DE WORKFLOW
Generate N8n Template Descriptions From Google Drive | Operasyon için n8n Otomasyon İş Akışı Şablonu (Google Sheets, Gmail)
n8n için hazır otomasyon şablonu: Generate N8n Template Descriptions From Google Drive. 13 düğüm. Entegrasyonlar: Google Sheets, Gmail. JSON'u kopyalayıp n8n'e içe aktarın.
13 nœudsGenerate_N8n_Template_Descriptions_From_Google_Drive-workflow.json
{"id": "zX0SNUBqlonCm9UQ","meta": {"instanceId": "8443f10082278c46aa5cf3acf8ff0f70061a2c58bce76efac814b16290845177","templateCredsSetupCompleted": true},"name": "Generate n8n template descriptions from Google Drive","tags": [],"nodes": [{"id": "ddb41538-8446-4938-9233-7475b5a63fbb","name": "When clicking ‘Execute workflow’","type": "n8n-nodes-base.manualTrigger","position": [-688,-64],"parameters": {},"typeVersion": 1},{"id": "7c0fd462-7b25-4e1f-852d-5b526f16de0f","name": "Extract from File","type": "n8n-nodes-base.extractFromFile","position": [208,-192],"parameters": {"options": {},"operation": "fromJson"},"typeVersion": 1},{"id": "5e02aa21-b341-489c-82fb-feacb0747b13","name": "Download file","type": "n8n-nodes-base.googleDrive","position": [-16,-192],"parameters": {"fileId": {"__rl": true,"mode": "id","value": "={{$json[\"id\"]}}"},"options": {},"operation": "download"},"credentials": {"googleDriveOAuth2Api": {"id": "E7nEqUL27GUx1xHa","name": "Techdome Account"}},"typeVersion": 3},{"id": "016bff72-bd86-4eba-9c10-86853cd102cc","name": "Search files and folders","type": "n8n-nodes-base.googleDrive","position": [-464,-64],"parameters": {"filter": {"folderId": {"__rl": true,"mode": "list","value": "1HP3LnTPLwe81xUrp0P6aV2nJKdX6BIcM","cachedResultUrl": "https://drive.google.com/drive/folders/1HP3LnTPLwe81xUrp0P6aV2nJKdX6BIcM","cachedResultName": "n8n json checker"}},"options": {},"resource": "fileFolder","returnAll": true},"credentials": {"googleDriveOAuth2Api": {"id": "E7nEqUL27GUx1xHa","name": "Techdome Account"}},"typeVersion": 3,"alwaysOutputData": true},{"id": "eca112e7-3b66-455e-8086-2d3bf701cd3b","name": "Sticky Note","type": "n8n-nodes-base.stickyNote","position": [-832,-320],"parameters": {"height": 192,"content": "## ⚙️ Step 1: Manual Trigger \nUse this to manually start the workflow when testing or batch-processing workflow descriptions. \n➡️ No setup required.\n"},"typeVersion": 1},{"id": "7e6d213b-112d-4759-bc8d-2d5f675a1098","name": "Sticky Note1","type": "n8n-nodes-base.stickyNote","position": [-544,96],"parameters": {"width": 288,"height": 320,"content": "## 📂 Step 2: Search Files and Folders \nThis node searches a specific Google Drive folder for JSON workflow files to process. \n\n**Setup Instructions:** \n- Connect your own Google Drive OAuth2 credentials. \n- Replace any hardcoded folder ID with a variable or reference to your Drive. \n\n\n"},"typeVersion": 1},{"id": "e51a77b0-95e8-418a-89d3-2e610c6cac7d","name": "Sticky Note2","type": "n8n-nodes-base.stickyNote","position": [496,208],"parameters": {"height": 304,"content": "## 🧠 Step 8:Store AI Context (LangChain Memory)\nStores short-term AI context to improve continuity during prompt execution. \nNo credentials required. \n💡 Keep context window small (7–10) to avoid large memory overhead.\n"},"typeVersion": 1},{"id": "8ff67280-778b-4de1-86d2-82905c3ed3e4","name": "Sticky Note3","type": "n8n-nodes-base.stickyNote","position": [1184,-496],"parameters": {"height": 288,"content": "## ✨ Step 11: Format HTML Email \nCreates clean HTML and plain-text versions of the generated description for email + Google Sheet logging. \n\n✅ No credentials here. \n💡 You may adjust the CSS styling within the HTML block.\n"},"typeVersion": 1},{"id": "e8695343-49c0-4cf3-b0b0-305b36c5a450","name": "Sticky Note4","type": "n8n-nodes-base.stickyNote","position": [816,-592],"parameters": {"height": 368,"content": "## 🧾 Step 10: Format Markdown Description \nTakes the AI output and converts it into structured Markdown text suitable for n8n template publishing. \n\n**Setup Instructions:** \n- Ensure each section (Overview, Benefits, etc.) is returned properly. \n- You can tweak emoji styles or section titles here. \n✅ No credentials required.\n"},"typeVersion": 1},{"id": "453d0845-afca-4018-a7be-b464150598d9","name": "Sticky Note5","type": "n8n-nodes-base.stickyNote","position": [800,160],"parameters": {"height": 288,"content": "## 🧩 Step 9: Parse AI Response into Structured JSON\nEnsures AI response is parsed into clean JSON format for the next node. \n✅ No sensitive data. \n💡 You can adjust the schema if adding more description sections.\n"},"typeVersion": 1},{"id": "af7d1723-3163-4083-857a-d3367b9cbd79","name": "Sticky Note6","type": "n8n-nodes-base.stickyNote","position": [192,176],"parameters": {"height": 320,"content": "## 💬 Step 7: Connect to Azure OpenAI GPT Model\n\n**Setup Instructions:** \n- Use your own `azureOpenAiApi` credential . \n- Verify the model name (gpt-4o or equivalent). \n\n"},"typeVersion": 1},{"id": "205d405d-85ff-4ee8-be90-31df1da4f56a","name": "Sticky Note7","type": "n8n-nodes-base.stickyNote","position": [512,-688],"parameters": {"height": 448,"content": "## 🤖 Step 6: AI Agent \nUses a LangChain agent + Azure OpenAI model to generate workflow titles and structured descriptions. \n\n**Setup Instructions:** \n- Connect the AI Language Model and Output Parser as shown. \n- This node defines the prompt and ensures the response follows n8n Template Guidelines. \n\n✅ No sensitive info here — well-structured system prompt! \n OpenAI.\n"},"typeVersion": 1},{"id": "6181afda-2715-438e-8a4a-4233ef3b824b","name": "Sticky Note8","type": "n8n-nodes-base.stickyNote","position": [176,-400],"parameters": {"height": 192,"content": "## 📦 Step 5: Extract JSON Data \nParses the downloaded file to extract workflow JSON data before AI processing. \nNo credentials needed here.\n"},"typeVersion": 1},{"id": "da26533d-f55d-4e7c-b97a-1d7be91897f8","name": "Sticky Note9","type": "n8n-nodes-base.stickyNote","position": [-80,-528],"parameters": {"height": 320,"content": "## ⬇️ Step 4: Download File \nDownloads the JSON file contents for each matched Drive item. \n\n**Setup Instructions:** \n- Connect to your Google Drive OAuth2 credentials . \n- Ensure file access permissions allow downloads. \n\n\n"},"typeVersion": 1},{"id": "129b4156-d3ec-4528-9be9-743dc3371fc1","name": "Sticky Note10","type": "n8n-nodes-base.stickyNote","position": [-352,-352],"parameters": {"height": 240,"content": "## 🔁 Step 3: Loop Over JSONS \nProcesses each found file individually to ensure the workflow handles large folders efficiently. \nNo credential changes required. \n➡️ You can adjust batch size in the node options.\n"},"typeVersion": 1},{"id": "c51e2df4-3e5a-4f65-b77f-24d6ce7dcec2","name": "Sticky Note11","type": "n8n-nodes-base.stickyNote","position": [1728,-240],"parameters": {"height": 368,"content": "## 📧 Step 13: Send Email with Description \nSends a formatted HTML email with the generated template description. \n\n \n\n**Setup:** \n- Use your Gmail OAuth2 credentials (`gmailOAuth2`). \n- Test with a non-personal account if publishing publicly.\n"},"typeVersion": 1},{"id": "68f7f509-ebe2-45f1-a4d7-a3f306222dc4","name": "Sticky Note13","type": "n8n-nodes-base.stickyNote","position": [-1360,-352],"parameters": {"width": 384,"height": 448,"content": "## 🟨 Workflow Overview \nThis workflow automates the creation of structured n8n template descriptions. \nIt fetches JSON workflow files from Google Drive, uses an AI agent (Azure OpenAI + LangChain) to analyze them, and then formats detailed descriptions for publishing. \n\n### ⚙️ Flow Summary \n1. Trigger workflow manually. \n2. Search workflow files in Google Drive. \n3. Download and extract JSON data. \n4. Use AI Agent to generate title + description. \n5. Format Markdown and HTML outputs. \n6. Append results to Google Sheets. \n7. Send formatted description via Gmail. \n\n**Use Case:** Ideal for automating n8n template documentation and content generation.\n"},"typeVersion": 1},{"id": "35a62d62-6ede-4b06-8d04-a4d3760e220f","name": "Loop Over JSONS","type": "n8n-nodes-base.splitInBatches","position": [-240,-64],"parameters": {"options": {}},"typeVersion": 3},{"id": "77e3adc9-3c23-4eb8-8c29-0cd630ccb8cc","name": "AI Agent","type": "@n8n/n8n-nodes-langchain.agent","position": [496,-192],"parameters": {"text": "=You are given this n8n workflow JSON:\n\n{{ JSON.stringify($json) }}\n\nGenerate the **best possible template title** and a **structured description** following the rules. \nMake sure the title matches the format (Action verb + thing being manipulated + to/on/in/from + where). \nThe description must follow the defined section structure and highlight actual logic from the workflow.\n","options": {"systemMessage": "=You are an **expert n8n template description generator**. \nYour role is to analyze a provided workflow JSON and generate both a **precise template title** and a **structured description** suitable for n8n’s Template Publishing Guidelines. \n\n---\n\n### 🔑 Title Rules\n- Format: **Action verb** + **thing being manipulated** + **to/on/in/from** + **where** \n - Example: “One-way contact sync from Pipedrive to HubSpot” \n- The title must: \n - Be **short (≤10 words)**, with no filler. \n - Use **active verbs** (Automate, Sync, Track, Re-engage, Generate, etc.). \n - Clearly name the **services, apps, or data being connected**. \n - Indicate **directionality** where applicable (from → to). \n\n---\n\n### 📝 Description Style Guidelines\n- Write in **professional, user-friendly language**. \n- Use **light emoji markers** (📊, ⚡, 🚀, 📧) to improve readability. \n- Avoid generic filler — **every point must reflect actual workflow logic**. \n- Keep explanations **short, direct, and clear**. \n- Structure content in **bulleted lists** under clear section headers. \n- Ensure **accuracy to the JSON nodes and connections**. \n- Use an **automation-savvy tone** (confident, helpful, concise). \n\n---\n\n### 📦 Output Sections (Always in This Order)\n\n1. **title** \n - A concise workflow title that follows the naming convention above. \n\n2. **overview** \n - A one-line, catchy summary of the workflow’s purpose. \n\n3. **what_this_template_does** \n - Step-by-step, **chronological explanation** of the workflow. \n - Mention triggers, actions, and end results in plain English. \n\n4. **key_benefits** \n - 4–6 **outcome-focused benefits** (time saved, efficiency, error reduction). \n\n5. **features** \n - Breakdown of **nodes, triggers, filters, and integrations**. \n\n6. **requirements** \n - List of **services, credentials, or accounts** needed. \n\n7. **target_audience** \n - Who the workflow is most useful for (teams, roles, industries). \n\n8. **setup_instructions** \n - Practical, **step-by-step setup guidance** (credentials, environment variables, import, testing, activation). \n\n---\n\n### ⚠️ Critical Rules\n- Do **not** invent steps or tools not present in the JSON. \n- If a section has no applicable content, **omit gracefully** (do not fill with placeholders). \n- Ensure consistency: every bullet point must tie back to actual workflow logic. \n- Avoid redundancy — keep the flow **concise but complete**. \n\n---\n\n### ✅ Example Output Format (for clarity)\n\n**title:** \nOne-way contact sync from Pipedrive to HubSpot \n\n**overview:** \nAutomatically sync new contacts from Pipedrive into HubSpot CRM to keep sales and marketing aligned. 🔄 \n\n**what_this_template_does:** \n- Runs every hour via schedule trigger ⏰ \n- Fetches new contacts from Pipedrive 📥 \n- Creates or updates matching contacts in HubSpot CRM 📊 \n\n**key_benefits:** \n- ✅ No more manual contact transfers \n- ✅ Keeps CRM records consistent \n- ✅ Saves time for sales teams \n\n**features:** \n- Hourly schedule trigger \n- Pipedrive API integration \n- HubSpot CRM integration \n\n**requirements:** \n- Pipedrive OAuth2 credentials \n- HubSpot OAuth2 credentials \n\n**target_audience:** \n- Sales teams managing dual CRMs \n- Agencies working with multiple clients \n\n**setup_instructions:** \n- Connect Pipedrive and HubSpot accounts 🔑 \n- Import the workflow JSON 📦 \n- Adjust sync interval if needed 🕒 \n- Activate workflow 🚀 \n"},"promptType": "define","hasOutputParser": true},"typeVersion": 2.1},{"id": "c3f2e1e9-69db-4ccb-9022-2ebc4b45e88d","name": "Format Markdown Description","type": "n8n-nodes-base.code","position": [896,-192],"parameters": {"jsCode": "// Get input data\nconst inputData = $input.all();\n\n// Function to convert array to numbered list with emojis\nfunction formatList(items, emoji = '') {\n return items.map((item, index) => `${index + 1}. ${item} ${emoji}`).join('\\n');\n}\n\n// Function to convert array to bullet list with checkmarks\nfunction formatBenefits(items) {\n return items.map(item => `✅ ${item}`).join('\\n');\n}\n\n// Function to convert array to bullet list with asterisks\nfunction formatFeatures(items) {\n return items.map(item => `* ${item}`).join('\\n');\n}\n\n// Function to convert array to bullet list with emojis\nfunction formatAudience(items) {\n const emojis = ['👩💼', '🔄', '🏢', '🌐', '📊'];\n return items.map((item, index) => `* ${item} ${emojis[index] || '✨'}`).join('\\n');\n}\n\n// Function to convert setup instructions\nfunction formatSetup(items) {\n const emojis = ['🔑', '⚙️', '🕒', '📦', '✅', '🚀'];\n return items.map((item, index) => `${index + 1}. ${item} ${emojis[index] || '📌'}`).join('\\n');\n}\n\n// Process each item in the input\nconst results = inputData.map(item => {\n const data = item.json.output;\n \n // Build the formatted output\n let formattedOutput = `**Description**\\n`;\n formattedOutput += `${data.overview} 💌📊💬\\n\\n`;\n \n formattedOutput += `**What This Template Does**\\n`;\n formattedOutput += formatList(data.what_this_template_does, '') + '\\n\\n';\n \n formattedOutput += `**Key Benefits**\\n`;\n formattedOutput += formatBenefits(data.key_benefits) + '\\n\\n';\n \n formattedOutput += `**Features**\\n`;\n formattedOutput += formatFeatures(data.features) + '\\n\\n';\n \n formattedOutput += `**Requirements**\\n`;\n formattedOutput += data.requirements.map(item => `* ${item}`).join('\\n') + '\\n\\n';\n \n formattedOutput += `**Target Audience**\\n`;\n formattedOutput += formatAudience(data.target_audience) + '\\n\\n';\n \n formattedOutput += `**Step-by-Step Setup Instructions**\\n`;\n formattedOutput += formatSetup(data.setup_instructions);\n \n return {\n json: {\n title: data.title,\n formatted_description: formattedOutput\n }\n };\n});\n\nreturn results;"},"typeVersion": 2},{"id": "11f7b052-0cb4-4cfe-8aae-bf933d797a5a","name": "Format HTML Email","type": "n8n-nodes-base.code","position": [1344,-192],"parameters": {"jsCode": "// Get input data\nconst inputData = $input.all();\n\nconst results = inputData.map(item => {\n const data = item.json;\n const description = data.formatted_description || '';\n\n // Parse sections\n const sections = {\n overview: description.match(/\\*\\*Description\\*\\*\\n(.*?)\\n\\n/s)?.[1]?.trim() || '',\n what_does: description.match(/\\*\\*What This Template Does\\*\\*\\n(.*?)\\n\\n/s)?.[1]?.trim() || '',\n benefits: description.match(/\\*\\*Key Benefits\\*\\*\\n(.*?)\\n\\n/s)?.[1]?.trim() || '',\n features: description.match(/\\*\\*Features\\*\\*\\n(.*?)\\n\\n/s)?.[1]?.trim() || '',\n requirements: description.match(/\\*\\*Requirements\\*\\*\\n(.*?)\\n\\n/s)?.[1]?.trim() || '',\n audience: description.match(/\\*\\*Target Audience\\*\\*\\n(.*?)\\n\\n/s)?.[1]?.trim() || '',\n setup: description.match(/\\*\\*Step-by-Step Setup Instructions\\*\\*\\n(.*?)$/s)?.[1]?.trim() || ''\n };\n\n // 🧾 Plain text version for Google Sheets logging\n const plainText = `\n${data.title}\n\n📋 Overview:\n${sections.overview}\n\n⚙️ What This Template Does:\n${sections.what_does}\n\n🚀 Key Benefits:\n${sections.benefits}\n\n✨ Features:\n${sections.features}\n\n🔐 Requirements:\n${sections.requirements}\n\n🎯 Target Audience:\n${sections.audience}\n\n📝 Step-by-Step Setup Instructions:\n${sections.setup}\n\n🎯 Ready to automate? Import this template into your n8n instance and get started!\n `.trim();\n\n // 💌 HTML version for Email\n const htmlEmail = `\n\nen\">\n\n\n, initial-scale=1.0\">\n${data.title} \n\n\n\n\n\n\n\n `.trim();\n\n // Return both\n return {\n json: {\n title: data.title,\n formatted_description: data.formatted_description,\n html_email: htmlEmail, // for Gmail\n plain_text_email: plainText, // for Sheets\n subject: `n8n Template: ${data.title}`,\n preview_text: sections.overview.substring(0, 100) + '...'\n }\n };\n});\n\nreturn results;\n"${data.title}
\n\n📋 Overview
${sections.overview}\n⚙️ What This Template Does
${sections.what_does.split('\\n').map(l => `${l}`).join('')}\n🚀 Key Benefits
${sections.benefits.split('\\n').map(l => `${l}`).join('')}\n✨ Features
${sections.features.split('\\n').map(l => `${l}`).join('')}\n🔐 Requirements
${sections.requirements.split('\\n').map(l => `${l}`).join('')}\n🎯 Target Audience
${sections.audience.split('\\n').map(l => `${l}`).join('')}\n📝 Step-by-Step Setup Instructions
${sections.setup.split('\\n').map(l => `${l}`).join('')}🎯 Ready to automate? Import this template into your n8n instance and start building magic!\n},"typeVersion": 2},{"id": "36faaf0f-90a2-42c8-909a-8544a48d621b","name": "Sticky Note14","type": "n8n-nodes-base.stickyNote","position": [1088,-16],"parameters": {"height": 192,"content": "## 🧾 Step 12: Save to Google Sheets \nStores the generated template title and formatted description in a spreadsheet for record-keeping. \n\n\n"},"typeVersion": 1},{"id": "61d49f4e-e961-4359-8735-925a55eaa7f8","name": "Save To Google Sheets","type": "n8n-nodes-base.googleSheets","position": [1120,-192],"parameters": {"columns": {"value": {},"schema": [{"id": "title","type": "string","display": true,"removed": false,"required": false,"displayName": "title","defaultMatch": false,"canBeUsedToMatch": true},{"id": "formatted_description","type": "string","display": true,"removed": false,"required": false,"displayName": "formatted_description","defaultMatch": false,"canBeUsedToMatch": true}],"mappingMode": "autoMapInputData","matchingColumns": [],"attemptToConvertTypes": false,"convertFieldsToString": false},"options": {},"operation": "appendOrUpdate","sheetName": {"__rl": true,"mode": "list","value": "gid=0","cachedResultUrl": "https://docs.google.com/spreadsheets/d/1u_PoDeJHJnMyocSXmGH0sO9ybo5LrUszTkU6p3KzYAg/edit#gid=0","cachedResultName": "Sheet1"},"documentId": {"__rl": true,"mode": "list","value": "1u_PoDeJHJnMyocSXmGH0sO9ybo5LrUszTkU6p3KzYAg","cachedResultUrl": "https://docs.google.com/spreadsheets/d/1u_PoDeJHJnMyocSXmGH0sO9ybo5LrUszTkU6p3KzYAg/edit?usp=drivesdk","cachedResultName": "JSON Data with Description"}},"credentials": {"googleSheetsOAuth2Api": {"id": "kpPEOLCGn963qpoh","name": "automations@techdome.ai"}},"typeVersion": 4.7},{"id": "d031644e-84ea-4121-84d2-41e9d05207b5","name": "Send Email With Description","type": "n8n-nodes-base.gmail","position": [1568,-64],"webhookId": "0f500fb4-094e-48b6-a98e-da066652481b","parameters": {"sendTo": "your-email@example.com","message": "={{ $json.html_email }}","options": {},"subject": "={{ $json.subject }}"},"credentials": {"gmailOAuth2": {"id": "gEIaWCTvGfYjMSb3","name": "Gmail credentials"}},"typeVersion": 2.1},{"id": "8d655ca0-13d7-41ab-b3cf-e1387cdb61d0","name": "Store AI Context (LangChain Memory)","type": "@n8n/n8n-nodes-langchain.memoryBufferWindow","position": [560,32],"parameters": {"sessionKey": "\"json_review\"","sessionIdType": "customKey","contextWindowLength": 7},"typeVersion": 1.3},{"id": "3064a4d2-4329-4371-bc5d-47ee568205ef","name": "Connect to Azure OpenAI GPT Model","type": "@n8n/n8n-nodes-langchain.lmChatAzureOpenAi","position": [432,32],"parameters": {"model": "gpt-4o","options": {}},"credentials": {"azureOpenAiApi": {"id": "C3WzT18XqF8OdVM6","name": "Azure Open AI account"}},"typeVersion": 1},{"id": "ad5ee442-1644-4ab2-bdf9-cbf84447a5ff","name": "Parse AI Response into Structured JSON","type": "@n8n/n8n-nodes-langchain.outputParserStructured","position": [688,32],"parameters": {"jsonSchemaExample": "{\n \"title\": \"string\",\n \"overview\": \"string\",\n \"what_this_template_does\": [\"step1\", \"step2\", \"step3\"],\n \"key_benefits\": [\"benefit1\", \"benefit2\", \"benefit3\"],\n \"features\": [\"feature1\", \"feature2\", \"feature3\"],\n \"requirements\": [\"requirement1\", \"requirement2\"],\n \"target_audience\": [\"audience1\", \"audience2\"],\n \"setup_instructions\": [\"instruction1\", \"instruction2\", \"instruction3\"]\n}\n"},"typeVersion": 1.3}],"active": false,"pinData": {},"settings": {"executionOrder": "v1"},"versionId": "f22edb61-a906-4778-9a79-8d50a8fb1b2d","connections": {"AI Agent": {"main": [[{"node": "Format Markdown Description","type": "main","index": 0}]]},"Download file": {"main": [[{"node": "Extract from File","type": "main","index": 0}]]},"Loop Over JSONS": {"main": [[],[{"node": "Download file","type": "main","index": 0}]]},"Extract from File": {"main": [[{"node": "AI Agent","type": "main","index": 0}]]},"Format HTML Email": {"main": [[{"node": "Send Email With Description","type": "main","index": 0}]]},"Save To Google Sheets": {"main": [[{"node": "Format HTML Email","type": "main","index": 0}]]},"Search files and folders": {"main": [[{"node": "Loop Over JSONS","type": "main","index": 0}]]},"Format Markdown Description": {"main": [[{"node": "Save To Google Sheets","type": "main","index": 0}]]},"Send Email With Description": {"main": [[{"node": "Loop Over JSONS","type": "main","index": 0}]]},"Connect to Azure OpenAI GPT Model": {"ai_languageModel": [[{"node": "AI Agent","type": "ai_languageModel","index": 0}]]},"Store AI Context (LangChain Memory)": {"ai_memory": [[{"node": "AI Agent","type": "ai_memory","index": 0}]]},"When clicking ‘Execute workflow’": {"main": [[{"node": "Search files and folders","type": "main","index": 0}]]},"Parse AI Response into Structured JSON": {"ai_outputParser": [[{"node": "AI Agent","type": "ai_outputParser","index": 0}]]}}}
Dans l’éditeur n8n : collez avec Ctrl+V→Le workflow sera créé