Tipos de nodes
Todo workflow é construído a partir de nodes. Cada node possui um
type que define como o Flowker o processa em tempo de execução.
trigger
Um node trigger é um ponto de entrada da execução. Workflows em draft podem estar incompletos, mas a ativação exige pelo menos um node trigger. Quando uma execução começa por um trigger, o motor entra por esse node e inicia o roteamento a partir dele. Os exemplos desta página mostram apenas a topologia dos nodes. Um node trigger real também carrega umtriggerType e a configuração desse trigger em seu data — veja Configurando um trigger de webhook ou Executando um workflow em um agendamento.
executor
Chama um serviço externo por meio de uma configuração de provider. Este é o bloco fundamental para integração com motores de fraude, providers de pagamento, serviços de notificação e outros sistemas externos. Os exemplos desta página mostram apenas a topologia dos nodes. Um node executor real também carrega umproviderConfigId e, se usar um executor do catálogo, um executorId em seu data. Um node que chama uma operação de um documento OpenAPI enviado omite executorId e carrega operation_path e operation_method — veja o Guia de integração.
conditional
Avalia uma condição contra o contexto de execução e roteia para diferentes ramificações com base no resultado. Use nodes condicionais para implementar lógica de ramificação, por exemplo, roteando para um caminho de aprovação quando o risco é alto, ou continuando diretamente quando é baixo. A condição fica emdata.condition do node. Uma expressão de texto livre é avaliada como booleana e produz o handle de saída true ou false; cada edge de saída declara qual handle segue por meio de sourceHandle. Nodes condicionais criados no Console usam uma condição estruturada baseada em casos, em que cada caso roteia para seu próprio handle de saída — veja o Editor de canvas.
action
Representa uma operação interna síncronaset_output. Ela pode gravar um valor de saída interpolado e, opcionalmente, substituir o status da resposta HTTP síncrona. Não fornece pausa integrada, emissão genérica de eventos nem uma operação genérica de mudança de estado.
Edges
Edges conectam nodes e definem caminhos de execução. Cada edge inclui os seguintes campos:
Exemplo de edge
data.condition e segue o único edge de saída cujo sourceHandle corresponde ao resultado da ramificação; se nenhum edge corresponder, essa ramificação termina. Todos os outros tipos de node seguem todos os seus edges de saída quando concluem com sucesso.
Transições de status
Workflows seguem um ciclo de vida bem definido. Compreender essas transições é essencial para implantar e evoluir workflows com segurança.
- draft — O estado inicial. Todas as modificações (adicionar nodes, editar edges, alterar configurações) são permitidas apenas no status
draft. - active — Um workflow que foi ativado. Pode ser executado. Nenhuma modificação é permitida enquanto estiver ativo.
- inactive — Um workflow que foi desativado. Não pode mais ser executado, mas pode ser movido de volta para
draftpara edição.
Regras
- Apenas um workflow em
draftpode ser ativado (transição:draft → active). - Apenas um workflow
activepode ser desativado (transição:active → inactive). - Apenas um workflow
inactivepode ser movido de volta para draft (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 novamente, mova-o de volta paradraft chamando POST /v1/workflows/{id}/draft. Isso torna o workflow editável sem precisar cloná-lo.
Isso é útil quando você desativou um workflow por engano ou quando quer iterar sobre um workflow existente em vez de criar uma cópia.
Apenas workflows inativos podem ser movidos para draft. Se você precisar modificar um workflow ativo sem tirá-lo do ar, 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 nodes e edges. Você pode então atualizar, testar e ativá-lo sem impactar a versão atual.
Esta é a abordagem recomendada para versionamento em produção.
Limites técnicos
Tenha esses limites em mente ao projetar fluxos complexos. Workflows com mais de ~50 nodes geralmente indicam que o fluxo deve ser dividido em workflows menores e compostos.
Padrões comuns
Sequencial
O padrão mais simples. Os nodes são executados em uma sequência linear. Use quando cada etapa depende da anterior e nenhuma ramificação é necessária.Ramificação condicional
Um nodeconditional avalia sua condição e roteia a execução de acordo. O resultado da ramificação seleciona qual edge de saída é seguido, pela correspondência do sourceHandle.
Exemplos do mundo real
Verificação antifraude
Uma transação chega, uma pontuação de fraude é obtida, e a execução é roteada para aprovação ou rejeição.Orquestração de pagamento
Um fluxo linear que valida os dados de pagamento recebidos, roteia para o provider apropriado e envia uma confirmação.Onboarding KYC
Use um workflow para enviar uma checagem de documentos a um sistema de aprovação externo. O Flowker não tem uma pausa embutida: para uma revisão humana assíncrona, inicie uma execução de workflow posterior e separada quando o seu sistema de aprovação publicar a decisão.Fluxo de aprovação manual
Uma solicitação é enviada para revisão. Um executor consulta a decisão da revisão no sistema externo. Um node condicional então roteia para o caminho de aprovação ou rejeição. Execuções do Flowker rodam de ponta a ponta — não há etapa de pausa embutida, então uma decisão humana precisa vir de um sistema externo consultado pelo workflow.Boas práticas
Convenções de nomenclatura de nodes
Use nomes descritivos e orientados a ações que comuniquem o que o node faz, e não qual é o seu tipo.- correto:
Validate Payment Data,Get Fraud Score,Notify Customer,Get Approval Decision - errado:
executor1,conditional node,node3
Expressões de condição
As condições de texto livre nos nodes condicionais são avaliadas contra o contexto de execução em tempo de execução. Mantenha-as simples e explícitas:- Use comparações diretas de campos:
<nodeId>.status == 'approved' - Use comparações numéricas:
<nodeId>.riskScore < 70 - Use campos booleanos:
<nodeId>.reviewRequired == true - Combine com
AND/ORquando necessário:<nodeId>.score < 70 AND <nodeId>.verified == true
conditional um nome claro que encapsule a decisão.
Uma condição ausente ou que falha ao ser avaliada em tempo de execução faz a execução falhar (FLK-0105 identifica uma expressão condicional inválida). Sempre teste as condições antes de ativar um workflow.
Estratégias de tratamento de erros
Projete workflows para lidar com falhas de forma explícita:- Adicione caminhos de rejeição a partir de nodes
conditionalpara cada ponto de decisão que pode falhar. - Use nodes
executorseparados para lógica de retry ou providers de fallback. - Nomeie os caminhos de erro de forma clara (por exemplo,
Reject and Notify,Fallback to Manual Review) para que os registros de execução sejam autoexplicativos.
Evitando ciclos
O Flowker usa um mecanismo de detecção de ciclos baseado em DFS em tempo de execução. Se um ciclo for detectado durante a execução, o workflow falha comFLK-0508. Ciclos não são detectados em tempo de design, portanto valide a estrutura dos seus edges antes de ativar.
Regras para prevenir ciclos:
- Os edges devem sempre apontar para frente no fluxo, nunca de volta para um node executado anteriormente.
- Revise o grafo visualmente antes de ativar qualquer workflow com ramificações ou caminhos de junção.
- Se um retry ou loop for necessário, modele-o como uma invocação de workflow separada, não como um edge 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 nodes e edges copiados).2
Faça suas alterações no rascunho.
3
Valide ou faça a pré-visualização do rascunho. Ative-o antes de executar testes de execução.
4
Ative a nova versão.
5
Desative a versão antiga se ela não for mais necessária.
Referência de erros
Os seguintes códigos de erro são relevantes para o design e a execução de workflows:

