Skip to main content
O Flowker se conecta a serviços externos (como motores anti-fraude, processadores de pagamento, provedores KYC e mais) através de configurações de executor. Neste guia, você vai explorar o catálogo, criar e configurar um executor, testar conectividade, usá-lo em um workflow e entender o modelo de resiliência do Flowker.

Ciclo de vida da configuração de executor


Antes de um executor poder ser usado em um workflow, ele passa pelo seguinte ciclo de vida:
Ciclo de vida da configuração de executor

Ciclo de vida da configuração de executor

As configurações de executor são gerenciadas através dos endpoints /v1/executors (listar, obter, atualizar, remover). Os estados do ciclo de vida (unconfigured, configured, tested, active, disabled) são rastreados internamente — as transições acontecem por meio da camada de serviço.
O ciclo de vida da configuração de executor é gerenciado pela camada de serviço (comandos MarkConfigured, MarkTested, Activate, Disable, Enable). Observe que a API HTTP atual expõe os endpoints GET, PATCH e DELETE. O PATCH atualiza os dados de configuração, mas não dispara transições de status.

Antes de criar uma configuração de executor, explore o catálogo para ver o que está disponível. O catálogo é um registro somente leitura de executors e triggers integrados que vêm com o Flowker. Você não precisa criar entradas no catálogo — você as descobre e configura as que precisa.
1

Listar executors disponíveis

Chame o endpoint Listar executors do catálogo para ver todos os tipos de executor que o Flowker suporta — requisições HTTP, transformações de dados e mais.
2

Listar triggers disponíveis

Chame o endpoint Listar triggers do catálogo para ver como os workflows podem ser iniciados — webhooks ou chamadas API manuais.
3

Escolha o que você precisa

Identifique o tipo de executor e trigger que correspondem à sua integração. Você vai referenciá-los ao criar sua configuração no próximo passo.
Pense no catálogo como um menu: ele mostra a que o Flowker pode se conectar. As configurações de executor são seus pedidos específicos — as credenciais, URLs e configurações para cada serviço que você quer usar.

Passo 2: Configurar uma conexão de provider e executor


Os executors são componentes integrados que vêm com o Flowker. Você não os cria via API — eles são descobertos pelo catálogo (GET /v1/catalog/executors) no Passo 1. Para usar um executor, primeiro crie uma configuração de provider que define a conexão com o serviço externo e, em seguida, gerencie as configurações de executor que associam um executor do catálogo a uma conexão de provider com configurações específicas da operação.

Criar uma configuração de provider

Chame POST /v1/provider-configurations para configurar a conexão com seu serviço externo — incluindo a URL base, credenciais e configurações específicas do ambiente. O campo config é validado contra o JSON Schema do provider no catálogo. Consulte Configurações de provider abaixo para detalhes e exemplos.

Gerenciar configurações de executor

Uma vez que você tenha uma configuração de provider, gerencie as configurações de executor pelos endpoints /v1/executors: Uma configuração de executor define qual endpoint chamar e como mapear os dados para essa operação. Ela referencia uma configuração de provider para os detalhes reais da conexão. Consulte a API de Configurações de executor para a referência completa da API.

Tipos de autenticação


O Flowker suporta múltiplos métodos de autenticação. Use o método exigido pelo seu serviço externo.
Para integrações OAuth 2.0, use oidc_client_credentials. O Flowker gerencia a obtenção e renovação do token automaticamente.

Configurações de provider


As configurações de provider são independentes das configurações de executor. Enquanto uma configuração de executor define como o Flowker chama uma operação específica em um serviço externo, uma configuração de provider representa uma conexão configurada a uma instância de provider — incluindo sua URL base, credenciais e configurações específicas do ambiente. Pense assim: uma configuração de provider é a conexão, e uma configuração de executor é a operação que você executa sobre essa conexão.

Criar uma configuração de provider

Crie uma configuração de provider chamando o endpoint Criar configuração de provider. Forneça o providerId do catálogo e a configuração específica do provider (URL base, credenciais, etc.). O campo config é validado contra o JSON Schema do provider no catálogo. Se não corresponder, a requisição retorna um erro 422.

Testar conectividade

Após criar uma configuração de provider, teste-a com o endpoint Testar configuração de provider. O teste executa três etapas — conectividade, autenticação e ponta a ponta — e retorna resultados para cada uma.

Habilitar e desabilitar

As configurações de provider são criadas com status active. Você pode desabilitá-la temporariamente com o endpoint Desabilitar configuração de provider e reabilitá-la com o endpoint Habilitar configuração de provider. Consulte a API de Configurações de provider para a referência completa.

Passo 3: Configurar o executor


Marque o executor como configurado chamando o endpoint Update executor configuration. Isso transiciona o status de unconfigured para configured.

Passo 4: Validar sua configuração


Antes de usar um executor em um workflow, valide sua configuração contra o schema do catálogo usando o endpoint Validate executor config (POST /v1/catalog/executors/{id}/validate). Isso executa apenas a validação de JSON Schema — verifica se o seu objeto de configuração corresponde à estrutura que o executor espera (campos obrigatórios, tipos, formatos). Não testa a conectividade com o serviço externo.
Para testar a conectividade real com um serviço externo, use o endpoint Testar configuração de provider na configuração de provider. Esse endpoint executa verificações de conectividade, autenticação e ponta a ponta contra o serviço real.

Mapeamento de campos e transformação de dados


Quando os dados do workflow não correspondem ao formato esperado por um serviço externo — ou quando um serviço retorna dados em um formato que o próximo passo não consegue consumir — use mapeamentos de campos e transformações para cobrir essa lacuna. Os mapeamentos de campos e transformações são definidos dentro do objeto data dos nodes executor. O Flowker aplica os mapeamentos de entrada antes de chamar o serviço externo e os mapeamentos de saída depois de receber a resposta.
Para integrações mais complexas, você também pode anexar transformações a entradas individuais de mapeamento (por exemplo, remover caracteres, adicionar prefixos, alterar o case) e definir operações Kazaam para transformações avançadas de JSON para JSON. Consulte a Referência de mapeamento de campos para a lista completa de tipos de transformação, estruturas JSON e orientações para solução de problemas.

Passo 5: Usar o executor em um workflow


Uma vez que a configuração do executor é validada, referencie-a em um workflow. O executor se torna ativo quando é usado em um workflow ativo. Para retirar temporariamente um executor de serviço, atualize sua configuração usando o endpoint Update executor configuration.

Usando um executor em um workflow


Referencie o executor em um node do tipo executor. O exemplo abaixo cria um workflow de validação de pagamento. Quando um pagamento chega, o Flowker chama o executor de verificação de fraude, avalia o score de risco e aprova ou rejeita o pagamento com base no resultado. O workflow tem cinco nodes: um trigger webhook que recebe o pagamento, um node executor que chama o serviço de verificação de fraude, um node conditional que avalia o score, e dois nodes action para os resultados de aprovação e rejeição. Os edges os conectam em sequência, com o node condicional bifurcando para um ou outro caminho com base no limiar do score. Use o endpoint Criar workflow para definir o workflow, depois Ativar, e finalmente Executar.

Disparando workflows


As execuções de workflow são disparadas via endpoint Executar workflow:
O corpo da requisição contém o inputData para a execução. Todos os campos ficam disponíveis para os nodes seguintes via namespace workflow — por exemplo, workflow.transactionId ou workflow.amount. As saídas de nodes ficam disponíveis via o ID do node — por exemplo, check-fraud.score.

Idempotência

Toda requisição de execução precisa incluir um header Idempotency-Key. Requisições sem ele são rejeitadas com 400 Bad Request (erro FLK-0509). Gere um UUID novo para cada nova execução e reutilize a mesma chave apenas ao repetir a requisição idêntica.

Triggers por webhook


Webhooks são a principal forma de sistemas externos dispararem workflows do Flowker. Em vez de o seu sistema chamar a API de execuções diretamente, você registra um caminho de webhook em um workflow e os serviços externos enviam requisições HTTP para esse caminho.

Como funciona

  1. Adicione um trigger node do tipo webhook ao seu workflow com um path e method em seu data.
  2. Quando o workflow é ativado, o Flowker registra o caminho em seu registro de webhooks.
  3. Sistemas externos enviam requisições para POST /v1/webhooks/{path} (ou o método que você configurou).
  4. O Flowker resolve o caminho para o workflow correspondente e o executa.

Definindo um trigger node de webhook

O trigger de webhook é um node com type: "trigger" e os seguintes campos em data:
Uma vez que esse workflow é ativado, sistemas externos podem dispará-lo enviando:

Metadados do webhook

O Flowker injeta automaticamente um objeto _webhook no inputData da execução com metadados sobre a requisição recebida: Esses metadados ficam disponíveis para todos os nodes do workflow via namespace workflow._webhook.

Observações importantes

  • Cada combinação de caminho de webhook + método só pode ser registrada por um workflow ativo. Ativar um segundo workflow com o mesmo caminho falha com um erro de conflito.
  • Os caminhos de webhook suportam segmentos aninhados (ex: payments/stripe/received).
  • O tamanho máximo do corpo da requisição é 1 MB.
  • Desativar um workflow automaticamente remove o registro de suas rotas de webhook.
Consulte a referência de API Disparar um webhook para a documentação completa do endpoint.

Modo de resposta síncrona

Por padrão, um trigger de webhook responde com um recibo 202 assim que a execução começa (o modo assíncrono) — o chamador precisa consultar o status da execução separadamente. Defina response_mode como "sync" no data do trigger node para que o Flowker mantenha a conexão HTTP aberta e devolva o resultado da execução diretamente na resposta: Se a execução não atingir um estado terminal antes de o limite interno de espera se esgotar, o Flowker recorre ao mesmo recibo 202 (com um header Location apontando para o endpoint de resultados) que o modo assíncrono teria devolvido. response_view define o formato do corpo da resposta síncrona: O finalOutput de uma execução com falha (nas views full ou final_output) sempre traz status: "failed" e errorMessage, e errorClass quando o Flowker conseguiu classificar a falha — nunca um {} vazio. Sem um override de responseStatusCode (ver abaixo), o status HTTP síncrono permanece 200 para full/final_output/receipt (reporta a saúde do transporte, não o resultado de negócio). Um responseStatusCode válido no node set_output terminal sobrescreve esse status para essas três views. Um node de ação com actionType: "set_output" pode carregar um responseStatusCode opcional (inteiro, 200599) para sobrescrever o status HTTP que uma resposta de webhook sync devolve. Um valor fora do intervalo ou não inteiro é rejeitado ao salvar (FLK-0122). Para passthrough, o override se aplica somente quando o próprio node set_output é o step terminal — o status repassado de um executor terminal sempre vence, e o fallback sem resposta sempre usa um 200 puro para que um override nunca mascare uma falha. A detecção do passthrough é estrita: só o step terminal conta. Um set_output terminal depois de um executor responde com o próprio output — o Flowker nunca volta à resposta de um executor anterior. Em uma execução com falha, o step que interrompeu a execução é o terminal, então um 4xx do provedor que parou o workflow é repassado como o 4xx real. Os valores do output de um node set_output suportam referências ${...} resolvidas contra o contexto do workflow — incluindo ${workflow.<campo>} (payload do trigger), ${execution.id}, ${execution.startedAt} e ${execution.now} (carimbado no momento da interpolação). Uma referência ${...} que não pode ser resolvida faz o step falhar (fail-closed).

Tratamento de erros


Se um node falha, a execução para e é marcada como failed. Não há fallback automático. Após esgotar as retentativas, a execução falha. Cada falha inclui:
  • Node que falhou e motivo
  • Número do passo e saída
  • Código de erro

Retentativas e circuit breaker


O Flowker inclui resiliência integrada para chamadas a executors.

Retentativas

Quando uma chamada a um executor falha com um erro transitório, o Flowker retenta automaticamente. O comportamento de retentativa é configurável por node na configuração do executor: Retentativas só se aplicam quando a operação é segura de repetir. Por padrão, chamadas POST e PATCH são tratadas como não idempotentes e não são retentadas (uma única tentativa), enquanto GET, PUT, DELETE e outros verbos retentam normalmente. Configurar retry.max_attempts explicitamente em um node habilita as retentativas para esse node independentemente do método. Erros não retentáveis cortam para uma única tentativa independentemente da configuração: circuit breaker aberto, contexto cancelado, erros de configuração, falhas de resolução de secrets e respostas 4xx não transitórias do provedor (qualquer 4xx exceto 408 e 429). A retentativa se aplica por execução de node. Se todas as tentativas falharem, o passo é marcado como falho e a execução para.

Circuit breaker

O Flowker usa um circuit breaker para proteger os serviços externos de serem sobrecarregados por chamadas falhas repetidas: Erros 4xx de cliente/autenticação do provedor não disparam o circuito: são um problema do chamador, não um sinal de que o provedor está fora do ar. Somente falhas de transporte e 5xx contam para o limiar. Quando o circuito está aberto, as chamadas a executors falham imediatamente com FLK-0507 em vez de alcançar o serviço externo. Isso previne falhas em cascata e dá tempo ao serviço externo para se recuperar.
Estados do circuit breaker

Transições de estado do circuit breaker

O circuito começa no estado Closed, onde todas as requisições passam normalmente. Ao atingir o limiar de falhas, ele transiciona para Open, bloqueando todas as requisições imediatamente. Após 30 segundos, passa para Half-Open e permite uma requisição de teste. Se essa requisição for bem-sucedida, o circuito volta para Closed. Se falhar, o circuito reabre por mais um ciclo de 30 segundos.
O circuit breaker opera por configuração de executor. Falhas em um executor não afetam outros. Os limiares do circuit breaker (contagem de falhas, timeout de recuperação) são valores globais configurados no deployment — não podem ser personalizados por executor nesta versão.

Próximos passos


Conceitos fundamentais

Entenda workflows, nodes, edges e execuções.

Executor configurations API

Explore a API de configuração de executors.