Antes de começar
- Um workflow em status
draft. Somente um workflow em draft aceita uma edição, portanto escreva o trigger antes de ativá-lo. Veja Primeiros passos com o Flowker para o caminho de criação e ativação. - O binário worker em execução com o scheduler habilitado.
SCHEDULER_ENABLEDé resolvido comotruea menos que você o defina comofalse, e a fila precisa deSCHEDULER_REDIS_HOST: sem host, o binário worker não inicia e nenhum workflow agendado dispara. Verifique essa variável primeiro quando os seus agendamentos nunca disparam. Veja Variáveis do scheduler. - A permissão
readsobre o recursoworkflowspara listar ocorrências e contagens, eupdatesobre o mesmo recurso para executar ou descartar uma.
Passo 1: Escreva o node do trigger de schedule
Os triggers já vêm incluídos. Você os descobre no catálogo e nunca cria um. Obter um trigger do catálogo retorna o JSON Schema do trigger de schedule direto da instância em execução:
type: "trigger" e estes campos no seu data:
O que a expressão cron aceita
Cinco campos separados por espaços. Cada campo aceita*, um valor, uma lista (0,30), um intervalo (9-17) ou um passo (*/15, 9-17/2). O dia da semana vai de 0 a 7, e tanto 0 quanto 7 significam domingo. Quando você restringe o dia do mês e o dia da semana ao mesmo tempo, o agendamento dispara em um dia que satisfaz qualquer um dos dois campos: 0 9 13 * 5 dispara no dia 13 e em todas as sextas-feiras.
Um minuto é a cadência mais fina que uma expressão de 5 campos consegue expressar. Para algo mais rápido, atenda a chamada no momento em que ela chega com um trigger de webhook.
O Flowker verifica a expressão quando você salva o workflow e novamente quando você o ativa, e responde FLK-0117 quando ela não se sustenta. Estas formas não se sustentam:
- Uma expressão de seis campos, como
*/30 * * * * *. - Uma macro, como
@dailyou@every 5m. - Um dia ou um mês com nome, como
MON,MON-FRIousun. - Um token
Lou#, como0 9 L * *ou0 9 * * 5#2. - Um valor fora do intervalo do seu campo, como
60minutos,24horas, dia do mês0ou32, mês13ou dia da semana8. - Um passo
/0.
Como o fuso horário funciona
Os campos do cron são hora de relógio de parede no fuso que você nomeia, e toda hora que a API retorna é UTC. Um agendamento0 9 * * * em America/Sao_Paulo reporta 12:00Z. Um fuso que observa horário de verão mantém a hora de relógio de parede na virada: a mesma expressão em America/New_York reporta 14:00Z no inverno e 13:00Z no verão.
Passo 2: Ative o workflow e leia a cadência
1
Salve o workflow
Envie o node com o resto do seu workflow para Criar um workflow, ou para Atualizar um workflow se o draft já existir. O Flowker valida o cron aqui.
2
Confira a cadência antes de assumi-la
Listar próximas ocorrências agendadas calcula os próximos disparos direto do trigger, então você pode lê-los enquanto o workflow ainda é um draft.
limit aceita de 1 a 50 e o padrão é 10. Um valor fora desse intervalo responde FLK-0304.3
Ative-o
Chame Ativar um workflow. Em menos de um minuto o engine registra a próxima ocorrência e a enfileira para o horário dela.
Passo 3: Veja quais ocorrências não foram executadas
Uma ocorrência fica retida quando o engine chega até ela mais de um minuto depois do horário dela e ninguém pediu que aquele horário fosse executado: o serviço estava fora, a fila estava atrasada, o processo reiniciou. O Flowker nunca executa uma ocorrência retida por conta própria — ele a guarda para a sua decisão, no estado
pending-review. Reter é o único resultado que não é terminal: uma ocorrência retida continua acionável até você executá-la ou descartá-la.
O Flowker nunca preenche um horário que passou. Então a lista de retidas guarda os disparos que o Flowker já havia registrado e não conseguiu executar — não uma entrada para cada horário que passou durante uma indisponibilidade — e a cadência em si retoma a partir do próximo horário futuro.
Uma ocorrência é ignorada quando o engine a assumiu e a encerrou sem executar o workflow. Uma ocorrência ignorada é terminal e carrega um skipReason:
As duas classes não se separam pelo momento do disparo. Uma coisa esse momento decide: um horário atrasado que você nunca pediu para executar aparece na lista de retidas, nunca na de ignoradas. Depois que você pede que um horário retido seja executado, a idade dele para de segurá-lo. O engine então o assume como qualquer outra ocorrência, e os três motivos acima podem encerrá-lo. Então um
scheduledFor bem antigo é normal na lista de ignoradas, e não significa que o horário disparou em tempo. O Passo 4 cobre em que a sua própria execução pode terminar.
Três leituras cobrem o quadro completo:
1
Liste as ocorrências retidas de um workflow
Listar ocorrências agendadas retidas retorna da mais antiga para a mais recente.
scheduledFor é o horário que a ocorrência representa, e status é o que decide se você pode agir sobre ela.Esta rota não aceita limit nem cursor de paginação, e retorna no máximo 100 ocorrências. Planeje uma recuperação em massa com isso em mente: trabalhe as linhas que você recebe e leia a lista novamente. A contagem mais abaixo informa o total real. Descartar a lista inteira também cobre todas as ocorrências pendentes de revisão, não apenas as 100 que uma única leitura mostra.2
Liste as ocorrências ignoradas
Listar ocorrências agendadas ignoradas retorna da mais antiga para a mais recente, cada uma com o seu Uma sequência de omissões
skipReason. limit aceita de 1 a 50.active-run significa que o workflow demora mais do que o intervalo entre dois disparos. Alargue a cadência ou faça o workflow terminar mais rápido.3
Conte o que está esperando em todos os workflows
Contar ocorrências pendentes de revisão responde por todo o tenant em uma única chamada, que é o que você consulta para um badge de revisão. O mapa é esparso: um workflow sem nada esperando não aparece nele.Acrescente
?workflowIds=<id>,<id> para limitar as contagens aos workflows que interessam a você.200 com um array occurrences vazio para um id de workflow que o seu tenant não possui, então uma lista vazia significa “nada a revisar aqui”.
Passo 4: Execute ou descarte uma ocorrência retida
Executar e descartar agem sobre uma ocorrência cujo
status é pending-review. Qualquer outro estado responde FLK-0755, o que também torna segura uma chamada repetida: a segunda é recusada em vez de agir duas vezes. A sua própria execução deixa a ocorrência em um desses outros estados: ela sai de pending-review na hora.
Uma execução que você pede sai da lista de retidas de imediato, e a idade do horário não a segura mais. Ela não promete que o workflow execute:
- O workflow executa. A execução aparece em Listar execuções para aquele workflow.
- O engine encerra a ocorrência como ignorada. Ela sai da lista de retidas para a de ignoradas com um dos três motivos acima.
active-runsignifica que outra execução do workflow ainda estava em andamento.workflow-gonesignifica que o workflow não estava ativo quando a sua execução chegou ao engine.execution-duplicatesignifica que o trabalho daquele horário já havia sido executado.
FLK-0755. Leia as duas listas antes de concluir algo sobre um horário que você tentou recuperar. A linha ignorada pode registrar a recusa da sua recuperação, não a do disparo original.
Mantenha o workflow ativo enquanto você trabalha a lista. Uma execução recarrega o workflow, e um workflow que não está ativo encerra a ocorrência como uma omissão workflow-gone em vez de executá-la.
1
Execute uma ocorrência
Executar uma ocorrência retida a move para A execução cobre aquele único horário. Ela não desloca a cadência: o próximo disparo continua sendo o que o engine já planejou.
queued e a entrega ao mesmo caminho de execução que um disparo agendado usa. Ela começa em um ou dois segundos.2
Descarte uma ocorrência
Descartar uma ocorrência retida a move para
discarded, que é terminal. A ocorrência nunca é executada e sai da lista de retidas.3
Limpe toda a lista de retidas de um workflow
Descartar todas as ocorrências retidas descarta, em uma única escrita, todas as ocorrências daquele workflow que estão pendentes de revisão, e informa quantas foram movidas.Sem nada pendente de revisão, ela responde
200 com "discarded": 0, então uma chamada repetida é segura.Confirme que funcionou
- A cadência está saudável quando Listar próximas ocorrências agendadas retorna horários futuros e a lista de retidas se mantém curta.
- Uma execução funcionou quando a ocorrência saiu da lista de retidas e a execução aparece em Listar execuções para aquele workflow.
- Um descarte funcionou quando a ocorrência saiu da lista de retidas e a contagem de pendentes de revisão daquele workflow caiu.
Mude ou pause uma cadência
Somente um workflow em draft aceita uma edição, então mudar a cadência são quatro chamadas:
- Desative o workflow. O Flowker para de registrar novas ocorrências para ele.
- Mova-o para draft.
- Atualize o workflow com o novo valor de
cron,timezoneouenabled. - Ative-o. Em menos de um minuto o engine registra a próxima ocorrência da nova cadência.
Uma ocorrência que o Flowker registrou antes da mudança continua pendente. Leia a lista de retidas depois de mudar a cadência e limpe o que você não quiser mais.
Quando algo falha
Duas falhas não respondem nenhum código de erro:
- As próximas ocorrências são listadas, mas nada nunca é executado. A API calcula a cadência por conta própria, enquanto o binário worker é quem a dispara. Confirme que o worker está em execução e que
SCHEDULER_REDIS_HOSTestá definido. Veja Variáveis do scheduler. - Nada de novo é registrado para um workflow ativo. Verifique
enabledno node trigger:falsemantém o workflow ativo e o agendamento dele em silêncio.
Próximos passos
Configurando um trigger de webhook
Inicie o mesmo workflow a partir de uma chamada HTTP recebida em vez de uma cadência.
Guia de design de workflows
Construa o resto do grafo em que o trigger entra.

