⚡️ ¿Por qué necesitas un agente motivador?
¿Cuántos proyectos has dejado a medias? ¿Tu servidor casero sigue funcionando a medias, tu Home Assistant tiene automaciones incompletas o tu blog lleva semanas sin actualizarse? La procrastinación es el enemigo del maker, pero hoy vamos a hackearla: crearemos un robot punk motivacional que te anime, te presione (con cariño) y te ayude a terminar tus proyectos tech usando n8n, IA y automatización.
1️⃣ Visión general del proyecto
Vamos a configurar un agente de IA en n8n que:
- Te envía mensajes motivadores personalizados vía Telegram o email
- Lleva un seguimiento de tus proyectos y deadlines
- Te manda memes punk cuando avanzas (o cuando procrastinas)
- Se adapta a tu personalidad y estilo de trabajo
2️⃣ Requisitos técnicos
- n8n instalado en tu servidor casero o VPS
- Cuenta en OpenRouter para acceder a modelos IA (usaremos DeepSeek R1 gratis)
- Bot de Telegram configurado (si quieres recibir mensajes por Telegram)
- Opcional: cuenta en algún servicio de imágenes por IA
3️⃣ Arquitectura detallada del workflow
Nuestro workflow estará formado por varios módulos interconectados:
Módulo 1: Trigger y programación
En n8n, añade un nodo Schedule
:
{
"mode": "specificDates",
"specificDates": [
{
"date": "YYYY-MM-DD",
"hour": 9,
"minute": 0
},
{
"date": "YYYY-MM-DD",
"hour": 17,
"minute": 30
}
]
}
Esto activará el workflow dos veces al día: por la mañana y por la tarde. También puedes usar expresiones cron para programación avanzada:
{
"mode": "cronExpression",
"cronExpression": "0 9,17 * * 1-5" // Lunes a viernes a las 9AM y 5PM
}
Módulo 2: Estado del proyecto y contexto
Necesitamos una base de datos para almacenar el estado de tus proyectos. Puedes usar:
- Google Sheets: Simple pero efectivo para empezar
- n8n Variables: Para datos persistentes entre ejecuciones
- Base de datos: PostgreSQL o MySQL para proyectos complejos
Añade un nodo Google Sheets
configurado así:
{
"operation": "read",
"sheetName": "Proyectos",
"range": "A:G",
"options": {
"returnAllMatches": true
}
}
Tu Google Sheet debería tener esta estructura:
Proyecto | Descripción | Fecha límite | Progreso (%) | Estado | Personalidad | Nivel presión |
---|---|---|---|---|---|---|
Servidor casero IA | Montar agente motivador y automatizar backups | 2025-06-01 | 55 | En curso | punk | 4 |
Módulo 3: IA Generativa para mensajes motivacionales
Añade un nodo OpenRouter
para generar mensajes motivacionales personalizados:
{
"authentication": "genericCredentialType",
"genericCredentialType": {
"openrouterApiKey": "tu_api_key_aquí"
},
"model": "deepseek/deepseek-r1:free",
"messages": [
{
"role": "system",
"content": "Eres un coach motivacional con estilo punk y rebelde. Tu trabajo es motivar al usuario a terminar sus proyectos tech. Usa lenguaje directo, algo irreverente pero siempre constructivo. Incluye referencias punk, tech y maker. No uses más de 3 frases. Adapta tu estilo según la personalidad indicada y el nivel de presión solicitado."
},
{
"role": "user",
"content": "Crea un mensaje motivacional para este proyecto: \"{{$node[\"Google Sheets\"].json[\"nombreProyecto\"]}}\". Descripción: {{$node[\"Google Sheets\"].json[\"descripción\"]}}. Fecha límite: {{$node[\"Google Sheets\"].json[\"fechaLímite\"]}}. Progreso actual: {{$node[\"Google Sheets\"].json[\"progreso\"]}}%. Personalidad: {{$node[\"Google Sheets\"].json[\"personalidad\"]}}. Nivel de presión: {{$node[\"Google Sheets\"].json[\"nivelPresión\"]}}/5."
}
],
"options": {
"temperature": 0.7,
"maxTokens": 150
}
}
Módulo 4: Generación de memes motivacionales
Para añadir un toque visual, usaremos un nodo HTTP Request
para llamar a un servicio de generación de imágenes:
{
"url": "https://api.openai.com/v1/images/generations",
"method": "POST",
"authentication": "genericCredentialType",
"genericCredentialType": {
"apiKey": "tu_api_key_aquí"
},
"body": {
"prompt": "Un robot punk con cresta naranja y chaqueta de pinchos animando a alguien a completar un proyecto de {{$node[\"Google Sheets\"].json[\"nombreProyecto\"]}}. Estilo cartoon, colorido, humorístico.",
"n": 1,
"size": "512x512"
}
}
Módulo 5: Lógica condicional avanzada
Usemos un nodo IF
para determinar el tipo de mensaje según el progreso y la fecha límite:
{
"conditions": {
"mode": "allResults",
"conditions": [
{
"id": "1",
"name": "Urgente",
"type": "complex",
"value": "={{ new Date($node[\"Google Sheets\"].json[\"fechaLímite\"]) - new Date() < 1000 * 60 * 60 * 24 * 2 && $node[\"Google Sheets\"].json[\"progreso\"] < 70 }}",
"routing": {
"operations": {
"main": [
[
{
"node": "OpenRouter - mensaje urgente",
"type": "main",
"index": 0
}
]
]
}
}
},
{
"id": "2",
"name": "Progreso excelente",
"type": "complex",
"value": "={{ $node[\"Google Sheets\"].json[\"progreso\"] >= 80 }}",
"routing": {
"operations": {
"main": [
[
{
"node": "OpenRouter - mensaje celebración",
"type": "main",
"index": 0
}
]
]
}
}
},
{
"id": "3",
"name": "Estancado",
"type": "complex",
"value": "={{ $node[\"Google Sheets\"].json[\"últimoMensaje\"] && new Date() - new Date($node[\"Google Sheets\"].json[\"últimoMensaje\"]) > 1000 * 60 * 60 * 24 * 3 && $node[\"Google Sheets\"].json[\"progreso\"] === $node[\"Último estado\"].json[\"progreso\"] }}",
"routing": {
"operations": {
"main": [
[
{
"node": "OpenRouter - mensaje crítico",
"type": "main",
"index": 0
}
]
]
}
}
}
]
}
}
Módulo 6: Envío a múltiples canales
Implementaremos dos canales de comunicación: Telegram y Email.
Nodo Telegram:
{
"authentication": "genericCredentialType",
"operation": "sendMessage",
"chatId": "tu_chat_id",
"message": "¡Actualización de proyecto {{$node[\"Google Sheets\"].json[\"nombreProyecto\"]}}!\n\n{{$node[\"OpenRouter\"].json[\"output\"]}}",
"additionalFields": {
"parse_mode": "HTML",
"disable_notification": false
}
}
Nodo Email (usando n8n Email):
{
"fromEmail": "[email protected]",
"toEmail": "[email protected]",
"subject": "🤖 Recordatorio punk: {{$node[\"Google Sheets\"].json[\"nombreProyecto\"]}}",
"html": "<h1>¡Hey maker!</h1><p>{{$node[\"OpenRouter\"].json[\"output\"]}}</p>
<img src='{{$node[\"HTTP Request\"].json[\"data\"][0][\"url\"]}}'>
<p><strong>Progreso actual:</strong> {{$node[\"Google Sheets\"].json[\"progreso\"]}}%</p>
<p><strong>Fecha límite:</strong> {{$node[\"Google Sheets\"].json[\"fechaLímite\"]}}</p>",
"options": {
"attachments": []
}
}
Módulo 7: Actualización de estado
Finalmente, actualizamos la hoja de Google Sheets para registrar cuándo se envió el último mensaje:
{
"operation": "update",
"sheetName": "Proyectos",
"range": "A:G",
"options": {
"valueInputMode": "RAW",
"valueRenderMode": "FORMATTED_VALUE"
},
"dataKey": "nombreProyecto",
"columns": {
"E": "={{new Date().toISOString()}}"
}
}
4️⃣ Ejemplos de prompts motivacionales punk
Aquí tienes ejemplos para diferentes personalidades y niveles de presión:
// Estilo punk, presión nivel 5
"¡DESPIERTA DE UNA VEZ! Tu proyecto '{{nombreProyecto}}' está acumulando polvo como un viejo casete. Los verdaderos punks TERMINAN lo que empiezan. ¡MUÉVETE AHORA y demuestra que no eres solo palabras!"
// Estilo divertido, presión nivel 2
"Hey, tu servidor casero te echa de menos... ¿Cuándo volverás a jugar con él? Tu proyecto '{{nombreProyecto}}' está en {{progreso}}%, como una canción que solo has tarareado el estribillo. ¡Dale caña!"
// Estilo agresivo, presión nivel 4
"¿LLAMAS A ESO PROGRESO? {{progreso}}% en '{{nombreProyecto}}'? Mi abuela programa más rápido, y ella piensa que Python es una serpiente. MUEVE EL TRASERO y termina esto AHORA."
// Estilo serio, presión nivel 3
"Atención: Tu proyecto '{{nombreProyecto}}' alcanzará su fecha límite en {{díasRestantes}} días. Con solo un {{progreso}}% completado, se requiere acción inmediata para cumplir los objetivos establecidos."
5️⃣ Mejoras avanzadas y extensiones
Integración con tareas reales
Conecta tu agente motivador con herramientas reales de gestión de proyectos:
// Ejemplo de nodo para GitHub Issues
{
"authentication": "oAuth2",
"resource": "issue",
"owner": "tu-usuario",
"repository": "tu-repo",
"operation": "get",
"issueNumber": 123
}
Sistema de recompensas automatizado
Añade un nodo condicional que active «recompensas» cuando completes tareas:
{
"conditions": {
"mode": "allResults",
"conditions": [
{
"id": "1",
"name": "Proyecto completado",
"type": "complex",
"value": "={{ $node[\"Google Sheets\"].json[\"progreso\"] >= 100 }}",
"routing": {
"operations": {
"main": [
[
{
"node": "Activar recompensa",
"type": "main",
"index": 0
}
]
]
}
}
}
]
}
}
Memoria y aprendizaje
Usa un nodo Function
para analizar qué tipo de mensajes te motivan más:
// Añade este código en un nodo Function
const proyectos = $node["Google Sheets"].json;
const progresoDiario = {};
// Calcula el progreso diario para cada proyecto
proyectos.forEach(proyecto => {
const fechaActual = new Date();
const fechaÚltimoMensaje = new Date(proyecto.últimoMensaje);
const díasTranscurridos = (fechaActual - fechaÚltimoMensaje) / (1000 * 60 * 60 * 24);
if (díasTranscurridos > 0) {
progresoDiario[proyecto.nombreProyecto] = (proyecto.progreso - proyecto.progresoAnterior) / díasTranscurridos;
}
});
// Analiza qué estilo motivacional funciona mejor
const estilosEfectivos = Object.keys(progresoDiario)
.filter(proyecto => progresoDiario[proyecto] > 5) // Más del 5% de progreso diario
.map(proyecto => {
const proyectoData = proyectos.find(p => p.nombreProyecto === proyecto);
return proyectoData.personalidad;
});
// Cuenta qué estilos son más efectivos
const contadorEstilos = {};
estilosEfectivos.forEach(estilo => {
contadorEstilos[estilo] = (contadorEstilos[estilo] || 0) + 1;
});
// Determina el estilo más efectivo
let estiloMásEfectivo = Object.keys(contadorEstilos).reduce((a, b) =>
contadorEstilos[a] > contadorEstilos[b] ? a : b, Object.keys(contadorEstilos)[0] || "punk");
return { estiloMásEfectivo, progresoDiario };
6️⃣ Despliegue completo: conexión con tu ecosistema
Para hacer que tu agente motivacional sea realmente útil, intégralo con:
- Home Assistant: Envía notificaciones cuando estás en tu escritorio de trabajo
- Time tracking: Conecta con Toggl, RescueTime o cualquier sistema de seguimiento
- Calendario: Sincroniza con Google Calendar para recordatorios contextuales
- GitHub/GitLab: Monitoriza tus commits y pulls para seguimiento real
Ejemplo de integración con Home Assistant:
{
"authentication": "genericCredentialType",
"resource": "state",
"entityId": "binary_sensor.escritorio_ocupado",
"operation": "get"
}
🎸 Resumen punk y despedida
Con este agente motivacional, ya no tienes excusas para dejar proyectos a medias. Tu robot punk te mantendrá enfocado, te dará caña cuando procrastines y celebrará tus victorias con el estilo irreverente que mereces.
¿Quieres probarlo ya? El ejemplo completo en JSON para importar directamente en n8n está disponible en este repositorio de GitHub.
¿Has creado tu propio agente motivacional? ¿Tienes algún truco para combatir la procrastinación en tus proyectos tech? Cuéntanoslo en los comentarios o en la comunidad de learningaiagents.net.
Recursos y enlaces útiles
- Guía punk de n8n
- Usa modelos IA gratis con n8n y OpenRouter
- Documentación de integración Telegram-n8n
- Documentación de integración Google Sheets-n8n
- Tutorial: Mensajes de afirmación programados con n8n