This workflow corresponds to n8n.io template #6549 — we link there as the canonical source.
This workflow follows the Agent → Documentdefaultdataloader 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 →
{
"id": "Cxs6nhHKA6YxfS9U",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "AI Enabled Helpdesk with Supabase and JIRA",
"tags": [
{
"id": "TOmp11D0RTZnlXKe",
"name": "Creator Hub",
"createdAt": "2025-07-27T06:39:31.509Z",
"updatedAt": "2025-07-27T06:39:31.509Z"
}
],
"nodes": [
{
"id": "10e60c11-144e-4ab1-ae6c-08fc81cef3fc",
"name": "Slack Trigger",
"type": "n8n-nodes-base.slackTrigger",
"position": [
-2960,
-496
],
"parameters": {
"options": {
"resolveIds": true
},
"trigger": [
"app_mention",
"message",
"reaction_added"
],
"channelId": {
"__rl": true,
"mode": "list",
"value": "C0963H18JCX",
"cachedResultName": "all-mytest2025"
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5e169620-94fd-49d1-98ca-bad8f0c5e388",
"name": "Send a message",
"type": "n8n-nodes-base.slack",
"position": [
-1328,
-864
],
"parameters": {
"text": "={{ $json.output }}",
"select": "channel",
"channelId": {
"__rl": true,
"mode": "id",
"value": "={{ $item(\"0\").$node[\"Slack Trigger\"].json[\"channel\"] }}"
},
"otherOptions": {
"thread_ts": {
"replyValues": {
"thread_ts": "={{ $item(\"0\").$node[\"Format Output\"].json[\"thread_ts\"] || $item(\"0\").$node[\"Format Output\"].json[\"ts\"] }}"
}
},
"includeLinkToWorkflow": false
}
},
"credentials": {
"slackApi": {
"name": "<your credential>"
}
},
"typeVersion": 2.3
},
{
"id": "89ddaca8-d550-4b4c-a9d6-e26dfe8e9cab",
"name": "Simple Memory",
"type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
"position": [
-1664,
-608
],
"parameters": {
"sessionKey": "={{ $json.session_id }}",
"sessionIdType": "customKey",
"contextWindowLength": 20
},
"typeVersion": 1.3
},
{
"id": "85c3c69c-9910-4288-bc8d-2a53586b01d5",
"name": "Format Output",
"type": "n8n-nodes-base.set",
"position": [
-2752,
-496
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "2c1ec1ad-72f2-4bcd-bfef-dc12f49de48b",
"name": "channel",
"type": "string",
"value": "={{ $json.channel || '' }}"
},
{
"id": "af7e1d94-946c-4257-824e-a5d91a2b007a",
"name": "ts",
"type": "string",
"value": "={{ $json.ts || '' }}"
},
{
"id": "28583957-bddd-4bd2-b937-79b7554a7a65",
"name": "thread_ts",
"type": "string",
"value": "={{ $json.thread_ts || '' }}"
},
{
"id": "53179618-0ca1-43a2-a416-af8a39f792e0",
"name": "type",
"type": "string",
"value": "={{ $json.type || '' }}"
},
{
"id": "fbe15475-5924-41fa-a7b1-6017ae766a23",
"name": "text",
"type": "string",
"value": "={{ $json.text || ($json.blocks && $json.blocks[0] && $json.blocks[0].elements && $json.blocks[0].elements[0] && $json.blocks[0].elements[0].elements && $json.blocks[0].elements[0].elements[1] ? $json.blocks[0].elements[0].elements[1].text : '') }}"
},
{
"id": "49376ca5-079b-4993-9f15-6847734d9c5d",
"name": "is_bot",
"type": "boolean",
"value": "={{ $json.bot_id ? true : false }}"
},
{
"id": "b0ae1eed-7adf-49d2-b19d-0a1efdb5f435",
"name": "user",
"type": "string",
"value": "={{ $json.user || '' }}"
},
{
"id": "13fab869-b570-444d-903b-11d4b4f0ebe6",
"name": "is_thread_continuation",
"type": "boolean",
"value": "={{ $json.thread_ts ? true : false }}"
},
{
"id": "a148580e-6fe3-4689-be2f-7996c54f6118",
"name": "session_id",
"type": "string",
"value": "={{ $json.thread_ts || $json.ts }}"
},
{
"id": "311146c6-e6cf-492e-a4a9-09066e927879",
"name": "reaction",
"type": "string",
"value": "={{ $json.reaction || '' }}"
},
{
"id": "1b358df2-7062-4c7b-be7d-28bc69611322",
"name": "item_ts",
"type": "string",
"value": "={{ $json.item ? $json.item.ts : '' }}"
},
{
"id": "1e9d1f5a-4e0a-4ed8-8e23-660fe8b6a950",
"name": "is_emoji",
"type": "boolean",
"value": "={{ $item(\"0\").$node[\"Slack Trigger\"].json[\"blocks\"][\"0\"][\"elements\"][\"0\"][\"elements\"][\"0\"][\"type\"] = 'emoji' ? true : false }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "035076b9-543f-407b-8614-1ef4646d6d76",
"name": "Supabase Vector Store",
"type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
"position": [
-2672,
-1296
],
"parameters": {
"mode": "insert",
"options": {
"queryName": "match_documents"
},
"tableName": {
"__rl": true,
"mode": "list",
"value": "documents",
"cachedResultName": "documents"
}
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "e1e9b80e-2e2a-4d49-96a8-59d0fcb88020",
"name": "Embeddings OpenAI",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
-2768,
-1072
],
"parameters": {
"options": {
"dimensions": 1536
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "013ffcc1-0b7b-4361-897e-547cbfc70341",
"name": "Default Data Loader",
"type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
"position": [
-2512,
-1072
],
"parameters": {
"options": {},
"dataType": "binary"
},
"typeVersion": 1.1
},
{
"id": "c180560a-746a-4618-a3e2-0906966e438b",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3008,
-1568
],
"parameters": {
"width": 736,
"height": 624,
"content": "# Document Ingestion Flow (RAG Pipeline)\n**Convert** CSV and PDF files to vectors and store them to a vector database like Supabase \n- Provides a web form interface for uploading CSV and PDF knowledge base documents. This can be changed to webhook method if needed.\n- Automatically processes uploaded files through document loaders\n- Generates embeddings using OpenAI and stores them in Supabase vector database\n- Builds a searchable knowledge repository from IT documentation and case histories \n- Only **CSV** and **PDF** files are accepted formats\n- Change **Accepted File Types** to add more file types like .docx"
},
"typeVersion": 1
},
{
"id": "16f584bc-2c84-4c63-aab2-3f8772e29920",
"name": "On form submission",
"type": "n8n-nodes-base.formTrigger",
"position": [
-2928,
-1264
],
"parameters": {
"options": {
"appendAttribution": false
},
"formTitle": "Document Uploader",
"formFields": {
"values": [
{
"fieldType": "file",
"fieldLabel": "Upload CSV/PDF Files",
"requiredField": true,
"acceptFileTypes": ".csv,.pdf"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "4d487420-983b-44de-a770-dbc8326d164b",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3520,
-1568
],
"parameters": {
"width": 496,
"height": 1360,
"content": "# Workflow Overview\n\n## RAG operation\n- Upload your CSV/PDF files with IT helpdesk data to the vector database like Supabase. You can any RAG workflow. The provided RAG workflow uses Supabase vector store.\n\n## Minimum Slack Configuration\n - **Slack App Event Subscriptions**\n - **Bot Events** subscribed to:\n - app_mention\n - message.channels\n - message.groups (if using private channels)\n\n- **Minimum OAuth and Permissions**\n - app_mentions:read\n - channels:history \n - channels:read\n - groups:history \n - groups:read\n - im:history\n - im:read\n - mpim:history\n - mpim:read\n - users:read\n\n- **Bot Installation and Testing**\n- In your Slack channel, check if bot is present:\n ``` \n /invite @your-bot-name\n```\n### Test if bot responds to mentions:\n```\n@your-bot-name hello\n```\n\nKey features of the workflow\n\n- Workflow maintains the conversation history\n- Initial conversation starter should use @your-bot-name <message>\n- All other messages replied in the thread does not require @your-bot-name\n- Bot will try to get as much information as possible, and will then create a JIRA ticket\n- Bot will present matching cases and knowledge-based articles before creating the ticket\n\nExamples:\n@helpdesk can you please check the status of my ticket JIRA-5\n\n@helpdesk I lost my laptop and i do not have access to my email. Please help."
},
"typeVersion": 1
},
{
"id": "15f6f300-5262-4c5a-9579-0eb788f21a42",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-3008,
-928
],
"parameters": {
"width": 1920,
"height": 704,
"content": "# Main Helpdesk Flow (Slack Integration)\n**Overview**\n- **Slack Trigger** captures the incoming messages from the Slack\n- **Change** the field **Channel to Watch** to mention your own channel, or enable **Watch Whole Workspace** to watch the whole workspace\n- **Format output** cleans up the output and creates a clean JSON response\n- **IF** statement checks for **type = app_mention and is_bot = false**\n- Is_bot is required to avoid the Slack message loop issue\n- The second If statement checks for **type = message, is_bot = false, and thread_ts is not empty**\n- **thread_ts** property defines if the message is part of the thread\n- Helpdesk Agent uses an extensive system prompt to act as a helpdesk agent\n- Helpdesk agent uses the MCP client tool to connect to the MCP Server (this has all tools)\n- The workflow has a simple design using MCP\n- Helpdesk Agent uses the **thread_ts** to store previous conversations in memory\n- Change simple memory to a database instead"
},
"typeVersion": 1
},
{
"id": "99a73f90-718f-4529-bd3f-c9340b432731",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2256,
-1568
],
"parameters": {
"width": 1168,
"height": 624,
"content": "## MCP Server Overview\n- Utilizes Model Context Protocol for scalable tool integration\n- Centralizes Supabase vector search and JIRA operations in a dedicated MCP server\n- Enables the AI agent to access multiple external systems through a unified interface\n\n## MCP Server Working\n- The MCP Server will receive requests from the MCP client in the Slack helpdesk bot responder workflow\n- The MCP Server uses Supabase and JIRA\n- Supabase will be used to search knowledge based articles in embedded vector database. \n- JIRA create ticket will create a new helpdesk ticket\n- JIRA Search will search existing tickets which match the reported issue\n- JIRA get status checks for the status of the ticket\n- JIRA Change priority tool changes the priority to Highest, High, Medium, Low, Lowest\n- JIRA change log tool helps to get all the changes on the ticket\n "
},
"typeVersion": 1
},
{
"id": "8287cf14-7a48-4d54-9d3c-5b0961f1759a",
"name": "MCP Server Trigger",
"type": "@n8n/n8n-nodes-langchain.mcpTrigger",
"position": [
-1424,
-1440
],
"parameters": {
"path": "heldpesk"
},
"typeVersion": 2
},
{
"id": "21e51e84-3f60-4276-8e10-da76f5e6b13b",
"name": "Supabase Vector Store1",
"type": "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
"position": [
-2048,
-1088
],
"parameters": {
"mode": "retrieve-as-tool",
"options": {},
"tableName": {
"__rl": true,
"mode": "list",
"value": "documents",
"cachedResultName": "documents"
},
"toolDescription": "Use this tool to retrieve data for the Helpdesk queries and to check if an existing issue, ticket or a knowledge base exist for the problem being reported by the user"
},
"credentials": {
"supabaseApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "1f0603a4-ea16-42cf-a8ac-19c9116eaee1",
"name": "Embeddings OpenAI1",
"type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
"position": [
-2192,
-1104
],
"parameters": {
"options": {
"dimensions": 1536
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "972d7b94-7d35-4999-a712-ded5a9cdd6bc",
"name": "Create Ticket",
"type": "n8n-nodes-base.jiraTool",
"position": [
-1632,
-1072
],
"parameters": {
"project": {
"__rl": true,
"mode": "list",
"value": "10000",
"cachedResultName": "Helpdesk"
},
"summary": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Summary', ``, 'string') }}",
"issueType": {
"__rl": true,
"mode": "list",
"value": "10004",
"cachedResultName": "Service Request"
},
"additionalFields": {
"description": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Description', ``, 'string') }}"
}
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "c405e5d0-3a1b-47f1-916f-6907e732494f",
"name": "Search",
"type": "n8n-nodes-base.jiraTool",
"position": [
-1760,
-1072
],
"parameters": {
"options": {},
"operation": "getAll",
"returnAll": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Return_All', ``, 'boolean') }}"
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "63ae0337-0501-44ba-b4e7-d022bbd4e6fd",
"name": "Get Status",
"type": "n8n-nodes-base.jiraTool",
"position": [
-1504,
-1072
],
"parameters": {
"issueKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Issue_Key', ``, 'string') }}",
"operation": "transitions",
"additionalFields": {}
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "867e7434-4578-47af-a274-d8933b466063",
"name": "helpdesk_tools",
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"position": [
-1504,
-608
],
"parameters": {
"sseEndpoint": "https://idsingh.app.n8n.cloud/mcp/heldpesk"
},
"typeVersion": 1
},
{
"id": "9cf4f30d-4f93-4ba4-924d-4451e56abbcc",
"name": "Change Priority",
"type": "n8n-nodes-base.jiraTool",
"position": [
-1376,
-1072
],
"parameters": {
"issueKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Issue_Key', ``, 'string') }}",
"operation": "update",
"updateFields": {
"priority": {
"__rl": true,
"mode": "id",
"value": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Priority', ``, 'string') }}",
"__regex": "^([0-9]{1,})"
}
},
"descriptionType": "manual",
"toolDescription": "Use this tool to change the priority on JIRA ticket to High"
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "d089dac5-8ca1-4265-9997-fbac5c8b7e59",
"name": "changelog",
"type": "n8n-nodes-base.jiraTool",
"position": [
-1248,
-1072
],
"parameters": {
"issueKey": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('Issue_Key', ``, 'string') }}",
"operation": "changelog"
},
"credentials": {
"jiraSoftwareCloudApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "51365260-33da-44c8-bfdd-0fe857068f4c",
"name": "Check app_mention",
"type": "n8n-nodes-base.if",
"position": [
-2528,
-496
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1c9327b8-9e92-404a-92e0-577874be46a8",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.type }}",
"rightValue": "app_mention"
},
{
"id": "f01f9beb-7bd2-4d2b-9d25-7746e8c12739",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
},
"leftValue": "={{ $json.is_bot }}",
"rightValue": ""
},
{
"id": "eac3e4ed-a524-4eed-88f5-8ec452d10332",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
},
"leftValue": "={{ $json.is_emoji }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
},
{
"id": "b14bbdba-bcfb-4980-af39-811da479cc22",
"name": "OpenAI",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
-1872,
-608
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4.1",
"cachedResultName": "gpt-4.1"
},
"options": {
"topP": 1,
"temperature": 0.7,
"presencePenalty": 0,
"frequencyPenalty": 0
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "9a9c6ceb-9e4b-4190-928d-3a91a69a096c",
"name": "AIhelpdesk",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
-1776,
-864
],
"parameters": {
"text": "={{ $json.text }}",
"options": {
"systemMessage": "=You are AIhelpdesk, an expert IT helpdesk assistant working in Slack with access to a comprehensive knowledge base and case history database.\n\n## CRITICAL THREAD AWARENESS RULES:\n- THREAD ID: {{ $json.thread_ts || $json.ts }}\n- If thread_ts exists in the input: This is a CONTINUATION of an existing conversation - DO NOT greet again\n- If no thread_ts: This is a NEW conversation - greet once only\n- NEVER say \"Hi\" or \"Hello\" or introduce yourself in thread continuations\n- Remember: Each thread is ONE continuous support session\n\n## REACTION-BASED INTERACTIONS:\nWhen asking users for confirmations or actions, ALWAYS offer emoji reactions as options:\n\n**Available Reaction Options:**\n- \ud83d\udc4d (`:+1:`) - Create ticket / Yes / Agree\n- \u2705 (`:white_check_mark:`) - Confirm action\n- \u274c (`:x:`) - Cancel / No / Disagree \n- \u2139\ufe0f (`:information_source:`) - Need more info\n- \ud83d\udc40 (`:eyes:`) - Escalate to human\n- \ud83c\udd98 (`:sos:`) - Mark as urgent\n\n**How to Ask for Reactions:**\nInstead of: \"Do you want me to create a ticket?\"\nSay: \"Would you like me to create a helpdesk ticket for this issue? \n\ud83d\udc4d Yes, create ticket\n\u274c No, let's try more solutions first\"\n\nInstead of: \"Should I escalate this?\"\nSay: \"I can escalate this to our Level 2 team. Please react:\n\ud83d\udc40 Escalate to human support \n\ud83d\udc4d Create ticket first\n\u2139\ufe0f I need more information\"\n\n## BEFORE RESPONDING - ALWAYS:\n1. **Search Knowledge Base**: Use available MCP tools to search vector database for:\n - Similar issues from knowledge base articles\n - Previous case resolutions that match the problem\n - Step-by-step procedures for the reported issue\n\n2. **Analyze Thread Context**: \n - Check if thread_ts exists: {{ $json.thread_ts }}\n - If continuing thread: Reference previous discussion points\n - Build on what was already established\n\n## MCP VECTOR SEARCH INSTRUCTIONS:\nWhen user reports an issue, IMMEDIATELY search your vector database using available MCP tools:\n- Search for keywords from the user's problem description\n- Look for both knowledge base articles AND historical case resolutions\n- **DO NOT** present knowledge base articles AND historical case resolutions more than 2 times. Automatically create a ticket if the user still engaged.\n- Use specific technical terms and error messages for better matches\n- Present findings as: \"Based on our knowledge base...\" or \"I found similar cases...\"\n- **ALWAYS** ask if the provided information is helpful or to create a helpdesk ticket.\n- If the user ask to create ticket then *DO NOT** search the vector database anymore.\n\n## MCP JIRA SEARCH INSTRUCTIONS:\nAfter the Vector search, IMMEDIATELY search the JIRA for existing tickets\n- Search for keywords from the user's problem description\n- Get a max of 5 tickets which are similar or close to the issue reported \n- Use specific technical terms and error messages for better matches\n- Present findings as: \"Based on existing helpdesk tickets...\" or \"I found similar cases...\"\n\n## RESPONSE PATTERNS:\n\n### NEW CONVERSATION (no thread_ts):\n\"Hi! I'm <your name>, your IT assistant. [Search vector DB] Based on our knowledge base, I can help you with [issue]. To get started: [specific questions]\"\n\n### CONTINUING CONVERSATION (has thread_ts):\n\"[Search vector DB] Thanks for that info. Based on similar cases, let's try: [specific steps]. I found this worked for [reference case TC-####]\"\n\n### NEW CONVERSATION (no thread_ts):\n\"Hi! I'm AIhelpdesk, your IT assistant. [Search vector DB] Based on our knowledge base, I can help you with [issue]. Let's start with: [specific steps]\n\nIf these don't work, I can create a ticket:\n\ud83d\udc4d Create ticket now\n\u2139\ufe0f Try more solutions first\"\n\n### CONTINUING CONVERSATION (has thread_ts):\n\"[Search vector DB] Thanks for that info. Based on similar cases, let's try: [specific steps]. \n\n\n\n## DIAGNOSTIC APPROACH:\n1. **Search first**: Always check knowledge base and case history before responding\n2. **Reference findings**: Mention specific KB articles or case numbers when available \n3. **Ask targeted questions**: Based on what you found in the vector database\n4. **Provide proven solutions**: Reference successful resolutions from case history\n\n## THREAD CONTINUATION EXAMPLES:\n\n\u274c WRONG: \"Hi again! How can I help you today?\"\n\u2705 RIGHT: \"I found a similar case (TC-2024-007) with the same BSOD error. Let's check your RAM first.\"\n\n\u274c WRONG: \"Hello! I'm <your name>. What seems to be the problem?\" \n\u2705 RIGHT: \"That error code matches our KB article on printer spooler issues. Let's restart the print service.\"\n\n## VECTOR SEARCH STRATEGY:\n- Extract key terms: error messages, software names, hardware models\n- Search patterns: \"[error message]\", \"[software] + problem\", \"[hardware] + troubleshooting\"\n- Reference format: \"According to KB article...\" or \"Case TC-#### had this exact issue...\"\n- Always provide case/article numbers when referencing database findings\n\n## ESCALATION PATTERNS:\nWhen user reacts with \ud83d\udc40 (escalate):\n\"I'm escalating this to our Level 2 support team. They have more advanced tools and can provide hands-on assistance. \n\nWhat happens next:\n- Level 2 engineer will contact you within 2 hours\n- They may ask to remote into your system\n- I'll create a detailed handoff ticket: [ticket number]\n\nAnything else I can help with while you wait?\"\n\n## HELPDESK TICKET STRATEGY:\n- Use the MCP client tool to create Helpdesk ticket\n- Clearly send the below information\n - Issue Description = the main issue described by the user\n - Issue details = The conversation history\n - Username\n- **ALWAYS** provide the ticket number in your response\n- Judge the level of priority from the conversation as assign HIGH, MEDIUM or LOW \n- If unable to judge the priority, check with the user\n- Use **Change Priority** tool to change the priority on the tickets\n- Use the below table to convert the status to JIRA priority ID. **Pass** the ID to the change priority tool\n\nHighest = 1\nHigh = 2\nMedium = 3\nLow = 4\nLowest = 5\n\n## OUTPUT FORMAT:\n1. **Vector search results summary** (if relevant matches found)\n2. **Targeted response** based on search findings\n3. **Specific next steps** from proven solutions\n4. **Follow-up questions** if more info needed\n\n## KEY RULES:\n- NEVER greet in thread continuations (when thread_ts exists)\n- ALWAYS search vector database before responding\n- REFERENCE specific cases or KB articles when available\n- BUILD on previous thread context\n- Use thread_ts {{ $json.thread_ts || $json.ts }} for session tracking\n- **ALWAYS** use professional and empathatic tone\n- ALWAYS check with user for any more help needed onc ethe ticket has been created",
"returnIntermediateSteps": false
},
"promptType": "define"
},
"typeVersion": 2.1
},
{
"id": "21769805-9cd6-4b47-a106-e723c0f08e79",
"name": "Check If thread",
"type": "n8n-nodes-base.if",
"position": [
-2272,
-400
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "1e2d6aa6-cd50-4a77-9efb-e56066fe46ee",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.type }}",
"rightValue": "message"
},
{
"id": "79dd2304-0b01-4063-a80d-bae909294108",
"operator": {
"type": "string",
"operation": "notEmpty",
"singleValue": true
},
"leftValue": "={{ $json.thread_ts }}",
"rightValue": "app_mention"
},
{
"id": "bd1624bc-fda9-4c4c-a905-4f127204f93e",
"operator": {
"type": "boolean",
"operation": "false",
"singleValue": true
},
"leftValue": "={{ $json.is_bot }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2.2
}
],
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "6eb3e207-1e41-435c-84ef-9e9edae5124e",
"connections": {
"OpenAI": {
"ai_languageModel": [
[
{
"node": "AIhelpdesk",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Search": {
"ai_tool": [
[
{
"node": "MCP Server Trigger",
"type": "ai_tool",
"index": 0
}
]
]
},
"changelog": {
"ai_tool": [
[
{
"node": "MCP Server Trigger",
"type": "ai_tool",
"index": 0
}
]
]
},
"AIhelpdesk": {
"main": [
[
{
"node": "Send a message",
"type": "main",
"index": 0
}
]
]
},
"Get Status": {
"ai_tool": [
[
{
"node": "MCP Server Trigger",
"type": "ai_tool",
"index": 0
}
]
]
},
"Create Ticket": {
"ai_tool": [
[
{
"node": "MCP Server Trigger",
"type": "ai_tool",
"index": 0
}
]
]
},
"Format Output": {
"main": [
[
{
"node": "Check app_mention",
"type": "main",
"index": 0
}
]
]
},
"Simple Memory": {
"ai_memory": [
[
{
"node": "AIhelpdesk",
"type": "ai_memory",
"index": 0
}
]
]
},
"Slack Trigger": {
"main": [
[
{
"node": "Format Output",
"type": "main",
"index": 0
}
]
]
},
"helpdesk_tools": {
"ai_tool": [
[
{
"node": "AIhelpdesk",
"type": "ai_tool",
"index": 0
}
]
]
},
"Change Priority": {
"ai_tool": [
[
{
"node": "MCP Server Trigger",
"type": "ai_tool",
"index": 0
}
]
]
},
"Check If thread": {
"main": [
[
{
"node": "AIhelpdesk",
"type": "main",
"index": 0
}
],
[]
]
},
"Check app_mention": {
"main": [
[
{
"node": "AIhelpdesk",
"type": "main",
"index": 0
}
],
[
{
"node": "Check If thread",
"type": "main",
"index": 0
}
]
]
},
"Embeddings OpenAI": {
"ai_embedding": [
[
{
"node": "Supabase Vector Store",
"type": "ai_embedding",
"index": 0
}
]
]
},
"Embeddings OpenAI1": {
"ai_embedding": [
[
{
"node": "Supabase Vector Store1",
"type": "ai_embedding",
"index": 0
}
]
]
},
"On form submission": {
"main": [
[
{
"node": "Supabase Vector Store",
"type": "main",
"index": 0
}
]
]
},
"Default Data Loader": {
"ai_document": [
[
{
"node": "Supabase Vector Store",
"type": "ai_document",
"index": 0
}
]
]
},
"Supabase Vector Store1": {
"ai_tool": [
[
{
"node": "MCP Server Trigger",
"type": "ai_tool",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
jiraSoftwareCloudApiopenAiApislackApisupabaseApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow contains community nodes that are only compatible with the self-hosted version of n8n.
Source: https://n8n.io/workflows/6549/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
Your AI workforce is ready. Are you?
Chat with docs - 5minAI New version. Uses httpRequest, documentDefaultDataLoader, textSplitterRecursiveCharacterTextSplitter, embeddingsOpenAi. Event-driven trigger; 62 nodes.
I prepared a detailed guide that illustrates the entire process of building an AI agent using Supabase and Google Drive within N8N workflows.
Unleash the full potential of your HighLevel CRM by adding an intelligent GPT-5 Agent that does more than just follow commands — it understands context, retrieves the right data, and executes actions
OIL Rag. Uses lmChatOpenAi, embeddingsOpenAi, agent, telegramTrigger. Event-driven trigger; 53 nodes.