🤖 Cómo crear tu propio «agente de motivación» punk con n8n e IA: el robot que te anima a terminar tus proyectos

⚡️ ¿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:

ProyectoDescripciónFecha límiteProgreso (%)EstadoPersonalidadNivel presión
Servidor casero IAMontar agente motivador y automatizar backups2025-06-0155En cursopunk4

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

Por ziru