Programacion de Workflows (Schedule)
Que es el Schedule
Sección titulada «Que es el Schedule»El sistema de Schedule permite que los workflows se ejecuten automaticamente en intervalos definidos utilizando expresiones cron. Internamente, el sistema utiliza la libreria node-schedule para gestionar los jobs programados.
Esto es util 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 automaticamente.
Una vez configurado, el workflow se ejecutara automaticamente segun la frecuencia definida en la expresion cron, sin necesidad de intervencion manual.
Formato de expresiones Cron
Sección titulada «Formato de expresiones Cron»Las expresiones cron se componen de 5 campos separados por espacios:
* * * * *| | | | || | | | +-- Dia de la semana (0-7, donde 0 y 7 = Domingo)| | | +---- Mes (1-12)| | +------ Dia del mes (1-31)| +-------- Hora (0-23)+---------- Minuto (0-59)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 | Descripcion |
|---|---|
* * * * * | 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 |
Gestion del Schedule
Sección titulada «Gestion 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 automaticamente durante el arranque del sistema.
reloadSingleWorkflow(id)
Sección titulada «reloadSingleWorkflow(id)»Recarga un workflow especifico sin necesidad de reiniciar el servidor. Util 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. Util para mostrar al usuario cuando se ejecutara 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 ejecucion
Sección titulada «Comportamiento de ejecucion»- Cada ejecucion programada genera un workflowId unico, 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 ejecucion 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 |
|---|---|---|
| Funcion | Inicia workflows nuevos periodicamente | Pausa un workflow en un punto especifico |
| Alcance | Crea nuevas instancias de ejecucion | Afecta solo la instancia actual |
| Configuracion | Expresion cron en el workflow | Fecha/hora o duracion 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 ejecucion de un workflow en un punto especifico del flujo.
- Programa la reanudacion en una fecha y hora futura.
- Utiliza el delayMonitorService para gestionar la reanudacion 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 ejecucion, mientras que el Schedule INICIA flujos nuevos de forma periodica.
Ejemplo: Reporte diario automatico
Sección titulada «Ejemplo: Reporte diario automatico»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) -> EndDescripcion de cada paso:
- Start: Se ejecuta automaticamente 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 ejecucion del workflow.
Ejemplo: Sincronizacion periodica
Sección titulada «Ejemplo: Sincronizacion 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 -> EndDescripcion de cada paso:
- Start: Se ejecuta automaticamente cada 30 minutos.
- HTTP: Realiza una peticion 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 ejecucion del workflow.