Benachrichtigungen zu Konferenzprotokollen
Dies ist ein AI Summarization, Multimodal AI-Bereich Automatisierungsworkflow mit 16 Nodes. Hauptsächlich werden Set, Code, Slack, DateTime, SplitOut und andere Nodes verwendet. Automatisierung von Zusammenfassungen für Besprechungsnotizen mit Gemini AI und Slack-Benachrichtigungen
- •Slack Bot Token oder Webhook URL
- •Möglicherweise sind Ziel-API-Anmeldedaten erforderlich
- •Google Gemini API Key
Verwendete Nodes (16)
Kategorie
{
"id": "6nKbFj90W1K6L90c",
"meta": {
"instanceId": "bbc3fa3cd7d64d8ff0c4877d98dee68ce7dadacc5e089546680c915b3e5a212b",
"templateCredsSetupCompleted": true
},
"name": "Meeting notes notification",
"tags": [],
"nodes": [
{
"id": "173f23e7-fbd7-4dd1-acbe-4784be565a22",
"name": "Zeitplan-Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-464,
-288
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "98ee19dc-ccee-430a-8186-37337fa71619",
"name": "KI-Transformation",
"type": "n8n-nodes-base.aiTransform",
"position": [
656,
-288
],
"parameters": {
"jsCode": "const items = $input.all();\nconst today = new Date();\nconst oneWeekAgo = new Date();\noneWeekAgo.setDate(today.getDate() - 7);\n\nconst filteredItems = items.filter((item) => {\n const itemDate = new Date(item?.json?.formattedDate);\n return itemDate >= oneWeekAgo && itemDate <= today;\n});\n\nreturn filteredItems;\n",
"instructions": "Filter the formatted Date in the past week upto today",
"codeGeneratedForPrompt": "Filter the formatted Date in the past week upto today"
},
"typeVersion": 1
},
{
"id": "b08111fc-f718-4009-aed8-4746d204f801",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
888,
-64
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "F27E5eCnDR6vZBbg",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "6fac9ef2-7876-4f71-a4aa-32aed028bf49",
"name": "Nachricht senden",
"type": "n8n-nodes-base.slack",
"position": [
1456,
-288
],
"webhookId": "cb7cf410-be03-47eb-a39f-08e04c4d1021",
"parameters": {
"text": "test",
"select": "channel",
"blocksUi": "={{ '{ \"blocks\": ' + JSON.stringify($json.blocks) + ' }' }}",
"channelId": {
"__rl": true,
"mode": "list",
"value": "C09CV2VC877",
"cachedResultName": "meeting-notes"
},
"messageType": "block",
"otherOptions": {
"includeLinkToWorkflow": false
},
"authentication": "oAuth2"
},
"credentials": {
"slackOAuth2Api": {
"id": "XBHT6VDVo1vwvFz2",
"name": "Slack account"
}
},
"executeOnce": true,
"typeVersion": 2.3
},
{
"id": "fd642df4-da0e-43b7-b6bf-4cd9bb80f9d6",
"name": "Zusammenfassung",
"type": "n8n-nodes-base.httpRequestTool",
"position": [
1016,
-64
],
"parameters": {
"url": "=https://api.meetgeek.ai/v1/meetings/{{ $json.extract_meeting_id }}/summary/",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "xTo22iPOKW4a71o3",
"name": "Bearer Auth account"
}
},
"typeVersion": 4.2
},
{
"id": "daf0670b-e2d7-446d-9d63-32952e99d55b",
"name": "Haftnotiz",
"type": "n8n-nodes-base.stickyNote",
"position": [
-312,
-432
],
"parameters": {
"width": 464,
"height": 304,
"content": "## Get meeting data from the note taker"
},
"typeVersion": 1
},
{
"id": "b6d8b4ef-1dbb-410a-a656-d6cb77e3cf64",
"name": "Haftnotiz1",
"type": "n8n-nodes-base.stickyNote",
"position": [
392,
-480
],
"parameters": {
"width": 400,
"height": 352,
"content": "## Format the date and restructure the data\n**Filter the meeting data for the past seven days.**"
},
"typeVersion": 1
},
{
"id": "d5ceabf5-c4c4-4d40-8cd9-719537478abc",
"name": "Haftnotiz2",
"type": "n8n-nodes-base.stickyNote",
"position": [
832,
-464
],
"parameters": {
"width": 320,
"height": 544,
"content": "## Extract summary and action items from the meeting notes\n**Using Gemini AI model summarize the meeting notes and list down the action items** "
},
"typeVersion": 1
},
{
"id": "2248164e-c74c-43cf-ba80-2c314969310b",
"name": "KI-Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
880,
-288
],
"parameters": {
"text": "=# 📝 Meeting Notes Summarizer with Action Items\n\nYou are an AI assistant that **summarizes meeting notes** and **extracts clear action items**.\n\n---\n\n## 🔹 Input Data\n- **meeting_id**: `{{ $json.extract_meeting_id }}`\n- **title**: `{{ $json.title }}`\n\n---\n\n## 🔹 Task Instructions\n1. Call the **Meeting Note Summary API** using the **HTTP Request node**, passing `meeting_id` as a path parameter. \n2. For each API response, generate a summary for the corresponding meeting. \n3. Provide a **concise summary** in **3–5 bullet points**. \n4. Extract a structured **Action Items** list with:\n - **Task description** \n - **Responsible person** (if mentioned, otherwise `Unassigned`) \n - **Deadline** (if mentioned, otherwise `No deadline`) \n5. Ensure each meeting summary **includes the meeting title** (`{{ $json.title }}`). \n6. If the meeting notes are **empty or missing**, still return the JSON format but use:\n - `\"summary\": [\"No summary available\"]` \n - `\"action_items\": []` \n\n---\n\n## 🔹 Output Format (JSON)\n```json\n{\n \"title\": \"{{ $json.title }}\",\n \"summary\": [\n \"point 1\",\n \"point 2\",\n \"point 3\"\n ],\n \"action_items\": [\n {\n \"task\": \"Task description\",\n \"owner\": \"Person name / Unassigned\",\n \"deadline\": \"Date / No deadline\"\n }\n ]\n}\n",
"options": {},
"promptType": "define"
},
"typeVersion": 2.2
},
{
"id": "f20b3135-24b3-4d49-bceb-1c10f32ac9bf",
"name": "Haftnotiz3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1208,
-416
],
"parameters": {
"width": 368,
"height": 288,
"content": "## Set slack notification\n**Restructure the output from the AI agent and formatted it to slack block** "
},
"typeVersion": 1
},
{
"id": "4086c066-d09c-47f0-b19e-f8b56fcf0d8a",
"name": "Benutzerdefinierten Namen für Meeting-ID hinzufügen",
"type": "n8n-nodes-base.set",
"position": [
208,
-288
],
"parameters": {
"include": "except",
"options": {},
"assignments": {
"assignments": [
{
"id": "f26be114-60b9-4017-ada9-db48cb79968a",
"name": "extract_meeting_id",
"type": "string",
"value": "={{ $json.meeting_id }}"
}
]
},
"excludeFields": "meeting_id",
"includeOtherFields": true
},
"typeVersion": 3.4
},
{
"id": "06de46ec-90b5-48a7-95e8-52e1899a3d81",
"name": "Meetings aufteilen",
"type": "n8n-nodes-base.splitOut",
"position": [
-16,
-288
],
"parameters": {
"options": {},
"fieldToSplitOut": "=meetings"
},
"typeVersion": 1
},
{
"id": "46c0edee-9d49-4278-bf55-0244d6085290",
"name": "Meetings-Liste abrufen",
"type": "n8n-nodes-base.httpRequest",
"position": [
-240,
-288
],
"parameters": {
"url": "https://api.meetgeek.ai/v1/meetings/",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "httpBearerAuth"
},
"credentials": {
"httpBearerAuth": {
"id": "xTo22iPOKW4a71o3",
"name": "Bearer Auth account"
}
},
"executeOnce": true,
"typeVersion": 4.2
},
{
"id": "e66baa91-7c07-4c23-93e0-cb2cea49ccd9",
"name": "Datum formatieren",
"type": "n8n-nodes-base.dateTime",
"position": [
432,
-288
],
"parameters": {
"date": "={{ $json.timestamp_start_utc }}",
"format": "yyyy-MM-dd",
"options": {
"includeInputFields": true
},
"operation": "formatDate"
},
"typeVersion": 2
},
{
"id": "3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1",
"name": "In slack-Block umstrukturieren",
"type": "n8n-nodes-base.code",
"position": [
1232,
-288
],
"parameters": {
"jsCode": "// Input: array of note-taker outputs\nconst notes = $input.all().map(item => item.json);\n\n// Slack blocks array\nlet blocks = [];\n\nnotes.forEach((note, index) => {\n // Clean and parse JSON inside code block\n const cleaned = note.output.replace(/```json|```/g, '').trim();\n let parsed;\n\n try {\n parsed = JSON.parse(cleaned);\n } catch (err) {\n parsed = { title: `Meeting ${index + 1}`, summary: [\"Could not parse notes\"], action_items: [] };\n }\n\n // Meeting header with title\n blocks.push({\n type: \"header\",\n text: {\n type: \"plain_text\",\n text: parsed.title || `Meeting ${index + 1}`\n }\n });\n\n // Summary section\n if (parsed.summary && parsed.summary.length > 0) {\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: \"*Summary:*\\n\" + parsed.summary.map(s => `• ${s}`).join(\"\\n\")\n }\n });\n }\n\n // Action items section\n if (parsed.action_items && parsed.action_items.length > 0) {\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: \"*Action Items:*\"\n }\n });\n\n parsed.action_items.forEach(item => {\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: `• *Task:* ${item.task || \"N/A\"}\\n *Owner:* ${item.owner || \"Unassigned\"}\\n *Deadline:* ${item.deadline || \"No deadline\"}`\n }\n });\n });\n } else {\n // If no action items\n blocks.push({\n type: \"section\",\n text: {\n type: \"mrkdwn\",\n text: \"_No action items available_\"\n }\n });\n }\n\n // Divider\n blocks.push({ type: \"divider\" });\n});\n\nreturn { blocks };\n"
},
"executeOnce": true,
"typeVersion": 2
},
{
"id": "97e0f0e6-6745-4b45-a019-c89e76de9ec5",
"name": "Haftnotiz5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-832,
-1008
],
"parameters": {
"width": 512,
"height": 544,
"content": "## 📌 Meeting Notes Summarizer & Slack Notifier\n\n**What it does**\n- ⏰ Reads meeting notes from your note-taking app using API calls \n- 🤖 Summarizes key points and extracts action items with **Gemini AI** \n- 🗂️ Restructures the output into **Slack Block Kit** format \n- 🔔 Sends daily Slack notifications with clear summaries and actionable tasks \n\n**Requirements**\n- API key & configuration for your meeting note-taking application \n- Gemini AI credentials \n- Slack channel with OAuth credentials \n\n**Setup Instructions**\n1. Configure the **note taker API** in the **Get Meetings List** and **Summary** nodes. \n - *Get Meetings List* → fetches the list of meetings \n - *Summary* → fetches the summary for each meeting \n2. Add your **Gemini AI credentials** to enable summarization. \n3. Configure **Slack** to send notifications to the desired channel. \n4. Activate the workflow — your team will start receiving automated meeting summaries and action items daily. \n\n**Tip:** You can further customize this workflow by adjusting the trigger schedule, modifying Slack message formatting, or changing the API URL in the HTTP Request node."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "bdd7ca4b-f73e-491e-b697-0e419879a2b8",
"connections": {
"fd642df4-da0e-43b7-b6bf-4cd9bb80f9d6": {
"ai_tool": [
[
{
"node": "2248164e-c74c-43cf-ba80-2c314969310b",
"type": "ai_tool",
"index": 0
}
]
]
},
"2248164e-c74c-43cf-ba80-2c314969310b": {
"main": [
[
{
"node": "3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1",
"type": "main",
"index": 0
}
]
]
},
"e66baa91-7c07-4c23-93e0-cb2cea49ccd9": {
"main": [
[
{
"node": "98ee19dc-ccee-430a-8186-37337fa71619",
"type": "main",
"index": 0
}
]
]
},
"98ee19dc-ccee-430a-8186-37337fa71619": {
"main": [
[
{
"node": "2248164e-c74c-43cf-ba80-2c314969310b",
"type": "main",
"index": 0
}
]
]
},
"06de46ec-90b5-48a7-95e8-52e1899a3d81": {
"main": [
[
{
"node": "4086c066-d09c-47f0-b19e-f8b56fcf0d8a",
"type": "main",
"index": 0
}
]
]
},
"173f23e7-fbd7-4dd1-acbe-4784be565a22": {
"main": [
[
{
"node": "46c0edee-9d49-4278-bf55-0244d6085290",
"type": "main",
"index": 0
}
]
]
},
"46c0edee-9d49-4278-bf55-0244d6085290": {
"main": [
[
{
"node": "06de46ec-90b5-48a7-95e8-52e1899a3d81",
"type": "main",
"index": 0
}
]
]
},
"b08111fc-f718-4009-aed8-4746d204f801": {
"ai_languageModel": [
[
{
"node": "2248164e-c74c-43cf-ba80-2c314969310b",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"3e1feb23-bf70-4e23-8ce2-ec0c752fe9f1": {
"main": [
[
{
"node": "6fac9ef2-7876-4f71-a4aa-32aed028bf49",
"type": "main",
"index": 0
}
]
]
},
"4086c066-d09c-47f0-b19e-f8b56fcf0d8a": {
"main": [
[
{
"node": "e66baa91-7c07-4c23-93e0-cb2cea49ccd9",
"type": "main",
"index": 0
}
]
]
}
}
}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 - KI-Zusammenfassung, Multimodales KI
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.
Verwandte Workflows
Sayone Technologies
@sayonetechSayOne Technologies is a digital transformation and IT services company headquartered in India, with a strong focus on web, mobile, and AI-driven solutions for the retail tech space. With over a decade of experience, SayOne partners with global businesses to build scalable applications, optimize inventory and operations using next-gen AI, and deliver customer-centric digital products.
Diesen Workflow teilen