Tipos de nó
Todo workflow é formado por nós. Cada nó tem um
type que define como o Flowker o processa em tempo de execução.
trigger
Um nó de gatilho é um ponto de entrada de execução. Workflows em draft podem estar incompletos, mas a ativação exige pelo menos um nó de gatilho. Os exemplos desta página mostram apenas a topologia dos nós. Um nó de gatilho real também carrega umtriggerType e a configuração desse gatilho em seu data. Veja Configurando um gatilho de webhook ou Rodando um workflow em um agendamento.
executor
Chama um serviço externo por meio de uma configuração de provedor. Este nó é o principal ponto de integração para motores antifraude, provedores de pagamento, serviços de notificação e outros sistemas externos. Os exemplos desta página mostram apenas a topologia dos nós. Um nó executor real também carrega umproviderConfigId em seu data, além de um executorId que nomeia o executor do catálogo que ele invoca. Um nó que chama uma operação de um documento OpenAPI enviado omite o executorId e carrega operation_path e operation_method no lugar. Veja o Guia de integração.
conditional
Avalia uma condição em relação ao contexto de execução e roteia para ramos diferentes conforme o resultado. Use nós condicionais para implementar lógica de ramificação, por exemplo, roteando para um caminho de aprovação quando o risco é alto, ou seguindo direto quando ele é baixo. A condição fica nodata.condition do nó. Uma expressão de texto livre é avaliada como booleano e produz o conector de saída true ou false. Cada aresta de saída declara qual conector ela segue por meio de sourceHandle. Nós condicionais criados no Console usam uma condição estruturada, baseada em casos, na qual cada caso roteia para o próprio conector de saída. Veja o Editor de canvas.
action
Representa uma operação interna síncronaset_output. Ela pode escrever um valor de saída interpolado e, opcionalmente, substituir o status HTTP da resposta síncrona. Ela não oferece emissão genérica de eventos nem uma operação genérica de mudança de estado.
wait
Pausa a execução por um tempo definido e depois continua com os nós que vêm depois dele. O nó carregadata.durationSeconds, um inteiro de 1 a 43200 (12 horas). A espera é só por tempo: ela não espera uma pessoa nem um evento.
waiting, e as leituras de status e de lista mostram wait com o ID do nó e o deadline. Ela retoma no prazo ou logo depois. Os nós seguintes leem a saída {deadline, firedAt} sob o ID do nó, por exemplo wait-1.firedAt.
O Flowker confere estas regras quando você salva o workflow, e cada recusa responde 422:
Uma execução falha em vez de retomar quando o prazo dela, ou a própria retomada, cai mais de 16 horas depois do início da execução, e quando o workflow mudou nesse meio-tempo. Desativar o workflow faz falhar as execuções dele em espera. As execuções em andamento terminam. Excluir o workflow tenta fazer falhar as execuções pendentes, em andamento e em espera. Um webhook síncrono que chega a um wait responde
202. Obter resultados de uma execução responde FLK-0502 até a execução terminar.
Arestas
Arestas conectam nós e definem caminhos de execução. Cada aresta inclui os campos a seguir:
Exemplo de aresta
data.condition dele e segue todas as arestas de saída cujo sourceHandle corresponde ao resultado do ramo. Se nenhuma aresta corresponder, esse ramo termina. Todos os outros tipos de nó seguem todas as arestas de saída quando concluem com sucesso.
O Flowker recusa salvar ou ativar um workflow em que duas ramificações paralelas de uma mesma execução alcançam o mesmo nó (FLK-0187), porque esse nó rodaria uma vez por ramificação. Ramificações de saídas diferentes de um condicional podem se juntar de novo. O Flowker também recusa uma aresta que sai de um condicional sem sourceHandle, ou por um handle que não é uma das saídas dele (FLK-0115), um ID de nó vazio ou usado duas vezes (FLK-0120) e um nó cujo tipo não é um dos cinco (FLK-0121).
Transições de status
Workflows seguem um ciclo de vida bem definido.
- draft: o estado inicial. Você pode adicionar nós, editar arestas e mudar a configuração apenas no status
draft. - active: um workflow que você ativou. O Flowker pode executá-lo. Ele não aceita modificação enquanto está ativo.
- inactive: um workflow que você desativou. O Flowker não pode mais executá-lo, mas você pode movê-lo de volta para
draftpara editar.
Regras
- Você pode ativar apenas um workflow em
draft(transição:draft → active). - Você pode desativar apenas um workflow
active(transição:active → inactive). - Você pode mover de volta para draft apenas um workflow
inactive(transição:inactive → draft). - Tentar uma transição inválida retorna o erro
FLK-0102. - Tentar modificar um workflow que não está em
draftretorna o erroFLK-0103.
Movendo um workflow inativo de volta para draft
Se você desativou um workflow e quer editá-lo de novo, mova-o de volta paradraft chamando POST /v1/workflows/{id}/draft. Isso torna o workflow editável sem precisar cloná-lo.
Use isso quando você desativou um workflow por engano, ou quando quer iterar sobre um workflow existente em vez de criar uma cópia.
Você pode mover para draft apenas workflows inativos. Para modificar um workflow ativo enquanto ele continua rodando, use a abordagem de clone descrita abaixo.
Iterando com segurança usando clone
Para modificar um workflow ativo, clone-o primeiro. A clonagem cria um novodraft a partir de qualquer status, copiando todos os nós e arestas. Você pode então atualizá-lo sem impactar a versão atual.
Use esta abordagem para versionamento em produção.
Limites técnicos
Workflows com mais de ~50 nós costumam indicar que o fluxo deveria ser dividido em workflows menores e combináveis.
Padrões comuns
Sequencial
O padrão mais simples. Os nós executam em uma sequência linear. Use quando cada passo depende do anterior e não precisa de ramificação.Ramificação condicional
Um nóconditional avalia a condição dele e roteia a execução de acordo. O resultado do ramo seleciona as arestas de saída que o nó segue, combinadas por sourceHandle.
Exemplos reais
Verificação antifraude
Uma transação chega, um nó executor obtém a pontuação de fraude e um nó condicional roteia a execução para a aprovação ou a rejeição.Orquestração de pagamento
Um fluxo linear que valida os dados de pagamento recebidos, roteia para o provedor adequado e envia uma confirmação.Onboarding de KYC
Use um workflow para enviar uma verificação de documento a um sistema externo de aprovação. Um nó wait pausa só por um tempo definido: para revisão humana assíncrona, inicie depois uma execução separada de workflow quando o seu sistema de aprovação publicar a decisão dele.Fluxo de aprovação manual
Um nó executor envia a solicitação de revisão. Um executor busca a decisão da revisão no sistema externo. Um nó condicional então roteia para o caminho de aprovado ou de rejeitado. Um nó wait pausa por um tempo definido e não espera uma pessoa, então uma decisão humana precisa vir de um sistema externo que o workflow consulta.Boas práticas
Convenções de nomes de nós
Use nomes descritivos e orientados a ação, que comuniquem o que o nó faz, não de que tipo ele é.- correto:
Validate Payment Data,Get Fraud Score,Notify Customer,Get Approval Decision - errado:
executor1,conditional node,node3
Expressões de condição
O Flowker avalia condições de texto livre em nós condicionais em relação ao contexto de execução, em tempo de execução. Um nó sem mapeamento de saída guarda o envelope da resposta, então uma condição lê um campo da resposta sobbody. Mantenha as condições simples e explícitas:
- Use comparações diretas de campo:
<nodeId>.body.status == 'approved' - Use comparações numéricas:
<nodeId>.body.riskScore < 70 - Use campos booleanos:
<nodeId>.body.reviewRequired == true - Combine com
AND/ORquando precisar:<nodeId>.body.score < 70 AND <nodeId>.body.verified == true
conditional um nome claro que resuma a decisão.
Uma condição ausente faz a execução falhar, e o mesmo acontece com uma condição que não consegue ser avaliada em tempo de execução. Sempre teste as condições antes de ativar um workflow.
Estratégias de tratamento de erros
Projete workflows para tratar a falha de forma explícita:- Adicione caminhos de rejeição a partir de nós
conditionalpara cada ponto de decisão que pode falhar. - Use nós
executorseparados para a lógica de nova tentativa ou para provedores de fallback. - Nomeie os caminhos de erro com clareza (por exemplo,
Reject and Notify,Fallback to Manual Review) para que os registros de execução se expliquem sozinhos.
Evitando ciclos
O Flowker usa um guarda de ciclos baseado em DFS em tempo de execução. Quando o guarda de ciclos encontra um ciclo durante a execução, o workflow falha comFLK-0508. O Flowker não detecta ciclos quando você salva um workflow, exceto em um workflow que tem um nó wait (FLK-0186), então valide a estrutura das arestas antes de ativar.
Regras para evitar ciclos:
- As arestas devem sempre apontar para frente no fluxo, nunca de volta para um nó já executado.
- Revise o grafo visualmente antes de ativar qualquer workflow com caminhos de ramificação ou de junção.
- Se você precisar de uma nova tentativa ou de um laço, modele isso como uma invocação de workflow separada, não como uma aresta de retorno no grafo atual.
Versionamento via clone
Nunca edite um workflow ativo diretamente. Em vez disso:1
Clone o workflow (cria um novo
draft com todos os nós e arestas copiados).2
Faça suas mudanças no draft.
3
Valide ou pré-visualize o draft.
4
Ative a nova versão. Um método e um caminho de webhook pertencem a um único workflow ativo por vez: para um workflow disparado por webhook, desative antes a versão antiga, ou dê à nova versão um caminho próprio.
5
Desative a versão antiga se você não precisar mais dela.
Referência de erros
Os códigos de erro a seguir são relevantes para o design e a execução de workflows:

