Automatización con IA

Resúmenes Automáticos de Reuniones

Transcribe, resume y envía action items tras cada reunión con Whisper + GPT-4

Flujo 07: Resúmenes Automáticos de Reuniones

El problema

Al terminar una reunión de una hora, alguien dedica entre 20 y 45 minutos a escribir el acta: quién dijo qué, qué se decidió, quién se comprometió a qué y para cuándo. La calidad del acta depende de la memoria y la atención de quien la escribe. Las reuniones importantes con notas incompletas generan confusión, trabajo repetido y conflictos de responsabilidad. Este flujo convierte cualquier grabación de audio en un acta estructurada en menos de 5 minutos.

Herramientas necesarias

Nodo n8n Función
HTTP Request Llama a la API de Whisper (OpenAI) para transcribir el audio
HTTP Request Llama a Claude API para estructurar el acta
Slack Publica el acta en el canal del equipo
Notion Crea la página del acta en la base de datos de reuniones

Servicios externos:

  • API Key de OpenAI para Whisper (platform.openai.com)
  • API Key de Anthropic para Claude (console.anthropic.com)
  • Workspace de Slack
  • Integración de Notion configurada en n8n

Trigger del flujo: este workflow se dispara con un Webhook cuando subes la grabación, o con un Google Drive Trigger que detecta nuevos archivos MP3 en una carpeta específica.

Configuración paso a paso

Nodo 0: Webhook o Google Drive Trigger

Opción A — Webhook (para activación manual):

  • Añade nodo Webhook — Method: POST, Path: reuniones/nueva
  • Envías el audio desde tu móvil o script como multipart form-data

Opción B — Google Drive Trigger (para automatización completa):

  • Event: File Created
  • Folder: /Reuniones/Pendientes
  • El flujo arranca automáticamente cuando subes un MP3

Para este flujo usamos la Opción B con Google Drive Trigger.

Nodo 1: Google Drive — Descargar archivo

Añade el nodo Google Drive:

  • Operation: Download File
  • File ID: ={{ $json.id }}
  • Binary Property Name: audioFile

Esto descarga el binario del MP3 necesario para enviarlo a Whisper.

Nodo 2: Set — Extraer metadatos del nombre del archivo

Nombra tus archivos con este patrón: 2025-04-18_nombre-reunion_participantes.mp3

Añade un nodo Code (JavaScript):

const filename = $input.first().json.name.replace('.mp3', '').replace('.m4a', '');
const partes = filename.split('_');

return [{json: {
  fecha: partes[0] || new Date().toISOString().split('T')[0],
  titulo: partes[1] ? partes[1].replace(/-/g, ' ') : 'Reunión',
  participantes: partes[2] ? partes[2].replace(/-/g, ', ') : 'No especificados',
  filename: $input.first().json.name,
  fileId: $input.first().json.id
}}];

Nodo 3: HTTP Request — Whisper API (transcripción)

Añade el nodo HTTP Request:

  • Method: POST
  • URL: https://api.openai.com/v1/audio/transcriptions
  • Authentication: Header Auth
    • Authorization: Bearer TU_OPENAI_API_KEY
  • Send Body: ON
  • Body Content Type: Form-Data (multipart)
  • Body Parameters:
    • file: tipo n8n Binary DataaudioFile (el binario descargado)
    • model: whisper-1
    • language: es
    • response_format: text

Límite de Whisper: 25 MB. Una reunión de 60 minutos en MP3 estándar (128kbps) ocupa ~58 MB. Comprime a 64kbps antes de subir, o divide el audio si supera el límite.

La transcripción tarda entre 30 segundos y 3 minutos según la duración del audio.

El texto resultante está en {{ $json.data }} (formato text devuelve texto plano).

Nodo 4: HTTP Request — Claude API (estructurar acta)

Añade el nodo HTTP Request:

  • Method: POST
  • URL: https://api.anthropic.com/v1/messages
  • Authentication: Header Auth
    • x-api-key: tu API Key de Anthropic
  • Headers: anthropic-version: 2023-06-01, content-type: application/json
  • Body (JSON):
{
  "model": "claude-3-5-haiku-20241022",
  "max_tokens": 2000,
  "messages": [
    {
      "role": "user",
      "content": "={{ $json.prompt_acta }}"
    }
  ]
}

En el nodo Set previo, crea el campo prompt_acta:

Eres el asistente de gestión de reuniones de [EMPRESA].
Genera el acta de esta reunión a partir de la transcripción.
Escribe en español. Sé conciso y preciso. Nunca inventes información.

Reunión: {{ $('Code').item.json.titulo }}
Fecha: {{ $('Code').item.json.fecha }}
Participantes: {{ $('Code').item.json.participantes }}

ESTRUCTURA DEL ACTA:

## Resumen ejecutivo
(2-3 frases: propósito y resultado principal)

## Temas tratados
(Lista con resumen de cada tema discutido)

## Decisiones tomadas
(Lista numerada de decisiones concretas)

## Compromisos y tareas asignadas
(Formato: **Responsable** — Tarea — Fecha límite si se mencionó)

## Próximos pasos
(Qué ocurre antes de la próxima reunión)

## Próxima reunión
(Fecha, hora y agenda si se mencionaron; "No acordada" si no)

TRANSCRIPCIÓN:
{{ $('HTTP Request Whisper').item.json.data }}

Nodo 5: Slack — Publicar acta

Añade el nodo Slack:

  • Operation: Send a Message
  • Channel: #reuniones o el canal del equipo correspondiente
  • Text (expresión):
=`📝 *Acta: ${$('Code').item.json.titulo}* — ${$('Code').item.json.fecha}

${$json.content[0].text}

---
_Transcripción y acta generadas automáticamente por n8n + Whisper + Claude_`
  • Parse Mode: Markdown

Nodo 6: Notion — Crear página del acta

Añade el nodo Notion:

  • Operation: Create a Page in Database
  • Database: tu base de datos de reuniones en Notion
  • Title: ={{ $('Code').item.json.fecha }} — {{ $('Code').item.json.titulo }}
  • Properties:
    • Fecha (Date): ={{ $('Code').item.json.fecha }}
    • Participantes (Text): ={{ $('Code').item.json.participantes }}
    • Estado (Select): Completada
  • Content: añade un bloque de texto con ={{ $('HTTP Request Claude').item.json.content[0].text }}

Ejemplo de prompt IA

Reunión: revision sprint abril
Fecha: 2025-04-18
Participantes: Ana, Carlos, Marta

TRANSCRIPCIÓN:
Ana: Bueno, empezamos. Lo principal de hoy es revisar el sprint de abril.
Carlos: Terminamos el módulo de facturación, aunque tardamos dos días más de lo previsto.
Ana: ¿Cuál fue el problema?
Carlos: La integración con Stripe tardó más de lo esperado. Para el próximo sprint lo tenemos en cuenta.
Marta: Yo quería comentar que el cliente Acme nos pidió ayer añadir exportación a Excel.
Ana: ¿Está en el contrato?
Marta: No está explícito, hay que consultarlo con legal.
Ana: Marta, ¿puedes hablar con legal esta semana?
Marta: Sí, lo hago antes del miércoles.
[...]

Fragmento del acta generada por Claude:

## Resumen ejecutivo
Revisión del sprint de abril. El módulo de facturación se completó con 2 días de retraso
por la integración con Stripe. Se identificó una solicitud de cambio del cliente Acme
(exportación Excel) que requiere revisión contractual.

## Decisiones tomadas
1. El retraso en la integración Stripe se documenta como aprendizaje para planificación futura.
2. La solicitud de exportación Excel de Acme no se implementa hasta obtener aclaración legal.

## Compromisos y tareas asignadas
**Marta** — Consultar a legal sobre exportación Excel para Acme — Antes del miércoles 23/04

Ahorro estimado

Tarea Antes Con automatización
Escribir acta de reunión de 1h 30 min/reunión 2 min (subir audio)
Distribuir acta al equipo 5 min/reunión 0 min
Con 5 reuniones/semana 2,9 h/semana 10 min/semana

Ahorro neto: ~2,7 horas/semana. Coste de transcribir 5 horas de audio con Whisper: ~€0,30/semana. Coste de Claude para las 5 actas: ~€0,02/semana.