AutomationFlowsSlack & Telegram › Github to Jira Bug Sync with Gpt-4o Analysis & Team Alerts

Github to Jira Bug Sync with Gpt-4o Analysis & Team Alerts

ByShelly-Ann Davy @SheCodesFlow on n8n.io

Automatically convert GitHub issues into analyzed Jira tickets with AI-powered severity detection, developer assignment, and instant team alerts.

Webhook trigger★★★★☆ complexityAI-powered22 nodesOpenAIJiraGitHubSlackDiscord
Slack & Telegram Trigger: Webhook Nodes: 22 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #9246 — we link there as the canonical source.

This workflow follows the Jira → Slack recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Automate Bug Reports: GitHub Issues \u2192 AI Analysis \u2192 Jira Tickets with Slack & Discord Alerts",
  "tags": [],
  "nodes": [
    {
      "id": "sticky-overview",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        250,
        300
      ],
      "parameters": {
        "width": 400,
        "height": 380,
        "content": "## \ud83d\udd04 AUTOMATED BUG WORKFLOW\n\n### Flow: Webhook \u2192 Filter \u2192 Extract \u2192 AI \u2192 Parse \u2192 Jira \u2192 Notify \u2192 Respond\n\n### Benefits\n\u2705 Instant AI triage\n\u2705 Auto-assignment\n\u2705 Zero manual work\n\u2705 Saves 15-20 min/bug\n\u2705 $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": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        250,
        750
      ],
      "parameters": {
        "width": 280,
        "height": 300,
        "content": "## \ud83d\udce5 STEP 1: WEBHOOK\n\n**Setup:**\n1. Activate workflow\n2. Copy webhook URL from this node\n3. GitHub \u2192 Settings \u2192 Webhooks \u2192 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
      ],
      "parameters": {
        "path": "github-issue-webhook",
        "options": {},
        "httpMethod": "POST",
        "responseMode": "responseNode"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-filter",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        600,
        750
      ],
      "parameters": {
        "width": 280,
        "height": 280,
        "content": "## \ud83d\udd0d 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": "Filter: Only New 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": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        950,
        750
      ],
      "parameters": {
        "width": 280,
        "height": 300,
        "content": "## \ud83d\udccb 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": "Extract Issue Context",
      "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": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1300,
        750
      ],
      "parameters": {
        "width": 280,
        "height": 340,
        "content": "## \ud83e\udd16 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": "GPT-4o Bug Analysis",
      "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": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1650,
        750
      ],
      "parameters": {
        "width": 300,
        "height": 340,
        "content": "## \ud83d\udd27 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\u2192Highest)\n- Prepare Jira labels array\n\n**\u26a0\ufe0f 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": "Parse GPT Response & Map Data",
      "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\": \"user@example.com\",\n  \"frontend-dev\": \"user@example.com\",\n  \"fullstack-dev\": \"user@example.com\",\n  \"devops\": \"user@example.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] || \"user@example.com\",\n  jiraLabels: [analysis.category, analysis.bugSeverity],\n  jiraPriority: priorityMapping[analysis.suggestedPriority] || \"Medium\"\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "sticky-jira",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2000,
        750
      ],
      "parameters": {
        "width": 300,
        "height": 340,
        "content": "## \ud83c\udfab 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 \u2192 Profile \u2192 Security \u2192 API Tokens \u2192 Create"
      },
      "typeVersion": 1
    },
    {
      "id": "f6a7b8c9-d0e1-4f5a-3b4c-5d6e7f8a9b0c",
      "name": "Create Jira Ticket",
      "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": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2350,
        750
      ],
      "parameters": {
        "width": 360,
        "height": 340,
        "content": "## \ud83d\udd14 STEP 7: NOTIFICATIONS\n\n**3 Parallel Branches:**\n\n1\ufe0f\u20e3 **GitHub Comment**\n- Posts on original issue\n- Links to Jira ticket\n- Shows AI analysis summary\n\n2\ufe0f\u20e3 **Slack Alert**\n- Rich formatted message\n- All bug details\n- Action buttons\n\n3\ufe0f\u20e3 **Discord Alert**\n- Markdown formatted\n- Links to both platforms\n\nAll execute simultaneously!"
      },
      "typeVersion": 1
    },
    {
      "id": "a7b8c9d0-e1f2-4a5b-4c5d-6e7f8a9b0c1d",
      "name": "Update GitHub Issue",
      "type": "n8n-nodes-base.github",
      "position": [
        2550,
        950
      ],
      "parameters": {
        "body": "=\ud83e\udd16 **Automated Bug Report Created**\n\n\ud83d\udccb **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": "Send Slack Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        2550,
        1100
      ],
      "parameters": {
        "text": "=New Bug Report",
        "channel": "dev-alerts",
        "blocksUi": {
          "blocksValues": [
            {
              "type": "header",
              "textUi": {
                "text": "=\ud83d\udc1b 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": "Send Discord Alert",
      "type": "n8n-nodes-base.discord",
      "position": [
        2550,
        1250
      ],
      "parameters": {
        "url": "YOUR_DISCORD_WEBHOOK_URL",
        "content": "=\ud83d\udc1b **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\ud83d\udd17 [GitHub]({{$('Extract Issue Context').item.json.url}}) | [Jira](https://your-company.atlassian.net/browse/{{$json.key}})",
        "options": {}
      },
      "typeVersion": 2
    },
    {
      "id": "sticky-response",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2750,
        750
      ],
      "parameters": {
        "width": 300,
        "height": 340,
        "content": "## \u2705 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 \u2192 Settings \u2192 Webhooks \u2192 Recent Deliveries"
      },
      "typeVersion": 1
    },
    {
      "id": "d0e1f2a3-b4c5-4d5e-7f8a-9b0c1d2e3f4a",
      "name": "Webhook Response",
      "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": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        250,
        1450
      ],
      "parameters": {
        "width": 420,
        "height": 540,
        "content": "# \ud83d\udd27 TROUBLESHOOTING\n\n**Webhook not triggering?**\n\u2705 Activate workflow first\n\u2705 Check webhook URL copied correctly\n\u2705 Verify \"Issues\" event selected in GitHub\n\u2705 Test with curl or create test issue\n\n**AI analysis fails?**\n\u2705 Add OpenAI credentials in n8n\n\u2705 Verify API key is valid\n\u2705 Check GPT-4o access on account\n\u2705 Review OpenAI API status\n\n**Jira ticket creation fails?**\n\u2705 Add Jira credentials (email + API token)\n\u2705 Update YOUR_JIRA_PROJECT_KEY\n\u2705 Verify \"Bug\" issue type exists\n\u2705 Check assignee emails are valid\n\n**Slack notification fails?**\n\u2705 Re-authenticate Slack OAuth\n\u2705 Verify channel name (use \"dev-alerts\" not \"#dev-alerts\")\n\u2705 Check bot has permission to post\n\u2705 Invite bot to private channels\n\n**Discord notification fails?**\n\u2705 Verify webhook URL is complete\n\u2705 Test webhook with curl\n\u2705 Check webhook not deleted in Discord\n\n**GitHub comment fails?**\n\u2705 Use GitHub OAuth2 authentication\n\u2705 Verify repo permissions\n\u2705 Check owner/repo names are correct"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-roi",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        710,
        1450
      ],
      "parameters": {
        "width": 420,
        "height": 540,
        "content": "# \ud83d\udcca 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** \u26a1\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** \ud83d\udcb0\n\n**Additional Benefits:**\n\u2705 Consistent quality\n\u2705 Zero human error\n\u2705 24/7 availability\n\u2705 Instant response\n\u2705 Better developer morale"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-customize",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1170,
        1450
      ],
      "parameters": {
        "width": 420,
        "height": 540,
        "content": "# \ud83c\udfa8 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
    }
  ],
  "settings": {
    "executionOrder": "v1"
  },
  "connections": {
    "GitHub Webhook": {
      "main": [
        [
          {
            "node": "Filter: Only New Issues",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create Jira Ticket": {
      "main": [
        [
          {
            "node": "Update GitHub Issue",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Slack Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Send Discord Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "GPT-4o Bug Analysis": {
      "main": [
        [
          {
            "node": "Parse GPT Response & Map Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update GitHub Issue": {
      "main": [
        [
          {
            "node": "Webhook Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Issue Context": {
      "main": [
        [
          {
            "node": "GPT-4o Bug Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter: Only New Issues": {
      "main": [
        [
          {
            "node": "Extract Issue Context",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse GPT Response & Map Data": {
      "main": [
        [
          {
            "node": "Create Jira Ticket",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Automatically convert GitHub issues into analyzed Jira tickets with AI-powered severity detection, developer assignment, and instant team alerts.

Source: https://n8n.io/workflows/9246/ — original creator credit. Request a take-down →

More Slack & Telegram workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Slack & Telegram

This workflow is designed for space enthusiasts, science educators, journalists, fact-checkers, and researchers who want to stay informed about near-Earth asteroid threats while filtering out media se

Nasa, @Apify/N8N Nodes Apify, OpenAI +4
Slack & Telegram

Webhook: Failed Login Attempts → Jira Security Case → Slack Warnings

Jira, Slack, Notion
Slack & Telegram

This workflow automates predictive maintenance by receiving IoT machine-failure webhooks, creating Jira maintenance tickets, checking technician availability in Slack and sending the alert to the corr

Jira, Slack
Slack & Telegram

This workflow automatically converts uptime monitoring alerts received via webhook into Jira incident tasks and intelligently notifies an available on-call team member on Slack based on their real-tim

Jira, Slack
Slack & Telegram

Notify_user_in_Slack_of_quarantined_email_and_create_Jira_ticket_if_opened. Uses httpRequest, jira, stickyNote, slack. Webhook trigger; 13 nodes.

HTTP Request, Jira, Slack