# Flujos

## Para qué sirve

Un **flujo** es una automatización que armás vos paso a paso. Siempre tiene la misma forma: algo lo **dispara**, y después se recorre un camino de **pasos**. Por ejemplo: "cada 5 minutos, contá los errores; si son más de 100, avisá por Slack".

Las [automatizaciones](https://lymen.app/docs/operacion/automatizaciones/) de plantilla cubren los casos más comunes; los flujos son para lo que no cubren.

## Cuándo usarlo

- Avisar de algo que ningún perfil de alerta cubre (por ejemplo, un indicador de negocio que baja).
- Esperar y volver a mirar antes de avisar ("si en 15 minutos sigue mal, avisá").
- Disparar una acción cuando se abre o se cierra un incidente, o cuando llega un evento de negocio.
- Probar una dirección de tu red desde un gateway (ver [Chequeos sintéticos](https://lymen.app/docs/operacion/chequeos-sinteticos/)).

## Quién puede qué

| Rol | Qué puede hacer |
|---|---|
| Administración | Todo: crear, editar, activar, pausar, probar, ejecutar, restaurar versiones y eliminar. Es quien ve **Flujos** en el menú. |
| Sistemas | Puede hacer todo menos eliminar y crear canales o contactos. |
| Negocio | No tiene acceso. El historial puede mostrar datos reales de tus consultas. |

## Cómo se crea un flujo, paso a paso

1. En **Flujos**, tocá **Nuevo flujo**.
2. **Elegí el disparador:** qué hace que el flujo arranque (ver abajo).
3. Poné un **nombre** y, si querés, para qué sirve.
4. Tocá el disparador y completalo. Después usá el **+** para sumar pasos: consultar datos, una condición, esperar o una acción. Tocá cada paso para configurarlo.
5. Abrí **Límites y frenos** y ajustalos (ver abajo).
6. Tocá **Probar sin mandar nada**: simula el recorrido sin mandar avisos, emails ni tickets.
7. Tocá **Crear el flujo**. Queda en **borrador**. Cuando estés conforme, tocá **Activar**.

El flujo se guarda solo si está completo y es válido: cada paso que queda incompleto se marca con el motivo. Cada guardado crea una **versión** nueva.

Al terminar, tenés tres pestañas: **Armado**, **Historial** y **Versiones**.

## Reglas generales

- Cada ejecución recorre **un solo camino**, un paso a la vez. No hay ramas en paralelo. Las dos ramas de una condición pueden volver a juntarse en un paso.
- Un flujo tiene **hasta 40 pasos**.
- **Solo cuenta lo que pasa después de activar**: activarlo nunca dispara por lo que ya pasó.
- Pausar frena los disparos nuevos; lo que ya había arrancado termina.
- Los destinos (canales y contactos) tienen que existir de antemano. **Un flujo no acepta una dirección o una URL escrita a mano**: así un flujo no puede mandar datos a un destino que un administrador no haya creado.
- Si alguien deja la empresa, sus flujos siguen funcionando.

## Datos básicos

| Campo | Para qué sirve | Valor por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| Nombre del flujo | Cómo lo ves en Automatizaciones. | Vacío (obligatorio) | 3 a 80 caracteres: letras, números, espacios y `. , : ; ( ) / · _ -`; no puede repetirse | — |
| Para qué sirve (opcional) | Una nota para el equipo. | Vacío | Hasta 500 caracteres | — |

## Disparadores

| Disparador | Cuándo arranca | Qué configurás |
|---|---|---|
| **Por horario** | Cada tantos minutos, o en días y horas fijas. | *Cada N minutos* (1 a 1.440; corre en múltiplos exactos, por ejemplo cada 15 minutos son las :00, :15, :30 y :45; por defecto 5), o *días y horas* (al menos un día y de 1 a 24 horas; por defecto lunes a viernes a las 09:00, en el horario de tu cuenta). |
| **Incidente** | Cuando se **abre** o se **cierra** un incidente. | Evento (se abre o se cierra) y un filtro: severidad, tipo, servicios, servidores y una palabra que tiene que aparecer en el título. Lo que dejes vacío vale para cualquiera. |
| **Anomalía** | Cuando aparece una anomalía (automática o propia). | Servicios (hasta 50) y nombres de anomalía (hasta 50). Vacío = cualquiera. |
| **Evento de negocio** | Cuando llega un evento de negocio. | Nombre del evento (por ejemplo `pago_confirmado`) y hasta 5 filtros por servicio, canal o atributo. |

Detalles que conviene saber:

- Un incidente que arranca dentro de una [ventana de mantenimiento](https://lymen.app/docs/operacion/mantenimiento/) **no** dispara el flujo.
- Los eventos se leen con un retraso chico: uno que llega con más de 45 segundos de atraso no dispara.
- Después de un corte del sistema se corre **un solo** turno, el último, si fue hace menos de una hora.
- Para los chequeos de sitios web usá la [plantilla](https://lymen.app/docs/operacion/chequeos-sinteticos/), no un flujo.

## Tipos de paso

Todos los pasos tienen **Cómo se llama este paso** (hasta 80 caracteres) y **Qué pasa después** (el paso siguiente, o "Termina acá"). Renombrar un paso no rompe las variables que lo usan.

### Ejecutar una consulta

Mira tus datos y deja el resultado a mano para los pasos que siguen.

| Campo | Para qué sirve | Valor por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| Consulta | La pregunta a tus datos, armada con el asistente o escrita a mano (ver [Explorar](https://lymen.app/docs/datos/explorar/)). | Vacía | Hasta 4.000 caracteres | Es **texto fijo**: no admite variables. Una consulta pesada tarda más (tope: 60 segundos por consulta). Solo lee datos, no cambia nada. |
| Cuánto tiempo hacia atrás mira | El período. | — | 1 minuto a 44.640 (31 días); atajos: 5 min, 15 min, 1 hora, 6 horas, 1 día, 7 días | Si la consulta trae su propio período (por ejemplo `last 2h`), manda ese. Más período = más datos leídos. |
| Si este paso falla | Qué hacer ante un error. | Cortar el flujo | Cortar el flujo / Seguir igual | "Seguir igual" continúa aunque no haya resultado. |

Lo que deja disponible: `valor` (el número principal), `filas`, `total`, `maximo`, `minimo`, `unidad`, `tabla` (hasta 10 filas como texto), `primera.<columna>` (una columna de la primera fila), `desde`, `hasta` y `truncado` (si se cortó por el tope de filas).

### Condición

Decide el camino: si se cumple, sigue por **Sí**; si no, por **No**. Si falta el dato, la comparación no se cumple (tampoco "distinto").

| Campo | Para qué sirve | Valor por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| Cuántas reglas tienen que cumplirse | Todas o alguna. | Todas | Todas se cumplen / Alguna se cumple | "Alguna" dispara más. |
| Regla: Dato | Qué se compara. | — | Variables del flujo, del disparador o de un paso anterior | Solo se pueden usar pasos que corren **siempre** antes. |
| Regla: Condición | Cómo se compara. | — | Mayor, mayor o igual, menor, menor o igual, igual, distinto, contiene, no contiene, vacío, no vacío | Los textos no distinguen mayúsculas. |
| Regla: Valor | Con qué se compara. | — | Un número o un texto de hasta 200 caracteres | — |

Hasta 10 reglas por condición.

### Esperar

| Campo | Para qué sirve | Valor por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| Cuánto espera | Minutos antes de seguir. | — | 1 a 1.440 minutos | Mientras espera no consume nada, pero **cuenta para el tiempo máximo de la ejecución**: si la espera no entra, el flujo no se puede guardar. |

### Acción

Hace algo hacia afuera. Elegís **Qué hace**:

| Acción | Qué hace | Qué pide | Observaciones |
|---|---|---|---|
| Avisar por un canal | Un mensaje por Telegram, Slack, Teams o webhook. | Un canal de [Integraciones](https://lymen.app/docs/operacion/integraciones/), asunto (hasta 200) y mensaje (hasta 3.000). | Telegram solo con chat fijo. En Teams un valor no puede armar un link. |
| Mandar un email | Un correo a los contactos que elijas. | De 1 a 20 [contactos](https://lymen.app/docs/operacion/contactos/), asunto y mensaje. | Solo a contactos que ya existen; los inactivos hacen fallar el envío. |
| Crear un ticket | Abre un ticket en la herramienta conectada. | Un canal de tickets (Jira), título (hasta 200), mensaje y severidad (crítica, alta o media). | Si lo disparó un incidente, el ticket es el del incidente y **no se duplica**. |
| Llamar a un webhook | Manda un mensaje con datos a un sistema tuyo. | Un canal de tipo webhook, asunto, mensaje y hasta 20 "datos extra" (nombre y valor, hasta 1.000 caracteres). | Los datos extra viajan en el campo `datos` del mensaje. |
| Chequear desde un gateway | Pide a un gateway que pruebe una dirección de tu red. | Gateway, dirección o puerto y tiempos. | Ver [Chequeos sintéticos](https://lymen.app/docs/operacion/chequeos-sinteticos/). |

Todos tienen **Si este paso falla**: *Cortar el flujo* (por defecto) o *Seguir igual*.

**Variables en los textos.** En asunto, mensaje, título y datos extra podés tocar **Insertar una variable** y elegir de la lista (por ejemplo, la causa del incidente, el nombre del flujo o `valor` de una consulta anterior). Se escriben entre llaves dobles, por ejemplo `{{pasos.conteo.valor}}`. Solo se reemplazan datos: no se evalúan expresiones ni código. Si no hay dato se escribe "sin dato".

## Límites y frenos

Sirven para que un flujo no mande de más. **Las pruebas no cuentan para ninguno.**

| Campo | Para qué sirve | Valor por defecto | Valores válidos | Impacto |
|---|---|---|---|---|
| Tope por minuto del flujo | Máximo de ejecuciones por minuto de este flujo. | 6 | 1 a 60 | Lo que pasa de ese tope **se frena y no se ejecuta** (queda en "Disparos frenados" del historial). La cuenta entera admite 60 ejecuciones por minuto sumando todos los flujos. |
| Período de calma | Minutos sin repetir acciones después de una acción real. | 0 (sin calma) | 0 a 1.440 | Evita el mismo aviso una y otra vez. Lymen sugiere 30 minutos para incidentes, 60 para anomalías y 15 para eventos. Sin calma, un flujo disparado por incidentes puede repetir avisos. |
| Tiempo máximo de una ejecución | Cuánto puede durar una ejecución. | 60 minutos | 1 a 2.880 | Pasado ese tiempo queda como "Se pasó del tiempo máximo". Las esperas tienen que entrar. |

## Probar, ejecutar y activar

| Botón | Qué hace | Impacto |
|---|---|---|
| Probar sin mandar nada | Corre el flujo en modo simulado: las consultas y las condiciones son reales, pero **no se manda nada** (ni avisos, ni emails, ni tickets). | Seguro. Si hay cambios sin guardar, se guardan solos antes. Hasta 5 pruebas por minuto por usuario. |
| Activar / Pausar | Pone en marcha o frena los disparos. | Solo se puede activar un flujo guardado. |
| Ejecutar ahora · manda de verdad | Corre el flujo en el momento. | **Los avisos, emails y tickets salen de verdad.** Pide confirmación. Cuenta para el tope por minuto, pero no para la calma. |
| Eliminar (solo Administración) | Borra el flujo con sus versiones e historial. | No se puede deshacer. |

## Historial y versiones

- **Historial:** una fila por ejecución (cuándo, qué la disparó, tipo, estado, cuánto duró, acciones). Se puede filtrar por tipo (prueba o real) y cancelar una en curso. También lista los **disparos frenados** y por qué (tope del flujo, tope de la cuenta o calma). El historial se conserva, por defecto, 30 días. Todo valor que parezca un secreto (contraseñas, tokens, direcciones con clave) se oculta, pero no pongas secretos en los textos.
- **Versiones:** cada guardado crea una. Podés abrir cualquiera y **Restaurarla**. Una ejecución queda atada a la versión con la que arrancó: editar no cambia lo que ya está corriendo.

| Estado de una ejecución | Significa |
|---|---|
| En cola, Corriendo, Esperando | En curso. |
| Terminó bien / Falló | Resultado final. |
| Cancelada | La cancelaron a mano. |
| Se pasó del tiempo máximo | Superó el tope. |
| Frenada | Nunca arrancó por un freno. |

## Cómo se evitan los avisos duplicados

Si un paso se reintenta o el sistema se reinicia, Lymen no repite un envío que ya salió. Un paso que falla se reintenta hasta 4 veces (esperando 30 segundos, 2 minutos y 8 minutos) si el motivo es pasajero. En algunos destinos (Telegram, Slack, Teams) no hay forma de saber si un envío interrumpido salió; en ese caso el paso falla con "no se sabe si salió" en vez de arriesgarse a duplicar.

## Ejemplos

- **Errores altos.** Disparador: horario, cada 5 minutos → Consulta: contar errores de los últimos 5 minutos → Condición: `valor` mayor que 100 → (Sí) Acción: avisar por Slack con "Hay {{pasos.conteo.valor}} errores". Calma: 30 minutos.
- **Abrir un ticket cuando se cae algo grave.** Disparador: incidente que se abre, severidad crítica → Acción: crear un ticket en Jira.
- **Esperar antes de avisar.** Incidente que se abre → Esperar 15 minutos → Consulta: ver si sigue habiendo errores → Condición → Acción: email a la guardia.

## Problemas comunes

- **No puedo guardar.** Algún paso está incompleto o una variable apunta a un paso que no corre siempre antes. El panel del paso lo explica.
- **No hay canales o contactos para elegir.** Creá el canal en [Integraciones](https://lymen.app/docs/operacion/integraciones/) o el contacto en [Contactos](https://lymen.app/docs/operacion/contactos/); el enlace se abre en otra pestaña.
- **Disparos frenados en el historial.** Se alcanzó el tope por minuto o el período de calma. Ajustalos en Límites y frenos.
- **El flujo no se dispara por un incidente.** Puede ser que arrancó en una ventana de mantenimiento o que el filtro es muy restrictivo.
- **"Otra persona guardó este flujo".** Dos personas editaron a la vez. Podés volver a abrirlo, perdiendo tus cambios sin guardar.
