En este artículo te voy a enseñar cómo tienes que hacer para que tu agente de n8n mande las respuestas en mensajes diferentes. No que solo lo mande en uno y te mande un bloque muy grande, sino que lo divida y así parezca una conversación real, ¿vale? Te voy a contar paso a paso cómo lo hice yo, con los errores que me encontré por el camino.
Este artículo nace directamente de mi último vídeo, donde muestro la evolución de mi propio agente de n8n. Partí de una versión 1 muy sencilla, luego una versión 2 que ya procesaba audio y texto, y ahora esta versión 3 que se centra en dividir la respuesta para simular una conversación real. El ejemplo que uso es mi bot interno, configurado como un experto en n8n que me ayuda a crear tutoriales para YouTube. Cuando le digo ‘hola’, en vez de devolverme un párrafo, me contesta con tres mensajes separados: ‘Hola de nuevo’, ‘¿Cómo puedo asistirte con n8n?’ y ‘Si tienes alguna pregunta o necesitas ayuda con un tutorial, házmelo saber’. Esa es la diferencia entre un robot y una conversación.
¿Por qué un bloque de texto mata la conversación?
Imagina que estás chateando con alguien y, de repente, te suelta un muro de texto de diez líneas. Lo primero que piensas es: «esto lo ha escrito una máquina». La conversación se rompe. La magia de un chat, de WhatsApp, de Telegram, está en el ritmo. Un mensaje, una pausa, otro mensaje, una reacción. Es ese intercambio lo que nos hace sentir que hay alguien al otro lado.
La ilusión de la naturalidad
Cuando creas un agente de IA, el objetivo no es solo que dé la respuesta correcta, sino que la experiencia sea creíble. Un humano no escribe un manual de instrucciones cada vez que saluda. Lo hace por partes. Si replicas ese patrón, aunque el usuario sepa que está hablando con un bot, la sensación es mucho más orgánica y menos intrusiva. No es magia, es psicología básica: imitar los patrones humanos para generar confianza y comodidad.
El problema técnico: un item vs. varios
A nivel de n8n, hay una diferencia enorme entre que tu agente devuelva un solo item (un bloque de texto largo) y que devuelva varios. Si es uno solo, lo envías de golpe y el usuario lo recibe todo junto. Si son varios, puedes manipularlos: enviar uno, esperar un momento, enviar el siguiente, etc. Es la base para construir ese ritmo conversacional. El truco está en transformar la salida monolítica de la IA en algo que puedas manejar por partes.
La evolución de mi agente: de V1 a V3
Para que veas que esto no sale de la nada, te cuento cómo ha ido creciendo mi propio setup. Es importante porque cada versión solucionaba un problema distinto y te ayuda a entender por qué llegamos a este punto.
Versión 1: El agente básico
Era lo más simple que podías imaginar. Un trigger de Telegram, un nodo de AI Agent conectado a un modelo, y poco más. Respondía, sí, pero era como hablar con una enciclopedia: útil, pero frío. Era la prueba de concepto, para verificar que todo el flujo funcionaba y que la IA entendía su rol. Pero faltaba vida.
Versión 2: Procesando audio y texto
Aquí le añadí capacidad para manejar notas de voz. El workflow era capaz de recibir un audio, transcribirlo, pasar ese texto al agente y devolver la respuesta. Ya era más versátil, porque cubría más formas en las que la gente se comunica. Pero seguía teniendo el mismo problema de fondo: la respuesta llegaba en un solo bloque enorme. Habíamos mejorado la entrada, pero la salida seguía siendo robótica.
Versión 3: La conversación humana
Esta es la versión en la que estamos ahora. Mantiene todo lo anterior (procesar texto y audio), pero le añade la capa clave: dividir la respuesta final en mensajes separados con pausas entre ellos. Ya no es solo un contestador automático; simula una interacción. Es el salto de tener una herramienta a tener un asistente con el que da gusto hablar. Y lo bueno es que la complejidad añadida no es tanta, como vas a ver ahora.
Paso 1: Interceptar la respuesta con un Basic LLM Chain
Lo primero que hice fue desconectar la salida directa de mi AI Agent. En vez de que su respuesta vaya directamente al mensaje final, la intercepto con otro nodo.
- Añade un nodo «Basic LLM Chain». Lo encuentras en la sección de IA de n8n. Yo lo conecté justo después del nodo de mi AI Agent. Su única misión va a ser esta: coger el texto largo que genera el agente principal y partirlo en trozos.
- Configura el System Prompt para dividir. Dentro del Basic LLM Chain, en «Chat Prompt», añade un mensaje de sistema. Aquí es donde le das las instrucciones. Yo le puse algo como: «Tu única tarea es dividir el siguiente mensaje en entre 1 y 3 mensajes más cortos y naturales. Mantén el significado original. Devuélvelos como una lista.» Le puedes dar ejemplos del estilo que quieres. Este prompt es el que guía a la IA para que no solo repita, sino que reformatee.
¿Por qué otro LLM y no lo hago directamente en el agente principal? Por separación de responsabilidades. El agente principal debe concentrarse en pensar y generar la mejor respuesta. Este LLM secundario es un «formateador»: su mundo es solo coger un texto y reestructurarlo. Así, si mañana quiero cambiar la lógica de división, no toco el cerebro principal.
Ahora, ¿cómo te aseguras de que este formateador te devuelva algo que puedas usar? Porque la IA, por muy instrucciones que le des, a veces se va por las ramas y te devuelve texto plano. Para eso está el siguiente paso, que es clave.
Paso 2: Forzar el formato con un Parser de JSON
Aquí viene un truco que me ha salvado muchas veces. La IA, por muy instrucciones que le des, a veces «alucina» y te devuelve texto plano. Para evitarlo, n8n tiene una función brillante: forzar un formato de salida específico.
El truco del ‘Requiere un formato de salida específico’
En la configuración del Basic LLM Chain, activa la opción «Requiere un formato de salida específico». Al hacerlo, se desbloquea un campo nuevo: «Output Parser». Aquí es donde le dices «no me des lo que tú quieras, dámelo exactamente así».
Definiendo el esquema JSON para 1 a 3 mensajes
En el parser, elijo «Definir usando un JSON Schema». Y aquí es donde tienes que ser concreto. Yo pego un esquema que fuerza a la IA a devolver un array de objetos. Cada objeto representa un mensaje.
Te pongo el código exacto que uso yo, para que no te líes:
{
"type": "array",
"items": {
"type": "object",
"properties": {
"mensaje": {
"type": "string",
"description": "Un mensaje corto y natural."
}
},
"required": ["mensaje"]
}
}
¿Ves? Es una forma infalible de que lo que salga de ese nodo sea una estructura de datos limpia, no un texto libre. Le estás diciendo: «la salida debe ser un array. Cada elemento del array es un objeto con una clave ‘mensaje’ que contiene el texto».
Este enfoque no es el único, pero es muy robusto. De hecho, en la comunidad de n8n, un enfoque alternativo para dividir mensajes es pedirle al propio AI Agent que formatee su respuesta como un array JSON de objetos, que luego puede ser procesado fácilmente con un nodo ‘Split Out’. En mi caso, prefiero tener el nodo especializado (Basic LLM Chain) haciendo ese trabajo, pero saber que hay alternativas es útil, ¿vale?
Cuando ejecutas el workflow hasta aquí, verás que la salida del Basic LLM Chain ya no es un texto. Es un objeto JSON con un array dentro. Ese array tiene entre 1 y 3 elementos, cada uno con su mensaje. La parte difícil (conseguir la estructura) ya está hecha.
Paso 3: De un objeto a múltiples items con Split Out
Ahora tenemos un solo item en n8n (el objeto JSON), pero con una lista dentro. Necesitamos convertir esa lista interna en múltiples items independientes para que el loop los procese uno por uno. Aquí es donde entra el nodo «Split Out».
Lo conectas después del Basic LLM Chain. En su configuración, le indicas el camino al array que quieres expandir. Ojo aquí, que es donde me lié yo la primera vez: tienes que apuntar a la clave exacta que definiste en tu JSON Schema. Si usaste la clave mensaje (en singular), aquí tendrás que usar {{ $json.mensaje }}. Si usaste mensajes (en plural), será {{ $json.mensajes }}. Yo, para que quede claro, siempre uso mensajes en plural, porque es un array de varios, ¿vale? Lo que hace este nodo es coger ese array y, por cada elemento, generar un nuevo item en el flujo de n8n.
¿Por qué no usar «SplitInBatches» aquí? Porque «SplitInBatches» está pensado para dividir grandes volúmenes de datos en lotes para procesamiento, pero sigue manteniendo una lógica por lotes. «Split Out» es más directo: un elemento del array = un nuevo item independiente. Es la herramienta perfecta para preparar el terreno para un loop que va a enviar mensajes de uno en uno.
Después del Split Out, si tu array tenía 3 mensajes, tendrás 3 items fluyendo por el workflow. Cada uno lleva en su interior uno de los textos a enviar. Ya estamos listos para la parte que da el toque realista.
Paso 4: El loop que simula el tiempo real
Aquí viene la magia. Para enviar los mensajes con pausa, necesitamos un bucle (loop). En n8n, el nodo «Loop Over Items» es el que vamos a usar.
Entendiendo las dos ramas: Done y Loop
Cuando añades este nodo, verás que tiene dos salidas: «Done» y «Loop». Es crucial entenderlo: * Done: Por aquí salen los items cuando el loop ha terminado de procesarlos a todos. En nuestro caso, esta rama la vamos a dejar vacía. Simplemente termina ahí el flujo para esos items. * Loop: Por aquí se devuelve el item actual para procesarlo. Esta es la rama activa donde vamos a poner nuestra lógica.
Conectamos la salida del Split Out a la entrada del Loop.
La magia está en la pausa: integrando un nodo Wait
Dentro de la rama «Loop», vamos a construir una mini-cadena:
1. Nodo para enviar el mensaje: Por ejemplo, un «Send a Text Message» de Telegram. Configuras el chat ID y, como texto, usas el mensaje que viene en el item actual. Aquí sí que tienes que usar la ruta correcta para llegar al texto dentro de cada elemento del array. Si tu JSON tenía la estructura { "mensajes": [ {"mensaje": "texto1"}, {"mensaje": "texto2"} ] }, después del Split Out, cada item tendrá un mensaje. Así que aquí pondrías algo como {{ $json.mensaje }}.
2. Nodo «Wait» (Espera): Justo después del envío, añades un nodo «Wait». Aquí configuras la pausa. Yo suelo poner entre 3 y 5 segundos. Esto es lo que crea la sensación de que alguien está escribiendo.
3. Cerrar el círculo: La salida del nodo Wait la conectas de vuelta a la entrada del nodo «Loop Over Items». Esto le dice al loop: «oye, ya he procesado este item, pasa al siguiente».
¿Qué pasa? El loop coge el primer item (primer mensaje), lo envía por Telegram, espera 5 segundos, y luego vuelve al inicio del loop. Como el primer item ya ha sido procesado, el loop toma el segundo y repite el proceso. Así hasta que no quedan items, momento en el que el flujo sale por la rama «Done» y termina.
Esta arquitectura de loop con wait es la que convierte una ráfaga de datos en una conversación escalonada. Es justo lo que en un hilo de la comunidad se sugería para no enviar todos los mensajes a la vez. Y encaja perfectamente en la arquitectura común de agentes de IA en n8n. Nosotros lo que hemos hecho es enriquecer ese «output» final con inteligencia para el ritmo.
Errores comunes y cómo evitarlos (lo que aprendí)
Al hacer esto, me he topado con varios escollos. Para que no caigas en los mismos, te los cuento.
No conectar el mismo modelo
El Basic LLM Chain necesita un modelo de lenguaje para funcionar. Lo más fácil (y lo correcto) es conectar el mismo modelo que usa tu AI Agent principal. No hace falta configurar una nueva API. En los ajustes del Basic LLM Chain, en «Model», seleccionas el mismo nodo de modelo que ya tienes en tu workflow. Así no gastas créditos extra ni complicas la configuración.
Olvidar que el ‘Done’ del loop va vacío
Al principio, me empeñaba en conectar algo a la salida «Done» del Loop Over Items. Pero no hace falta. Si ahí no va nada, el flujo para esos items simplemente se detiene, que es lo que queremos. Si conectas algo, se ejecutará después de enviar todos los mensajes, lo que quizá no sea tu intención.
Confiar ciegamente en que la IA no va a alucinar
Por eso el parser de JSON es no opcional, es obligatorio. Sin él, aunque tu prompt del Basic LLM Chain sea perfecto, un día la IA decidirá responder con «Claro, aquí tienes tus mensajes:» y luego un texto plano. El parser fuerza la estructura, así te aseguras de que lo que llega al Split Out siempre es un array procesable. Es tu red de seguridad.
¿Y ahora qué? Próximos pasos y variaciones
Con esto ya tienes un agente que responde de forma humana. Pero se puede llevar más lejos.
Integrarlo con un Chat Trigger real: Mi ejemplo usa una ejecución manual, pero la idea es que esto funcione con un trigger de Telegram, WhatsApp, etc., en tiempo real. Solo tienes que conectar el inicio del workflow a ese trigger y asegurarte de que el último mensaje del loop se envía al chat correcto.
Variación: que el propio Agent devuelva el JSON: Como comentaba antes, puedes saltarte el Basic LLM Chain si le pides a tu AI Agent principal que su respuesta ya sea un array JSON. Esto simplifica el workflow (un nodo menos), pero mezcla la responsabilidad de generar contenido y de formatearlo. Depende de cuánto confíes en tu prompt principal.
Cuando NO usar esta técnica: Si estás construyendo un agente para extraer datos o generar informes, donde la claridad y completitud en un solo bloque es más importante que la experiencia conversacional, esta técnica sobra. No es una bala de plata. Es para chats, para asistentes conversacionales donde la sensación de naturalidad suma puntos.
Espero que te haya quedado claro. La clave está en verlo no como un truco técnico, sino como un recurso de experiencia de usuario. Un agente que chatea así no solo es más útil, sino que la gente lo percibe como más inteligente y confiable, aunque en el fondo esté haciendo lo mismo.
Si quieres ver el proceso en movimiento con todos los tropiezos incluidos, échale un vistazo al vídeo donde lo explico. Y si te surgen dudas al implementarlo, ya sabes, comenta. Seguiremos mejorando esto, porque la versión 4 ya la tengo en mente.
Herramientas y recursos que menciono
Algunos de estos enlaces son de afiliado: si compras a través de ellos me llevo una pequeña comisión, sin coste extra para ti.




