Generador de resúmenes de reuniones
Este es unAI Summarization, Multimodal AIflujo de automatización del dominio deautomatización que contiene 12 nodos.Utiliza principalmente nodos como Code, GoogleDrive, HttpRequest, GoogleDocsTool, Agent. Automatización de resúmenes de reuniones con Google Drive, Gemini AI y Google Docs
- •Credenciales de API de Google Drive
- •Pueden requerirse credenciales de autenticación para la API de destino
- •Clave de API de Google Gemini
Nodos utilizados (12)
Categoría
{
"id": "LRTza7My8IikYhSU",
"meta": {
"instanceId": "86b74eba715cda37acd36ddce700cd975f9e153aba76b42417c4c1f89dcd777e",
"templateCredsSetupCompleted": true
},
"name": "Meeting Summarizer",
"tags": [],
"nodes": [
{
"id": "1dcb61d9-0f7c-4b86-8b71-5f3140447b22",
"name": "Crear un Documento de Resumen",
"type": "n8n-nodes-base.googleDocsTool",
"position": [
432,
144
],
"parameters": {
"title": "={{ $('Execute when new file created of meeting of audio/video').item.json.name.replace(/\\.mp4$/, '') }}",
"folderId": "default"
},
"credentials": {
"googleDocsOAuth2Api": {
"id": "0dKnfLHBs7hVSMo4",
"name": "Google Docs account"
}
},
"typeVersion": 2
},
{
"id": "dad59a23-6608-4b2c-8059-e324fd2bd5f5",
"name": "Analizador de Salida Estructurada",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
592,
224
],
"parameters": {
"jsonSchemaExample": "{\n \"summary_text\": \"Meeting Summary - August 31, 2025\\n\\n- Book club for \\\"Inspired\\\" scheduled for August 7th.\\n- New hires must read \\\"Inspired\\\" as part of onboarding.\\n- Customer interviews: Follow up with contacts from CS and Sales.\\n- Q3 engagement survey to be completed by all members.\",\n \"doc_id\": \"1-Ht71Q5_0Owh1NRApRn9b9uAqbciwVuWAL_3IvoHIkk\"\n}\n"
},
"typeVersion": 1.3
},
{
"id": "a2becdc5-fb1a-44de-9e01-3b4b95cf311d",
"name": "Descargar el archivo de reunión creado",
"type": "n8n-nodes-base.googleDrive",
"position": [
-80,
-16
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "url",
"value": "={{ $json.webViewLink }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"id": "MlBEh59DqIzyGlyS",
"name": "Google Drive account"
}
},
"typeVersion": 3
},
{
"id": "34a20bdd-ed41-4af7-82c7-f6aa4705228d",
"name": "Transcribir ese archivo a texto",
"type": "@n8n/n8n-nodes-langchain.googleGemini",
"position": [
128,
-16
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "models/gemini-2.5-flash",
"cachedResultName": "models/gemini-2.5-flash"
},
"options": {},
"resource": "audio",
"inputType": "binary"
},
"typeVersion": 1
},
{
"id": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
"name": "Resumidor de ese texto",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
336,
-16
],
"parameters": {
"text": "={{ $json.content.parts[0].text }}",
"options": {
"systemMessage": "=You are an assistant that processes meeting transcripts. \n\nYour job is to: \n1. Read the meeting transcript provided. \n2. Extract the main discussion points. \n - Keep them short, clear, and action-oriented. \n - Focus only on decisions, tasks, or important updates. \n\nGoogle Docs Rules: \n- If the Google Doc for this project/meeting does not exist → **create a Summary Docs** with the formatted summary. \n\nGive summary and docs id Give both Seprately.\n\nFormatting rules:\n- Start with a title in this format: 📌 Meeting Summary – {{new Date().toLocaleDateString()}}\n- Use bold section headers like **✦ Key Discussions** and **✓ Action Items**.\n- Use ✦ bullets for general discussion points.\n- Use ✓ checkmarks for tasks or follow-ups.\n- Keep sentences short, clear, and actionable.\n- Add blank lines between sections for readability.\n- Avoid long paragraphs — use concise bullets only."
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2.2
},
{
"id": "e506c53d-b861-4f0d-81ae-bca14ad8aeb2",
"name": "Ejecutar cuando se cree un nuevo archivo de audio/video de reunión",
"type": "n8n-nodes-base.googleDriveTrigger",
"position": [
-288,
-16
],
"parameters": {
"event": "fileCreated",
"options": {
"fileType": "all"
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
},
"triggerOn": "specificFolder",
"folderToWatch": {
"__rl": true,
"mode": "list",
"value": "1EongmFhQf1avt1jamhV6aO6MIORrzNvT",
"cachedResultUrl": "https://drive.google.com/drive/folders/1EongmFhQf1avt1jamhV6aO6MIORrzNvT",
"cachedResultName": "Speech of Meetings"
}
},
"typeVersion": 1
},
{
"id": "ae5f4fb0-a96b-44a5-b291-c92119508300",
"name": "Google Gemini Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"position": [
288,
224
],
"parameters": {
"options": {}
},
"credentials": {
"googlePalmApi": {
"id": "Vn0WzAXggurbHNTb",
"name": "Google Gemini(PaLM) Api account"
}
},
"typeVersion": 1
},
{
"id": "765dd6e3-1d95-409e-b640-2162a15304be",
"name": "Formatear Resumen",
"type": "n8n-nodes-base.code",
"position": [
848,
-16
],
"parameters": {
"jsCode": "// Get text from previous node (adjust field if needed)\nconst input = $input.first().json.output.summary_text;\n\n// Step 1: Clean text (normalize line breaks)\nlet text = input.replace(/\\r\\n/g, \"\\n\");\n\n// Step 2: Parse into plain text + style spans\nlet plainText = \"\";\nlet styles = [];\nlet bullets = [];\nlet cursor = 1;\n\nconst lines = text.split(\"\\n\");\n\nfor (let line of lines) {\n if (!line.trim()) {\n plainText += \"\\n\";\n cursor++;\n continue;\n }\n\n let isBullet = false;\n if (line.trim().startsWith(\"✦\") || line.trim().startsWith(\"✓\") || line.trim().startsWith(\"-\")) {\n isBullet = true;\n line = line.trim().substring(1).trim();\n }\n\n const regex = /(\\*\\*([^*]+)\\*\\*|\\*([^*]+)\\*|([^*]+))/g;\n let match;\n while ((match = regex.exec(line)) !== null) {\n let raw = match[0];\n let clean = match[2] || match[3] || match[4] || \"\";\n const start = cursor;\n const end = cursor + clean.length;\n\n plainText += clean;\n\n if (raw.startsWith(\"**\")) {\n styles.push({\n range: { startIndex: start, endIndex: end },\n textStyle: { bold: true },\n fields: \"bold\"\n });\n } else if (raw.startsWith(\"*\")) {\n styles.push({\n range: { startIndex: start, endIndex: end },\n textStyle: { italic: true },\n fields: \"italic\"\n });\n }\n\n cursor = end;\n }\n\n plainText += \"\\n\";\n cursor++;\n\n if (isBullet) {\n bullets.push({\n range: {\n startIndex: cursor - line.length - 1,\n endIndex: cursor\n },\n bulletPreset: \"BULLET_DISC_CIRCLE_SQUARE\"\n });\n }\n}\n\n// Step 3: Build requests\nlet requests = [];\n\n// Insert everything at once\nrequests.push({\n insertText: {\n endOfSegmentLocation: {},\n text: plainText\n }\n});\n\n// Add styles\nfor (let s of styles) {\n requests.push({\n updateTextStyle: {\n range: s.range,\n textStyle: s.textStyle,\n fields: s.fields\n }\n });\n}\n\n// Add bullets\nfor (let b of bullets) {\n requests.push({\n createParagraphBullets: b\n });\n}\n\nreturn [\n {\n json: { requests }\n }\n];\n"
},
"typeVersion": 2
},
{
"id": "d9d69f04-139d-45c3-bdd2-15846639fe84",
"name": "Enviar Resumen al documento creado",
"type": "n8n-nodes-base.httpRequest",
"position": [
1056,
-16
],
"parameters": {
"url": "=https://docs.googleapis.com/v1/documents/{{ $('Summerizer of that text').item.json.output.doc_id }}:batchUpdate",
"method": "POST",
"options": {},
"sendBody": true,
"authentication": "predefinedCredentialType",
"bodyParameters": {
"parameters": [
{
"name": "requests",
"value": "={{ $json.requests }}"
}
]
},
"nodeCredentialType": "googleDocsOAuth2Api"
},
"credentials": {
"googleDocsOAuth2Api": {
"id": "0dKnfLHBs7hVSMo4",
"name": "Google Docs account"
}
},
"typeVersion": 4.2
},
{
"id": "47cb35a1-691c-452d-a5a4-e5d463b60d93",
"name": "Nota Adhesiva",
"type": "n8n-nodes-base.stickyNote",
"position": [
-352,
-128
],
"parameters": {
"color": 5,
"width": 1088,
"height": 528,
"content": "### Summary Generation\n"
},
"typeVersion": 1
},
{
"id": "91ae59b0-7399-451e-b05d-5b066801298b",
"name": "Nota Adhesiva1",
"type": "n8n-nodes-base.stickyNote",
"position": [
752,
-96
],
"parameters": {
"color": 3,
"width": 528,
"height": 352,
"content": "### Docs Formatter & Sender\n"
},
"typeVersion": 1
},
{
"id": "dc392200-438b-4cb4-b057-e3803dbd21fe",
"name": "Nota Adhesiva2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1744,
-544
],
"parameters": {
"width": 1328,
"height": 1264,
"content": "# 🎤 AI Meeting Summary Generator with Google Docs Integration\n## 📋 Overview\n- Automated system that takes meeting audio/video files from Google Drive, transcribes them, generates concise summaries with AI, and formats everything neatly into Google Docs.\n\n## 🔄 How It Works\n#### Real-Time Processing\n1. 🎥 Record Meeting Audio/Video → Capture your meeting and place the file into your chosen Google Drive folder.\n1. 📂 Google Drive Trigger → Watches that folder (e.g., “Speech of Meetings”) for new uploads.\n2. ⬇️ Download File → Fetches the newly uploaded file from Google Drive.\n3. 🎙 Transcribe File (Gemini Audio Model) → Converts meeting speech into raw text transcript.\n4. ✍️ Summarizer (Gemini Agent) → Reads transcript → extracts:\n - ✦ Key Discussions\n - ✓ Action Items\n - Adds title with date, structured bullets, and checkmarks.\n\n#### Document Creation & Structuring\n5. 📄 Create Summary Docs (Google Docs Tool) → Creates a new Google Doc if none exists for the meeting.\n6. 📊 Structured Output Parser → Ensures AI output is structured (summary_text + doc_id).\n7. 🎨 Format Summary (Code Node) → Applies formatting rules:\n- Bold/italic text\n- Bullet points (✦)\n- Checkmarks (✓)\n- Clean line spacing for readability\n\n#### Final Output\n8. 🚀 Send to Google Docs (BatchUpdate API) → Pushes formatted summary into the newly created Google Doc.\n\n## ⚙️ Configuration Required\n#### Credentials Needed:\n- 🔑 Google Drive OAuth2 → For file monitoring & downloads\n- 🔑 Google Docs OAuth2 → For creating & updating docs\n- 🔑 Google Gemini (PaLM) API → For transcription + summarization\n\n#### Settings:\n- Trigger: Every new file created in the specified Drive folder\n- AI Model: gemini-2.5-flash for transcription & summarization\n- Output: Google Docs with structured & styled meeting notes\n\n## 🎯 Key Features\n✅ Auto-transcription of meeting audio/video\n✅ Smart AI-generated summaries (Key Discussions + Action Items)\n✅ Google Docs integration with professional formatting\n✅ Structured JSON parsing for reliable updates\n✅ End-to-end automation (no manual intervention needed)\n\n## 📝 Notes\n- Works for both audio & video meeting files\n- Creates a new doc per meeting automatically\n- Uses batchUpdate API for fine formatting (bullets, bold, italics)\n- Keeps summaries short, clear, and action-oriented"
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "c86cf8a3-6cb7-40f5-bddc-9181721cb0b4",
"connections": {
"765dd6e3-1d95-409e-b640-2162a15304be": {
"main": [
[
{
"node": "d9d69f04-139d-45c3-bdd2-15846639fe84",
"type": "main",
"index": 0
}
]
]
},
"1dcb61d9-0f7c-4b86-8b71-5f3140447b22": {
"ai_tool": [
[
{
"node": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
"type": "ai_tool",
"index": 0
}
]
]
},
"221e5fff-cc2a-4ffd-b739-7ac9722527ce": {
"main": [
[
{
"node": "765dd6e3-1d95-409e-b640-2162a15304be",
"type": "main",
"index": 0
}
]
]
},
"ae5f4fb0-a96b-44a5-b291-c92119508300": {
"ai_languageModel": [
[
{
"node": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"dad59a23-6608-4b2c-8059-e324fd2bd5f5": {
"ai_outputParser": [
[
{
"node": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"34a20bdd-ed41-4af7-82c7-f6aa4705228d": {
"main": [
[
{
"node": "221e5fff-cc2a-4ffd-b739-7ac9722527ce",
"type": "main",
"index": 0
}
]
]
},
"a2becdc5-fb1a-44de-9e01-3b4b95cf311d": {
"main": [
[
{
"node": "34a20bdd-ed41-4af7-82c7-f6aa4705228d",
"type": "main",
"index": 0
}
]
]
},
"e506c53d-b861-4f0d-81ae-bca14ad8aeb2": {
"main": [
[
{
"node": "a2becdc5-fb1a-44de-9e01-3b4b95cf311d",
"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?
Intermedio - 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
Parth Pansuriya
@parthpansuriyaI build smart and scalable automation workflows using n8n to simplify tasks, connect apps, and boost productivity. From WhatsApp bots to AI-powered systems, I create seamless automations tailored for business and creators.
Compartir este flujo de trabajo