Servidor webhook que escucha eventos de grabaciones completadas de Zoom, descarga la transcripción y usa OpenAI (gpt-4o-mini) para extraer las tareas mencionadas en la reunión.
- Node.js 24+
- Cuenta de Zoom con grabaciones en la nube y transcripción habilitada
- API key de OpenAI
npm install- Copia el archivo de ejemplo:
cp .env.example .env- Configura las variables en
.env:ZOOM_WEBHOOK_SECRET_TOKEN: Token secreto del webhook de ZoomZOOM_ACCESS_TOKEN: Token de acceso OAuth de Zoom (para descargar transcripciones)OPENAI_API_KEY: Tu API key de OpenAI
- Ve a Zoom App Marketplace
- Crea una app tipo "Webhook Only" o "Server-to-Server OAuth"
- En la sección de Webhooks, añade tu endpoint:
https://tu-servidor.com/webhook/zoom - Suscríbete al evento
recording.completed - Copia el Secret Token a tu
.env
# Desarrollo (con hot reload)
npm run dev
# Producción
npm startEn lugar de ngrok, puedes usar el reenvío de puertos integrado de VS Code:
- Ve a la pestaña PUERTOS (PORTS) en el panel inferior de VS Code.
- Si no ves el puerto 3000, haz clic en "Agregar puerto" y escribe
3000. - Haz clic derecho sobre la fila del puerto 3000 > Visibilidad del puerto > Público.
Importante: Debe ser "Público" para que Zoom pueda enviar el webhook sin autenticación.
- Copia la "Dirección reenviada" (ej.
https://tu-url-vscode.tunnels.code.com). - Usa esa URL en la configuración de Zoom:
https://tu-url-vscode.tunnels.code.com/webhook/zoom
POST /webhook/zoom- Recibe webhooks de ZoomGET /health- Health check
Cuando se completa una grabación con transcripción, el servidor extrae tareas como:
[
{
"task": "Preparar presentación del proyecto para el cliente",
"assignee": "Juan",
"deadline": "viernes",
"priority": "alta"
},
{
"task": "Revisar el documento de requisitos",
"assignee": "María",
"deadline": null,
"priority": "media"
}
]