Notificación de actas de reuniones
Este es unAI Summarization, Multimodal AIflujo de automatización del dominio deautomatización que contiene 16 nodos.Utiliza principalmente nodos como Set, Code, Slack, DateTime, SplitOut. Automatización de resúmenes de notas de reuniones con notificaciones de Slack Gemini AI
- •Bot Token de Slack o URL de Webhook
- •Pueden requerirse credenciales de autenticación para la API de destino
- •Clave de API de Google Gemini
Nodos utilizados (16)
Categoría
{
"id": "6nKbFj90W1K6L90c",
"meta": {
"instanceId": "bbc3fa3cd7d64d8ff0c4877d98dee68ce7dadacc5e089546680c915b3e5a212b",
"templateCredsSetupCompleted": true
},
"name": "Meeting notes notification",
"tags": [],
"nodes": [
{
"id": "173f23e7-fbd7-4dd1-acbe-4784be565a22",
"name": "Disparador Programado",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-464,
-288
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "98ee19dc-ccee-430a-8186-37337fa71619",
"name": "Transformación IA",
"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": "Enviar un mensaje",
"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": "resumen",
"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": "Nota Adhesiva",
"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": "Nota Adhesiva1",
"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": "Nota Adhesiva2",
"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": "Agente de IA",
"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": "Nota Adhesiva3",
"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": "Agregar nombre personalizado para ID de reunión",
"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": "Dividir reuniones",
"type": "n8n-nodes-base.splitOut",
"position": [
-16,
-288
],
"parameters": {
"options": {},
"fieldToSplitOut": "=meetings"
},
"typeVersion": 1
},
{
"id": "46c0edee-9d49-4278-bf55-0244d6085290",
"name": "Obtener lista de reuniones",
"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": "Formatear fecha",
"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": "Reestructurar a bloque slack",
"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": "Nota Adhesiva5",
"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
}
]
]
}
}
}¿Cómo usar este flujo de trabajo?
Copie el código de configuración JSON de arriba, cree un nuevo flujo de trabajo en su instancia de n8n y seleccione "Importar desde JSON", pegue la configuración y luego modifique la configuración de credenciales según sea necesario.
¿En qué escenarios es adecuado este flujo de trabajo?
Avanzado - Resumen de IA, IA Multimodal
¿Es de pago?
Este flujo de trabajo es completamente gratuito, puede importarlo y usarlo directamente. Sin embargo, tenga en cuenta que los servicios de terceros utilizados en el flujo de trabajo (como la API de OpenAI) pueden requerir un pago por su cuenta.
Flujos de trabajo relacionados recomendados
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.
Compartir este flujo de trabajo