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. Quando uma execução começa por um gatilho, o motor entra nesse nó e roteia a partir dele. 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. Ele pode escrever um valor de saída interpolado e, opcionalmente, sobrescrever o status da resposta HTTP síncrona. Ele não oferece pausa embutida, emissão genérica de eventos nem operação genérica de mudança de estado.
Arestas
Arestas conectam nós e definem caminhos de execução. Cada aresta inclui os campos a seguir:
Exemplo de aresta
data.condition e segue a única aresta 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 suas arestas de saída quando terminam com sucesso.
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. Se 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 nós e arestas. Você pode então atualizá-lo, testá-lo e ativá-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 sua condição e roteia a execução conforme o resultado. O resultado do ramo seleciona a aresta de saída que o nó segue, casada pelo 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 de aprovação externo. O Flowker não tem pausa embutida: para revisão humana assíncrona, comece depois uma execução de workflow separada, após o seu sistema de aprovação publicar a decisão dele.Fluxo de aprovação manual
Um nó executor envia a requisição para revisão. Um executor busca a decisão da revisão no sistema externo. Um nó condicional então roteia para o caminho aprovado ou para o rejeitado. As execuções do Flowker correm direto até o fim. O Flowker não tem passo de pausa embutido, então uma decisão humana deve 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. Mantenha-as simples e explícitas:- Use comparações diretas de campo:
<nodeId>.status == 'approved' - Use comparações numéricas:
<nodeId>.riskScore < 70 - Use campos booleanos:
<nodeId>.reviewRequired == true - Combine com
AND/ORquando precisar:<nodeId>.score < 70 AND <nodeId>.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 (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 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 uma proteção contra ciclos baseada em DFS em tempo de execução. Quando essa proteção encontra um ciclo durante a execução, o workflow falha comFLK-0508. Ciclos não são detectados em tempo de design, então valide a estrutura das suas 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. Ative-o antes de rodar testes de execução.
4
Ative a nova versão.
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:

