Bot de Telegram con IA en n8n: memoria y seguridad

Montar un bot de Telegram con IA en n8n cuesta poco: cuatro piezas y un par de credenciales. Lo difícil llega después, cuando el bot no recuerda que le dijiste tu nombre hace un minuto, deja de contestar justo cuando pruebas un cambio o descubres que cualquiera que lo encuentre puede gastarte el saldo de OpenAI.

Este es el tercer capítulo de n8n desde cero, nuestra serie gratuita en YouTube. En el vídeo montamos el bot entero, desde BotFather hasta la respuesta en el móvil; si prefieres una guía escrita completa con cada paso, la tienes en crea tu primer agente IA en Telegram con n8n. Aquí resumimos la construcción y nos detenemos en lo que casi ningún tutorial cuenta: la memoria por chat, contestar a quien toca y los tres tropiezos que te esperan al publicarlo.

📌 En resumen

El bot tiene cuatro piezas: Telegram Trigger, un AI Agent con su modelo de OpenAI y una Simple Memory, y un nodo de Telegram que contesta. Para que funcione bien de verdad hacen falta cinco detalles: la memoria con el id del chat como clave, la respuesta enviada a $('Telegram Trigger').item.json.message.chat.id, un n8n con https, no probar el disparador con el workflow publicado (un bot solo admite un webhook) y Restrict to User IDs más un límite de gasto en OpenAI.

Lo que necesitas

  • Tu n8n con una dirección segura, la que empieza por https, como la que montamos en el capítulo 1.
  • Una cuenta de Telegram.
  • Una clave de OpenAI con unos euros de saldo. Cada respuesta cuesta una fracción de céntimo.

El bot en cuatro piezas

Un disparador que escucha, un agente que piensa (con el modelo y la memoria colgando de él) y un nodo que contesta. En la tabla tienes cada nodo con lo que hay que tocar:

PiezaNodoLo que configuras
EscucharTelegram Trigger (On message)Tu credencial y la actualización message
PensarAI AgentSource for Prompt en Define below, el texto del mensaje y el System Message
CerebroOpenAI Chat ModelTu clave y un modelo pequeño de los que acaban en mini
RecordarSimple MemorySession ID con el id del chat y Context Window Length
ContestarTelegram (Send a text message)El chat id del disparador y el output del agente

1. El bot y su token

En Telegram busca BotFather, el que lleva la marca azul de verificado, pulsa en iniciar y escríbele /newbot. Te pide un nombre visible (por ejemplo, Asistente Panadería Luna) y un nombre de usuario único que acabe en bot, como panaderia_luna_bot; si ya está cogido, prueba con otro. Al terminar te da el token, una línea larga de números y letras que es la llave de tu bot: quien la tenga puede hacer que diga lo que quiera. No la pegues en ningún chat, y si se te escapa, en BotFather tienes /revoke para cambiarla.

2. La credencial y el disparador

En n8n, en Credentials, crea una de tipo Telegram API. Tiene un solo campo, Access Token, donde pegas el token; si sale en verde, n8n ya habla con tu bot. Después crea un workflow llamado Mi primer agente, pulsa N, busca Telegram y, entre los disparadores, elige On message. Elige tu credencial y deja la actualización en message.

3. El agente, su modelo y su personalidad

Detrás va un AI Agent. En Source for Prompt elige Define below, porque el mensaje no viene de un chat de n8n sino de Telegram, y arrastra el campo text: queda {{ $json.message.text }}. Debajo del agente hay tres huecos (modelo, memoria y herramientas) y solo el modelo es obligatorio: en Chat Model añade OpenAI Chat Model, crea la credencial con tu clave de la plataforma de OpenAI y elige un modelo mini.

En las opciones del agente añade System Message, lo que lee antes de cada conversación: quién es, qué sabe y cómo debe hablar. En el vídeo es el asistente de la Panadería Luna, con su horario, respuestas cortas y una orden clara: si no sabe algo, lo dice en vez de inventárselo. Al ejecutarlo, la respuesta sale en un campo llamado output.

Lo que llega de Telegram (y por qué importa el chat id)

Pulsa Execute step en el disparador, escribe a tu bot y el mensaje aparece en n8n. Míralo en JSON: dentro de message tienes text, lo que te han escrito; from, con los datos de quien escribe; y chat, con su id, el número que identifica esa conversación. Fija estos datos con la chincheta, como en el capítulo 2, para probar el resto sin escribir al bot cada vez.

Ese chat.id es la pieza que une todo lo demás: sirve para contestar a la persona correcta y para que la memoria no mezcle conversaciones.

Contestar al chat correcto

Detrás del agente añade un nodo de Telegram con la acción Send a text message. Necesita dos cosas: a qué chat contestar y qué texto mandar.

Para el chat, vuelve la trampa del capítulo 2. El nodo anterior es el agente, y lo único que saca es su output: el id del chat se quedó dos nodos atrás, en el disparador. Por eso $json no sirve y hay que ir a buscarlo así:

{{ $('Telegram Trigger').item.json.message.chat.id }}

En el texto, arrastra el output del agente, {{ $json.output }}. Por defecto n8n añade al final de cada mensaje una línea que dice que se ha enviado con n8n; para quitarla, en Additional Fields añade Append n8n Attribution y desactívalo.

Punto de control: quita la chincheta del disparador para que escuche de verdad, ejecuta el workflow y pregúntale a tu bot si abrís el sábado por la tarde. La respuesta tiene que llegarte en Telegram en un par de segundos.

La memoria por chat: Simple Memory

Ya contesta, pero tiene memoria de pez. Escríbele «me llamo Marta» y después «¿cómo me llamo?»: no lo sabe. Cada mensaje le llega como si fuera el primero, porque el agente no guarda nada entre una ejecución y otra.

Para eso está la memoria. En el hueco Memory del agente añade Simple Memory, que guarda los últimos mensajes de cada conversación y se los pasa al agente:

  • Context Window Length es cuántos intercambios recuerda. Con 5 vas sobrado para empezar.
  • Session ID es lo importante. Elige Define below y en Key pon la misma expresión del envío: {{ $('Telegram Trigger').item.json.message.chat.id }}.

Con el id del chat como clave, cada persona que escribe a tu bot tiene su propia conversación guardada y nadie hereda el contexto de otro. Si la clave fuera la misma para todos, el bot mezclaría lo que le cuenta cada uno.

Punto de control: repite la prueba. «Me llamo Marta», «¿cómo me llamo?» y ahora sí contesta que te llamas Marta.

Tres tropiezos al ponerlo en marcha

Telegram solo habla con https

Telegram avisa a n8n llamando a una dirección web, y solo acepta direcciones seguras. Si tu n8n está en tu ordenador o sin dominio, al activar el disparador verás el error An HTTPS URL must be provided, y no es culpa tuya ni del nodo. Por eso en el capítulo 1 montamos n8n con dominio y certificado.

Un solo webhook por bot

Mientras pruebas, el bot solo responde con el workflow abierto. Para que conteste siempre, pulsa Publish arriba: desde ese momento contesta solo, de día y de noche, aunque cierres el navegador.

Ahora viene el despiste más común. Telegram solo deja a cada bot una dirección a la que avisar, así que si con el workflow publicado vuelves a pulsar Execute step en el disparador, pisas la dirección de producción y el bot deja de contestar. Para hacer cambios, despublica, prueba y vuelve a publicar, o crea un segundo bot solo para pruebas con su propia credencial.

Cada mensaje que recibe queda en las ejecuciones del workflow: qué le escribieron, qué contestó y cuánto tardó. Si algún día responde algo raro, empieza por ahí.

Tu bot es público y gasta tu saldo

Cualquiera que encuentre tu bot puede escribirle, y cada respuesta sale de tu cuenta de OpenAI. Mientras lo pruebas, en el disparador abre Additional Fields y añade Restrict to User IDs con tu id de usuario de Telegram, para que solo te responda a ti. Además, en tu cuenta de OpenAI ponte un límite de gasto mensual antes de publicarlo.

SíntomaCausaArreglo
No recuerda lo que le dijisteNo tiene memoriaSimple Memory con el chat id como Key
Error An HTTPS URL must be providedn8n sin dirección seguraPublicar n8n con dominio y https
Dejó de contestar tras una pruebaLa prueba pisó el webhook de producciónDespublicar, probar y publicar, o un bot de pruebas
Contesta a desconocidosEl bot es públicoRestrict to User IDs y límite de gasto en OpenAI
Cada respuesta acaba con una firma de n8nLa atribución viene activadaDesactivar Append n8n Attribution

Los capítulos del vídeo

MinutoQué se ve
1:23Crear el bot con BotFather
1:53El token: la llave de tu bot
2:25El disparador On message
2:40Por qué Telegram exige https
3:13Lo que llega: message, from y chat
3:39El AI Agent
4:25La personalidad: System Message
5:30El chat id del disparador
6:21Sin memoria no recuerda
6:35Simple Memory y la sesión
7:25Un solo webhook por bot
7:55Protégelo: Restrict to User IDs

Descarga el agente de Telegram

Un zip con el workflow del vídeo (Telegram Trigger, AI Agent, OpenAI Chat Model, Simple Memory y Send a text message) para pegar en tu n8n con Ctrl+V, y un LEEME con los pasos para conectar tus credenciales, cambiar el System Message y protegerlo. Viene sin credenciales.

Recibirás un correo para confirmar tu dirección y, al confirmarla, otro con el zip adjunto. Si ya confirmaste en otra descarga de la serie, te llega directamente.

Preguntas frecuentes

¿Por qué mi bot de Telegram en n8n no recuerda lo que le dije?
Porque el AI Agent no guarda nada entre una ejecución y otra. Añádele una Simple Memory y, en Session ID, elige Define below con el id del chat como Key, para que cada conversación tenga su propio historial.

¿Qué significa el error «An HTTPS URL must be provided»?
Que tu n8n no tiene una dirección segura. Telegram avisa a n8n llamando a una URL y solo acepta las que empiezan por https, así que un n8n en tu ordenador o sin dominio no recibe los mensajes.

Mi bot dejó de contestar después de probar un cambio, ¿qué ha pasado?
Que has probado el disparador con el workflow publicado. Cada bot admite una sola dirección de aviso, y la prueba pisa la de producción. Despublica, prueba y vuelve a publicar, o usa un segundo bot solo para pruebas.

¿Cómo evito que cualquiera use mi bot y gaste mi saldo de OpenAI?
En el Telegram Trigger, dentro de Additional Fields, añade Restrict to User IDs con tu id de usuario, y en tu cuenta de OpenAI ponte un límite de gasto mensual.

¿Cuánto cuesta cada respuesta del bot?
Con un modelo pequeño de OpenAI, de los que acaban en mini, cada respuesta cuesta una fracción de céntimo. Crear el bot en BotFather es gratis.

Sigue la serie: ← capítulo 2: n8n por dentro · todos los capítulos de n8n desde cero · capítulo 4: un resumen diario en Telegram →

Dale herramientas a tu agente

Esto es solo el principio. En el curso de n8n de nacaIA Academy le damos herramientas al agente para que consulte tu calendario, una base de datos o tus documentos, y lo llevamos a WhatsApp y a la web, paso a paso y con casos reales.

Ver el curso de n8n
JB

Jorge Benítez

Fundador de nacaIA · Especialista en automatizaciones con n8n y desarrollo de software

Ayudo a empresas a automatizar procesos con n8n, IA y desarrollo a medida. Más sobre mí →