Tutorial

Cómo crear un bot de Telegram con IA que registre clientes en MariaDB usando n8n y OpenRouter

21 Feb 2026 Por enguillem 4 min de lectura

Si quieres aprender a crear un bot de Telegram con n8n que use inteligencia artificial para extraer datos y guardarlos en una base de datos MariaDB, este tutorial es para ti.

En esta guía paso a paso construiremos un sistema real donde:

  • 📩 Un usuario envía un mensaje natural por Telegram
  • 🤖 Un modelo LLM (OpenRouter) extrae los datos automáticamente
  • 🧠 n8n valida la información
  • 🗄 Se inserta en MariaDB
  • ✅ El bot confirma el registro

Este ejemplo es perfecto para:

  • Automatización empresarial
  • Proyectos educativos
  • Sistemas internos de HR o CRM
  • Workflows con IA en n8n

Arquitectura del workflow en n8n

El flujo que vamos a construir es:

Telegram Trigger
      ↓
OpenRouter (LLM)
      ↓
Parse JSON
      ↓
Validación
      ↓
Comprobación de duplicados
      ↓
Insert en MariaDB
      ↓
Respuesta en Telegram

Este patrón es el mismo que utilizan muchas empresas para automatizar procesos internos con inteligencia artificial.


Paso 1: Crear el bot de Telegram

  1. Abre Telegram.
  2. Busca @BotFather.
  3. Ejecuta /newbot.
  4. Copia el token que te genera.

Ese token lo usarás en n8n.


Paso 2: Configurar credenciales en n8n

Telegram

  • Ve a Credentials
  • Añade credencial Telegram
  • Pega el token

OpenRouter

  • Añade credencial OpenRouter
  • Introduce tu API Key

MariaDB

Configura:

  • Host
  • Puerto
  • Usuario
  • Contraseña
  • Base de datos: botiga

Paso 3: Crear el workflow en n8n

1️⃣ Telegram Trigger

  • Event: message
  • Conecta las credenciales
  • Ejecuta test y envía un mensaje al bot

2️⃣ OpenRouter Chat Model

Usaremos un modelo LLM para convertir lenguaje natural en JSON estructurado.

System Prompt

You extract client data from user messages.
Return ONLY valid JSON.
No explanations.
No markdown.
If required fields are missing, set valido=false.
Never invent data.

User Prompt

Extract client data from this message:

{{$json.message.text}}

Return this exact JSON:

{
  "dni": "string or null",
  "nom": "string or null",
  "cognoms": "string or null",
  "adreca": "string or null",
  "data_naix": "YYYY-MM-DD or null",
  "valido": true/false,
  "errores": []
}

Temperatura: 0

Esto fuerza un comportamiento determinista en el modelo.


3️⃣ Parsear el JSON en n8n

Añade un nodo Code (JavaScript):

const raw = $json.text;
if (!raw) throw new Error("No LLM text found. Expected $json.text");

const cleaned = String(raw)
  .trim()
  .replace(/^```json\s*/i, "")
  .replace(/^```\s*/i, "")
  .replace(/```$/i, "")
  .trim();

let data;
try {
  data = JSON.parse(cleaned);
} catch (e) {
  throw new Error("Invalid JSON after cleaning: " + cleaned.slice(0, 200));
}

// Normaliza
if (data.dni) data.dni = String(data.dni).trim();
if (data.nom) data.nom = String(data.nom).trim();
if (data.cognoms) data.cognoms = String(data.cognoms).trim();
if (data.adreca) data.adreca = String(data.adreca).trim();
if (data.data_naix) data.data_naix = String(data.data_naix).trim();

// Validación fecha
if (data.data_naix && !/^\d{4}-\d{2}-\d{2}$/.test(data.data_naix)) {
  data.valido = false;
  data.errores = [...(data.errores || []), "data_naix must be YYYY-MM-DD"];
}

// OJO: aquí NO tienes el chat_id (porque ya no estás en el item del Telegram Trigger)
// Solución: usa un Merge antes del LLM o añade chat_id al prompt y que lo devuelva.
return [data];

Paso 4: Validar antes de insertar

Añade un nodo IF:

{{$json.valido}} is true

Si es false → enviar mensaje de error.


Paso 5: Evitar duplicados en MariaDB

Ejecuta esta consulta:

SELECT COUNT(*) as total FROM client WHERE dni = {{$json.dni}};

Después añade otro IF:

{{$json.total}} is greater than 0

Si es mayor que 0 → el DNI ya existe.


Paso 6: Insertar en la base de datos

Nodo: Insert rows in a table
Tabla: client

Mapea:

  • dni
  • nom
  • cognoms
  • adreca
  • data_naix

Paso 7: Confirmación en Telegram

Mensaje de éxito:

✅ Client registered: {{$json.nom}} {{$json.cognoms}}

Mensaje de error:

❌ DNI already exists

Ejemplo real de uso

Usuario escribe:

Add client Maria Torres López, DNI 12345678A, born 1998-04-12, address 12 Main Street.

El sistema:

  • Extrae automáticamente los campos
  • Valida
  • Inserta
  • Responde

Sin formularios. Solo lenguaje natural.


Ventajas de usar IA con n8n

  • Automatización flexible
  • Eliminación de formularios rígidos
  • Adaptable a distintos estilos de escritura
  • Integración sencilla con bases de datos
  • Escalable a sistemas HR, CRM o ERP

Conclusión

Con este tutorial has aprendido cómo:

  • Crear un bot de Telegram con n8n
  • Usar OpenRouter como motor LLM
  • Extraer datos estructurados desde texto libre
  • Validar información antes de insertarla
  • Integrar MariaDB en un flujo automatizado

Este patrón es el mismo que se utiliza en entornos empresariales modernos para construir agentes internos con IA.

También te puede interesar