Resumen automatizado de reuniones
Este es unDocument Extraction, AI Summarizationflujo de automatización del dominio deautomatización que contiene 14 nodos.Utiliza principalmente nodos como If, Code, Wait, Slack, HttpRequest. Generación automatizada de resúmenes de reuniones de Google Meet a Slack usando Vexa.ai y GPT-4o
- •Bot Token de Slack o URL de Webhook
- •Pueden requerirse credenciales de autenticación para la API de destino
- •Clave de API de OpenAI
Nodos utilizados (14)
{
"meta": {
"instanceId": "477d41ba9371722c12acb8ceb19deefe8a94935c3dc3255b6a9141e5f8643752",
"templateCredsSetupCompleted": true
},
"nodes": [
{
"id": "d3ccf483-864c-42da-98a2-81d0d42d3b0e",
"name": "Agregar bot a la reunión",
"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": "Enviar un mensaje",
"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": "Agente de IA",
"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": "Obtener Transcripción de Vexa",
"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": "Esperar",
"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": "Si",
"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": "Código",
"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": "Nota Adhesiva",
"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": "Nota Adhesiva1",
"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": "Nota Adhesiva2",
"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": "Nota Adhesiva3",
"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": "Nota Adhesiva4",
"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
}
]
]
}
}
}¿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 - Extracción de documentos, Resumen de IA
¿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
Vladimir
@vilin1927I 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!
Compartir este flujo de trabajo