Asistente de IA para Google Meet
Este es unContent Creation, Multimodal AIflujo de automatización del dominio deautomatización que contiene 25 nodos.Utiliza principalmente nodos como If, Set, Code, Slack, Filter. Automatización de resúmenes de reuniones e ítems de acción con Google Meet, AssemblyAI y Claude AI
- •Bot Token de Slack o URL de Webhook
- •Clave de API de Notion
- •Credenciales de API de Google Drive
- •Pueden requerirse credenciales de autenticación para la API de destino
- •Clave de API de Anthropic
Nodos utilizados (25)
Categoría
{
"id": "HwyNECzMAzk3eVUe",
"meta": {
"instanceId": "44b5a59a33562e784f2dc2302170b2503b4b272b919680cc66f4c1a5627bed28"
},
"name": "Google Meet AI Assistant",
"tags": [],
"nodes": [
{
"id": "be749770-d9c1-4707-8c05-58207dd4c75f",
"name": "alHacerClicEnProbarFlujo",
"type": "n8n-nodes-base.manualTrigger",
"position": [
96,
192
],
"parameters": {},
"typeVersion": 1
},
{
"id": "dae33e76-da7b-43ba-905d-af14763b5db6",
"name": "obtenerReunionesRecientes",
"type": "n8n-nodes-base.googleCalendar",
"position": [
320,
192
],
"parameters": {
"limit": 10,
"options": {
"timeMax": "={{ $now.toISO() }}",
"timeMin": "={{ $now.minus({ hours: 24 }).toISO() }}"
},
"calendar": {
"__rl": true,
"mode": "list",
"value": ""
},
"operation": "getAll"
},
"typeVersion": 1
},
{
"id": "907a8f8d-f947-44fd-a262-e5aa7d9d4191",
"name": "filtrarEventosGoogleMeet",
"type": "n8n-nodes-base.filter",
"position": [
528,
192
],
"parameters": {
"options": {},
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "condition1",
"operator": {
"type": "object",
"operation": "exists"
},
"leftValue": "={{ $json.conferenceData }}",
"rightValue": ""
},
{
"id": "condition2",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.conferenceData.conferenceSolution.name }}",
"rightValue": "Google Meet"
},
{
"id": "condition3",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.status }}",
"rightValue": "confirmed"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "39cb30a1-cf8e-467c-bd54-7b440664753f",
"name": "extraerDatosReunion",
"type": "n8n-nodes-base.set",
"position": [
720,
192
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "assign1",
"name": "meetingId",
"type": "string",
"value": "={{ $json.id }}"
},
{
"id": "assign2",
"name": "meetingTitle",
"type": "string",
"value": "={{ $json.summary }}"
},
{
"id": "assign3",
"name": "meetingStart",
"type": "string",
"value": "={{ $json.start.dateTime }}"
},
{
"id": "assign4",
"name": "participants",
"type": "string",
"value": "={{ $json.attendees ? $json.attendees.map(a => a.email).join(', ') : 'No attendees' }}"
},
{
"id": "assign5",
"name": "recordingUrl",
"type": "string",
"value": "={{ $json.conferenceData?.entryPoints?.[0]?.uri || '' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "e6e628bf-774a-4575-aeb9-44f95f352205",
"name": "buscarGrabacionEnDrive",
"type": "n8n-nodes-base.googleDrive",
"position": [
928,
192
],
"parameters": {
"operation": "search"
},
"typeVersion": 3
},
{
"id": "7bef5275-9b55-4096-bbf2-e9571bd3f3c2",
"name": "tieneGrabacion",
"type": "n8n-nodes-base.if",
"position": [
1120,
192
],
"parameters": {
"options": {},
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "cond1",
"operator": {
"type": "string",
"operation": "exists"
},
"leftValue": "={{ $json.id }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "e678555f-ab47-4c90-89be-003425443df8",
"name": "errorSinGrabacion",
"type": "n8n-nodes-base.stopAndError",
"position": [
1344,
384
],
"parameters": {
"errorMessage": "No recording found for this meeting. Please ensure the meeting was recorded and saved to Google Drive."
},
"typeVersion": 1
},
{
"id": "64882cca-e12d-4ee7-a921-5998e61a2b82",
"name": "descargarGrabacion",
"type": "n8n-nodes-base.googleDrive",
"position": [
1344,
192
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"googleFileConversion": {}
},
"operation": "download"
},
"typeVersion": 3
},
{
"id": "c58ac16d-cdfd-45b4-ae7b-2f56edb967d9",
"name": "subirAAssemblyAI",
"type": "n8n-nodes-base.httpRequest",
"position": [
1568,
192
],
"parameters": {
"options": {}
},
"typeVersion": 4.2
},
{
"id": "05301b4a-8de3-4cd1-902e-e1f39a75f7c1",
"name": "solicitarTranscripcion",
"type": "n8n-nodes-base.httpRequest",
"position": [
1760,
192
],
"parameters": {
"url": "https://api.assemblyai.com/v2/transcript",
"method": "POST",
"options": {},
"jsonBody": "={\n \"audio_url\": \"{{ $json.upload_url }}\",\n \"speaker_labels\": true,\n \"auto_highlights\": true,\n \"sentiment_analysis\": true\n}",
"sendBody": true,
"specifyBody": "json"
},
"typeVersion": 4.2
},
{
"id": "378e9268-d441-49c1-84db-62116d6d70bc",
"name": "verificarEstadoTranscripcion",
"type": "n8n-nodes-base.httpRequest",
"position": [
1952,
192
],
"parameters": {
"url": "=https://api.assemblyai.com/v2/transcript/{{ $json.id }}",
"options": {
"timeout": 300000
}
},
"typeVersion": 4.2
},
{
"id": "ca5eee30-718e-43d5-be40-a02b12d2e26d",
"name": "formatearTranscripcion",
"type": "n8n-nodes-base.set",
"position": [
2128,
192
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "assign1",
"name": "transcript",
"type": "string",
"value": "={{ $json.text }}"
},
{
"id": "assign2",
"name": "speakers",
"type": "string",
"value": "={{ $json.utterances ? $json.utterances.map(u => `Speaker ${u.speaker}: ${u.text}`).join('\\n') : $json.text }}"
},
{
"id": "assign3",
"name": "highlights",
"type": "string",
"value": "={{ $json.auto_highlights_result ? $json.auto_highlights_result.results.map(h => h.text).join(', ') : '' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "78024c86-9c1a-451d-9305-2f59498a095d",
"name": "modeloChatClaude",
"type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
"position": [
2384,
400
],
"parameters": {
"model": "claude-3-5-sonnet-20241022",
"options": {}
},
"typeVersion": 1
},
{
"id": "36b8070d-686d-4cac-935a-661e6b2ce4e4",
"name": "analizarReunionConIA",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2352,
192
],
"parameters": {
"text": "=## Meeting Analysis Task\n\nYou are an AI meeting assistant analyzing a Google Meet recording.\n\n### Meeting Details:\n- **Title**: {{ $('extractMeetingData').item.json.meetingTitle }}\n- **Date**: {{ $('extractMeetingData').item.json.meetingStart }}\n- **Participants**: {{ $('extractMeetingData').item.json.participants }}\n\n### Transcript:\n{{ $json.speakers }}\n\n### Your Tasks:\n1. Create a concise meeting summary (2-3 paragraphs)\n2. Extract all action items with responsible parties\n3. Identify any mentioned dates or deadlines\n4. Determine overall meeting sentiment\n\nFormat your response as:\n\n**Meeting Summary:**\n[Summary here]\n\n**Action Items:**\n- [Item] (Assigned to: [Person], Due: [Date])\n\n**Key Dates:**\n- [Date]: [Context]\n\n**Sentiment:** [Positive/Neutral/Negative]",
"agent": "conversationalAgent",
"options": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "b05f988b-a06b-47a4-a301-e5416755cd4a",
"name": "analizarSalidaIA",
"type": "n8n-nodes-base.code",
"position": [
2656,
192
],
"parameters": {
"jsCode": "const input = $input.first().json.output;\nconst meetingData = $('extractMeetingData').first().json;\n\n// Parse the AI output to extract structured data\nconst sections = input.split('**');\nlet summary = '';\nlet actionItems = [];\nlet keyDates = [];\nlet sentiment = 'Neutral';\n\nfor (let i = 0; i < sections.length; i++) {\n if (sections[i].includes('Meeting Summary:')) {\n summary = sections[i + 1].trim();\n }\n if (sections[i].includes('Action Items:')) {\n const items = sections[i + 1].trim().split('\\n').filter(line => line.startsWith('-'));\n actionItems = items.map(item => {\n const match = item.match(/- (.+?) \\(Assigned to: (.+?), Due: (.+?)\\)/);\n if (match) {\n return {\n task: match[1],\n assignee: match[2],\n dueDate: match[3]\n };\n }\n return { task: item.replace('- ', ''), assignee: 'Unassigned', dueDate: 'No date' };\n });\n }\n if (sections[i].includes('Key Dates:')) {\n const dates = sections[i + 1].trim().split('\\n').filter(line => line.startsWith('-'));\n keyDates = dates.map(d => d.replace('- ', ''));\n }\n if (sections[i].includes('Sentiment:')) {\n sentiment = sections[i + 1].trim();\n }\n}\n\nreturn {\n json: {\n meetingTitle: meetingData.meetingTitle,\n meetingDate: meetingData.meetingStart,\n participants: meetingData.participants,\n summary: summary,\n actionItems: actionItems,\n keyDates: keyDates,\n sentiment: sentiment,\n rawOutput: input\n }\n};"
},
"typeVersion": 2
},
{
"id": "770cdc0c-c73e-461e-ace1-55ac5f95ad9f",
"name": "publicarEnSlack",
"type": "n8n-nodes-base.slack",
"position": [
2912,
0
],
"webhookId": "857ed2ac-a71a-493e-9567-cb1d309f8450",
"parameters": {
"select": "channel",
"channelId": {
"__rl": true,
"mode": "list",
"value": "CHANNEL_ID",
"cachedResultName": "general"
},
"otherOptions": {}
},
"typeVersion": 2.2
},
{
"id": "b64a05d1-8d9d-4f33-b568-a3de7bfd582c",
"name": "dividirElementosAccion",
"type": "n8n-nodes-base.splitOut",
"position": [
3152,
176
],
"parameters": {
"options": {}
},
"typeVersion": 1,
"fieldToSplitOut": "actionItems"
},
{
"id": "c7b881cd-6e8c-4ec2-8ced-7175218f003a",
"name": "tieneElementosAccion",
"type": "n8n-nodes-base.if",
"position": [
2912,
192
],
"parameters": {
"options": {},
"conditions": {
"combinator": "and",
"conditions": [
{
"id": "cond1",
"operator": {
"type": "array",
"operation": "notEmpty"
},
"leftValue": "={{ $json.actionItems }}",
"rightValue": ""
}
]
}
},
"typeVersion": 2
},
{
"id": "99e2b222-dd3d-4583-ab9a-880a564c01fb",
"name": "crearTareaNotion",
"type": "n8n-nodes-base.notion",
"position": [
3344,
176
],
"parameters": {
"title": "={{ $json.task }}",
"pageId": {
"__rl": true,
"mode": "url",
"value": ""
},
"options": {}
},
"credentials": {
"notionApi": {
"id": "2RokZhJ5BCVDXV6L",
"name": "Notion - eightkraft"
}
},
"typeVersion": 2
},
{
"id": "393d7712-467d-4886-9bb9-05cded6ac745",
"name": "notaResumen",
"type": "n8n-nodes-base.stickyNote",
"position": [
-448,
-224
],
"parameters": {
"color": 6,
"width": 700,
"height": 636,
"content": "## 🎯 Workflow Overview\n\n### Google Meet AI Assistant\n\nThis workflow provides intelligent meeting analysis using:\n\n**Data Sources:**\n- Google Calendar (meeting data)\n- Google Drive (recordings)\n- AssemblyAI (transcription)\n\n**AI Analysis:**\n- Anthropic Claude for summarization\n- Action item extraction\n- Sentiment analysis\n\n**Outputs:**\n- Slack notifications\n- Notion task creation\n- Structured meeting insights\n\n\n**Further help**\n\nFor any questions or support, please contact:\nLinkedIn: https://www.linkedin.com/in/dominicsaraum/"
},
"typeVersion": 1
},
{
"id": "c5203d08-2866-4955-a86e-01e22e6efba3",
"name": "notaPaso1",
"type": "n8n-nodes-base.stickyNote",
"position": [
272,
0
],
"parameters": {
"width": 596,
"height": 416,
"content": "## 📥 Step 1: Fetch Meetings\n\nRetrieves Google Calendar events from the last 24 hours and filters for confirmed Google Meet events."
},
"typeVersion": 1
},
{
"id": "754ded78-9eca-477a-8268-7b2c170738f7",
"name": "notaPaso2",
"type": "n8n-nodes-base.stickyNote",
"position": [
896,
0
],
"parameters": {
"width": 600,
"height": 564,
"content": "## 🎥 Step 2: Get Recording\n\nSearches Google Drive for the meeting recording and downloads it for transcription."
},
"typeVersion": 1
},
{
"id": "67c148a4-e36c-4396-97f1-b15f1fde0834",
"name": "notaPaso3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1520,
0
],
"parameters": {
"width": 756,
"height": 452,
"content": "## 🎤 Step 3: Transcribe\n\nUses AssemblyAI to transcribe the recording with speaker labels, highlights, and sentiment analysis."
},
"typeVersion": 1
},
{
"id": "0c7752e4-573b-4d69-a24f-a426d95ae608",
"name": "notaPaso4",
"type": "n8n-nodes-base.stickyNote",
"position": [
2304,
0
],
"parameters": {
"width": 516,
"height": 548,
"content": "## 🤖 Step 4: AI Analysis\n\nClaude analyzes the transcript to extract summary, action items, key dates, and sentiment."
},
"typeVersion": 1
},
{
"id": "83adb253-08e9-4533-8bca-5a8d16be3744",
"name": "notaPaso5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2848,
-128
],
"parameters": {
"width": 692,
"height": 564,
"content": "## 📤 Step 5: Distribute\n\nPosts summary to Slack and creates tasks in Notion for all action items."
},
"typeVersion": 1
}
],
"active": false,
"pinData": {},
"settings": {
"executionOrder": "v1"
},
"versionId": "dd8606ee-6368-46ef-a222-b74ec8d367e3",
"connections": {
"7bef5275-9b55-4096-bbf2-e9571bd3f3c2": {
"main": [
[
{
"node": "64882cca-e12d-4ee7-a921-5998e61a2b82",
"type": "main",
"index": 0
}
],
[
{
"node": "e678555f-ab47-4c90-89be-003425443df8",
"type": "main",
"index": 0
}
]
]
},
"b05f988b-a06b-47a4-a301-e5416755cd4a": {
"main": [
[
{
"node": "770cdc0c-c73e-461e-ace1-55ac5f95ad9f",
"type": "main",
"index": 0
},
{
"node": "c7b881cd-6e8c-4ec2-8ced-7175218f003a",
"type": "main",
"index": 0
}
]
]
},
"c7b881cd-6e8c-4ec2-8ced-7175218f003a": {
"main": [
[
{
"node": "b64a05d1-8d9d-4f33-b568-a3de7bfd582c",
"type": "main",
"index": 0
}
]
]
},
"78024c86-9c1a-451d-9305-2f59498a095d": {
"ai_languageModel": [
[
{
"node": "36b8070d-686d-4cac-935a-661e6b2ce4e4",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"ca5eee30-718e-43d5-be40-a02b12d2e26d": {
"main": [
[
{
"node": "36b8070d-686d-4cac-935a-661e6b2ce4e4",
"type": "main",
"index": 0
}
]
]
},
"b64a05d1-8d9d-4f33-b568-a3de7bfd582c": {
"main": [
[
{
"node": "99e2b222-dd3d-4583-ab9a-880a564c01fb",
"type": "main",
"index": 0
}
]
]
},
"64882cca-e12d-4ee7-a921-5998e61a2b82": {
"main": [
[
{
"node": "c58ac16d-cdfd-45b4-ae7b-2f56edb967d9",
"type": "main",
"index": 0
}
]
]
},
"dae33e76-da7b-43ba-905d-af14763b5db6": {
"main": [
[
{
"node": "907a8f8d-f947-44fd-a262-e5aa7d9d4191",
"type": "main",
"index": 0
}
]
]
},
"39cb30a1-cf8e-467c-bd54-7b440664753f": {
"main": [
[
{
"node": "e6e628bf-774a-4575-aeb9-44f95f352205",
"type": "main",
"index": 0
}
]
]
},
"c58ac16d-cdfd-45b4-ae7b-2f56edb967d9": {
"main": [
[
{
"node": "05301b4a-8de3-4cd1-902e-e1f39a75f7c1",
"type": "main",
"index": 0
}
]
]
},
"36b8070d-686d-4cac-935a-661e6b2ce4e4": {
"main": [
[
{
"node": "b05f988b-a06b-47a4-a301-e5416755cd4a",
"type": "main",
"index": 0
}
]
]
},
"e6e628bf-774a-4575-aeb9-44f95f352205": {
"main": [
[
{
"node": "7bef5275-9b55-4096-bbf2-e9571bd3f3c2",
"type": "main",
"index": 0
}
]
]
},
"05301b4a-8de3-4cd1-902e-e1f39a75f7c1": {
"main": [
[
{
"node": "378e9268-d441-49c1-84db-62116d6d70bc",
"type": "main",
"index": 0
}
]
]
},
"907a8f8d-f947-44fd-a262-e5aa7d9d4191": {
"main": [
[
{
"node": "39cb30a1-cf8e-467c-bd54-7b440664753f",
"type": "main",
"index": 0
}
]
]
},
"378e9268-d441-49c1-84db-62116d6d70bc": {
"main": [
[
{
"node": "ca5eee30-718e-43d5-be40-a02b12d2e26d",
"type": "main",
"index": 0
}
]
]
},
"be749770-d9c1-4707-8c05-58207dd4c75f": {
"main": [
[
{
"node": "dae33e76-da7b-43ba-905d-af14763b5db6",
"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 - Creación de contenido, 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
Dominic
@dominicgsI turn chaotic manual processes into reliable automated systems, helping teams focus on strategy while complex workflows run flawlessly in the background.
Compartir este flujo de trabajo