Antes de empezar
- Un workflow en estado
draft. Solo un workflow en borrador acepta una edición, así que escribe el disparador antes de activarlo. Consulta Primeros pasos con Flowker para conocer el camino de creación y activación. - El binario del worker en ejecución con el scheduler habilitado. La variable
SCHEDULER_ENABLEDse resuelve atruea menos que la establezcas enfalse, y la cola necesitaSCHEDULER_REDIS_HOST. Sin host, el binario del worker no arranca y ningún workflow programado se dispara. Revisa esa variable primero cuando tus programaciones nunca se disparan. Consulta Variables del scheduler. - El permiso
readsobre el recursoworkflowspara listar ocurrencias y conteos, yupdatesobre el mismo recurso para ejecutar o descartar una.
Paso 1: Escribe el nodo disparador de programación
Los disparadores vienen integrados. Los descubres en el catálogo y nunca creas uno. Obtener un disparador del catálogo devuelve el JSON Schema del disparador de programación desde la instancia en ejecución:
type: "trigger" y estos campos en su data:
Qué acepta la expresión cron
Cinco campos, separados por espacios. Cada campo acepta*, un valor, una lista (0,30), un rango (9-17) o un paso (*/15, 9-17/2). El día de la semana va de 0 a 7, donde tanto 0 como 7 significan domingo. Cuando restringes el día del mes y el día de la semana al mismo tiempo, la programación se dispara en un día que coincide con cualquiera de los dos campos. La expresión 0 9 13 * 5 se dispara el día 13 y cada viernes.
Un minuto es la cadencia más fina que puede expresar una expresión de 5 campos. Para algo más rápido, recibe la llamada según llega con un disparador de webhook.
Flowker verifica la expresión cuando guardas el workflow y otra vez cuando lo activas, y responde FLK-0117 cuando no es válida. Estas formas no son válidas:
- Una expresión de seis campos, como
*/30 * * * * *. - Una macro, como
@dailyo@every 5m. - Un día o un mes con nombre, como
MON,MON-FRIosun. - Un token
Lo#, como0 9 L * *o0 9 * * 5#2. - Un valor fuera del rango de su campo, como
60minutos,24horas, día del mes0o32, mes13, o día de la semana8. - Un paso
/0.
Cómo funciona la zona horaria
Los campos del cron son la hora de reloj en la zona que nombras, y cada hora que devuelve la API es UTC. Una programación0 9 * * * en America/Sao_Paulo reporta 12:00Z. Una zona que observa el horario de verano mantiene la hora de reloj a través del cambio: la misma expresión en America/New_York reporta 14:00Z en invierno y 13:00Z en verano.
Paso 2: Activa el workflow y lee la cadencia
1
Guarda el workflow
Envía el nodo con el resto de tu workflow a Crear un workflow, o a Actualizar un workflow si el borrador ya existe. Flowker valida el cron aquí.
2
Revisa la cadencia antes de comprometerte con ella
Listar las próximas ocurrencias programadas calcula los próximos disparos directamente desde el disparador, así puedes leerlos mientras el workflow sigue siendo un borrador.
limit acepta de 1 a 50 y de forma predeterminada es 10. Un valor fuera de ese rango responde FLK-0304.3
Actívalo
Llama a Activar un workflow. El productor con control de liderazgo barre en un intervalo predeterminado de 60 segundos. Después de un barrido exitoso, Flowker registra y encola la siguiente ocurrencia para su franja.
Paso 3: Ve qué ocurrencias no se ejecutaron
Una ocurrencia queda retenida cuando el motor la alcanza más de un minuto después de su franja y nadie ha pedido que esa franja se ejecute. Las causas comunes son un servicio que estaba caído, una cola atrasada o un proceso que se reinició. Flowker nunca ejecuta una ocurrencia retenida por su cuenta. La guarda para tu decisión, en el estado
pending-review. Una ocurrencia retenida sigue disponible para los endpoints de ejecución y de descarte.
Flowker nunca rellena en retroactivo una franja que pasó. Por eso la lista de retenidas contiene los disparos que Flowker ya había registrado y no pudo ejecutar. No contiene una entrada por cada franja que pasó durante una caída. La cadencia misma se reanuda desde la siguiente franja futura.
Una ocurrencia queda omitida cuando el motor la tomó y la cerró sin ejecutar el workflow. El scheduler nunca vuelve a ejecutar una ocurrencia omitida. Una ocurrencia omitida lleva un skipReason, y los endpoints de ejecución y de descarte no la aceptan:
Las dos clases no se separan por el momento. Una cosa sí decide el momento: una franja tardía que nunca pediste ejecutar cae en la lista de retenidas, nunca en la lista de omitidas. Después de que pides que una franja retenida se ejecute, su antigüedad deja de frenarla. El motor la toma entonces como cualquier otra ocurrencia, y las tres razones de arriba pueden cerrarla. Por eso un
scheduledFor muy en el pasado es normal en la lista de omitidas, y no significa que la franja se disparó a tiempo. El Paso 4 cubre en qué puede terminar tu propia ejecución.
Tres lecturas cubren el panorama completo:
1
Lista las ocurrencias retenidas de un workflow
Listar ocurrencias programadas retenidas las devuelve con las más antiguas primero.
scheduledFor es la franja que representa la ocurrencia, y status es lo que decide si puedes actuar sobre ella.Esta ruta no acepta limit ni cursor de página, y devuelve como máximo 100 ocurrencias. Planifica una recuperación masiva alrededor de eso: trabaja las filas que obtienes y luego lee la lista de nuevo.El conteo de abajo reporta el total en pending-review. La lista de retenidas puede contener más filas que ese conteo, porque también incluye ocurrencias missed. El estado missed dura poco: una franja tardía lo mantiene mientras el motor retiene la franja como pending-review. Los endpoints de ejecución y de descarte no aceptan ese estado, así que lee la lista de nuevo y actúa cuando la fila muestre pending-review. Descartar la lista completa también cubre cada ocurrencia pendiente de revisión, no solo las 100 que te muestra una sola lectura.2
Lista las ocurrencias omitidas
Listar ocurrencias programadas omitidas las devuelve con las más antiguas primero, cada una con su Omisiones repetidas por
skipReason. Cuando se proporciona, limit acepta de 1 a 50. Cuando se omite, de forma predeterminada es 100.active-run significan que el workflow tarda más que el intervalo entre dos disparos. Amplía la cadencia, o haz que el workflow termine más rápido.3
Cuenta lo que espera en todos los workflows
Contar ocurrencias pendientes de revisión responde por todo el tenant en una sola llamada, que es lo que consultas para una insignia de revisión. El mapa es disperso: un workflow sin nada en espera está ausente de él.Agrega
?workflowIds=<id>,<id> para acotar los conteos a los workflows que te interesan.200 con un arreglo occurrences vacío para un id de workflow que tu tenant no posee, así que una lista vacía significa “aquí no hay nada que revisar”.
Flowker expone los datos subyacentes de la programación a través de sus APIs de próximas, de retenidas y de conteo de pendientes de revisión. Consulta la documentación de Console para orientación sobre la UI.
Paso 4: Ejecuta o descarta una ocurrencia retenida
La ejecución y el descarte actúan sobre una ocurrencia cuyo
status es pending-review. Cualquier otro estado responde FLK-0755, lo que también hace segura una llamada repetida: la segunda llamada responde el mismo error en lugar de actuar dos veces. Tu propia ejecución pone la ocurrencia en uno de esos otros estados: deja pending-review de inmediato.
Una ejecución que pides deja la lista de retenidas de inmediato, y la antigüedad de la franja ya no la frena. No promete que el workflow se ejecute:
- El workflow se ejecuta. La ejecución aparece en Listar ejecuciones para ese workflow.
- El motor cierra la ocurrencia como omitida. Deja la lista de retenidas por la lista de omitidas con una de las tres razones de arriba. Una razón
active-runsignifica que otra ejecución del workflow seguía en curso. Una razónworkflow-gonesignifica que el workflow no estaba activo cuando tu ejecución llegó al motor. Una razónexecution-duplicatesignifica que el trabajo de esa franja ya se había ejecutado.
workflow-gone en lugar de ejecutarla.
1
Ejecuta una ocurrencia
Ejecutar una ocurrencia retenida la mueve a La ejecución cubre esa única franja. No desplaza la cadencia: el siguiente disparo sigue siendo el que el motor ya planeó.
queued y encola una ejecución forzada en el mismo camino de ejecución que usa un disparo programado. El reenviador de tareas diferidas revisa cada segundo de forma predeterminada. La hora de inicio real depende de la disponibilidad del worker y de la capacidad de la cola.2
Descarta una ocurrencia
Descartar una ocurrencia retenida la mueve a
discarded, que es terminal. La ocurrencia nunca se ejecuta y deja la lista de retenidas.3
Limpia toda la lista de retenidas de un workflow
Descartar todas las ocurrencias retenidas descarta, en una sola escritura, cada ocurrencia de ese workflow pendiente de revisión, y reporta cuántas movió.Sin nada pendiente de revisión responde
200 con "discarded": 0, así que una llamada repetida es segura.Confirma que funcionó
- La cadencia está sana cuando Listar las próximas ocurrencias programadas devuelve franjas futuras y la lista de retenidas se mantiene corta.
- Una ejecución funcionó cuando la ocurrencia ha dejado la lista de retenidas y la ejecución aparece en Listar ejecuciones para ese workflow.
- Un descarte funcionó cuando la ocurrencia ha dejado la lista de retenidas y el conteo de pendientes de revisión de ese workflow ha bajado.
Cambia o pausa una cadencia
Solo un workflow en borrador acepta una edición, así que un cambio de cadencia son cuatro llamadas:
- Desactiva el workflow. Flowker deja de registrar nuevas ocurrencias para él.
- Muévelo a borrador.
- Actualiza el workflow con el nuevo valor de
cron,timezoneoenabled. - Actívalo. El productor con control de liderazgo barre en un intervalo predeterminado de 60 segundos. Después de un barrido exitoso, Flowker registra y encola la siguiente ocurrencia de la nueva cadencia.
Una ocurrencia retenida que Flowker registró antes del cambio sigue pendiente de revisión. Lee la lista de retenidas después de un cambio de cadencia, y limpia lo que ya no quieras.
Cuando algo sale mal
Dos fallas no responden ningún código de error:
- La lista de próximas muestra ocurrencias, pero nunca se ejecuta nada. La API calcula la cadencia por su cuenta, mientras que el binario del worker es lo que la dispara. Confirma que el worker se ejecuta y que estableciste
SCHEDULER_REDIS_HOST. Consulta Variables del scheduler. - Flowker no registra nada nuevo para un workflow activo. Revisa
enableden el nodo disparador:falsemantiene el workflow activo y su programación en silencio.
Qué sigue
Configurar un disparador de webhook
Inicia el mismo workflow desde una llamada HTTP entrante en lugar de una cadencia.
Guía de diseño de workflows
Construye el resto del grafo al que entra el disparador.

