Saltar al contenido principal

El editor de flujos

Se abre a pantalla completa desde el formulario del bot, con el botón Diseñar flujo o Editar flujo cuando el bot está en modo avanzado.

El lienzo ocupa toda la pantalla. A la izquierda hay una barra con dos botones:

  • Nodos abre la paleta, con un buscador y las categorías plegadas. Los nodos se arrastran al lienzo y se conectan entre sí.
  • Fuentes de datos abre tus documentos y APIs guardadas, para añadirlos al flujo.

Solo se ve un panel a la vez. Pulsa otra vez el botón activo para cerrarlo y dejar todo el espacio al lienzo.

En el lienzo cada nodo muestra solo su nombre, para que los flujos grandes no se amontonen. Pasa el ratón por encima de un nodo para ver su detalle. Los nodos que consumen tokens llevan un rayo, en el lienzo y en la paleta: IA / LLM y Extraer datos llaman al modelo en cada paso, y Buscar en catálogo gasta unos pocos para calcular la búsqueda por significado. Al hacer clic en un nodo, su configuración se abre en un panel a la derecha; Ampliar lo hace más ancho, y se cierra con la X, con Escape o haciendo clic en el lienzo.

El nodo de Inicio ya está puesto: es por donde entra toda conversación.

Los nodos, por categoría​

Mensajes​

NodoQué hace
Mensaje fijoEnvía un texto siempre igual
Enviar mensajeEnvía un mensaje a otro contacto que eliges (por ejemplo, un aviso a tu equipo), no a quien está escribiendo. Tiene dos salidas: Éxito y Error
Enviar imagenManda una imagen
Botones / CTADa opciones para pulsar en vez de escribir. WhatsApp admite hasta 20 caracteres por botón y 24 por fila de lista (un emoji cuenta como 2 o más): si uno se pasa, se pierde el mensaje entero, y el editor te lo marca como error
Plantilla MetaEnvía una plantilla de WhatsApp ya aprobada por Meta

Inteligencia​

NodoQué hace
IA / LLMDeja que la inteligencia artificial lleve este tramo de la conversación
Buscar en catálogoBusca productos y los usa para responder
Cargar textoTrae contenido de una fuente de conocimiento
API externaLlama a otro sistema tuyo
Extraer datosSaca del mensaje los datos que le pidas y los guarda en variables

Flujo​

NodoQué hace
CondiciónBifurca según se cumpla algo o no
SwitchBifurca en varios caminos según un valor
Por canalBifurca según venga de WhatsApp, Instagram, web...
VariableGuarda un dato para usarlo más adelante
EsperarIntroduce una pausa de unos segundos
Esperar respuestaDetiene el flujo hasta que la persona conteste y sigue desde ahí con su respuesta
Repetir por cada elementoRepite un paso por cada elemento de una lista
SubflujoInserta un trozo reutilizable de la biblioteca de subflujos. Sus salidas son las que declare el subflujo
Pedir aprobaciónEspera a que una persona del equipo apruebe una acción delicada
Consultar al mismo tiempoLanza varias ramas en paralelo
Juntar respuestasVuelve a unir esas ramas: espera a que terminen todas antes de seguir, aunque unas tarden más que otras

Cada rama que sale de Consultar al mismo tiempo debe llegar a Juntar respuestas. Si una no llega, el editor te avisa: lo que haga esa rama no estará disponible cuando el flujo siga.

En Condición (tipo «la variable es igual a») y en Switch puedes leer un campo dentro del resultado de una API con un punto: resultado.resultCount o poke.name, igual que en los textos con {{resultado.resultCount}}.

Condición de tipo «respuesta afirmativa» sale por Sí cuando el mensaje contiene una de estas palabras completas: sí, ok, claro, bueno, bien, perfecto, gracias o yes. Da igual que lleven tilde o mayúsculas, pero tienen que ser la palabra entera: «necesito» o «casi» no cuentan como «si». Es una lista de palabras, no entiende el sentido: «no está bien» también sale por Sí.

Variable tiene un campo opcional, Asignar solo si coincide con, donde escribes una expresión regular. Si el valor no coincide, la variable conserva lo que tenía. Sirve para recordar una elección sin sumar otro Switch: con valor {{seleccion_id}} y ^svc:, la variable servicio solo cambia cuando la persona toca una opción cuyo id empieza por svc:; un mensaje de texto o un botón con otro id (por ejemplo tipo:INCENDIO) la dejan como estaba. No distingue mayúsculas.

Variable también puede agregar a una lista en vez de guardar un valor (campo Qué hacer). Si el valor es solo una variable, como {{adjuntos}}, se suman sus elementos sin repetir. Así se arma el expediente de archivos de una solicitud: {{adjuntos}} trae solo los archivos que llegaron en el mensaje actual, y con un nodo Variable en modo «Agregar a la lista» cada foto o video que la persona manda durante la solicitud queda en la lista. Para empezar una solicitud nueva, vacía la lista con otro nodo Variable en modo «Guardar el valor» y valor vacío.

Con esa lista:

  • Enviar mensaje tiene Adjuntar los archivos de la variable. Solo viajan los archivos de la lista que llegaron en esta conversación; cualquier otro se descarta. Por correo van como adjuntos, hasta 20 MB en total (lo que no cabe se nombra en el texto). Por WhatsApp sale un mensaje por archivo.
  • API externa tiene Subir los archivos de la variable. Hace una petición por archivo, en formulario (multipart/form-data) con el campo que indiques (file por defecto), y cada una con sus reintentos: si un archivo falla, los demás se suben igual. La variable de resultado queda con el total, los que se subieron, los que fallaron y el detalle de cada uno. El método tiene que ser POST, PUT o PATCH. Si la API necesita el id de algo que creaste antes, ponlo en la URL, por ejemplo …/emergency/{{registro.id}}/file.

En el nodo IA / LLM, APIs que puede consultar este agente limita las fuentes que ese agente ve con la herramienta de consultas. Vacío, ve todas las que habilitaste para el bot. Úsalo cuando tienes un agente por servicio, para que cada uno consulte solo las suyas.

Registrar una vez, reintentar lo repetible

Un registro que crea algo (una emergencia, un pedido) conviene dejarlo en 1 intento: si la API tarda, puede haberlo creado aunque no responda a tiempo, y reintentar lo duplicaría. La subida de archivos sí se puede reintentar.

En API externa puedes meter variables en la URL, por ejemplo https://api.ejemplo.com/buscar?q={{last_message}}. Xenpia codifica lo que pongas en la ruta o en los parámetros, así que una búsqueda con &, # o espacios llega entera. Escribe cada parámetro en la URL (?q={{busqueda}}&limite=5): si una variable trae varios parámetros juntos, llegan como un solo valor.

Para la fecha y hora del momento (hora de Ecuador) escribe {{now}} en cualquier texto, prompt, variable, URL o cuerpo de una API. Solo, da el formato ISO (2026-09-24T10:05:09-05:00). Con un formato detrás de los dos puntos, lo arma como pidas: {{now:dd/MM/yyyy HH:mm:ss}} da 24/09/2026 10:05:09 y {{now:yyyy-MM-dd}} da 2026-09-24. Entiende yyyy, yy, MM, dd, HH (00 a 23), mm y ss; el resto se copia tal cual. Úsalo cuando una API exija la fecha en su cuerpo, por ejemplo "date_time": "{{now:dd/MM/yyyy HH:mm:ss}}". Si quieres guardar la hora de un momento concreto (por ejemplo, cuándo empezó un reporte), cópiala a una variable con Guardar variable: {{now}} siempre da la hora en que corre cada paso.

Repetir por cada elemento toma una lista —por ejemplo las citas que devolvió una API— y repite un paso por cada elemento. Ese paso recibe el elemento en la variable que elijas (item por defecto), así que puedes escribir «Recordatorio de {{item.hora}}». Reglas:

  • El paso que se repite debe terminar en Juntar respuestas. Si no, todo lo que venga detrás se repetiría también una vez por elemento; el editor te lo marca en rojo.
  • La salida Lista vacía cubre el caso de que no haya nada que recorrer.
  • Como mucho recorre 25 elementos por mensaje (puedes subirlo hasta 100).
  • Lo que el paso guarde en una variable se pisa entre elementos: sirve para enviar o para llamar a una API, no para ir acumulando.

Operación​

NodoQué hace
Derivar a humanoEl bot se calla y la conversación queda esperando a una persona
FinTermina el flujo. Si activas Reiniciar la conversación, el próximo mensaje de esa persona vuelve a empezar desde Inicio

En el nodo de IA / LLM puedes además desactivar herramientas concretas solo para ese paso, si quieres que ahí el bot no pueda, por ejemplo, agendar.

Ese mismo nodo puede trabajar en segundo plano: en vez de contestarle a la persona, guarda su resultado en una variable para que la usen los nodos siguientes (por ejemplo, un resumen o una clasificación). La persona no ve nada de lo que escribe, y el bot tampoco lo recuerda como algo que le haya dicho.

Qué pasa cuando llega un mensaje nuevo​

Una conversación tiene muchos mensajes, pero el flujo no se recorre entero con cada uno. Por defecto, el bot continúa donde quedó:

  • El primer mensaje recorre el flujo desde Inicio. Si ahí pusiste un saludo, se envía.
  • Los siguientes van directo al último paso de IA que respondió. El saludo no se repite.
  • Si la persona deja de escribir más de 24 horas, su próximo mensaje vuelve a empezar desde Inicio, como una conversación nueva.

Esto se cambia en el botón Ajustes de la barra superior del editor:

OpciónCuándo usarla
Continuar donde quedóLo normal: saludo, conversación con la IA y las ramas que necesites
Empezar siempre desde InicioCuando el flujo clasifica cada mensaje justo después de Inicio (por ejemplo, una Condición que manda a un sitio u otro según lo que escriban)

En el mismo sitio eliges tras cuántas horas sin mensajes se vuelve a empezar, entre 1 y 720.

Ajustes tiene una segunda pestaña, Mensajes rápidos: las respuestas que el agente humano tiene a mano cuando toma una conversación de este bot. No forman parte del flujo: se guardan al momento, no hace falta publicar y son las mismas de la pestaña Mensajes rápidos de la edición del bot. Ver Mensajes rápidos.

Si tu flujo empieza con una Condición o un Switch

En modo Continuar donde quedó, esa condición solo se evalúa en el primer mensaje. El editor te lo marca con un aviso. Si necesitas que decida con cada mensaje, cambia a Empezar siempre desde Inicio.

Hay dos cosas más que hacen volver a Inicio: Derivar a humano y publicar una versión distinta del flujo. Si activas una versión con cambios en los nodos o en sus conexiones, las conversaciones en curso empiezan otra vez desde Inicio en su próximo mensaje. Mover nodos o renombrarlos no cuenta como cambio.

Los mensajes salen en cuanto están listos​

El bot no espera a terminar todo el recorrido para contestar. Cada paso que envía algo (un saludo, una imagen, unos botones) lo manda en cuanto termina. Así, en WhatsApp, Instagram, Messenger y Telegram el saludo llega mientras la IA todavía está preparando su respuesta.

Preguntar y esperar la respuesta​

Para pedir un dato concreto (un nombre, una cédula, una fecha) usa un Mensaje fijo con la pregunta, seguido de Esperar respuesta:

  1. En Guardar respuesta en la variable pon un nombre, por ejemplo cedula. Después puedes usarla en cualquier texto como {{cedula}}.
  2. Si quieres comprobar el formato, rellena Validar con expresión regular. Por ejemplo, ^\d{10}$ exige 10 dígitos. El nodo pasa a tener dos salidas:
    • Válida: sigue el flujo.
    • No válida: conéctala a un mensaje del tipo "Debe tener 10 dígitos" y, de ahí, de vuelta al mismo Esperar respuesta, para que la persona lo intente otra vez.

Extraer datos de lo que escribe la persona​

El nodo Extraer datos lee el mensaje y devuelve los datos que le pidas, cada uno en su variable: cédula, fecha, motivo, lo que definas. No hace falta escribir expresiones regulares.

Por cada dato indicas el nombre de la variable, el tipo (texto, número, fecha, sí/no o una lista cerrada de opciones), una descripción corta —«cédula de 10 dígitos»— y si es obligatorio. La descripción es importante: es lo que la IA usa para saber qué buscar.

El nodo tiene dos salidas:

  • Datos completos: encontró todos los obligatorios.
  • Faltan datos: alguno no estaba. Lo normal es conectar esta salida a un mensaje que lo pida y a un «Esperar respuesta», para volver a intentarlo.

Lo que no aparezca en el mensaje se queda vacío: la IA tiene instrucciones de no inventarlo.

Frenar antes de algo delicado​

El paso Pedir aprobación deja la acción pedida y espera el visto bueno de alguien del equipo. Mientras tanto el bot sigue atendiendo la conversación. Lo explica en detalle Aprobaciones.

Avisar a otra persona​

El paso Enviar mensaje manda algo a un contacto de tu agenda que eliges tú, no a quien está escribiendo. Eliges el canal, la cuenta desde la que sale y el contacto, que se busca por nombre, correo o teléfono.

Al abrir el paso se ve siempre el nombre actual del contacto, aunque el flujo lo haya armado el asistente o se haya importado. Si el contacto ya no existe aparece Contacto no encontrado: elige otro antes de publicar.

Si el contacto no tiene cómo recibir por el canal elegido, el editor te avisa. Para Email basta con que su ficha tenga un correo.

Si un paso falla por algo pasajero​

Los pasos que hablan con el exterior (IA, Extraer datos, API externa, catálogo, documentos) reintentan solos cuando el fallo parece pasajero, esperando un poco más en cada intento. En cada uno puedes ajustar Reintentos si falla: vacío deja el valor recomendado y 0 lo desactiva.

El nodo API externa nunca tumba la conversación: si al final no lo consigue, deja el error en su variable para que puedas ramificar con una Condición. Por defecto hace 3 intentos de hasta 15 segundos cada uno. Si la persona está esperando la respuesta, baja el tiempo de espera (unos 10 segundos) y deja un solo intento, para que una API caída no la haga esperar casi un minuto.

Elegir el modelo de un paso de IA​

Por defecto, los pasos IA / LLM y Extraer datos usan el modelo del bot. En el panel de cada uno, Modelo de IA te deja elegir otro solo para ese paso, entre los de OpenAI, Anthropic (Claude) y Google (Gemini) que tenga activos la plataforma.

Sirve para pagar menos sin perder calidad: un modelo barato basta para clasificar o sacar una cédula de un mensaje, y uno más capaz solo hace falta en el paso que conversa. El consumo de cada paso se ve con su modelo en Métricas.

  • Usar el modelo del bot deja el paso como estaba.
  • Temperatura (0–1) solo aparece con un modelo propio: más baja da respuestas más estables. Los Claude más recientes la ignoran.
  • Si un modelo se retira del catálogo, el panel lo avisa y el paso vuelve a usar el del bot: la conversación no se corta.

Patrones y plantillas​

El botón Plantillas de la barra superior trae flujos ya montados que puedes usar como punto de partida. Ojo con el nombre: son plantillas de diseño de flujo, nada que ver con las plantillas de mensaje de WhatsApp.

Todas siguen la misma regla: después de preguntar algo al cliente hay un Esperar respuesta, y cada rama vuelve a esperar o termina en una IA. Así el bot no toma el "hola" como respuesta, no se despide después de cada mensaje y no deriva a una persona antes de que el cliente conteste.

Algunas plantillas traen un paso que necesita algo propio de tu cuenta, y el editor lo marca hasta que lo configures:

PlantillaQué tienes que poner
Empresa multiáreaEl documento de políticas de RRHH (en rojo hasta que lo elijas)
Catálogo Mercado LibreUna fuente API con tu token de Mercado Libre: la búsqueda pública ya no responde sin él
Restaurante, Hotel, OmnicanalLas fotos: traen una URL de ejemplo (tudominio.com…) y el editor avisa hasta que pongas la tuya

El asistente de flujos puede cargar y simular esas plantillas, y guardarlas como borrador, pero no las activa mientras falte elegir el documento o la fuente API guardada, porque el bot respondería sin ese contenido.

Guardar y publicar​

Aquí hay dos conceptos distintos que conviene no mezclar.

Al terminar de editar pulsas Aplicar flujo, que lleva el dibujo de vuelta al formulario del bot. Eso todavía no lo pone en producción: hay que guardar el bot.

Aparte está el botón Versiones, que abre el historial. Cada bot tiene una versión activa, que es la que atiende de verdad a los clientes. Desde ahí puedes:

  • Guardar flujo actual como nueva versión, opcionalmente con un comentario que explique qué cambiaste. Muy recomendable ponerlo.
  • Cargar en el editor una versión antigua para mirarla, sin activarla.
  • Activar esta versión, que la pone en producción.
  • Eliminar versión.
Antes de un cambio grande

Guarda una versión con el flujo que funciona y ponle un comentario del tipo «funcionando, antes de rehacer el alta». Si el cambio sale mal, vuelves a esa versión en dos clics.

Asistente de flujos (Beta)​

En la barra superior del editor hay un botón Asistente de flujos. Abre un panel de chat a la derecha del lienzo.

Puedes pedirle, en lenguaje natural, que cree o modifique el flujo: añadir nodos, conectar ramas, ajustar prompts de IA, desactivar tools de un nodo LLM, cargar una plantilla, validar el grafo o guardar/activar una versión. Los cambios se aplican al borrador del canvas; para ponerlos en producción sigue haciendo falta Aplicar flujo + guardar el bot, o pedirle explícitamente que guarde/active una versión.

Solo está disponible cuando el bot ya tiene id (bot guardado) y el interruptor Asistente de flujos está activo en Admin → Config. plataforma. Requiere la misma sesión con la que editas el agente.

Probar el flujo antes de publicarlo​

Pídele «simula una conversación» (o «prueba el flujo con estos mensajes: …»). El asistente pasa tus mensajes por el borrador en seco: la IA contesta con un texto fijo, no se envía nada a nadie, no se llama a ninguna API y no gasta consumo de IA. Bajo su respuesta aparece la tarjeta Simulación con cada mensaje, los pasos por los que pasó y lo que habría recibido la persona. Pulsa un mensaje y el lienzo resalta su recorrido.

Así se ve rápido si el saludo sale una sola vez, si un «Esperar respuesta» recibe lo que debe o si una rama termina donde no toca. El asistente la usa por su cuenta antes de proponerte publicar.

Preguntarle por el uso real​

También puede leer las métricas del bot: «¿qué paso falla más?», «¿dónde abandona la gente?», «¿mejoró desde la versión 3?». Responde con la tarjeta Métricas reales (pasos, cuántas conversaciones llegan, errores y tiempo p95) y un botón Ver en el lienzo que enciende la capa de métricas del editor.

Y si le das el id de una conversación, te dice dónde va el bot en ella (qué paso retomará, si espera una respuesta, qué datos guardó). Solo ve los nombres de los datos, nunca lo que escribió la persona. Reiniciarla sigue siendo cosa tuya, desde Estado del bot en la conversación.