Skip to main content
Este guia percorre tipos de nó, arestas, padrões reais, transições de status, limites técnicos e boas práticas.

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 um triggerType 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 um providerConfigId 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 no data.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íncrona set_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

O roteamento depende do tipo do nó de origem. Um nó condicional avalia seu 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.
Diagrama de transição de status do workflow mostrando três estados: draft, active e inactive. Uma seta rotulada 'activate' aponta de draft para active. Uma seta rotulada 'deactivate' aponta de active para inactive. Uma seta rotulada 'draft' aponta de inactive de volta para draft.
  • 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 draft para 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 draft retorna o erro FLK-0103.

Movendo um workflow inativo de volta para draft

Se você desativou um workflow e quer editá-lo de novo, mova-o de volta para draft 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 novo draft 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.
Padrão de workflow sequencial: um nó de gatilho se conecta a um primeiro nó executor, que se conecta a um segundo nó executor, que se conecta a um terceiro nó executor. Todas as ligações são setas direcionadas simples formando uma linha reta.
Exemplo: orquestração de pagamento

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.
Padrão de workflow com ramificação condicional: um nó de gatilho se conecta a um nó executor, que se conecta a um nó condicional. O nó condicional tem duas setas de saída: uma rotulada 'Path A' apontando para um primeiro nó executor, e outra rotulada 'Path B' apontando para um segundo nó executor.
Exemplo: verificação antifraude

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
Bons nomes deixam os workflows legíveis sem abrir a configuração do nó. Eles também aparecem nos registros de execução e nos traces.

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 / OR quando precisar: <nodeId>.score < 70 AND <nodeId>.verified == true
Evite expressões complexas. Elas deixam o workflow difícil de ler e de depurar. Se a lógica não for trivial, dê ao nó 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 conditional para cada ponto de decisão que pode falhar.
  • Use nós executor separados 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 com FLK-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.
Isso preserva o histórico de execução da versão ativa e dá a você um caminho de rollback limpo se a nova versão tiver problemas.

Referência de erros


Os códigos de erro a seguir são relevantes para o design e a execução de workflows: