Programación de Workflows (Schedule)
Que es el Schedule
Sección titulada «Que es el Schedule»El sistema de Schedule permite que los workflows se ejecuten automáticamente en intervalos definidos utilizando expresiones cron. Internamente, el sistema utiliza la libreria node-schedule para gestionar los jobs programados.
Esto es útil para tareas recurrentes como generar reportes, sincronizar datos con sistemas externos, enviar correos periodicos o ejecutar procesos de mantenimiento.
Como activar un Schedule
Sección titulada «Como activar un Schedule»- En el editor de workflows, activar la propiedad
active_schedule: true. - Definir la expresion cron en el campo
schedule. - El workflow debe tener un nodo Start como trigger (no un nodo Webhook).
- Al guardar el workflow, el workflowManager registra el job automáticamente.
Una vez configurado, el workflow se ejecutará automáticamente según la frecuencia definida en la expresion cron, sin necesidad de intervención manual.
Formato de expresiones Cron
Sección titulada «Formato de expresiones Cron»Las expresiones cron se componen de 5 campos separados por espacios:
Caracteres especiales
Sección titulada «Caracteres especiales»| Caracter | Significado |
|---|---|
* | Cualquier valor |
, | Lista de valores (ej: 9,18 = 9 y 18) |
- | Rango de valores (ej: 1-5 = lunes a viernes) |
/ | Incremento (ej: */5 = cada 5 unidades) |
Ejemplos de expresiones comunes
Sección titulada «Ejemplos de expresiones comunes»| Expresion | Descripción |
|---|---|
* * * * * | Cada minuto |
*/5 * * * * | Cada 5 minutos |
*/15 * * * * | Cada 15 minutos |
0 * * * * | Cada hora (en el minuto 0) |
0 9 * * * | Diario a las 9:00 AM |
0 9,18 * * * | Dos veces al dia (9:00 AM y 6:00 PM) |
0 9 * * 1-5 | Lunes a viernes a las 9:00 AM |
0 0 * * 0 | Cada domingo a medianoche |
0 0 1 * * | Primer dia de cada mes a medianoche |
0 8 1 1 * | 1 de enero a las 8:00 AM |
30 2 * * * | Diario a las 2:30 AM |
Gestión del Schedule
Sección titulada «Gestión del Schedule»El sistema proporciona las siguientes funciones para gestionar los workflows programados:
loadScheduledWorkflows()
Sección titulada «loadScheduledWorkflows()»Carga todos los workflows con schedule activo al iniciar el servidor. Se ejecuta automáticamente durante el arranque del sistema.
reloadSingleWorkflow(id)
Sección titulada «reloadSingleWorkflow(id)»Recarga un workflow especifico sin necesidad de reiniciar el servidor. Útil cuando se modifica la expresion cron o se activa/desactiva el schedule de un workflow individual.
getNextWorkflowRuns(ids, limit)
Sección titulada «getNextWorkflowRuns(ids, limit)»Obtiene las proximas ejecuciones programadas para uno o varios workflows. Recibe un arreglo de IDs y un limite de resultados. Útil para mostrar al usuario cuando se ejecutará su workflow.
Almacenamiento en memoria
Sección titulada «Almacenamiento en memoria»Los jobs programados se almacenan en memoria del proceso de Node.js. Esto significa que no persisten entre reinicios del servidor. Sin embargo, al iniciar el servidor, loadScheduledWorkflows() se encarga de recargar todos los jobs activos desde la base de datos.
Comportamiento de ejecución
Sección titulada «Comportamiento de ejecución»- Cada ejecución programada genera un workflowId único, lo que permite rastrear cada instancia de forma independiente.
- El workflow se ejecuta como si fuera un trigger manual, es decir, sin query params ni datos de webhook.
- El nodo Start proporciona los datos iniciales que se hayan configurado en el workflow.
- Si la ejecución anterior del mismo workflow aun esta en curso cuando llega el siguiente intervalo, se lanza una nueva instancia en paralelo. No se espera a que termine la anterior.
Delay dentro del workflow - Diferencia con Schedule
Sección titulada «Delay dentro del workflow - Diferencia con Schedule»Es importante no confundir el Schedule con el nodo Delay:
| Caracteristica | Schedule | Delay |
|---|---|---|
| Función | Inicia workflows nuevos periódicamente | Pausa un workflow en un punto especifico |
| Alcance | Crea nuevas instancias de ejecución | Afecta solo la instancia actual |
| Configuración | Expresion cron en el workflow | Fecha/hora o duración en el nodo |
| Gestion | workflowManager y node-schedule | delayMonitorService |
Nodo Delay en detalle
Sección titulada «Nodo Delay en detalle»- El nodo Delay pausa la ejecución de un workflow en un punto especifico del flujo.
- Programa la reanudación en una fecha y hora futura.
- Utiliza el delayMonitorService para gestionar la reanudación del flujo cuando se cumple el tiempo configurado.
- El estado del workflow se persiste para que pueda reanudarse incluso si el servidor se reinicia.
En resumen: el Delay pausa UN flujo que ya esta en ejecución, mientras que el Schedule INICIA flujos nuevos de forma periodica.
Ejemplo: Reporte diario automático
Sección titulada «Ejemplo: Reporte diario automático»Este ejemplo muestra un workflow que genera y envia un reporte de ventas diario de lunes a viernes a las 9:00 AM:
Start (schedule: "0 9 * * 1-5") -> SQL Query (obtener datos del dia) -> DataTransform (formatear reporte) -> SendMail (enviar reporte) -> EndDescripción de cada paso:
- Start: Se ejecuta automáticamente de lunes a viernes a las 9:00 AM.
- SQL Query: Ejecuta una consulta SQL para obtener los datos de ventas del dia anterior.
- DataTransform: Formatea los datos en una estructura adecuada para el reporte (tablas, totales, etc.).
- SendMail: Envia el reporte por correo electronico a los destinatarios configurados.
- End: Finaliza la ejecución del workflow.
Ejemplo: Sincronización periodica
Sección titulada «Ejemplo: Sincronización periodica»Este ejemplo muestra un workflow que consulta una API externa cada 30 minutos y guarda los datos nuevos:
Start (schedule: "*/30 * * * *") -> HTTP (consultar API externa) -> Decision (hay datos nuevos?) -> true: Iterator (procesar cada registro) -> DataStore (guardar) -> false: End -> Merge -> EndDescripción de cada paso:
- Start: Se ejecuta automáticamente cada 30 minutos.
- HTTP: Realiza una petición a la API externa para obtener datos actualizados.
- Decision: Evalua si la respuesta contiene datos nuevos que deban procesarse.
- Iterator: Si hay datos nuevos, itera sobre cada registro individualmente.
- DataStore: Guarda cada registro en la base de datos.
- Merge: Une las ramas del flujo (true/false) para continuar hacia el final.
- End: Finaliza la ejecución del workflow.