Analyse intelligente des réunions automatisée avec VEXA, OpenAI et Mem0

Avancé

Ceci est unDocument Extraction, AI Summarizationworkflow d'automatisation du domainecontenant 26 nœuds.Utilise principalement des nœuds comme Set, Code, Merge, Redis, Switch. Utiliser VEXA, OpenAI et Mem0 pour automatiser l'analyse des insights des conversations de réunion

Prérequis
  • Informations de connexion au serveur Redis
  • Point de terminaison HTTP Webhook (généré automatiquement par n8n)
  • Peut nécessiter les informations d'identification d'authentification de l'API cible
  • Clé API OpenAI
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
{
  "meta": {
    "instanceId": "834bc6c387a1c56d0622a24b912577f9e6d66c5873f4e6426166054eb488d8fc",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "ff74078e-4506-4750-80ec-6df095b3344d",
      "name": "No Operation, ne rien faire",
      "type": "n8n-nodes-base.noOp",
      "position": [
        340,
        1440
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e02d44ca-fe4e-414e-80bd-38890b129022",
      "name": "Baserow : définir rowID",
      "type": "n8n-nodes-base.redis",
      "position": [
        560,
        1000
      ],
      "parameters": {
        "key": "=setMem0-userId",
        "ttl": 3600,
        "value": "={{ $json['meeting with']}}",
        "expire": true,
        "operation": "set"
      },
      "credentials": {
        "redis": {
          "id": "AiUKJfkEA9bDF1g3",
          "name": "Redis account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "d3b157f5-c60c-4475-b5ac-2bda2422ad8e",
      "name": "vexa-start",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -320,
        1260
      ],
      "webhookId": "39142ea2-8192-4a0c-b506-4677fad0c4ce",
      "parameters": {
        "path": "vexa-API",
        "options": {
          "allowedOrigins": "*"
        },
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "49fe574d-3b08-42f6-8f25-3c6bc123db8a",
      "name": "Baserow: Mettre à jour le statut en 'En cours'",
      "type": "n8n-nodes-base.baserow",
      "position": [
        340,
        1000
      ],
      "parameters": {
        "rowId": "={{ $('vexa-start').item.json.body.items[0].id}}",
        "tableId": 630917,
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": 5143180,
              "fieldValue": "In Progress"
            }
          ]
        },
        "operation": "update",
        "databaseId": 268764
      },
      "credentials": {
        "baserowApi": {
          "id": "HadM27Hzjj2CaqeH",
          "name": "Baserow account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "18de75e4-6d24-4f6b-8481-cb18f034e932",
      "name": "Baserow: Mettre à jour le statut en 'Arrêté'",
      "type": "n8n-nodes-base.baserow",
      "position": [
        340,
        1200
      ],
      "parameters": {
        "rowId": "={{ $('vexa-start').item.json.body.items[0].id}}",
        "tableId": 630917,
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": 5143180,
              "fieldValue": "Stop Request"
            }
          ]
        },
        "operation": "update",
        "databaseId": 268764
      },
      "credentials": {
        "baserowApi": {
          "id": "HadM27Hzjj2CaqeH",
          "name": "Baserow account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "e042c9b4-81c5-4852-b405-a7e346483eec",
      "name": "HTTP: Démarrer le Bot VEXA",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "maxTries": 2,
      "position": [
        80,
        1020
      ],
      "parameters": {
        "url": "https://gateway.dev.vexa.ai/bots",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "platform",
              "value": "google_meet"
            },
            {
              "name": "native_meeting_id",
              "value": "={{ $json.body.items[0][\"Meeting Link\"].extractUrlPath().replace('/',\"\")}}"
            },
            {
              "name": "language",
              "value": "en"
            },
            {
              "name": "bot_name",
              "value": "={{ $json.body.items[0][\"Bot Name\"] }}"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "UqKQMj1xtlK4u3Q9",
          "name": "VEXA-"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "d6097c2d-5acb-41ec-b468-e93ef9693b89",
      "name": "HTTP: Arrêter le Bot VEXA",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        120,
        1260
      ],
      "parameters": {
        "url": "=https://gateway.dev.vexa.ai/bots/google_meet/{{ $json.body.items[0]['Meeting Link'].extractUrlPath().slice(1)}}",
        "method": "DELETE",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "UqKQMj1xtlK4u3Q9",
          "name": "VEXA-"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4183ab08-ddca-4489-8358-dec530778d28",
      "name": "Route: Action du Bot (Démarrer/Arrêter)",
      "type": "n8n-nodes-base.switch",
      "position": [
        -100,
        1260
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "Start_Bot",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "loose"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "31e88a02-32ed-4407-bcf2-f6aed6079397",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.items.first()['Send Bot'].value}}",
                    "rightValue": "Start_Bot"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "Stop_Bot",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "loose"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "be0fb069-7bf0-4a4c-8231-00ba70eb6da8",
                    "operator": {
                      "type": "string",
                      "operation": "equals"
                    },
                    "leftValue": "={{ $json.body.items.first()['Send Bot'].value}}",
                    "rightValue": "Stop_Bot"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra",
          "renameFallbackOutput": "no_action"
        },
        "looseTypeValidation": true
      },
      "typeVersion": 3.2
    },
    {
      "id": "40f2c644-6fad-473f-bc17-273b4106d45a",
      "name": "Webhook: Transcription Prête",
      "type": "n8n-nodes-base.webhook",
      "position": [
        -280,
        1960
      ],
      "webhookId": "d6ac3751-20bc-4b70-89a3-e7121b95350c",
      "parameters": {
        "path": "luffy",
        "options": {},
        "httpMethod": "POST"
      },
      "typeVersion": 2
    },
    {
      "id": "981f41f0-b5aa-4524-a6c1-60c526ed2131",
      "name": "VEXA: Obtenir la Transcription",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        -60,
        2060
      ],
      "parameters": {
        "url": "=https://gateway.dev.vexa.ai/transcripts/google_meet/{{ $json.body.native_meeting_id }}",
        "options": {},
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "UqKQMj1xtlK4u3Q9",
          "name": "VEXA-"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "alwaysOutputData": false,
      "waitBetweenTries": 5000
    },
    {
      "id": "8e62e7c4-7307-4a65-a9c8-c9e77ec87b43",
      "name": "Processus: Segmenter la Transcription",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        160,
        1960
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "segments"
      },
      "typeVersion": 1
    },
    {
      "id": "6d690e78-8a51-4b45-82b3-febc02d8a752",
      "name": "Préparer: Sélectionner les Données de Transcription",
      "type": "n8n-nodes-base.set",
      "position": [
        380,
        1940
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "9dad0189-4fce-4945-8828-894dcf92a0e5",
              "name": "speaker",
              "type": "string",
              "value": "={{ $json.speaker }}"
            },
            {
              "id": "6aa88e65-6cfc-43b0-90d9-7675f37097f1",
              "name": "meeting_transcript",
              "type": "string",
              "value": "={{ $json.text }}"
            },
            {
              "id": "e1725954-5701-4ec6-8e11-2cd39ed69810",
              "name": "created_at",
              "type": "string",
              "value": "={{ $json.created_at }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d0912b45-fe4e-4380-bcb9-be9b0365dad3",
      "name": "Fusionner",
      "type": "n8n-nodes-base.merge",
      "position": [
        600,
        1860
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3
    },
    {
      "id": "8e838252-400b-4019-a22e-a3268f654db1",
      "name": "Préparer: Agréger pour l'Analyse",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        740,
        1860
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "summary "
      },
      "typeVersion": 1
    },
    {
      "id": "6224428f-723c-4024-bab9-483edcf777fa",
      "name": "IA: Analyser la Transcription",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        880,
        1860
      ],
      "parameters": {
        "text": "={{ JSON.stringify ($json)}} ",
        "options": {
          "systemPromptTemplate": "=<role>\nYou are a Senior Business Analyst specializing in Conversation Intelligence.\n</role>\n\n<task>Your task is to review the provided meeting notes and create a concise summary that captures the essential information, focusing on key takeaways and action items assigned to specific individuals or departments during the meeting. Use clear and professional language, and organize the summary in a logical manner using appropriate formatting such as headings, subheadings, and bullet points. Ensure that the summary is easy to understand and provides a comprehensive but succinct overview of the meeting’s content, with a particular focus on clearly indicating who is responsible for each action item.\n</task>\n\n### tip : Identifying entities and their context to better understand the sentiment"
        },
        "attributes": {
          "attributes": [
            {
              "name": "summary",
              "required": true,
              "description": " A concise, 2-3 sentence executive summary of the entire conversation, capturing the main goal, key findings, and overall outcome of the call."
            },
            {
              "name": "overallSentiment",
              "description": "Your task is to analyze a conversation transcript and provide a structured breakdown of the sentiment associated with each key entity, followed by a final, conclusive summary."
            },
            {
              "name": "potential red flags",
              "required": true,
              "description": "=Identify and list any potential risks, deal-breakers, or significant negative signals from the prospect. This includes mentions of serious budget freezes, internal politics, distrust in the proposed solution, or strong preference for a competitor. If no red flags are identified, return an empty array []."
            },
            {
              "name": "nextSteps",
              "required": true,
              "description": "A list of all agreed-upon action items and next steps for both sides."
            },
            {
              "name": "socialChatter",
              "description": " List any non-business, rapport-building topics discussed. If the conversation is strictly business, return an empty array []."
            },
            {
              "name": "user_id",
              "required": true,
              "description": "=the property name is the user_id. \"propertyName\":\"{{ $json['summary '][0].propertyName }}\""
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "78614e07-62af-4cec-8f7f-d35d9814d615",
      "name": "OpenAI Modèle de Chat",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        980,
        2080
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {
          "temperature": 0.7
        }
      },
      "credentials": {
        "openAiApi": {
          "id": "TKQcXt7XlrfyymWn",
          "name": "OpenAI Free"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "724eb262-e53c-4aad-8050-6feb8eea7236",
      "name": "Mem0: Ajouter la Mémoire de Transcription",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueErrorOutput",
      "position": [
        1620,
        1860
      ],
      "parameters": {
        "url": "https://api.mem0.ai/v1/memories/",
        "method": "POST",
        "options": {},
        "jsonBody": "={{ $json.mem0Payload }}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "r4QUfrE3liJp4KMR",
          "name": "Mem0"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "15125ec1-3ece-4a0e-8221-1d3359c71f7a",
      "name": "Redis: Obtenir l'ID Utilisateur",
      "type": "n8n-nodes-base.redis",
      "position": [
        380,
        1760
      ],
      "parameters": {
        "key": "=setMem0-userId",
        "options": {
          "dotNotation": true
        },
        "operation": "get"
      },
      "credentials": {
        "redis": {
          "id": "AiUKJfkEA9bDF1g3",
          "name": "Redis account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5a32f034-8afe-4747-9581-52d5e2360b3c",
      "name": "Arrêter et Erreur",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        240,
        2100
      ],
      "parameters": {
        "errorMessage": "error"
      },
      "typeVersion": 1
    },
    {
      "id": "e4435a20-ac5d-4047-bf44-111175034913",
      "name": "DÉFINIR votre webhook",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1140,
        1400
      ],
      "parameters": {
        "url": "https://gateway.dev.vexa.ai/user/webhook",
        "method": "PUT",
        "options": {},
        "sendBody": true,
        "authentication": "genericCredentialType",
        "bodyParameters": {
          "parameters": [
            {
              "name": "webhook_url",
              "value": "https://stuctstunter.zeabur.app/webhook/luffy"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "UqKQMj1xtlK4u3Q9",
          "name": "VEXA-"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "b6715064-6c07-44a0-9545-5d9cd8a29f9d",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1000,
        880
      ],
      "parameters": {
        "width": 480,
        "height": 1620,
        "content": "### How it works\n\nThis workflow has two distinct parts that work together to manage a meeting's entire lifecycle.\n\n* **Part 1: Bot Management.** A command is received from your CRM (Baserow) to either deploy or remove an AI bot from a Google Meet. This ensures the bot is present only when needed. The workflow instantly updates the status in your Baserow table to `In Progress` or `Stopped`.\n* **Part 2: AI-Powered Analysis.** Upon meeting completion, a separate webhook from VEXA triggers the second part of the workflow. It automatically retrieves the full transcript and uses a powerful AI model (OpenAI) to analyze the conversation. The AI extracts key details like a **summary**, **next steps**, and **potential risks**. This structured output is then logged into a memory layer (Mem0) for a persistent, queryable record of all conversations.\n\n\n### Who's it for\n\nBuilt for non-technical solopreneurs and small business owners who want to effortlessly add conversation intelligence to their workflow. Get a single source of truth for all your meeting data without manual transcription or analysis.\n\n\n### Setup Steps\n\nRapid deployment. Your action plan:\n\n1.  **Register Webhook:** First, run the manual trigger in this workflow to send your n8n webhook URL to VEXA. This is a crucial one-time setup step that tells VEXA where to send meeting transcripts after a call.\n2.  **Connect Your CRM:** Copy the `vexa-start` webhook URL from n8n and paste it into your Baserow automation. For example, trigger it when you set the \"Send Bot\" field to `Start_Bot` in your table.\n3.  **Integrate Platforms:** Set up your VEXA, Mem0, and OpenAI API credentials in n8n.\n4.  **Use the Baserow Template:** We provide a free Baserow template that serves as your bot control panel. You can access it here: [https://baserow.io/public/grid/t5kYjovKEHjNix2-6Rijk99y4SDeyQY4rmQISciC14w](https://baserow.io/public/grid/t5kYjovKEHjNix2-6Rijk99y4SDeyQY4rmQISciC14w). This template contains the necessary fields like `Meeting Link`, `Bot Name`, and the `Send Bot` command field that triggers this workflow.\n\n\n### Requirements\n\n* Active n8n instance (self-hosted/cloud).\n* **VEXA.ai** account.\n* **Mem0.ai** account.\n* **Baserow** account for bot management.\n* **OpenAI** account.\n* **Redis Account:** A Redis database is required to temporarily store user IDs.\n* Your Baserow table must include specific fields:\n    * **`Meeting Link`**: The URL of your Google Meet.\n    * **`Bot Name`**: The name you want your AI bot to have.\n    * **`Send Bot`**: A single-select field with `Start_Bot` and `Stop_Bot` as options.\n    * **`Status`**: A single-select field for the workflow to update.\n\n### Next Steps\n\nThis workflow provides a powerful foundation. Here are a few ways to extend its value:\n\n* **Automate Follow-ups:** Trigger an automated email or task in your CRM based on AI-identified next steps or red flags.\n* **Integrate Email & Engagements:** Connect your email or other communication platforms to a workflow that uses Mem0 to parse and store all engagements, building a holistic client memory.\n* **Build a Headless CRM:** Use these combined workflows to create a fully AI-powered, headless CRM that handles everything from initial contact to proactive client management without any manual data entry."
      },
      "typeVersion": 1
    },
    {
      "id": "bdb077ab-ba7e-4145-bed5-4241b09d31ba",
      "name": "Enregistrer votre webhook",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        920,
        1400
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c7406080-b022-4d12-8344-7bf4b97e822c",
      "name": "Note adhésive5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        920,
        1280
      ],
      "parameters": {
        "color": 6,
        "width": 420,
        "height": 80,
        "content": "## Register Your Webhook\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0b1fe396-bfa7-410d-91bb-5939337c6100",
      "name": "Note adhésive6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -300,
        1140
      ],
      "parameters": {
        "color": 6,
        "width": 260,
        "height": 80,
        "content": "## BOT Management "
      },
      "typeVersion": 1
    },
    {
      "id": "c1a973db-26c6-4731-8d02-54785a93cec1",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -280,
        1820
      ],
      "parameters": {
        "color": 6,
        "width": 280,
        "height": 80,
        "content": "## The Notetaking Magic"
      },
      "typeVersion": 1
    },
    {
      "id": "7d181d4b-fd87-438a-b164-326c5a9a8638",
      "name": "Nettoyage pour mem0",
      "type": "n8n-nodes-base.code",
      "position": [
        1240,
        1860
      ],
      "parameters": {
        "jsCode": "// N8N Code Node: Verwerkt LLM output en assembleert de Mem0 payload.\n// Deze code is ontworpen om de output van een AI-model te structureren voor Mem0.\n\n// ===================================================================\n// I. CONFIGURATION\n// ===================================================================\nconst APP_ID = \"vexa_baserow_project\";\nconst AGENT_ID = \"vexa_baserow_ingestor\";\nconst AGENT_CONTACT_NAMES = [\n    { name: \"Stephan\", keywords: [\"stephan\", \"stephan koning\"] },\n    // Voeg hier andere agent namen toe\n];\n\n// ===================================================================\n// II. HELPER FUNCTIONS\n// ===================================================================\n\n// Helper: Vertaalt een datumstring naar een Unix timestamp (seconden sinds de epoch).\nfunction getUnixTimestamp(dateString) {\n    if (!dateString) return null;\n    try {\n        const dateObj = new Date(dateString);\n        if (isNaN(dateObj.getTime())) return null;\n        return Math.floor(dateObj.getTime() / 1000);\n    } catch (e) {\n        return null;\n    }\n}\n\n// Helper: Zoekt naar bekende agentnamen in de tekst.\nfunction determineAgentContactPerson(text) {\n    if (!text) return '';\n    const searchableText = String(text).toLowerCase();\n    for (const agent of AGENT_CONTACT_NAMES) {\n        if (agent.keywords.some(keyword => searchableText.includes(keyword))) {\n            return agent.name;\n        }\n    }\n    return '';\n}\n\n// Helper: Escaped een string voor JSON-compatibiliteit.\nfunction escapeJsonString(str) {\n    if (typeof str !== 'string') return str;\n    return JSON.stringify(str).slice(1, -1);\n}\n\n// Helper: Haalt een waarde op uit een object met een fallback voor als de key niet bestaat.\nfunction getWithFallback(obj, key, fallback = null) {\n    if (obj && obj.hasOwnProperty(key)) {\n        return obj[key] !== null ? obj[key] : fallback;\n    }\n    return fallback;\n}\n\n// ===================================================================\n// III. MAIN EXECUTION\n// ===================================================================\nconst output_items = [];\n\n// Dit script verwerkt een enkel LLM output-item dat als input wordt gegeven.\ntry {\n    const llm_output_item = items[0]; // De LLM output is het eerste item\n    const llm_output = llm_output_item.json.output || {};\n\n    const meeting_summary = getWithFallback(llm_output, 'summary', \"No summary provided.\");\n    const meeting_sentiment = getWithFallback(llm_output, 'overallSentiment', \"Neutral\");\n    const meeting_red_flags = getWithFallback(llm_output, 'potential red flags', \"None\");\n    const meeting_next_steps = getWithFallback(llm_output, 'nextSteps', \"None\");\n    const social_chatter = getWithFallback(llm_output, 'socialChatter', \"None\");\n    const client_id = getWithFallback(llm_output, 'user_id', \"unknown_client@example.com\");\n\n    const agent_contact_person_name = determineAgentContactPerson(meeting_summary);\n\n    // --- Samenstellen van de 'content' voor Mem0 ---\n    const mem0_content_raw = `Klant had een vergadering met ${agent_contact_person_name || 'een agent'}.\n\nSamenvatting: ${meeting_summary}\nVolgende Stappen: ${meeting_next_steps}`;\n\n    const mem0_content = escapeJsonString(mem0_content_raw);\n\n    // --- Samenstellen van de 'metadata' ---\n    const mem0_metadata = {\n        \"type\": \"meeting\",\n        \"summary\": escapeJsonString(meeting_summary),\n        \"sentiment\": escapeJsonString(meeting_sentiment),\n        \"red_flags\": escapeJsonString(meeting_red_flags),\n        \"next_steps\": escapeJsonString(meeting_next_steps),\n        \"social_chatter\": escapeJsonString(social_chatter),\n        \"agent_contact_person_name\": escapeJsonString(agent_contact_person_name),\n        \"native_meeting_id\": getWithFallback(llm_output, 'native_meeting_id', 'no_id')\n    };\n\n    const mem0_categories = [\"meeting\", \"summary\"];\n    if (meeting_red_flags.toLowerCase() !== \"none\" && meeting_red_flags.length > 2) {\n        mem0_categories.push(\"red_flag\");\n    }\n    if (meeting_next_steps.toLowerCase() !== \"none\") {\n        mem0_categories.push(\"action_items\");\n    }\n\n    // --- Definitieve Mem0 Payload ---\n    const mem0_payload = {\n        \"messages\": [\n            {\n                \"role\": \"user\",\n                \"content\": mem0_content\n            }\n        ],\n        \"user_id\": client_id,\n        \"agent_id\": AGENT_ID,\n        \"app_id\": APP_ID,\n        \"run_id\": `meeting_${client_id}_${Date.now()}`,\n        \"metadata\": mem0_metadata,\n        \"infer\": true,\n        \"categories\": mem0_categories,\n        \"version\": \"v2\",\n        \"output_format\": \"v1.1\",\n        \"timestamp\": getUnixTimestamp(new Date().toISOString())\n    };\n    \n    output_items.push({\"json\": {\"mem0Payload\": mem0_payload}});\n\n} catch (error) {\n    console.error(`Fout bij verwerken van LLM output:`, error.message, error);\n    output_items.push({\"json\": {\"error\": true, \"message\": String(error), \"originalItem\": items[0].json}});\n}\n\nreturn output_items;"
      },
      "typeVersion": 2
    }
  ],
  "pinData": {},
  "connections": {
    "d0912b45-fe4e-4380-bcb9-be9b0365dad3": {
      "main": [
        [
          {
            "node": "8e838252-400b-4019-a22e-a3268f654db1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d3b157f5-c60c-4475-b5ac-2bda2422ad8e": {
      "main": [
        [
          {
            "node": "4183ab08-ddca-4489-8358-dec530778d28",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7d181d4b-fd87-438a-b164-326c5a9a8638": {
      "main": [
        [
          {
            "node": "724eb262-e53c-4aad-8050-6feb8eea7236",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "78614e07-62af-4cec-8f7f-d35d9814d615": {
      "ai_languageModel": [
        [
          {
            "node": "6224428f-723c-4024-bab9-483edcf777fa",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "15125ec1-3ece-4a0e-8221-1d3359c71f7a": {
      "main": [
        [
          {
            "node": "d0912b45-fe4e-4380-bcb9-be9b0365dad3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d6097c2d-5acb-41ec-b468-e93ef9693b89": {
      "main": [
        [
          {
            "node": "18de75e4-6d24-4f6b-8481-cb18f034e932",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "ff74078e-4506-4750-80ec-6df095b3344d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "e042c9b4-81c5-4852-b405-a7e346483eec": {
      "main": [
        [
          {
            "node": "49fe574d-3b08-42f6-8f25-3c6bc123db8a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "981f41f0-b5aa-4524-a6c1-60c526ed2131": {
      "main": [
        [
          {
            "node": "8e62e7c4-7307-4a65-a9c8-c9e77ec87b43",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "5a32f034-8afe-4747-9581-52d5e2360b3c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "bdb077ab-ba7e-4145-bed5-4241b09d31ba": {
      "main": [
        [
          {
            "node": "e4435a20-ac5d-4047-bf44-111175034913",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6224428f-723c-4024-bab9-483edcf777fa": {
      "main": [
        [
          {
            "node": "7d181d4b-fd87-438a-b164-326c5a9a8638",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "40f2c644-6fad-473f-bc17-273b4106d45a": {
      "main": [
        [
          {
            "node": "981f41f0-b5aa-4524-a6c1-60c526ed2131",
            "type": "main",
            "index": 0
          },
          {
            "node": "15125ec1-3ece-4a0e-8221-1d3359c71f7a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4183ab08-ddca-4489-8358-dec530778d28": {
      "main": [
        [
          {
            "node": "e042c9b4-81c5-4852-b405-a7e346483eec",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "d6097c2d-5acb-41ec-b468-e93ef9693b89",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "ff74078e-4506-4750-80ec-6df095b3344d",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "8e838252-400b-4019-a22e-a3268f654db1": {
      "main": [
        [
          {
            "node": "6224428f-723c-4024-bab9-483edcf777fa",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "6d690e78-8a51-4b45-82b3-febc02d8a752": {
      "main": [
        [
          {
            "node": "d0912b45-fe4e-4380-bcb9-be9b0365dad3",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "8e62e7c4-7307-4a65-a9c8-c9e77ec87b43": {
      "main": [
        [
          {
            "node": "6d690e78-8a51-4b45-82b3-febc02d8a752",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "49fe574d-3b08-42f6-8f25-3c6bc123db8a": {
      "main": [
        [
          {
            "node": "e02d44ca-fe4e-414e-80bd-38890b129022",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
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é - Extraction de documents, Résumé IA

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œuds26
Catégorie2
Types de nœuds16
Description de la difficulté

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

Auteur
Stephan Koning

Stephan Koning

@reklaim

Account Executive by day , Noco builder for fun at night and always a proud dad of Togo the Samoyed.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34