Automatisierte Meeting-Zusammenfassung

Fortgeschritten

Dies ist ein Document Extraction, AI Summarization-Bereich Automatisierungsworkflow mit 14 Nodes. Hauptsächlich werden If, Code, Wait, Slack, HttpRequest und andere Nodes verwendet. Automatische Erstellung von Meeting-Zusammenfassungen von Google Meet zu Slack mit Vexa.ai und GPT-4o

Voraussetzungen
  • Slack Bot Token oder Webhook URL
  • 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": "477d41ba9371722c12acb8ceb19deefe8a94935c3dc3255b6a9141e5f8643752",
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "d3ccf483-864c-42da-98a2-81d0d42d3b0e",
      "name": "Bot zu Meet hinzufügen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -240,
        -512
      ],
      "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.conferenceData.conferenceId }}"
            },
            {
              "name": "bot_name",
              "value": "MyMeetingBot"
            }
          ]
        },
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "qsLMfqhzV78G4n49",
          "name": "Header Auth account"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "4ec42f69-06d3-451b-bdce-a929a39bc8bf",
      "name": "Google Calendar Trigger",
      "type": "n8n-nodes-base.googleCalendarTrigger",
      "position": [
        -544,
        -512
      ],
      "parameters": {
        "options": {
          "matchTerm": ""
        },
        "pollTimes": {
          "item": [
            {
              "mode": "everyMinute"
            }
          ]
        },
        "triggerOn": "eventStarted",
        "calendarId": {
          "__rl": true,
          "mode": "id",
          "value": "='primary'"
        }
      },
      "credentials": {
        "googleCalendarOAuth2Api": {
          "id": "eOIgUZwgncUgpFDg",
          "name": "Google Calendar account"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "7d4de5a4-7aef-4447-88b3-7f32677b6395",
      "name": "Nachricht senden",
      "type": "n8n-nodes-base.slack",
      "position": [
        1456,
        -560
      ],
      "webhookId": "c50e7cb4-eaa8-4128-99d4-e0f0341d2c97",
      "parameters": {
        "text": "={{ $json.output }}",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "name",
          "value": "#general"
        },
        "otherOptions": {
          "includeLinkToWorkflow": false
        }
      },
      "credentials": {
        "slackApi": {
          "id": "l613sxla64BipXhh",
          "name": "Slack account"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "03516d84-dea0-429f-b0d0-00dbb5099a94",
      "name": "KI-Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1056,
        -560
      ],
      "parameters": {
        "text": "=# Fast Meeting Summary Prompt\n\nAnalyze this meeting transcription and create a brief Slack summary. Keep it under 800 characters total.\n\n**Meeting Transcript:**\n{{ $json.fullTranscript }}\n\n**Meeting Details:**\n- Duration: {{ $json.durationMinutes }} minutes\n- Participants: {{ $json.participants }}\n\n**Format (be extremely concise):**\n\n## 📋 Meeting Summary\n**Duration:** [Start-End time]\n**Participants:** [Names only]\n\n**🎯 Key Points:**\n- [Main topic 1]\n- [Main topic 2]\n\n**📝 Action Items:**\n- [Task - Person - Deadline]\n\n**💡 Outcome:**\n[One sentence summary of result/decision]\n\nKeep each bullet point under 50 characters. Focus only on actionable information and key decisions.",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2.1
    },
    {
      "id": "d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23",
      "name": "Vexa-Transkript abrufen",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        304,
        -560
      ],
      "parameters": {
        "url": "=https://gateway.dev.vexa.ai/transcripts/google_meet/{{ $json.native_meeting_id }}",
        "options": {
          "timeout": 30000
        },
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth"
      },
      "credentials": {
        "httpHeaderAuth": {
          "id": "qsLMfqhzV78G4n49",
          "name": "Header Auth account"
        }
      },
      "typeVersion": 4.1
    },
    {
      "id": "62f19410-e908-4523-a8d5-e5af789982c2",
      "name": "Warten",
      "type": "n8n-nodes-base.wait",
      "position": [
        768,
        -432
      ],
      "webhookId": "eb04f35a-7f4e-41f6-a9d7-bc2df86e4e16",
      "parameters": {},
      "typeVersion": 1.1
    },
    {
      "id": "9208ae18-6bba-441a-95e5-3d13c44de206",
      "name": "Wenn",
      "type": "n8n-nodes-base.if",
      "position": [
        512,
        -560
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "40ee5a62-d7e4-4f2e-9f41-e073dd09e575",
              "operator": {
                "name": "filter.operator.equals",
                "type": "string",
                "operation": "equals"
              },
              "leftValue": "={{$json.status}}",
              "rightValue": "completed"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "310ee3cb-5387-4bd7-88d5-aa7f233cee48",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1056,
        -352
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "chatgpt-4o-latest",
          "cachedResultName": "chatgpt-4o-latest"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "id": "H8pWaOdD8Xbmd0vd",
          "name": "OpenAi account"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "67cced29-b716-4ea6-a41d-9bab723332d4",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        848,
        -560
      ],
      "parameters": {
        "jsCode": "// Get the input data\nconst inputData = $input.all()[0].json; // Get the first item which contains the meeting data\n\n// Extract segments from the nested structure\nconst segments = inputData.segments || [];\n\nif (!segments || segments.length === 0) {\n  return [{\n    json: {\n      fullTranscript: \"No transcript data available\",\n      participants: \"None\",\n      durationSeconds: 0,\n      durationMinutes: 0\n    }\n  }];\n}\n\n// Combine into a single readable transcript\nconst transcript = segments\n  .map(segment => {\n    const speaker = segment.speaker || 'Unknown';\n    const text = segment.text || '';\n    const time = Math.round(segment.start || 0);\n    return `[${time}s] ${speaker}: ${text}`;\n  })\n  .join('\\n');\n\n// Get unique participants\nconst participants = [...new Set(\n  segments\n    .map(segment => segment.speaker)\n    .filter(speaker => speaker && speaker !== null)\n)];\n\n// Calculate duration\nconst startTime = segments[0]?.start || 0;\nconst endTime = segments[segments.length - 1]?.end || 0;\nconst duration = Math.round(endTime - startTime);\n\n// Get meeting info from the root level\nconst meetingId = inputData.native_meeting_id || 'Unknown';\nconst platform = inputData.platform || 'Unknown';\nconst status = inputData.status || 'Unknown';\n\nreturn [{\n  json: {\n    fullTranscript: transcript,\n    participants: participants.join(', ') || 'Unknown',\n    durationSeconds: duration,\n    durationMinutes: Math.round(duration / 60),\n    meetingId: meetingId,\n    platform: platform,\n    status: status,\n    totalSegments: segments.length\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "de13ece0-8fb4-489b-b2d7-cf0f0b14114b",
      "name": "Haftnotiz",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1248,
        -960
      ],
      "parameters": {
        "color": 3,
        "height": 544,
        "content": "## 📋 Prerequisites & Requirements\n\n**Required Accounts:**\n- Google Calendar API access (free)\n- Vexa.ai account with API key\n- OpenAI API account with credits\n- Slack workspace admin access\n\n**Required Permissions:**\n- Google Calendar: Read calendar events\n- Slack: Post messages to channels\n- Vexa.ai: Create bots and access transcripts\n\n**Estimated Setup Time:** 15-20 minutes\n**Cost:** ~$0.01-0.05 per meeting (OpenAI costs)"
      },
      "typeVersion": 1
    },
    {
      "id": "1ed15b13-de3b-4cb1-a231-1dbcd32d6823",
      "name": "Haftnotiz1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -624,
        -960
      ],
      "parameters": {
        "width": 304,
        "height": 672,
        "content": "## 🗓️ Google Calendar Setup\n\n**Steps:**\n1. Go to Google Cloud Console\n2. Enable Calendar API\n3. Create credentials (OAuth2)\n4. Add credentials to n8n\n5. Test connection\n\n**Configuration:**\n- Select your target calendar from list\n- Set trigger to 'eventStarted'\n- Ensure calendar has Meet links\n\n**⚠️ Important:** Only works with Google Meet links in calendar events"
      },
      "typeVersion": 1
    },
    {
      "id": "a7dbe268-d020-47c9-993e-9a53c1249043",
      "name": "Haftnotiz2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -304,
        -960
      ],
      "parameters": {
        "width": 752,
        "height": 672,
        "content": "## 🤖 Vexa.ai Setup\n\n**Get API Key:**\n1. Sign up at vexa.ai\n2. Navigate to API settings\n3. Generate new API key\n4. Add to n8n credentials\n\n**Bot Configuration:**\n- Platform: 'google_meet'\n- Bot name: Customize as needed\n- Meeting ID: Auto-extracted from calendar\n\n**Rate Limits:**\n- 100 requests/hour on free tier\n- Bot joins 30-60 seconds after meeting starts"
      },
      "typeVersion": 1
    },
    {
      "id": "09d0a663-c758-4c80-b5bf-19d6d3228816",
      "name": "Haftnotiz3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        720,
        -960
      ],
      "parameters": {
        "width": 896,
        "height": 736,
        "content": "## 🧠 OpenAI + Slack Setup\n\n**OpenAI Configuration:**\n- Model: chatgpt-4o-latest (recommended)\n- Cost: ~$0.01-0.05 per summary\n- Add API key to n8n credentials\n\n**Slack Bot Setup:**\n1. Create Slack app in workspace\n2. Add bot token scopes: chat:write\n3. Install app to workspace\n4. Add bot to target channel\n5. Copy bot token to n8n\n\n**Channel Format:** Use channel name or ID"
      },
      "typeVersion": 1
    },
    {
      "id": "6ff6c940-ada7-4743-a249-6a211c3b9288",
      "name": "Haftnotiz4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -944,
        -960
      ],
      "parameters": {
        "color": 3,
        "height": 896,
        "content": "## 🔑 Credential Setup Guide\n\n**Before using this workflow:**\n\n**1. Google Calendar OAuth2:**\n- Go to Google Cloud Console\n- Enable Calendar API\n- Create OAuth2 credentials\n- Add to n8n: Google Calendar OAuth2 API\n\n**2. Vexa.ai API (HTTP Header Auth):**\n- Sign up at vexa.ai\n- Get API key from dashboard  \n- Create HTTP Header Auth credential\n- Header name: 'X-API-Key'\n- Header value: Your API key\n\n**3. OpenAI API:**\n- Get API key from OpenAI platform\n- Add to n8n: OpenAI API credential\n- Ensure account has sufficient credits\n\n**4. Slack Bot Token:**\n- Create Slack app in your workspace\n- Add bot token scopes: chat:write, channels:read\n- Install app to workspace\n- Add bot to target channel\n- Copy bot token to n8n: Slack API credential\n\n**⚠️ Test each credential** before running the full workflow!"
      },
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "9208ae18-6bba-441a-95e5-3d13c44de206": {
      "main": [
        [
          {
            "node": "67cced29-b716-4ea6-a41d-9bab723332d4",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "62f19410-e908-4523-a8d5-e5af789982c2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "67cced29-b716-4ea6-a41d-9bab723332d4": {
      "main": [
        [
          {
            "node": "03516d84-dea0-429f-b0d0-00dbb5099a94",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "62f19410-e908-4523-a8d5-e5af789982c2": {
      "main": [
        [
          {
            "node": "d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "03516d84-dea0-429f-b0d0-00dbb5099a94": {
      "main": [
        [
          {
            "node": "7d4de5a4-7aef-4447-88b3-7f32677b6395",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "7d4de5a4-7aef-4447-88b3-7f32677b6395": {
      "main": [
        []
      ]
    },
    "d3ccf483-864c-42da-98a2-81d0d42d3b0e": {
      "main": [
        [
          {
            "node": "d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "310ee3cb-5387-4bd7-88d5-aa7f233cee48": {
      "ai_languageModel": [
        [
          {
            "node": "03516d84-dea0-429f-b0d0-00dbb5099a94",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "d40e6fbf-8bf5-4ae3-bf50-969ce96f1b23": {
      "main": [
        [
          {
            "node": "9208ae18-6bba-441a-95e5-3d13c44de206",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "4ec42f69-06d3-451b-bdce-a929a39bc8bf": {
      "main": [
        [
          {
            "node": "d3ccf483-864c-42da-98a2-81d0d42d3b0e",
            "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?

Fortgeschritten - 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
Fortgeschritten
Anzahl der Nodes14
Kategorie2
Node-Typen9
Schwierigkeitsbeschreibung

Für erfahrene Benutzer, mittelkomplexe Workflows mit 6-15 Nodes

Autor
Vladimir

Vladimir

@vilin1927

I created my own No-Code Agency with a few years ago, currently help SMBs to achieve their automation goals. Passionate about n8n and automation and trying to ride the wave of AI hype!

Externe Links
Auf n8n.io ansehen

Diesen Workflow teilen

Kategorien

Kategorien: 34