Charger les problèmes ouverts et commentaires de Jira dans Pinecone

Avancé

Ceci est unContent Creation, Multimodal AIworkflow d'automatisation du domainecontenant 30 nœuds.Utilise principalement des nœuds comme Set, Code, Merge, Switch, HttpRequest. Utiliser Pinecone et OpenAI pour construire un agent de support piloté par RAG pour les problèmes Jira

Prérequis
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Clé API OpenAI
  • Clé API Pinecone
Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "id": "hhg9b3hGgDJN5yu9",
  "meta": {
    "instanceId": "77c333719a87760a438ca0407d9e341f10b2a6c6b59ac48593f7c1ae31e41db5"
  },
  "name": "Load Jira open issues with comments into Pinecone",
  "tags": [],
  "nodes": [
    {
      "id": "58e0fa98-cdf6-4c2a-85f8-866ccdc9f150",
      "name": "Document Chunker",
      "type": "@n8n/n8n-nodes-langchain.textSplitterRecursiveCharacterTextSplitter",
      "position": [
        3280,
        1040
      ],
      "parameters": {
        "options": {
          "splitCode": "markdown"
        },
        "chunkSize": 512,
        "chunkOverlap": 50
      },
      "typeVersion": 1
    },
    {
      "id": "d03d3708-3160-444c-835c-170e5fc1e14a",
      "name": "Convertir en txt",
      "type": "n8n-nodes-base.code",
      "position": [
        2288,
        496
      ],
      "parameters": {
        "jsCode": "return items.map(item => {\n  const html = item.json.html || \"\";\n\n  const text = html\n    .replace(/<\\s*br\\s*\\/?>/gi, \"\\n\")\n    .replace(/<\\/p\\s*>/gi, \"\\n\")\n    .replace(/<[^>]*>/g, \"\")\n    .replace(/&nbsp;/g, \" \")\n    .replace(/&amp;/g, \"&\")\n    .replace(/&lt;/g, \"<\")\n    .replace(/&gt;/g, \">\")\n    .replace(/&quot;/g, \"\\\"\")\n    .replace(/&#39;/g, \"'\")\n    .replace(/(\\r\\n|\\n|\\r|\\\\n|\\\\r|\\\\\\\\n)/g, \"\")  \n    .replace(/\\s+/g, \" \")\n    .replace(/!\\S+?\\.(png|jpe?g|gif|bmp|pdf|docx?|xlsx?|zip|rar)(\\|[^!]*)?!/gi, \"\")\n    .replace(/\\{panel:[^}]*\\}/gi, \"\")\n\n    .trim();\n\n  return {\n    json: {\n      ...item.json,\n      text\n    }\n  };\n});\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "6c90b512-f3fa-4262-b111-accea4260ae3",
      "name": "Obtenir les commentaires",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1616,
        848
      ],
      "parameters": {
        "url": "=https://jira.siav.it/rest/api/2/issue/{{ $json.issue_key }}/comment",
        "options": {
          "allowUnauthorizedCerts": true
        },
        "authentication": "genericCredentialType",
        "genericAuthType": "httpBasicAuth"
      },
      "typeVersion": 4
    },
    {
      "id": "6aecfae3-de7e-4fbb-a53f-908da0316351",
      "name": "Créer un tableau de commentaires",
      "type": "n8n-nodes-base.code",
      "position": [
        1808,
        848
      ],
      "parameters": {
        "jsCode": "const issueMap = {};\n\nitems.forEach(item => {\n  const comments = item.json.comments || [];\n\n  comments.forEach(comment => {\n    const url = comment.self || '';\n    const match = url.match(/issue\\/(\\d+)\\//);\n    const issueId = match ? match[1] : 'unknown';\n\n    const body = comment.body?.trim();\n    if (!body) return;\n\n    // Filtri per commenti inutili\n    const onlyImage = /^!?[^\\s]+\\.(png|jpg|jpeg|gif|bmp)\\|?.*!?$/i.test(body);\n    const onlyDot = body === '.';\n    const isEmptyMarkdown = /^(\\*|_|~|`)+$/g.test(body);\n    if (onlyImage || onlyDot || isEmptyMarkdown) return;\n\n    if (!issueMap[issueId]) {\n      issueMap[issueId] = {\n        issue_id: issueId,\n        comments: []\n      };\n    }\n\n    issueMap[issueId].comments.push(body);\n  });\n});\n\n// Output finale\nreturn Object.values(issueMap).map(issue => ({\n  json: {\n    issue_id: issue.issue_id,\n    comments_text: issue.comments.join(';')  \n  }\n}));\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bf4f7290-2d34-4665-b80e-5d78db98fb6e",
      "name": "Pinecone Vector Store",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        2608,
        496
      ],
      "parameters": {
        "mode": "insert",
        "options": {
          "clearNamespace": "={{($runIndex)==0 }}",
          "pineconeNamespace": "jira"
        },
        "pineconeIndex": {
          "__rl": true,
          "mode": "id",
          "value": "openissues"
        }
      },
      "credentials": {
        "pineconeApi": {
          "id": "d4Df4tS2jOYakidJ",
          "name": "PineconeApi account 2"
        }
      },
      "typeVersion": 1.2,
      "alwaysOutputData": true
    },
    {
      "id": "fc8455dd-e542-4af0-ab5c-7e5720061a15",
      "name": "Embeddings OpenAI",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        2736,
        864
      ],
      "parameters": {
        "options": {
          "dimensions": 512
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ef4089fb-aae4-412d-b5ae-c02dddd31416",
      "name": "Déclencheur planifié",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        528,
        464
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 8,11,14,17 * * 1-5"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "1d06729e-6390-4097-bd44-40bc0995e781",
      "name": "Extraire les problèmes",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1136,
        480
      ],
      "parameters": {
        "url": "https://jira.siav.it/rest/api/2/search",
        "options": {
          "response": {
            "response": {}
          },
          "allowUnauthorizedCerts": true
        },
        "sendQuery": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "maxResults",
              "value": "=25"
            },
            {
              "name": "jql",
              "value": "=project = CS AND issuetype = Case AND resolution = Unresolved AND created >= -365d "
            },
            {
              "name": "startAt",
              "value": "={{($runIndex)*25 }}"
            }
          ]
        },
        "nodeCredentialType": "jiraSoftwareServerPatApi"
      },
      "typeVersion": 4
    },
    {
      "id": "a7accfcb-7332-485f-a05e-b79b4470e3af",
      "name": "Extraire les informations pertinentes",
      "type": "n8n-nodes-base.code",
      "position": [
        1392,
        480
      ],
      "parameters": {
        "jsCode": "return items[0].json.issues.map(issue => {\n  const rawDate = issue.fields.customfield_10317?.ongoingCycle?.startTime?.jira ?? null;\n  const formattedDate = rawDate \n    ? new Date(rawDate).toLocaleString(\"it-IT\", {\n        year: \"numeric\",\n        month: \"2-digit\",\n        day: \"2-digit\",\n        hour: \"2-digit\",\n        minute: \"2-digit\",\n        hour12: false\n      }).replace(',', '') \n    : null;\n\n  return {\n    json: {\n      issue_key: issue.key ?? null,\n      issue_id: issue.id ?? null,\n      summary: issue.fields.summary ?? null,\n      issue_description: issue.fields?.description ?? null,\n      product: issue.fields.customfield_10402?.[0].replace(/\\s*\\(.*?\\)\\s*/g, '').trim() ?? null,\n      level: issue.fields.customfield_10408?.[0].replace(/\\s*\\(.*?\\)\\s*/g, '').trim() ?? null,\n      customer: issue.fields.customfield_10409?.[0]?.replace(/\\s*\\(.*?\\)\\s*/g, '').trim() ?? null,\n      status: issue.fields.customfield_10001?.currentStatus?.status ?? null,\n      classification: issue.fields.customfield_10322?.value ?? null,\n      registration: formattedDate\n    }\n  };\n});\n\n\n"
      },
      "typeVersion": 2
    },
    {
      "id": "e0869f53-b22f-4f91-b0dc-c222b297a23b",
      "name": "Déclencheur serveur MCP",
      "type": "@n8n/n8n-nodes-langchain.mcpTrigger",
      "position": [
        3920,
        368
      ],
      "webhookId": "460881ea-5422-476c-bf03-b7d6e2447cb4",
      "parameters": {
        "path": "jiraticket"
      },
      "typeVersion": 2
    },
    {
      "id": "b632445b-ddbb-4984-a531-c71bd88bcc0d",
      "name": "Note adhésive 3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3648,
        304
      ],
      "parameters": {
        "color": 6,
        "width": 544,
        "height": 912,
        "content": "## Published also as MCP tool"
      },
      "typeVersion": 1
    },
    {
      "id": "a04cee53-9d8f-49bd-9fbf-ca0f3486f790",
      "name": "problèmes_ouverts",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        3744,
        592
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "options": {
          "pineconeNamespace": "jira"
        },
        "pineconeIndex": {
          "__rl": true,
          "mode": "id",
          "value": "openissues"
        },
        "toolDescription": "Recupera informazioni sui ticket aperti per i clienti di Siav.\nUsa sempre il metadato 'cliente' per filtrare i risultati di ricerca. "
      },
      "credentials": {
        "pineconeApi": {
          "id": "d4Df4tS2jOYakidJ",
          "name": "PineconeApi account 2"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "26c7773f-d86e-4bd7-9b0b-8b549471c70a",
      "name": "openIssues (Chargeur de données)",
      "type": "@n8n/n8n-nodes-langchain.documentDefaultDataLoader",
      "position": [
        3072,
        848
      ],
      "parameters": {
        "options": {
          "metadata": {
            "metadataValues": [
              {
                "name": "ticket",
                "value": "={{ $json.issue_key }}"
              },
              {
                "name": "issue_id",
                "value": "={{ $json.issue_id }}"
              },
              {
                "name": "customer",
                "value": "={{ $json.customer }}"
              },
              {
                "name": "product",
                "value": "={{ $json.product }}"
              },
              {
                "name": "classification",
                "value": "={{ $json.classification }}"
              },
              {
                "name": "registrazion",
                "value": "={{ $json.registration }}"
              },
              {
                "name": "state",
                "value": "={{ $json.status }}"
              },
              {
                "name": "applicationmanagementLevel",
                "value": "={{ $json.level }}"
              }
            ]
          }
        },
        "jsonData": "=Customer: {{ $json.customer }}\nSummary: {{ $json.summary }}\nDescription: {{ $json.issue_description }}",
        "jsonMode": "expressionData"
      },
      "typeVersion": 1
    },
    {
      "id": "0f1e9d41-9100-4408-8664-e668c0e6e9e5",
      "name": "Tous les problèmes ouverts sont-ils chargés ?",
      "type": "n8n-nodes-base.switch",
      "position": [
        3040,
        496
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Exit",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "1755b1cf-f0f0-472d-b5d6-c2df6f2236e6",
                    "operator": {
                      "type": "boolean",
                      "operation": "true",
                      "singleValue": true
                    },
                    "leftValue": "={{ ($runIndex+1) * 25 > $('Extract Issues').item.json.total  }}",
                    "rightValue": 100
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "cicle",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "75aed4b9-24a5-487f-bd6c-7a44038073a0",
                    "operator": {
                      "type": "boolean",
                      "operation": "false",
                      "singleValue": true
                    },
                    "leftValue": "={{ ($runIndex+1) * 25 > $('Extract Issues').item.json.total }}",
                    "rightValue": 0
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {}
      },
      "executeOnce": true,
      "typeVersion": 3.2
    },
    {
      "id": "8944879b-a29b-4a51-876c-e3abbff7be47",
      "name": "Fusionner les commentaires",
      "type": "n8n-nodes-base.merge",
      "position": [
        2096,
        496
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "fieldsToMatchString": "issue_id"
      },
      "typeVersion": 3.1
    },
    {
      "id": "44dde183-38c7-42eb-bce7-eadd4cf8763d",
      "name": "Cycles",
      "type": "n8n-nodes-base.merge",
      "position": [
        912,
        480
      ],
      "parameters": {},
      "typeVersion": 3.2
    },
    {
      "id": "7bd3bdbd-1458-49c4-9565-759de422a9a0",
      "name": "Note adhésive 2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        304
      ],
      "parameters": {
        "color": 5,
        "width": 1632,
        "height": 912,
        "content": "## Jira openissues Extraction with merged user Comments \n"
      },
      "typeVersion": 1
    },
    {
      "id": "877d1356-07bf-422f-aa4f-7b2c5ae1efe8",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        272
      ],
      "parameters": {
        "width": 704,
        "height": 944,
        "content": "## Load Jira open issues with comments into Pinecone\n\nThis workflow extracts unresolved Jira tickets (with pagination), merges user comments, cleans and transforms the text, generates embeddings with OpenAI, and stores them in a Pinecone index. The index is **recreated at every iteration** so that it always reflects the current set of unresolved issues. It also exposes the data as an MCP tool for external semantic queries.\n\n### How it works\n- **Trigger**: Runs on a schedule (8, 11, 14, 17 on weekdays).\n- **Jira issues extraction with pagination**: Fetches open issues in batches of 25 until all are loaded.\n- **Transform fields**: Extracts key info (issue ID, key, summary, description, product, customer, classification, status, registration date).\n- **Merge comments**: Collects all comments, filters out irrelevant ones (images, dots, empty markdown).\n- **Clean text**: Converts HTML content into plain text.\n- **Embedding**: Generates embeddings via OpenAI (dimensions = 512).\n- **Vector storage**: Saves vectors + metadata in Pinecone (`jira` namespace, `openissues` index). The namespace is cleared at every run to ensure only unresolved tickets remain indexed.\n- **Chunking**: Splits long texts into 512-token chunks with 50 overlap.\n- **MCP publishing**: Makes the Pinecone index available as a tool for external querying.\n\n### Setup\n1. Configure Jira credentials and adjust the JQL query as needed.\n2. Provide an OpenAI API key for embeddings.\n3. Create a Pinecone index (`openissues`, 512 dimensions) and set the namespace (`jira`).\n4. Adjust the cron expression for your schedule.\n5. (Optional) Enable the MCP nodes if you want to expose the index as an MCP tool.\n\n### Requirements\n- Jira account with API access.\n- OpenAI API key.\n- Pinecone account with a 512-dimension index.\n- n8n instance with Jira, Pinecone, and OpenAI credentials configured.\n\n### Customize\n- Change the JQL query to refine which tickets are fetched.\n- Modify `maxResults` (default 25) to adjust pagination batch size.\n- Add/remove metadata fields in the \"Extract Relevant Info\" node.\n- Adjust chunk size and overlap in the Document Chunker.\n- Swap embedding/vector store providers if needed.\n- Extend with alerts, dashboards, or AI assistants powered by the indexed data.\n\n\n "
      },
      "typeVersion": 1
    },
    {
      "id": "37b7acfe-108b-4878-977f-04c7056beeeb",
      "name": "Note adhésive 1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2464,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 1140,
        "height": 920,
        "content": "## Pinecone Vector Store\n\nLoads paged openissues into a Pinecone Index\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "1eaa0ce9-5b57-4de0-8223-d73418b15f7e",
      "name": "Agent IA",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1600,
        1360
      ],
      "parameters": {
        "text": "={{ $json.chatInput }}",
        "options": {
          "systemMessage": "=Today is {{ $now.format('dd/LL/yyyy') }}.\n\nYou are an expert technical support agent responsible for informing the commercial team about the health status of the various systems used by clients.\nConsider terms like issue, problem, ticket, or incident as synonyms.\nThe questions you will receive will mostly aim to understand whether a given client has any open tickets and therefore unresolved issues.\n\nYou will answer questions such as:\n\nAre there any issues from client ACME?\nAre there any open tickets?\nAre there tickets that have been open for a long time?\n\nNB: Always extract ALL tickets you find!\n\nThe tool openIssues allows you to search for this information and filter it using relevant metadata such as client, which identifies the client, and registration, which provides the ticket’s registration date.\nAnother important metadata is severity, which indicates the ticket's urgency with a color code (Red, Yellow, Green, White).\n\nImportant:\n\nAlways report in your response all results obtained with the openIssues tool, which must be used before giving an answer.\nWhen extracting tickets for a client, make sure to retrieve all of them, not partial results.\nUse an informal and collaborative tone in your responses.\n\nIn the response, always provide:\n\nThe issue identifier (issue key)\nIssue description\nCustomer\nProduct details related to the issue\nAssigned severity color (White, Green, Yellow, or Red)\nTicket status\nType of AM contract\nSLA applied to the ticket, based on registration date, service level, and severity. Briefly explain the reason for the applied SLA.\n\nThese are the characteristics of the offered service levels {{ $json.SLA }}\n\n\n\n\n\n"
        },
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "bb5ce05b-8f81-4cfa-9201-b2eb41e34712",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1552,
        1584
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "typeVersion": 1.2
    },
    {
      "id": "d8056459-8ea3-4431-ad22-2a793f0899a2",
      "name": "Mémoire simple",
      "type": "@n8n/n8n-nodes-langchain.memoryBufferWindow",
      "position": [
        1728,
        1584
      ],
      "parameters": {
        "contextWindowLength": 10
      },
      "typeVersion": 1.3
    },
    {
      "id": "73ef8785-da67-4dc8-a206-b89eded48158",
      "name": "SLA",
      "type": "n8n-nodes-base.set",
      "position": [
        1040,
        1360
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "29504428-d42f-410c-8a3d-9f0afe5e9220",
              "name": "SLA",
              "type": "string",
              "value": "Service Levels\n\nBelow are the service levels related to the basic Application Maintenance service (SAMB, SAMA, SAMFS) that Siav commits to respect regarding the resolution of detected and reported anomalies.\n\nService Implementation Timelines\nThe service implementation timelines are defined based on:\n\nStatus of the ticket handling\nSeverity of the problem\nLevel of Application Maintenance subscribed\nTicket Handling Process\n\nIn the process of resolving an anomaly or handling a ticket, four main phases can be identified:\n\nTicket Registration: The ticket received by the support center (phone request) is registered in the Siav information system, which generates a unique identification code.\nSeverity Code Assignment and Ticket Number Communication: The unique identifier assigned to the TDS ticket, along with the correctly assigned severity level, is communicated to the Client.\nTicket Acceptance: The ticket enters this phase when a Siav technician takes it over and starts processing it.\nTicket Closure: When the assigned personnel inform the support service that the requested assistance has been provided to the Client (resolution of the reported issue or fulfillment of the specific request), the ticket is considered closed, and the closure details are communicated to the Client contact indicated at the ticket registration.\nProblem Severity Definition\nThe severity of the problem depends on two factors: Urgency and Impact. Below are the standard criteria for their assignment and the matrix for calculating Severity and the related response times.\n\nUrgency Level\nIndicates how quickly a restoration is needed, considering the Customer's business needs (communicated at ticket opening), and is assigned based on which and how many functionalities are no longer available.\nThe defined levels are:\n\nCritical: All functions are unavailable, with certainty or possibility of data corruption; immediate restoration is required to resume the Client's blocked activities.\nHigh: Most functionalities are unavailable, or the problem concerns important functions that block the Client’s business; rapid restoration is required to meet externally imposed deadlines.\nMedium: The unavailable functionalities are not crucial and do not prevent the Customer from continuing operations; short-term restoration is needed to meet internal deadlines.\nLow: The unavailability is limited to a few or minor functions, whose restoration can occur over a medium/long term period.\n\nImpact\nRefers to the number and type of users affected by the problems or anomalies.\n\n\n...."
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "92b59453-0da6-4c65-8e5c-865c00035037",
      "name": "Chat",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        512,
        1360
      ],
      "webhookId": "d035b777-a948-45a6-99b6-12f2b898171b",
      "parameters": {
        "public": true,
        "options": {
          "title": "⚒️  Ticket Jira ancora aperti  ⚒️",
          "subtitle": "=🕑 Refresh automatico ogni giorno alle 8, 11, 14, 17 🕑\n",
          "customCss": ":root {\n  --chat--font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n\n  /* Colori SCURI forzati */\n  --chat--color-primary: #10a37f;\n  --chat--color-primary-shade-50: #0e9272;\n  --chat--color-primary-shade-100: #0d8165;\n  --chat--color-secondary: #40414f;\n  --chat--color-secondary-shade-50: #565869;\n  --chat--color-white: #ffffff;\n  --chat--color-light: #343541;\n  --chat--color-light-shade-50: #2c2c34;\n  --chat--color-light-shade-100: #1e1e24;\n  --chat--color-medium: #444654;\n  --chat--color-dark: #d1d5db;\n  --chat--color-disabled: #6b7280;\n  --chat--color-typing: #999999;\n\n  --chat--message--bot--background: var(--chat--color-secondary);\n  --chat--message--bot--color: var(--chat--color-dark);\n  --chat--message--user--background: var(--chat--color-secondary);\n  --chat--message--user--color: var(--chat--color-white);\n  --chat--message--pre--background: rgba(255, 255, 255, 0.05);\n\n  --chat--input--background: var(--chat--color-medium);\n  --chat--input--text-color: var(--chat--color-white);\n\n  --chat--input--send--button--background: var(--chat--color-medium);\n  --chat--input--send--button--color: var(--chat--color-white);\n\n  --chat--header--background: var(--chat--color-medium);\n  --chat--header--color: var(--chat--color-white);\n\n  --chat--footer--background: var(--chat--color-medium);\n  --chat--footer--color: var(--chat--color-white);\n\n  --chat--toggle--background: var(--chat--color-primary);\n  --chat--toggle--hover--background: var(--chat--color-primary-shade-50);\n  --chat--toggle--active--background: var(--chat--color-primary-shade-100);\n  --chat--toggle--color: var(--chat--color-white);\n}\n\n\n"
        },
        "initialMessages": "Come posso aiutarti oggi? 😎"
      },
      "typeVersion": 1.1
    },
    {
      "id": "708377d2-9273-4fd7-84f0-969b9b639b4f",
      "name": "openIssues",
      "type": "@n8n/n8n-nodes-langchain.vectorStorePinecone",
      "position": [
        1968,
        1536
      ],
      "parameters": {
        "mode": "retrieve-as-tool",
        "topK": 10,
        "options": {
          "pineconeNamespace": "jira"
        },
        "toolName": "openIssue",
        "pineconeIndex": {
          "__rl": true,
          "mode": "list",
          "value": "openissues",
          "cachedResultName": "openissues"
        },
        "toolDescription": "Retrieve information on open tickets for Siav's clients.\nAlways use the 'client' metadata to filter the search results."
      },
      "credentials": {
        "pineconeApi": {
          "id": "d4Df4tS2jOYakidJ",
          "name": "PineconeApi account 2"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "352b195e-f3b1-407c-8f62-f62ba27304a4",
      "name": "Embeddings OpenAI1",
      "type": "@n8n/n8n-nodes-langchain.embeddingsOpenAi",
      "position": [
        2192,
        1728
      ],
      "parameters": {
        "options": {
          "dimensions": 512
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "eftSGhVCoom3z6Q4",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "82b9c5ee-bfa1-4fba-b09b-7ebb65ed0ac1",
      "name": "Note adhésive 4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        800,
        1264
      ],
      "parameters": {
        "color": 3,
        "width": 1632,
        "height": 736,
        "content": "## RAG Agent \n"
      },
      "typeVersion": 1
    },
    {
      "id": "273d0858-1dcf-44b1-b336-91eba0e03f43",
      "name": "MCP RAG",
      "type": "@n8n/n8n-nodes-langchain.mcpClientTool",
      "position": [
        3264,
        1584
      ],
      "parameters": {
        "options": {},
        "endpointUrl": "http://localhost:5678/mcp-test/jiraticket",
        "serverTransport": "httpStreamable"
      },
      "typeVersion": 1.1
    },
    {
      "id": "64e0547e-d42d-4d43-8280-67874159ab88",
      "name": "Note adhésive 5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2464,
        1264
      ],
      "parameters": {
        "color": 2,
        "width": 1728,
        "height": 736,
        "content": "## You can substitute openissue tool with RAG MCP Tool to use MCP server connection"
      },
      "typeVersion": 1
    },
    {
      "id": "cb098944-ad62-4d79-9679-17df7d4ca7b0",
      "name": "Note adhésive 6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -528,
        1264
      ],
      "parameters": {
        "width": 704,
        "height": 464,
        "content": "## AI Chatbot for Jira open tickets with SLA insights\n\n**Flow structure**  \n1. **ChatTrigger** → starts the conversation with the sales/support team.  \n2. **AI Agent (OpenAI)** → interprets user questions.  \n3. **SLA Node** → provides SLA rules (Basic / Advanced / Full Service, optional Fast Support).  \n4. **Pinecone Query** → searches unresolved Jira tickets (`openissues` index, `jira` namespace).  \n5. **Memory** → keeps short-term context for multi-turn conversations.  \n6. **AI Response** → returns a human-friendly summary with ticket details + SLA info.  \n\n**Key data stored in Pinecone**  \n- Issue key & description  \n- Customer & product  \n- Severity level (Red / Yellow / Green / White)  \n- Status  \n- Contract level (Basic / Advanced / Full Service)  \n- SLA explanation\n"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "pinData": {},
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "9ef9acd1-1441-438c-99f1-ba47da462633",
  "connections": {
    "73ef8785-da67-4dc8-a206-b89eded48158": {
      "main": [
        [
          {
            "node": "1eaa0ce9-5b57-4de0-8223-d73418b15f7e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "92b59453-0da6-4c65-8e5c-865c00035037": {
      "main": [
        [
          {
            "node": "73ef8785-da67-4dc8-a206-b89eded48158",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "44dde183-38c7-42eb-bce7-eadd4cf8763d": {
      "main": [
        [
          {
            "node": "1d06729e-6390-4097-bd44-40bc0995e781",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "708377d2-9273-4fd7-84f0-969b9b639b4f": {
      "ai_tool": [
        [
          {
            "node": "1eaa0ce9-5b57-4de0-8223-d73418b15f7e",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "a04cee53-9d8f-49bd-9fbf-ca0f3486f790": {
      "ai_tool": [
        [
          {
            "node": "e0869f53-b22f-4f91-b0dc-c222b297a23b",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "6c90b512-f3fa-4262-b111-accea4260ae3": {
      "main": [
        [
          {
            "node": "6aecfae3-de7e-4fbb-a53f-908da0316351",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d8056459-8ea3-4431-ad22-2a793f0899a2": {
      "ai_memory": [
        [
          {
            "node": "1eaa0ce9-5b57-4de0-8223-d73418b15f7e",
            "type": "ai_memory",
            "index": 0
          }
        ]
      ]
    },
    "d03d3708-3160-444c-835c-170e5fc1e14a": {
      "main": [
        [
          {
            "node": "bf4f7290-2d34-4665-b80e-5d78db98fb6e",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "1d06729e-6390-4097-bd44-40bc0995e781": {
      "main": [
        [
          {
            "node": "a7accfcb-7332-485f-a05e-b79b4470e3af",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8944879b-a29b-4a51-876c-e3abbff7be47": {
      "main": [
        [
          {
            "node": "d03d3708-3160-444c-835c-170e5fc1e14a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "58e0fa98-cdf6-4c2a-85f8-866ccdc9f150": {
      "ai_textSplitter": [
        [
          {
            "node": "26c7773f-d86e-4bd7-9b0b-8b549471c70a",
            "type": "ai_textSplitter",
            "index": 0
          }
        ]
      ]
    },
    "ef4089fb-aae4-412d-b5ae-c02dddd31416": {
      "main": [
        [
          {
            "node": "44dde183-38c7-42eb-bce7-eadd4cf8763d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "fc8455dd-e542-4af0-ab5c-7e5720061a15": {
      "ai_embedding": [
        [
          {
            "node": "bf4f7290-2d34-4665-b80e-5d78db98fb6e",
            "type": "ai_embedding",
            "index": 0
          },
          {
            "node": "a04cee53-9d8f-49bd-9fbf-ca0f3486f790",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "bb5ce05b-8f81-4cfa-9201-b2eb41e34712": {
      "ai_languageModel": [
        [
          {
            "node": "1eaa0ce9-5b57-4de0-8223-d73418b15f7e",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "352b195e-f3b1-407c-8f62-f62ba27304a4": {
      "ai_embedding": [
        [
          {
            "node": "708377d2-9273-4fd7-84f0-969b9b639b4f",
            "type": "ai_embedding",
            "index": 0
          }
        ]
      ]
    },
    "6aecfae3-de7e-4fbb-a53f-908da0316351": {
      "main": [
        [
          {
            "node": "8944879b-a29b-4a51-876c-e3abbff7be47",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "a7accfcb-7332-485f-a05e-b79b4470e3af": {
      "main": [
        [
          {
            "node": "8944879b-a29b-4a51-876c-e3abbff7be47",
            "type": "main",
            "index": 0
          },
          {
            "node": "6c90b512-f3fa-4262-b111-accea4260ae3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bf4f7290-2d34-4665-b80e-5d78db98fb6e": {
      "main": [
        [
          {
            "node": "0f1e9d41-9100-4408-8664-e668c0e6e9e5",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "26c7773f-d86e-4bd7-9b0b-8b549471c70a": {
      "ai_document": [
        [
          {
            "node": "bf4f7290-2d34-4665-b80e-5d78db98fb6e",
            "type": "ai_document",
            "index": 0
          }
        ]
      ]
    },
    "0f1e9d41-9100-4408-8664-e668c0e6e9e5": {
      "main": [
        [],
        [
          {
            "node": "44dde183-38c7-42eb-bce7-eadd4cf8763d",
            "type": "main",
            "index": 1
          }
        ]
      ]
    }
  }
}
Foire aux questions

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.

Informations sur le workflow
Niveau de difficulté
Avancé
Nombre de nœuds30
Catégorie2
Types de nœuds17
Description de la difficulté

Adapté aux utilisateurs avancés, avec des workflows complexes contenant 16+ nœuds

Auteur

Experienced and professional manager with over 20 years of experience in consulting for business process digitalization, driven by a strong passion for organization.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34