n8n Webhook + Telegram Bot: Tutorial Completo para Automatizar Notificaciones
Crea un bot de Telegram con n8n usando webhooks paso a paso. Recibe alertas, comandos y notificaciones automáticas. Tutorial práctico 2026.
n8n Webhook + Telegram Bot: Tutorial Completo para Automatizar Notificaciones
Tienes n8n funcionando y quieres que te avise por Telegram cuando pase algo importante. Una alerta de un servidor caído, un pedido nuevo en tu tienda, un formulario rellenado en tu web. Telegram es el canal perfecto para esto: instantáneo, gratuito y lo llevas en el bolsillo.
En este tutorial vas a montar desde cero un bot de Telegram integrado con n8n usando webhooks. No vamos a quedarnos en el “hola mundo” que envía un mensaje fijo. Vamos a construir tres workflows reales: uno que recibe datos externos vía webhook y los envía a Telegram, otro que escucha comandos del bot y ejecuta acciones, y un tercero que combina ambas cosas para crear un sistema de alertas con respuesta interactiva.
Si ya tienes tu bot de Telegram creado, salta a la sección de configurar las credenciales en n8n. Si partes de cero, empezamos por el principio.
Por qué Telegram y no otro canal de notificaciones
Podrías usar email, Slack, Discord o incluso SMS. Telegram gana para automatizaciones por razones concretas:
Es instantáneo y silencioso cuando quieres. Los mensajes llegan en milisegundos. Puedes silenciar un grupo de alertas sin perder las notificaciones importantes de otros chats. Con email no tienes ese control fino.
La API de bots es gratuita y sin límites razonables. Telegram permite enviar hasta 30 mensajes por segundo a diferentes chats, y un mensaje por segundo al mismo chat. Para alertas de automatización, es más que suficiente. No hay plan de pago, no hay cuota mensual.
Soporta formato enriquecido. Puedes enviar mensajes con Markdown o HTML, fotos, documentos, ubicaciones y botones interactivos. Eso te permite crear alertas con contexto visual, no solo texto plano.
Funciona detrás de firewalls corporativos. A diferencia de muchos servicios, Telegram opera sobre HTTPS estándar (puerto 443). En entornos industriales o corporativos donde los puertos están restringidos, suele funcionar sin problemas.
Qué vas a necesitar
Antes de abrir n8n, ten preparado esto:
- n8n funcionando — Local, Docker o Cloud. Si no lo tienes, aquí hay una guía para instalarlo con Docker.
- Cuenta de Telegram — La que ya usas a diario, vale.
- Acceso a internet desde n8n — Si tu instancia es self-hosted, necesita poder conectar con
api.telegram.orgen el puerto 443.
Si tu n8n es self-hosted y quieres usar el nodo Telegram Trigger (que recibe mensajes del bot), también necesitas que tu instancia sea accesible desde internet para que Telegram pueda enviar webhooks. Esto lo resolvemos más adelante con la URL del webhook.
Paso 1: Crear el bot con BotFather
Todo bot de Telegram empieza con @BotFather, que es el bot oficial de Telegram para crear y gestionar otros bots.
- Abre Telegram y busca @BotFather.
- Envía
/newbot. - BotFather te pide un nombre para tu bot (el que se muestra en la conversación). Escribe algo descriptivo:
Alertas Automatización. - Ahora te pide un username (debe terminar en
bot):alertas_auto_bot. - BotFather te devuelve un token HTTP API con este formato:
7123456789:AAHkx9Z3qR5vF8mN2pL7wK4jD6cY1bT0eXs
Guarda ese token. Es la llave de acceso a tu bot. Si lo pierdes, puedes generar uno nuevo con /token en BotFather, pero el anterior deja de funcionar.
Obtener tu Chat ID
Para que el bot te envíe mensajes, necesita saber a qué chat enviarlos. Hay varias formas de obtener tu Chat ID:
Método rápido con un bot auxiliar:
- Busca @userinfobot en Telegram y dale a Start.
- Te responderá con tu ID numérico (algo como
123456789).
Método manual:
- Envía cualquier mensaje a tu bot recién creado.
- Abre esta URL en el navegador (sustituye
TU_TOKENpor el token real):
https://api.telegram.org/botTU_TOKEN/getUpdates
- En el JSON de respuesta, busca el campo
"chat": {"id": 123456789}. Ese número es tu Chat ID.
Para grupos: Añade el bot al grupo, envía un mensaje en el grupo, y repite el método manual. El Chat ID de grupos es negativo (por ejemplo, -1001234567890).
Anota tu Chat ID. Lo necesitas en el siguiente paso.
Paso 2: Configurar las credenciales de Telegram en n8n
Abre n8n y ve a Settings → Credentials → Add Credential → Telegram API.
El único campo que necesitas rellenar es Access Token. Pega el token que te dio BotFather y guarda.
n8n verificará automáticamente que el token es válido. Si ves un tick verde, estás listo. Si da error, comprueba que no has copiado espacios en blanco adicionales al principio o al final del token.
Workflow 1: Webhook externo → Notificación en Telegram
Este es el caso más común: un servicio externo (tu web, un sensor IoT, un sistema de monitoring, un CRM) envía datos a n8n vía webhook, y n8n los reenvía como mensaje de Telegram.
Crear el workflow paso a paso
Nodo 1 — Webhook:
- Añade un nodo Webhook.
- Método HTTP:
POST. - Path: algo descriptivo como
alerta-telegram. - n8n te mostrará dos URLs:
- Test URL: para probar mientras desarrollas (solo funciona con el workflow abierto en el editor).
- Production URL: la permanente, que funciona cuando el workflow está activo.
La URL tendrá este aspecto:
https://tu-n8n.ejemplo.com/webhook/alerta-telegram
Nodo 2 — Telegram (Send Message):
- Añade un nodo Telegram.
- Selecciona la credencial que configuraste antes.
- Operación: Send Message.
- Chat ID: pega tu ID numérico (por ejemplo,
123456789). - Texto del mensaje: aquí es donde construyes el contenido. Usa expresiones de n8n para insertar datos del webhook:
🚨 *Nueva alerta recibida*
*Tipo:* {{ $json.tipo }}
*Mensaje:* {{ $json.mensaje }}
*Origen:* {{ $json.origen }}
*Fecha:* {{ $now.format('dd/MM/yyyy HH:mm') }}
- En Additional Fields, activa Parse Mode y selecciona MarkdownV2 para que el formato se renderice correctamente en Telegram.
Probar el webhook
Con el workflow abierto en el editor, copia la Test URL y lanza una petición desde la terminal:
curl -X POST https://tu-n8n.ejemplo.com/webhook-test/alerta-telegram \
-H "Content-Type: application/json" \
-d '{"tipo": "servidor", "mensaje": "CPU al 95% en srv-prod-01", "origen": "Prometheus"}'
Si todo va bien, recibes un mensaje en Telegram al instante con los datos formateados. Activa el workflow para que la URL de producción funcione permanentemente.
Ejemplo real: alerta de monitoring con Uptime Kuma
Si usas Uptime Kuma (o cualquier herramienta de monitoring), configura un webhook apuntando a tu URL de producción. Cuando un servicio se caiga, el webhook dispara n8n y recibes la alerta en Telegram en menos de un segundo.
El JSON que envía Uptime Kuma tiene esta estructura:
{
"heartbeat": {
"status": 0,
"msg": "Connection failed",
"time": "2026-07-16T10:30:00.000Z"
},
"monitor": {
"name": "API Producción",
"url": "https://api.ejemplo.com/health"
}
}
Tu mensaje de Telegram podría construirse así:
🔴 *Servicio caído*
*Monitor:* {{ $json.monitor.name }}
*URL:* {{ $json.monitor.url }}
*Error:* {{ $json.heartbeat.msg }}
*Hora:* {{ $json.heartbeat.time }}
Workflow 2: Telegram Trigger — El bot escucha comandos
El primer workflow es unidireccional: algo pasa y Telegram te avisa. Pero ¿y si quieres que el bot responda a tus comandos? Por ejemplo, que le escribas /estado y te devuelva el estado de tus servidores, o /ventas y te muestre las ventas del día.
Para esto usamos el nodo Telegram Trigger en lugar del Webhook genérico.
Configurar el Telegram Trigger
- Añade un nodo Telegram Trigger.
- Selecciona tu credencial de Telegram.
- En Updates, selecciona Message (para recibir mensajes de texto y comandos).
Cuando actives el workflow, n8n registra automáticamente un webhook en Telegram (usando la API setWebhook). A partir de ese momento, cada vez que alguien envíe un mensaje a tu bot, Telegram lo reenvía a n8n.
Requisito importante: Tu instancia de n8n debe ser accesible desde internet. Si estás en local, necesitas un túnel (ngrok, Cloudflare Tunnel) o configurar el webhook URL en n8n. En n8n self-hosted, asegúrate de que la variable de entorno WEBHOOK_URL apunta a tu dominio público.
Responder a comandos específicos
Después del Telegram Trigger, añade un nodo Switch (o If) para filtrar por comando:
Nodo Switch — Filtrar comando:
- Condición 1:
{{ $json.message.text }}empieza con/estado→ rama “estado” - Condición 2:
{{ $json.message.text }}empieza con/ventas→ rama “ventas” - Default → rama “desconocido”
Rama “estado”:
Aquí puedes conectar nodos que consulten tus servicios (HTTP Request a endpoints de salud, consultas a base de datos, etc.) y devuelvan un resumen:
✅ *Estado del sistema*
• API Producción: Online (99.8% uptime)
• Base de datos: Online (4.2 GB libres)
• Cola de trabajos: 3 pendientes
• Último backup: hace 2h
Rama “desconocido”:
Responde con un mensaje de ayuda:
No reconozco ese comando. Prueba con:
/estado — Estado de los servicios
/ventas — Resumen de ventas del día
/ayuda — Lista de comandos
Detalle clave: El Chat ID del usuario que escribió al bot está en {{ $json.message.chat.id }}. Usa esa expresión en el nodo Telegram de respuesta para que el bot conteste al chat correcto, no a un ID fijo.
Seguridad: restringir quién puede usar el bot
Si tu bot gestiona información sensible (y debería, si es útil), no quieres que cualquiera que encuentre tu bot pueda ejecutar comandos.
Añade un nodo If justo después del Telegram Trigger:
Condición: {{ $json.message.from.id }} es igual a TU_USER_ID
Si la condición es verdadera, sigue el flujo normal. Si es falsa, envía un mensaje tipo “No estás autorizado” o simplemente no respondas. Puedes aceptar múltiples usuarios añadiendo sus IDs a una lista.
Workflow 3: Sistema de alertas interactivo con botones
Ahora combinamos todo. El objetivo: recibir una alerta por webhook, que el bot la muestre con botones de acción (Aceptar, Escalar, Ignorar), y que al pulsar un botón se ejecute una acción concreta.
Estructura del workflow
Webhook → Telegram (enviar alerta con botones)
↓
Telegram Trigger (Callback Query) → Switch (según botón) → Acción
Enviar mensajes con botones inline
En el nodo Telegram (Send Message), usa Reply Markup con Inline Keyboard:
{
"inline_keyboard": [
[
{"text": "✅ Aceptar", "callback_data": "aceptar_{{$json.alerta_id}}"},
{"text": "⬆️ Escalar", "callback_data": "escalar_{{$json.alerta_id}}"},
{"text": "❌ Ignorar", "callback_data": "ignorar_{{$json.alerta_id}}"}
]
]
}
En n8n, configura el nodo Telegram así:
- Operación: Send Message.
- Texto: el contenido de la alerta.
- En Additional Fields → Reply Markup → Inline Keyboard.
- Define cada botón con su texto visible y su
callback_data.
Capturar la respuesta del botón
Crea un segundo workflow (o una segunda rama en el mismo) con un Telegram Trigger configurado para escuchar Callback Query.
Cuando el usuario pulsa un botón, Telegram envía un callback con la callback_data que definiste. El JSON incluye:
{
"callback_query": {
"data": "aceptar_12345",
"from": {"id": 123456789, "first_name": "Carlos"},
"message": {"chat": {"id": 123456789}}
}
}
Usa un nodo Switch para separar las acciones:
- Si
callback_dataempieza conaceptar_→ marca la alerta como gestionada en tu base de datos. - Si empieza con
escalar_→ reenvía a otro chat o envía un email al equipo. - Si empieza con
ignorar_→ registra que se descartó y archiva.
Después de cada acción, usa un nodo Telegram con operación Answer Callback Query para confirmar al usuario que su pulsación se registró (esto quita el “relojito” del botón).
Ejemplo completo: alerta de error en producción
Imagina que tu sistema de monitoring detecta un error crítico. El flujo completo sería:
- Prometheus/Grafana envía un webhook a n8n con los datos del error.
- n8n recibe el webhook, construye un mensaje con contexto (qué servidor, qué servicio, desde cuándo) y lo envía a Telegram con tres botones.
- Carlos recibe la alerta en Telegram, evalúa la situación y pulsa “Aceptar”.
- n8n captura el callback, actualiza el estado de la incidencia en la base de datos, envía un mensaje de confirmación y, opcionalmente, ejecuta un runbook automático (reiniciar servicio, escalar recursos, etc.).
Todo en menos de 5 segundos desde que se detecta el problema hasta que tienes un botón en la mano para actuar.
Buenas prácticas para bots de Telegram con n8n
Después de montar decenas de estos sistemas, hay patrones que funcionan y errores que se repiten:
Formatea los mensajes con cuidado
Telegram soporta MarkdownV2 y HTML. MarkdownV2 es más limpio pero tiene caracteres reservados que necesitan escape (_, *, [, ], (, ), ~, `, >, #, +, -, =, |, {, }, ., !).
Si tus mensajes incluyen datos dinámicos (URLs, nombres con caracteres especiales), usa HTML en lugar de MarkdownV2. Es más predecible:
<b>Alerta crítica</b>
Servidor: <code>srv-prod-01</code>
CPU: <b>95%</b>
<a href="https://grafana.ejemplo.com/d/xyz">Ver dashboard</a>
Gestiona los errores del nodo Telegram
El nodo Telegram puede fallar si el Chat ID es incorrecto, si el bot fue bloqueado por el usuario, o si el mensaje supera los 4.096 caracteres. Configura un Error Trigger en n8n para capturar estos fallos y enviar la notificación por un canal alternativo (email, por ejemplo).
No envíes spam
Si tu webhook recibe cientos de eventos por minuto, no envíes cada uno como mensaje individual. Usa un nodo Wait para agrupar eventos en ventanas de tiempo (por ejemplo, cada 5 minutos) y envía un resumen en lugar de cien mensajes.
Telegram tiene límites de rate: 30 mensajes por segundo a diferentes chats, 1 por segundo al mismo chat. Si los superas, la API devuelve error 429 y n8n reintentará, pero tus alertas llegarán con retraso.
Usa grupos para equipos, canales para audiencias
- Chat privado: alertas personales, comandos de administración.
- Grupo: alertas de equipo donde varios miembros necesitan ver y actuar.
- Canal: notificaciones unidireccionales para audiencias amplias (clientes, suscriptores).
El bot puede enviar a los tres. Solo cambia el Chat ID.
Logs y trazabilidad
Añade siempre un nodo que registre en base de datos qué alertas se enviaron, cuándo, y quién respondió. Sin esto, no tienes forma de auditar si una alerta se perdió o se ignoró.
Aplicaciones reales en entorno industrial
Si trabajas en automatización industrial, los casos de uso de un bot de Telegram con n8n son muy concretos:
Alertas de SCADA/HMI. Configura tu SCADA para que envíe un HTTP POST cuando una variable crítica (temperatura, presión, nivel) supere un umbral. n8n lo recibe y te avisa al móvil. Sin instalar apps del fabricante, sin VPNs al PLC.
Notificaciones de OEE. Al final de cada turno, un workflow consulta la base de datos de producción, calcula el OEE y envía un resumen al grupo del equipo de planta.
Confirmación de mantenimiento. Cuando el sistema de gestión de mantenimiento (CMMS) genera una orden de trabajo, el bot avisa al técnico asignado con un botón de “Aceptar” o “Rechazar”.
Aprobaciones rápidas. Un operario necesita autorización para un cambio de parámetros. El sistema envía la solicitud al responsable por Telegram con botones de Aprobar/Rechazar. Sin abrir el PC, sin email.
Solución de problemas frecuentes
El bot no recibe mensajes (Telegram Trigger no se dispara):
- Verifica que la variable
WEBHOOK_URLde n8n apunta a una URL accesible desde internet. - Comprueba que el workflow está activo (el toggle verde en la esquina).
- Asegúrate de que no hay otro webhook registrado para el mismo bot (solo puede haber uno activo). Ejecuta
https://api.telegram.org/botTU_TOKEN/getWebhookInfopara verificar.
Mensajes con formato roto:
- Si usas MarkdownV2, escapa los caracteres reservados. Un punto (
.) sin escapar rompe todo el mensaje. - Cambia a HTML si los datos son dinámicos e impredecibles.
Error 403 “Forbidden: bot was blocked by the user”:
- El usuario bloqueó tu bot. No puedes enviarle mensajes hasta que lo desbloquee. Implementa un fallback (email, otro chat).
Error 429 “Too Many Requests”:
- Estás superando los límites de rate. Agrupa mensajes o añade delays entre envíos.
El webhook no llega a n8n:
- Si usas n8n detrás de un reverse proxy (Nginx, Traefik), verifica que el proxy reenvía correctamente las peticiones POST con el body JSON.
- Comprueba los logs de n8n:
docker logs n8n --tail 50.
Conclusión: Telegram como centro de notificaciones
Un bot de Telegram conectado a n8n es una de las automatizaciones con mejor relación esfuerzo/resultado que puedes montar. En 20 minutos tienes un sistema de alertas en tiempo real que funciona en tu bolsillo, que puedes personalizar hasta el último detalle y que no te cuesta un euro al mes.
Lo que hemos cubierto aquí — webhook entrante, bot que escucha comandos, alertas interactivas con botones — son los bloques fundamentales. A partir de aquí, las combinaciones son infinitas: conectar con bases de datos, integrar con APIs de terceros, añadir lógica condicional compleja, o incluso conectar un agente de IA que procese los mensajes.
Si tu n8n ya está funcionando, montar el primer workflow te lleva 10 minutos. El segundo, 5. Y a partir del tercero, ya estarás pensando en qué más puedes automatizar.
¿Quieres implementar un sistema de alertas automatizado para tu empresa o planta industrial? En automatizatodo.com diseñamos soluciones de automatización con n8n adaptadas a entornos reales — desde notificaciones Telegram hasta integraciones completas con SCADA, ERP y sistemas de producción. Contacta con nosotros y cuéntanos tu caso.
Sigue leyendo
Cómo Usar n8n como CRM para Automatizar el Seguimiento de Clientes en tu PYME
Aprende a usar n8n como CRM automatizado para tu PYME. Configura seguimiento de clientes, recordatorios y pipelines de ventas sin pagar licencias caras.
Leer artículoCómo Automatizar tu Backend con n8n, Supabase y PostgreSQL: Guía Práctica
Aprende a automatizar tu backend con n8n y Supabase PostgreSQL. 4 workflows prácticos para gestionar datos, webhooks y lógica sin escribir servidor.
Leer artículo