Rapport d'erreurs automatisé : GitHub Issues → Analyse IA → Tickets Jira, avec des alertes Slack et Discord
Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 22 nœuds.Utilise principalement des nœuds comme If, Code, Jira, Slack, Github. Synchronisation d'erreurs GitHub vers Jira, avec analyse GPT-4o et alertes d'équipe
- •Token Bot Slack ou URL Webhook
- •Personal Access Token GitHub
- •Token Bot Discord ou Webhook
- •Point de terminaison HTTP Webhook (généré automatiquement par n8n)
- •Clé API OpenAI
Nœuds utilisés (22)
Catégorie
{
"name": "Automate Bug Reports: GitHub Issues → AI Analysis → Jira Tickets with Slack & Discord Alerts",
"tags": [],
"nodes": [
{
"id": "sticky-overview",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
250,
300
],
"parameters": {
"width": 400,
"height": 380,
"content": "## 🔄 AUTOMATED BUG WORKFLOW\n\n### Flow: Webhook → Filter → Extract → AI → Parse → Jira → Notify → Respond\n\n### Benefits\n✅ Instant AI triage\n✅ Auto-assignment\n✅ Zero manual work\n✅ Saves 15-20 min/bug\n✅ $685/month ROI\n\n### Setup Requirements\n- GitHub repo access\n- OpenAI API key (GPT-4o)\n- Jira credentials\n- Slack workspace (optional)\n- Discord server (optional)"
},
"typeVersion": 1
},
{
"id": "sticky-webhook",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
250,
750
],
"parameters": {
"width": 280,
"height": 300,
"content": "## 📥 STEP 1: WEBHOOK\n\n**Setup:**\n1. Activate workflow\n2. Copy webhook URL from this node\n3. GitHub → Settings → Webhooks → Add webhook\n4. Paste URL\n5. Content-type: application/json\n6. Events: Select \"Issues\"\n7. Save\n\n**Test:** Create a new issue in GitHub"
},
"typeVersion": 1
},
{
"id": "a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d",
"name": "GitHub Webhook",
"type": "n8n-nodes-base.webhook",
"position": [
400,
1100
],
"webhookId": "",
"parameters": {
"path": "github-issue-webhook",
"options": {},
"httpMethod": "POST",
"responseMode": "responseNode"
},
"typeVersion": 1
},
{
"id": "sticky-filter",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
600,
750
],
"parameters": {
"width": 280,
"height": 280,
"content": "## 🔍 STEP 2: FILTER\n\n**Purpose:** Only process NEW issues\n\n**Checks:** action = \"opened\"\n- TRUE: Continue\n- FALSE: Stop\n\n**Why:** Prevents duplicate Jira tickets from issue edits, labels, or comments"
},
"typeVersion": 1
},
{
"id": "b2c3d4e5-f6a7-4b5c-9d0e-1f2a3b4c5d6e",
"name": "Filtre : Uniquement les nouvelles issues",
"type": "n8n-nodes-base.if",
"position": [
750,
1100
],
"parameters": {
"conditions": {
"string": [
{
"value1": "={{$json.action}}",
"value2": "opened",
"operation": "equals"
}
]
}
},
"typeVersion": 1
},
{
"id": "sticky-extract",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
950,
750
],
"parameters": {
"width": 280,
"height": 300,
"content": "## 📋 STEP 3: EXTRACT DATA\n\n**Extracts:**\n- Issue number & title\n- Description & reporter\n- Labels & URL\n- Repository info\n- Mentioned files (regex)\n\n**File Detection:**\nFinds: .js, .py, .ts, .jsx, .tsx, .java, .go, .rb, .php, .cpp, .c, .css, .html"
},
"typeVersion": 1
},
{
"id": "c3d4e5f6-a7b8-4c5d-0e1f-2a3b4c5d6e7f",
"name": "Extraire le contexte de l'issue",
"type": "n8n-nodes-base.code",
"position": [
1100,
1100
],
"parameters": {
"jsCode": "const issue = $input.item.json.issue;\nconst repo = $input.item.json.repository;\n\nconst fileRegex = /`([^`]*\\.(js|py|ts|jsx|tsx|java|go|rb|php|cpp|c|css|html))`/g;\nconst mentionedFiles = [];\nlet match;\n\nif (issue.body) {\n while ((match = fileRegex.exec(issue.body)) !== null) {\n mentionedFiles.push(match[1]);\n }\n}\n\nreturn {\n issueNumber: issue.number,\n title: issue.title,\n description: issue.body || \"No description provided\",\n reporter: issue.user.login,\n reporterAvatar: issue.user.avatar_url,\n labels: issue.labels.map(l => l.name).join(\", \") || \"none\",\n url: issue.html_url,\n createdAt: issue.created_at,\n mentionedFiles: mentionedFiles.join(\", \") || \"No files mentioned\",\n repositoryName: repo.full_name,\n repositoryOwner: repo.owner.login,\n repositoryRepo: repo.name\n};"
},
"typeVersion": 2
},
{
"id": "sticky-ai",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
1300,
750
],
"parameters": {
"width": 280,
"height": 340,
"content": "## 🤖 STEP 4: AI ANALYSIS\n\n**GPT-4o analyzes:**\n- Bug severity (Critical/High/Medium/Low)\n- Category (Backend/Frontend/DB/API/UI/etc)\n- Reproduction steps\n- Potential root cause\n- Priority (P0-P3)\n- Complexity & time estimate\n- Recommended developer\n\n**Setup:** Add OpenAI credentials\n\n**Cost:** ~$0.01-0.03 per issue"
},
"typeVersion": 1
},
{
"id": "d4e5f6a7-b8c9-4d5e-1f2a-3b4c5d6e7f8a",
"name": "Analyse de bug GPT-4o",
"type": "@n8n/n8n-nodes-langchain.openAi",
"position": [
1450,
1100
],
"parameters": {
"text": "=Analyze this GitHub issue and provide a structured response in valid JSON format:\n\n**Issue Title:** {{$json.title}}\n**Description:** {{$json.description}}\n**Labels:** {{$json.labels}}\n**Mentioned Files:** {{$json.mentionedFiles}}\n**Repository:** {{$json.repositoryName}}\n\nProvide your analysis in this exact JSON structure:\n{\n \"bugSeverity\": \"Critical|High|Medium|Low\",\n \"category\": \"Backend|Frontend|Database|API|UI|Performance|Security|Infrastructure\",\n \"reproductionSteps\": \"Clear numbered steps to reproduce\",\n \"potentialRootCause\": \"Brief technical analysis\",\n \"suggestedPriority\": \"P0|P1|P2|P3\",\n \"estimatedComplexity\": \"Simple|Medium|Complex\",\n \"recommendedDeveloper\": \"backend-dev|frontend-dev|fullstack-dev|devops\",\n \"estimatedHours\": \"number between 1-40\"\n}\n\nRespond with ONLY the JSON object, no additional text.",
"model": "gpt-4o",
"options": {
"maxTokens": 1000,
"temperature": 0.3
}
},
"typeVersion": 1.3
},
{
"id": "sticky-parse",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
1650,
750
],
"parameters": {
"width": 300,
"height": 340,
"content": "## 🔧 STEP 5: PARSE & MAP\n\n**Functions:**\n- Parse AI JSON response (with error handling)\n- Map developer types to emails\n- Convert priorities (P0→Highest)\n- Prepare Jira labels array\n\n**⚠️ CUSTOMIZE THIS:**\nUpdate email addresses in the code:\n```\n\"backend-dev\": \"backend@company.com\"\n\"frontend-dev\": \"frontend@company.com\"\n\"fullstack-dev\": \"fullstack@company.com\"\n\"devops\": \"devops@company.com\"\n```"
},
"typeVersion": 1
},
{
"id": "e5f6a7b8-c9d0-4e5f-2a3b-4c5d6e7f8a9b",
"name": "Parser la réponse GPT & mapper les données",
"type": "n8n-nodes-base.code",
"position": [
1800,
1100
],
"parameters": {
"jsCode": "const issueData = $('Extract Issue Context').item.json;\nconst gptResponse = $input.item.json.text;\n\nlet analysis;\ntry {\n analysis = JSON.parse(gptResponse);\n} catch (error) {\n analysis = {\n bugSeverity: \"Medium\",\n category: \"General\",\n reproductionSteps: \"See original issue\",\n potentialRootCause: \"Requires investigation\",\n suggestedPriority: \"P2\",\n estimatedComplexity: \"Medium\",\n recommendedDeveloper: \"fullstack-dev\",\n estimatedHours: 8\n };\n}\n\nconst developerMapping = {\n \"backend-dev\": \"backend.dev@company.com\",\n \"frontend-dev\": \"frontend.dev@company.com\",\n \"fullstack-dev\": \"fullstack.dev@company.com\",\n \"devops\": \"devops@company.com\"\n};\n\nconst priorityMapping = {\n \"P0\": \"Highest\",\n \"P1\": \"High\",\n \"P2\": \"Medium\",\n \"P3\": \"Low\"\n};\n\nreturn {\n ...issueData,\n bugSeverity: analysis.bugSeverity,\n category: analysis.category,\n reproductionSteps: analysis.reproductionSteps,\n potentialRootCause: analysis.potentialRootCause,\n suggestedPriority: analysis.suggestedPriority,\n estimatedComplexity: analysis.estimatedComplexity,\n estimatedHours: analysis.estimatedHours,\n recommendedDeveloper: analysis.recommendedDeveloper,\n assignedDeveloper: developerMapping[analysis.recommendedDeveloper] || \"triage@company.com\",\n jiraLabels: [analysis.category, analysis.bugSeverity],\n jiraPriority: priorityMapping[analysis.suggestedPriority] || \"Medium\"\n};"
},
"typeVersion": 2
},
{
"id": "sticky-jira",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
2000,
750
],
"parameters": {
"width": 300,
"height": 340,
"content": "## 🎫 STEP 6: CREATE JIRA\n\n**Setup:**\n1. Add Jira Software Cloud credentials\n2. Update YOUR_JIRA_PROJECT_KEY\n3. Replace your-company.atlassian.net URLs\n\n**Ticket includes:**\n- GitHub issue link\n- Original description\n- Complete AI analysis\n- Auto-assigned developer\n- Priority & labels set\n\n**Get API Token:**\nJira → Profile → Security → API Tokens → Create"
},
"typeVersion": 1
},
{
"id": "f6a7b8c9-d0e1-4f5a-3b4c-5d6e7f8a9b0c",
"name": "Créer un ticket Jira",
"type": "n8n-nodes-base.jira",
"position": [
2150,
1100
],
"parameters": {
"project": "YOUR_JIRA_PROJECT_KEY",
"summary": "=[GitHub #{{$json.issueNumber}}] {{$json.title}}",
"resource": "issue",
"issueType": "Bug",
"operation": "create",
"description": "=*Reported by:* {{$json.reporter}}\n*GitHub Issue:* {{$json.url}}\n*Repository:* {{$json.repositoryName}}\n\n---\n\n*Original Description:*\n{{$json.description}}\n\n---\n\n*AI Analysis Summary:*\n\n*Severity:* {{$json.bugSeverity}}\n*Category:* {{$json.category}}\n*Estimated Complexity:* {{$json.estimatedComplexity}}\n*Estimated Hours:* {{$json.estimatedHours}}\n*Mentioned Files:* {{$json.mentionedFiles}}\n\n*Reproduction Steps:*\n{{$json.reproductionSteps}}\n\n*Potential Root Cause:*\n{{$json.potentialRootCause}}",
"additionalFields": {
"labels": "={{$json.jiraLabels}}",
"assignee": "={{$json.assignedDeveloper}}",
"priority": "={{$json.jiraPriority}}"
}
},
"typeVersion": 1
},
{
"id": "sticky-notify",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
2350,
750
],
"parameters": {
"width": 360,
"height": 340,
"content": "## 🔔 STEP 7: NOTIFICATIONS\n\n**3 Parallel Branches:**\n\n1️⃣ **GitHub Comment**\n- Posts on original issue\n- Links to Jira ticket\n- Shows AI analysis summary\n\n2️⃣ **Slack Alert**\n- Rich formatted message\n- All bug details\n- Action buttons\n\n3️⃣ **Discord Alert**\n- Markdown formatted\n- Links to both platforms\n\nAll execute simultaneously!"
},
"typeVersion": 1
},
{
"id": "a7b8c9d0-e1f2-4a5b-4c5d-6e7f8a9b0c1d",
"name": "Mettre à jour l'issue GitHub",
"type": "n8n-nodes-base.github",
"position": [
2550,
950
],
"parameters": {
"body": "=🤖 **Automated Bug Report Created**\n\n📋 **Jira Ticket:** [{{$json.key}}](https://your-company.atlassian.net/browse/{{$json.key}})\n\n**AI Analysis:**\n- **Severity:** {{$('Parse GPT Response & Map Data').item.json.bugSeverity}}\n- **Category:** {{$('Parse GPT Response & Map Data').item.json.category}}\n- **Priority:** {{$('Parse GPT Response & Map Data').item.json.suggestedPriority}}\n- **Assigned to:** {{$('Parse GPT Response & Map Data').item.json.assignedDeveloper}}\n- **Estimated Time:** {{$('Parse GPT Response & Map Data').item.json.estimatedHours}} hours\n\nThis issue has been automatically triaged and assigned. A developer will review soon.",
"owner": "={{$('Parse GPT Response & Map Data').item.json.repositoryOwner}}",
"resource": "issue",
"operation": "createComment",
"repository": "={{$('Parse GPT Response & Map Data').item.json.repositoryRepo}}",
"issueNumber": "={{$('Parse GPT Response & Map Data').item.json.issueNumber}}",
"authentication": "oAuth2"
},
"typeVersion": 1
},
{
"id": "b8c9d0e1-f2a3-4b5c-5d6e-7f8a9b0c1d2e",
"name": "Envoyer une alerte Slack",
"type": "n8n-nodes-base.slack",
"position": [
2550,
1100
],
"parameters": {
"text": "=New Bug Report",
"channel": "dev-alerts",
"blocksUi": {
"blocksValues": [
{
"type": "header",
"textUi": {
"text": "=🐛 New Bug: GitHub #{{$('Extract Issue Context').item.json.issueNumber}}"
}
},
{
"type": "section",
"fieldsUi": {
"fieldsValues": [
{
"text": "=*Title:*\\n{{$('Extract Issue Context').item.json.title}}"
},
{
"text": "=*Severity:*\\n{{$('Parse GPT Response & Map Data').item.json.bugSeverity}}"
},
{
"text": "=*Category:*\\n{{$('Parse GPT Response & Map Data').item.json.category}}"
},
{
"text": "=*Priority:*\\n{{$('Parse GPT Response & Map Data').item.json.suggestedPriority}}"
},
{
"text": "=*Assigned:*\\n{{$('Parse GPT Response & Map Data').item.json.assignedDeveloper}}"
},
{
"text": "=*Est. Hours:*\\n{{$('Parse GPT Response & Map Data').item.json.estimatedHours}}h"
}
]
}
},
{
"type": "section",
"textUi": {
"text": "=*Potential Cause:*\\n{{$('Parse GPT Response & Map Data').item.json.potentialRootCause}}"
}
},
{
"type": "actions",
"elementsUi": {
"elementsValues": [
{
"url": "={{$('Extract Issue Context').item.json.url}}",
"type": "button",
"textUi": {
"text": "View in GitHub"
}
},
{
"url": "=https://your-company.atlassian.net/browse/{{$json.key}}",
"type": "button",
"textUi": {
"text": "View in Jira"
}
}
]
}
}
]
},
"resource": "message",
"operation": "post"
},
"typeVersion": 2.1
},
{
"id": "c9d0e1f2-a3b4-4c5d-6e7f-8a9b0c1d2e3f",
"name": "Envoyer une alerte Discord",
"type": "n8n-nodes-base.discord",
"position": [
2550,
1250
],
"parameters": {
"url": "YOUR_DISCORD_WEBHOOK_URL",
"content": "=🐛 **New Bug Report - {{$('Parse GPT Response & Map Data').item.json.bugSeverity}} Priority**\\n\\n**GitHub Issue:** #{{$('Extract Issue Context').item.json.issueNumber}} - {{$('Extract Issue Context').item.json.title}}\\n**Jira Ticket:** {{$json.key}}\\n**Severity:** {{$('Parse GPT Response & Map Data').item.json.bugSeverity}}\\n**Category:** {{$('Parse GPT Response & Map Data').item.json.category}}\\n**Assigned:** {{$('Parse GPT Response & Map Data').item.json.assignedDeveloper}}\\n**Estimated:** {{$('Parse GPT Response & Map Data').item.json.estimatedHours}} hours\\n\\n**Potential Cause:**\\n{{$('Parse GPT Response & Map Data').item.json.potentialRootCause}}\\n\\n🔗 [GitHub]({{$('Extract Issue Context').item.json.url}}) | [Jira](https://your-company.atlassian.net/browse/{{$json.key}})",
"options": {}
},
"typeVersion": 2
},
{
"id": "sticky-response",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
2750,
750
],
"parameters": {
"width": 300,
"height": 340,
"content": "## ✅ STEP 8: RESPOND\n\n**Returns JSON to GitHub:**\n```\n{\n \"status\": \"success\",\n \"message\": \"Bug processed\",\n \"jiraTicket\": \"ENG-123\"\n}\n```\n\n**Why important:**\n- Confirms processing succeeded\n- Prevents GitHub retries\n- Shows success in webhook log\n\n**Monitor:**\nGitHub → Settings → Webhooks → Recent Deliveries"
},
"typeVersion": 1
},
{
"id": "d0e1f2a3-b4c5-4d5e-7f8a-9b0c1d2e3f4a",
"name": "Réponse Webhook",
"type": "n8n-nodes-base.respondToWebhook",
"position": [
2900,
1100
],
"parameters": {
"respondWith": "json",
"responseBody": "={{ { \"status\": \"success\", \"message\": \"Bug report processed\", \"jiraTicket\": $json.key } }}"
},
"typeVersion": 1
},
{
"id": "sticky-troubleshoot",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
250,
1450
],
"parameters": {
"width": 420,
"height": 540,
"content": "# 🔧 TROUBLESHOOTING\n\n**Webhook not triggering?**\n✅ Activate workflow first\n✅ Check webhook URL copied correctly\n✅ Verify \"Issues\" event selected in GitHub\n✅ Test with curl or create test issue\n\n**AI analysis fails?**\n✅ Add OpenAI credentials in n8n\n✅ Verify API key is valid\n✅ Check GPT-4o access on account\n✅ Review OpenAI API status\n\n**Jira ticket creation fails?**\n✅ Add Jira credentials (email + API token)\n✅ Update YOUR_JIRA_PROJECT_KEY\n✅ Verify \"Bug\" issue type exists\n✅ Check assignee emails are valid\n\n**Slack notification fails?**\n✅ Re-authenticate Slack OAuth\n✅ Verify channel name (use \"dev-alerts\" not \"#dev-alerts\")\n✅ Check bot has permission to post\n✅ Invite bot to private channels\n\n**Discord notification fails?**\n✅ Verify webhook URL is complete\n✅ Test webhook with curl\n✅ Check webhook not deleted in Discord\n\n**GitHub comment fails?**\n✅ Use GitHub OAuth2 authentication\n✅ Verify repo permissions\n✅ Check owner/repo names are correct"
},
"typeVersion": 1
},
{
"id": "sticky-roi",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
710,
1450
],
"parameters": {
"width": 420,
"height": 540,
"content": "# 📊 ROI CALCULATOR\n\n**Manual Process per Bug:**\n- Read & assess: 5 min\n- Determine category: 2 min\n- Create Jira ticket: 5 min\n- Assign developer: 2 min\n- Notify team: 2 min\n- Update GitHub: 1 min\n**Total: 17 minutes**\n\n**Automated Process:**\n**6-8 seconds** ⚡\n\n**Monthly Savings (50 bugs):**\n- Time saved: 825 min (13.75 hrs)\n- Labor value: $687.50 (@$50/hr)\n- OpenAI cost: ~$2\n- **Net savings: $685/month**\n\n**Annual ROI:**\n**$8,220 saved per year** 💰\n\n**Additional Benefits:**\n✅ Consistent quality\n✅ Zero human error\n✅ 24/7 availability\n✅ Instant response\n✅ Better developer morale"
},
"typeVersion": 1
},
{
"id": "sticky-customize",
"name": "Note adhésive",
"type": "n8n-nodes-base.stickyNote",
"position": [
1170,
1450
],
"parameters": {
"width": 420,
"height": 540,
"content": "# 🎨 CUSTOMIZATION IDEAS\n\n**1. Add more developer types:**\nEdit Parse GPT Response node:\n```javascript\nconst developerMapping = {\n \"backend-dev\": \"backend@company.com\",\n \"frontend-dev\": \"frontend@company.com\",\n \"mobile-dev\": \"mobile@company.com\",\n \"qa-engineer\": \"qa@company.com\",\n \"devops\": \"devops@company.com\"\n};\n```\n\n**2. Filter by severity:**\nAdd IF node after Parse:\n- Only process Critical/High bugs\n- Route low-priority to separate flow\n\n**3. Route by channel based on severity:**\n```javascript\nconst channel = severity === 'Critical' \n ? 'critical-alerts' \n : 'dev-alerts';\n```\n\n**4. Add email notifications:**\nInsert Send Email node after Jira\n- Email assigned developer\n- Include all bug details\n\n**5. Custom Jira labels:**\n```javascript\njiraLabels: [\n category,\n severity,\n 'auto-triaged',\n `repo-${repositoryName}`\n]\n```\n\n**6. Multi-repository support:**\nAdd Switch node after Filter:\n- Route different repos to different Jira projects\n- Assign to different teams\n- Use custom AI prompts per repo"
},
"typeVersion": 1
}
],
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"connections": {
"a1b2c3d4-e5f6-4a5b-8c9d-0e1f2a3b4c5d": {
"main": [
[
{
"node": "b2c3d4e5-f6a7-4b5c-9d0e-1f2a3b4c5d6e",
"type": "main",
"index": 0
}
]
]
},
"f6a7b8c9-d0e1-4f5a-3b4c-5d6e7f8a9b0c": {
"main": [
[
{
"node": "a7b8c9d0-e1f2-4a5b-4c5d-6e7f8a9b0c1d",
"type": "main",
"index": 0
},
{
"node": "b8c9d0e1-f2a3-4b5c-5d6e-7f8a9b0c1d2e",
"type": "main",
"index": 0
},
{
"node": "c9d0e1f2-a3b4-4c5d-6e7f-8a9b0c1d2e3f",
"type": "main",
"index": 0
}
]
]
},
"d4e5f6a7-b8c9-4d5e-1f2a-3b4c5d6e7f8a": {
"main": [
[
{
"node": "e5f6a7b8-c9d0-4e5f-2a3b-4c5d6e7f8a9b",
"type": "main",
"index": 0
}
]
]
},
"a7b8c9d0-e1f2-4a5b-4c5d-6e7f8a9b0c1d": {
"main": [
[
{
"node": "d0e1f2a3-b4c5-4d5e-7f8a-9b0c1d2e3f4a",
"type": "main",
"index": 0
}
]
]
},
"c3d4e5f6-a7b8-4c5d-0e1f-2a3b4c5d6e7f": {
"main": [
[
{
"node": "d4e5f6a7-b8c9-4d5e-1f2a-3b4c5d6e7f8a",
"type": "main",
"index": 0
}
]
]
},
"b2c3d4e5-f6a7-4b5c-9d0e-1f2a3b4c5d6e": {
"main": [
[
{
"node": "c3d4e5f6-a7b8-4c5d-0e1f-2a3b4c5d6e7f",
"type": "main",
"index": 0
}
]
]
},
"e5f6a7b8-c9d0-4e5f-2a3b-4c5d6e7f8a9b": {
"main": [
[
{
"node": "f6a7b8c9-d0e1-4f5a-3b4c-5d6e7f8a9b0c",
"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é - 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.
Workflows recommandés
Shelly-Ann Davy
@SheCodesFlowFounder of The Workflow Muse & @SheCodesFlow. I craft elegant, task-focused automations for creators, founders, and soft-tech enthusiasts. “Automate with grace. Scale with power.”
Partager ce workflow