Automatisierung der intelligenten Konferenzanalyse mit VEXA, OpenAI und Mem0

Experte

Dies ist ein Document Extraction, AI Summarization-Bereich Automatisierungsworkflow mit 26 Nodes. Hauptsächlich werden Set, Code, Merge, Redis, Switch und andere Nodes verwendet. Automatisierung der Analyse von Gesprächseinblicken mit VEXA, OpenAI und Mem0

Voraussetzungen
  • Redis-Serververbindungsdaten
  • HTTP Webhook-Endpunkt (wird von n8n automatisch generiert)
  • Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
  • OpenAI API Key
Workflow-Vorschau
Visualisierung der Node-Verbindungen, mit Zoom und Pan
Workflow exportieren
Kopieren Sie die folgende JSON-Konfiguration und importieren Sie sie in n8n
{
  "meta": {
    "instanceId": "834bc6c387a1c56d0622a24b912577f9e6d66c5873f4e6426166054eb488d8fc",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "ff74078e-4506-4750-80ec-6df095b3344d",
      "name": "No Operation, do nothing",
      "type": "n8n-nodes-base.noOp",
      "position": [
        340,
        1440
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e02d44ca-fe4e-414e-80bd-38890b129022",
      "name": "Baserow: rowID setzen",
      "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: Status auf 'In Progress' aktualisieren",
      "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: Status auf 'Stopped' aktualisieren",
      "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: VEXA Bot starten",
      "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: VEXA Bot stoppen",
      "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: Bot-Aktion (Start/Stop)",
      "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: Transkript bereit",
      "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: Transkript abrufen",
      "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": "Process: Transkript-Segmente aufteilen",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        160,
        1960
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "segments"
      },
      "typeVersion": 1
    },
    {
      "id": "6d690e78-8a51-4b45-82b3-febc02d8a752",
      "name": "Prepare: Transkriptdaten auswählen",
      "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": "Merge",
      "type": "n8n-nodes-base.merge",
      "position": [
        600,
        1860
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3
    },
    {
      "id": "8e838252-400b-4019-a22e-a3268f654db1",
      "name": "Prepare: Für Analyse aggregieren",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        740,
        1860
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "summary "
      },
      "typeVersion": 1
    },
    {
      "id": "6224428f-723c-4024-bab9-483edcf777fa",
      "name": "AI: Transkript analysieren",
      "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 Chat Model",
      "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: Transkript-Memory hinzufügen",
      "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: User-ID abrufen",
      "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": "Stop and Error",
      "type": "n8n-nodes-base.stopAndError",
      "position": [
        240,
        2100
      ],
      "parameters": {
        "errorMessage": "error"
      },
      "typeVersion": 1
    },
    {
      "id": "e4435a20-ac5d-4047-bf44-111175034913",
      "name": "SET your 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": "Sticky Note",
      "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": "Register your webhook",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        920,
        1400
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "c7406080-b022-4d12-8344-7bf4b97e822c",
      "name": "Sticky Note5",
      "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": "Sticky Note6",
      "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": "Sticky Note1",
      "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": "Clean up for 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
          }
        ]
      ]
    }
  }
}
Häufig gestellte Fragen

Wie verwende ich diesen Workflow?

Kopieren Sie den obigen JSON-Code, erstellen Sie einen neuen Workflow in Ihrer n8n-Instanz und wählen Sie "Aus JSON importieren". Fügen Sie die Konfiguration ein und passen Sie die Anmeldedaten nach Bedarf an.

Für welche Szenarien ist dieser Workflow geeignet?

Experte - Dokumentenextraktion, KI-Zusammenfassung

Ist es kostenpflichtig?

Dieser Workflow ist völlig kostenlos. Beachten Sie jedoch, dass Drittanbieterdienste (wie OpenAI API), die im Workflow verwendet werden, möglicherweise kostenpflichtig sind.

Workflow-Informationen
Schwierigkeitsgrad
Experte
Anzahl der Nodes26
Kategorie2
Node-Typen16
Schwierigkeitsbeschreibung

Für fortgeschrittene Benutzer, komplexe Workflows mit 16+ Nodes

Autor
Stephan Koning

Stephan Koning

@reklaim

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

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34