••
8 min read
Crea un Digest de Noticias IA Gratis con n8n, REST API y Cualquier CLI de IA
Crea un flujo de trabajo automatizado de noticias de IA usando n8n local, REST API y cualquier CLI de IA (Claude Code, Cursor, Gemini) - completamente gratis con opciones de despliegue económicas.
n8nautomatizacioniatutorialapifree-toolsai-cli
Table of Contents(12 sections)
On This Page
Crea un Digest de Noticias IA Gratis con n8n, REST API y Cualquier CLI de IA
Aprende a construir un sistema de digest de noticias completamente automatizado y potenciado por IA que se ejecuta diariamente, selecciona las 5 noticias más importantes de IA, y las envía a tu bandeja de entrada - todo sin pagar por plataformas de automatización costosas.
Esta guía te muestra cómo usar cualquier herramienta CLI de IA para crear programáticamente flujos de trabajo de n8n via REST API, dándote control completo sobre tu infraestructura de automatización.
Opciones de CLI de IA (todas funcionan para esta guía):
- Claude Code - CLI de Anthropic (de pago, pero potente)
- Cursor - Tier gratuito disponible
- Gemini CLI - Gratis con cuenta de Google
- Cualquier asistente de IA con acceso a terminal
Lo que construirás: Un flujo de trabajo programado que obtiene noticias de IA, usa Gemini para clasificar artículos por importancia y reputación de fuente, los formatea en un email HTML atractivo, y te lo envía cada mañana a las 8am.
Prerrequisitos
Antes de comenzar, necesitarás:
- Conocimiento básico de terminal/línea de comandos
- Una computadora (Mac, Linux, o Windows con WSL)
- ~30 minutos para la configuración inicial
- Una herramienta CLI de IA (Claude Code, Cursor, o similar) - opcional pero recomendado
Desglose de Costos
| Servicio | Costo | Notas |
|---|---|---|
| n8n | Gratis | Auto-hospedado localmente |
| NewsAPI | Gratis | 100 peticiones/día en tier gratuito |
| Google Gemini | Gratis | Tier gratuito generoso |
| Resend (SMTP) | Gratis | 3,000 emails/mes |
| Total | $0 | Completamente gratis para uso personal |
Visión General de la Arquitectura
Esto es lo que construiremos:
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Programador │────▶│ NewsAPI │────▶│ Gemini AI │
│ (8am diario) │ │ (Obtener news) │ │ (Rankear top 5)│
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ Tu Bandeja │◀────│ SMTP/Resend │◀────│ Formatear HTML │
│ (Digest diario)│ │ (Enviar email) │ │ (Estilizar) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
¿Por qué REST API en lugar de la UI?
- Reproducible: Guarda tu flujo como código, versión controlada
- Asistido por IA: Deja que cualquier CLI de IA construya flujos complejos por ti
- Más rápido: Sin clicks en menús - solo una llamada API
- Scriptable: Integra la creación de flujos en pipelines CI/CD
Configurando n8n Localmente
Opción 1: Usando npm (Recomendado para desarrollo)
# Instalar n8n globalmente
npm install -g n8n
# Iniciar n8n
n8n start
n8n estará disponible en http://localhost:5678
Opción 2: Usando Docker
# Crear un directorio para datos de n8n
mkdir ~/.n8n-docker
# Ejecutar n8n en Docker
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-v ~/.n8n-docker:/home/node/.n8n \
n8nio/n8n
Opción 3: Desde el Código Fuente (Avanzado)
# Clonar el repositorio
git clone https://github.com/n8n-io/n8n.git
cd n8n
# Instalar dependencias
pnpm install
# Compilar e iniciar
pnpm build
pnpm start
Configuración Inicial
- Abre
http://localhost:5678en tu navegador - Crea tu cuenta de administrador
- Completa el asistente de configuración
Obteniendo tus API Keys
1. API Key de n8n (Requerido)
Así es como crearemos flujos programáticamente:
- En n8n, ve a Settings (abajo a la izquierda)
- Click en API
- Click en Create API Key
- Copia y guarda tu key de forma segura
# Guárdala como variable de entorno
export N8N_API_KEY="tu-api-key-aqui"
2. API Key de NewsAPI (Gratis)
- Ve a newsapi.org
- Click en Get API Key
- Regístrate (cuenta gratuita)
- Copia tu API key
export NEWS_API_KEY="tu-newsapi-key"
3. API Key de Google Gemini (Gratis)
- Ve a Google AI Studio
- Inicia sesión con tu cuenta de Google
- Click en Create API Key
- Copia tu API key
Luego agrégala como credencial en n8n:
- Ve a Credentials en n8n
- Click en Add Credential
- Busca Google Gemini
- Pega tu API key y guarda
4. Resend SMTP (Gratis)
Resend ofrece un tier gratuito generoso (3,000 emails/mes):
- Ve a resend.com
- Regístrate gratis
- Verifica tu dominio o usa su dominio de prueba
- Ve a configuración de SMTP y copia:
- Host:
smtp.resend.com - Puerto:
465 - Usuario:
resend - Contraseña: Tu API key
- Host:
Agrega credenciales SMTP en n8n:
- Ve a Credentials en n8n
- Click en Add Credential
- Busca SMTP
- Completa:
- Host:
smtp.resend.com - Port:
465 - User:
resend - Password: Tu API key de Resend
- SSL/TLS: Habilitado
- Host:
Creando el Workflow via REST API
Ahora la parte divertida - crear todo el flujo con una sola llamada API.
Entendiendo la REST API de n8n
La REST API de n8n sigue convenciones REST estándar:
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/v1/workflows | Listar todos los workflows |
| GET | /api/v1/workflows/{id} | Obtener detalles del workflow |
| POST | /api/v1/workflows | Crear nuevo workflow |
| PUT | /api/v1/workflows/{id} | Actualizar workflow |
| DELETE | /api/v1/workflows/{id} | Eliminar workflow |
Probando la Conexión API
# Probar tu API key
curl -s -H "X-N8N-API-KEY: $N8N_API_KEY" \
http://localhost:5678/api/v1/workflows | jq
Deberías ver una lista de tus workflows existentes (o un array vacío).
Creando el Workflow Completo
Aquí está el JSON completo del workflow. Guárdalo como ai-news-workflow.json:
Click para expandir el JSON completo del workflow
{
"name": "Daily AI News Digest",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"field": "hours",
"hoursInterval": 24,
"triggerAtHour": 8
}
]
}
},
"id": "schedule-trigger",
"name": "Daily 8am Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.2,
"position": [0, 0]
},
{
"parameters": {
"url": "https://newsapi.org/v2/everything",
"sendQuery": true,
"queryParameters": {
"parameters": [
{
"name": "q",
"value": "(artificial intelligence) OR (OpenAI) OR (Google AI) OR (Claude) OR (LLM) OR (GPT)"
},
{
"name": "sortBy",
"value": "publishedAt"
},
{
"name": "language",
"value": "en"
},
{
"name": "pageSize",
"value": "30"
},
{
"name": "apiKey",
"value": "YOUR_NEWSAPI_KEY"
}
]
},
"options": {}
},
"id": "http-newsapi",
"name": "Fetch AI News",
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.2,
"position": [220, 0]
},
{
"parameters": {
"jsCode": "const articles = $input.first().json.articles || [];\nconst articleList = articles.map((a, i) => `${i + 1}. \"${a.title}\"\\n Source: ${a.source?.name || 'Unknown'}\\n Description: ${a.description || 'No description'}\\n URL: ${a.url}`).join('\\n\\n');\nconst prompt = `You are an AI news curator. Analyze these AI articles and select the TOP 5 most important based on:\\n- Source reputation (tier 1: OpenAI, Google, Anthropic blogs; tier 2: TechCrunch, Verge, Wired)\\n- Industry impact\\n- Developer relevance\\n\\nReturn ONLY a JSON array with 5 objects containing: title, source, summary (2 sentences), url, importance.\\n\\nArticles:\\n\\n${articleList}\\n\\nJSON array only:`;\nreturn [{ json: { prompt, articleCount: articles.length } }];"
},
"id": "code-prepare",
"name": "Prepare AI Prompt",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [440, 0]
},
{
"parameters": {
"modelName": "models/gemini-2.5-flash",
"options": {
"temperature": 0.3
}
},
"id": "gemini-model",
"name": "Gemini 2.5 Flash",
"type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
"typeVersion": 1,
"position": [660, 200]
},
{
"parameters": {
"prompt": "={{ $json.prompt }}",
"options": {}
},
"id": "llm-chain",
"name": "Rank Articles",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"typeVersion": 1,
"position": [660, 0]
},
{
"parameters": {
"jsCode": "const response = $input.first().json.text || $input.first().json.response || '';\nconst today = new Date().toISOString().split('T')[0];\nlet articles;\ntry {\n const jsonMatch = response.match(/\\[\\s*\\{[\\s\\S]*\\}\\s*\\]/);\n articles = jsonMatch ? JSON.parse(jsonMatch[0]) : JSON.parse(response);\n} catch (e) {\n return [{ json: { html: `<h1>Error</h1><pre>${response}</pre>`, subject: `AI News Digest - ${today}` } }];\n}\nlet html = `<!DOCTYPE html><html><head><style>body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;max-width:700px;margin:0 auto;padding:20px;background:#f5f5f5}.container{background:white;border-radius:12px;padding:30px;box-shadow:0 2px 8px rgba(0,0,0,0.1)}h1{color:#1a1a1a;border-bottom:3px solid #6366f1;padding-bottom:15px}.subtitle{color:#666;font-size:14px;margin-bottom:30px}.article{margin-bottom:25px;padding:20px;background:#fafafa;border-radius:8px;border-left:4px solid #6366f1}.article h2{margin:0 0 8px;font-size:18px;color:#1a1a1a}.article .source{color:#6366f1;font-weight:600;font-size:13px;margin-bottom:10px}.article .summary{color:#444;line-height:1.6;margin-bottom:10px}.article .importance{color:#666;font-style:italic;font-size:13px;margin-bottom:12px}.article a{color:#6366f1;text-decoration:none;font-weight:500}.footer{margin-top:30px;padding-top:20px;border-top:1px solid #eee;color:#999;font-size:12px;text-align:center}</style></head><body><div class=\"container\"><h1>AI News Digest</h1><p class=\"subtitle\">${today} - Top 5 stories curated by AI</p>`;\narticles.slice(0,5).forEach((a,i) => {\n html += `<div class=\"article\"><h2>${i+1}. ${a.title}</h2><div class=\"source\">${a.source}</div><p class=\"summary\">${a.summary}</p>${a.importance ? `<p class=\"importance\">Why: ${a.importance}</p>` : ''}<a href=\"${a.url}\">Read more</a></div>`;\n});\nhtml += `<div class=\"footer\">Generated at ${new Date().toLocaleTimeString()} - n8n + Gemini</div></div></body></html>`;\nreturn [{ json: { html, subject: `AI News Digest - ${today}` } }];"
},
"id": "code-format",
"name": "Format HTML Email",
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [880, 0]
},
{
"parameters": {
"fromEmail": "news@yourdomain.com",
"toEmail": "you@example.com",
"subject": "={{ $json.subject }}",
"emailFormat": "html",
"html": "={{ $json.html }}",
"options": {}
},
"id": "send-email",
"name": "Send Digest Email",
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [1100, 0]
}
],
"connections": {
"Daily 8am Trigger": {
"main": [[{"node": "Fetch AI News", "type": "main", "index": 0}]]
},
"Fetch AI News": {
"main": [[{"node": "Prepare AI Prompt", "type": "main", "index": 0}]]
},
"Prepare AI Prompt": {
"main": [[{"node": "Rank Articles", "type": "main", "index": 0}]]
},
"Gemini 2.5 Flash": {
"ai_languageModel": [[{"node": "Rank Articles", "type": "ai_languageModel", "index": 0}]]
},
"Rank Articles": {
"main": [[{"node": "Format HTML Email", "type": "main", "index": 0}]]
},
"Format HTML Email": {
"main": [[{"node": "Send Digest Email", "type": "main", "index": 0}]]
}
},
"settings": {
"executionOrder": "v1"
}
}
Desplegar el Workflow
Opción A: Crear nuevo workflow
curl -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d @ai-news-workflow.json \
http://localhost:5678/api/v1/workflows
Opción B: Actualizar workflow existente
# Reemplaza WORKFLOW_ID con el ID de tu workflow
curl -X PUT \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
-H "Content-Type: application/json" \
-d @ai-news-workflow.json \
http://localhost:5678/api/v1/workflows/WORKFLOW_ID
Usando Cualquier CLI de IA
Si tienes un CLI de IA (Claude Code, Cursor, Gemini CLI, etc.), puedes dejar que construya el workflow por ti:
Tú: Crea un workflow de n8n que obtenga noticias de IA diariamente a las 8am,
use Gemini para rankear los 5 artículos más importantes, y me envíe un
digest en HTML por email. Usa la REST API para desplegarlo.
CLI de IA: [Construye y despliega todo el workflow automáticamente]
Cualquier asistente de IA con acceso a terminal puede:
- Generar el JSON del workflow basado en tus requisitos
- Hacer las llamadas API para crear/actualizar workflows
- Solucionar problemas en tiempo real
- Modificar el workflow basado en feedback
Tip: El tier gratuito de Cursor y Gemini CLI son excelentes alternativas gratuitas si no tienes una suscripción de IA de pago.
Configuración Post-Despliegue
Después de crear el workflow via API, necesitas configurar las credenciales en la UI de n8n:
- Abre
http://localhost:5678 - Encuentra tu nuevo workflow
- Click en el nodo Gemini 2.5 Flash → Selecciona tu credencial de Gemini
- Click en el nodo Send Digest Email → Selecciona tu credencial SMTP
- Actualiza las direcciones de email (from/to)
- Click en Save
- Activa el workflow con el toggle
Probando el Workflow
# Ejecutar el workflow manualmente via API
curl -X POST \
-H "X-N8N-API-KEY: $N8N_API_KEY" \
http://localhost:5678/api/v1/workflows/WORKFLOW_ID/execute
O click en Test Workflow en la UI de n8n.
Opciones de Despliegue para Operación 24/7
Ejecutar n8n en tu laptop significa que solo funciona cuando tu computadora está encendida. Aquí hay alternativas gratuitas/económicas:
Opción 1: Raspberry Pi (~$35-50 único pago)
Perfecto para automatización del hogar:
# En Raspberry Pi (Raspberry Pi OS)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
sudo npm install -g n8n
# Crear servicio systemd para auto-inicio
sudo nano /etc/systemd/system/n8n.service
Agrega este contenido:
[Unit]
Description=n8n Workflow Automation
After=network.target
[Service]
Type=simple
User=pi
ExecStart=/usr/bin/n8n start
Restart=on-failure
Environment=N8N_PORT=5678
[Install]
WantedBy=multi-user.target
Habilitar e iniciar:
sudo systemctl enable n8n
sudo systemctl start n8n
Opción 2: Tiers Gratuitos de VPS
Algunos proveedores ofrecen tiers gratuitos:
- Oracle Cloud: Tier gratuito con 2 instancias AMD
- Google Cloud: $300 en créditos gratis por 90 días
- Azure: $200 en créditos gratis por 30 días
Opción 3: Laptop Vieja/Mini PC
Reutiliza hardware viejo:
- Instala Ubuntu Server (ligero)
- Sigue la instalación con npm
- Configura como servicio systemd
- Configura port forwarding si es necesario
Opción 4: Docker en Servidor Casero
Si tienes un NAS o servidor casero:
# docker-compose.yml
version: '3.8'
services:
n8n:
image: n8nio/n8n
restart: always
ports:
- "5678:5678"
volumes:
- n8n_data:/home/node/.n8n
environment:
- N8N_SECURE_COOKIE=false
volumes:
n8n_data:
Opciones de Despliegue en la Nube Económicas
Si quieres hosting en la nube sin complicaciones ni gestionar infraestructura, estas son opciones accesibles:
Railway (~$5/mes)
Railway ofrece despliegues de contenedores simples con un tier gratuito generoso para empezar:
- Ve a Railway (link de referido para créditos)
- Click en New Project → Deploy from Template
- Busca n8n y despliega
- Railway maneja SSL, dominios y auto-reinicios
Precio: Pagas por lo que usas, típicamente $5-10/mes para automatización ligera.
Hostinger VPS (~$5/mes)
Si quieres más control con un VPS tradicional:
- Ve a Hostinger (link de referido para descuento)
- Elige el plan VPS más barato (~$5/mes)
- Selecciona Ubuntu 22.04
- Conéctate por SSH a tu servidor y ejecuta:
# Instalar Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Instalar n8n
sudo npm install -g n8n
# Ejecutar con PM2 para auto-reinicio
sudo npm install -g pm2
pm2 start n8n --name n8n
pm2 save
pm2 startup
Beneficios: Control total, puedes ejecutar múltiples servicios, costo mensual fijo.
Comparación de Costos
| Opción | Costo Mensual | Pros | Contras |
|---|---|---|---|
| Raspberry Pi | $0 (único ~$50) | Sin costo recurrente, control total | Requiere setup en casa |
| Railway | ~$5-10 | Setup fácil, auto-escalado | Costo variable |
| Hostinger VPS | ~$5 | Costo fijo, control total | Setup manual |
| Oracle Cloud | $0 (tier gratis) | Completamente gratis | Setup complejo, recursos limitados |
Problemas Comunes y Soluciones
Problema: "Invalid API Key" de NewsAPI
Causa: El tier gratuito solo funciona con localhost, no con dominios de producción.
Solución: Para producción, puedes:
- Actualizar al plan de pago de NewsAPI
- Usar fuentes de noticias alternativas gratuitas (feeds RSS)
Problema: Gemini devuelve JSON malformado
Causa: La IA a veces agrega texto explicativo alrededor del JSON.
Solución: El código incluye regex para extraer el JSON de la respuesta:
const jsonMatch = response.match(/\[\s*\{[\s\S]*\}\s*\]/);
articles = jsonMatch ? JSON.parse(jsonMatch[0]) : JSON.parse(response);
Problema: Emails van a spam
Causa: Dominio no configurado correctamente para envío de emails.
Solución:
- Verifica tu dominio en Resend
- Agrega registros SPF, DKIM y DMARC
- Usa una dirección "from" consistente
Problema: El workflow no se ejecuta en el horario programado
Causa: n8n debe estar ejecutándose para que los programadores funcionen.
Solución: Despliega en infraestructura siempre activa (ver Opciones de Despliegue arriba).
Ideas de Personalización
Una vez que tengas el workflow básico funcionando, prueba estas mejoras:
Diferentes Temas de Noticias
Cambia la query de búsqueda en el nodo HTTP Request:
// Noticias crypto
"(bitcoin) OR (ethereum) OR (cryptocurrency) OR (DeFi)"
// Startups tech
"(startup funding) OR (Series A) OR (YCombinator) OR (venture capital)"
// Ciberseguridad
"(data breach) OR (ransomware) OR (zero-day) OR (CVE)"
Múltiples Canales de Entrega
Agrega nodos para enviar a:
- Slack (nodo Slack)
- Discord (nodo Discord)
- Telegram (nodo Telegram)
- Notion (nodo Notion)
Resumen Semanal en lugar de Diario
Cambia el Schedule Trigger a semanal:
{
"rule": {
"interval": [{
"field": "weeks",
"weeksInterval": 1,
"triggerAtDay": 1,
"triggerAtHour": 9
}]
}
}
Recursos Adicionales
- Documentación de n8n
- Referencia de REST API de n8n
- Documentación de Resend
- Google Gemini API
- Documentación de NewsAPI
¿Preguntas? Abre un issue o únete a las discusiones de nuestra comunidad!
Contenido relacionado
- 📘 Guía Completa de n8n para Principiantes — Si es tu primera vez con n8n, empezá por acá
- 📘 Guía Completa de RAG: 4 Métodos — Llevá tus workflows al siguiente nivel conectándolos con bases de conocimiento
- 📝 n8n es Ahora una Plataforma AI-First — El contexto de por qué n8n se convirtió en la herramienta ideal para workflows de IA
Was this helpful?
Share this content
0comments