Como funciona o matching
Quando dispara um evento de negócio dentro do Fire, cada flow ativo cujos critérios combinam é selecionado: Um flow é selecionado quando tudo o seguinte é verdade:
Você pode ter múltiplos flows ativos para o mesmo trigger — eles rodam independentes. Use isso para distribuir eventos a vários serviços downstream sem mudanças de código (ex.: um flow por consumidor: ERP, analítica, cache fiscal, message broker).
Escopo: loja vs canal
Um mesmo evento é publicado por um de dois mecanismos de escopo, conforme okind do flow:
- Flow de loja (
kind='store') — combina porstoreCodes(vazio = todas as lojas do vendor). É o clássico para integrações de backoffice: ERP, analítica, impressão, fiscal. - Flow de canal (
kind='channel') — combina porchannelCodes, o canal de origem do pedido. Serve para eco ao canal/agregador: quando um pedido de um canal (um quiosque, um marketplace) muda de estado, o evento volta ao endpoint daquele canal.
Montando um flow
Um flow roda como um pequeno pipeline: o trigger o inicia quando dispara um evento que combina, e então cada nó conectado roda por vez — registrar um passo, chamar seu endpoint por HTTP, ramificar conforme uma condição ou reformatar data — até o flow terminar. Você monta um flow visualmente no dashboard: parta de um nó trigger e conecte os nós que devem rodar depois dele. Cada nó tem um tipo e sua própria configuração, e os nós seguintes podem ler o trigger context.Nó trigger
O ponto de partida. Sua única config relevante étriggerType:
Nó HTTP
Este é o nó que chega ao seu endpoint. Sua config controla a requisição inteira:method e url. body, headers e auth são avaliados como templates contra o trigger context.
Webhook assinado (HMAC)
O nó Webhook é um nó HTTP que também assina o body com HMAC-SHA256. Use quando o receptor (tipicamente um canal/agregador) precisa verificar que o payload vem do Fire e não foi adulterado. Tem a mesma configuração do nó HTTP (URL, método, headers, body, status routes, auth de transporte) mais um secret compartilhado. A assinatura é independente do auth de transporte (Bearer / API key / OAuth2): o auth identifica o transporte; a assinatura HMAC garante a integridade do body e o anti-replay. São complementares. Headers que o Fire adiciona:
Como verificar (do seu lado):
1
Leia os headers
Pegue
X-Fire-Timestamp e X-Fire-Signature.2
Anti-replay
Rejeite se
abs(now - timestamp) passar de 300 segundos (janela de 5 minutos).3
Recalcule
Compute
v1=hex(HMAC-SHA256(secret, timestamp + "." + rawBody)) sobre o body cru (não re-serialize o JSON).4
Compare
Use comparação de tempo constante (
crypto.timingSafeEqual), nunca ===.O secret é compartilhado fora de banda: você o configura no nó do flow e no seu receptor. Em assinatura inválida, responda
401; em sucesso, 200.Outros tipos de nó
Além de trigger e HTTP, os flows podem incluir:
Um flow típico de “send to webhook” tem: trigger → log → HTTP → log (sucesso/erro). Veja o exemplo Webhook Test — Full Order Data do dashboard para um ponto de partida executável.
Trigger context
Cada template de nó pode referenciar o trigger context, disponível quando o flow roda:{{}}: {{trigger.event.id}}, {{trigger.data.orderId}}, {{trigger.data.store.code}}, {{flow.name}}, {{queue.attempt}}.
A resolução de paths percorre o trigger context como um objeto JavaScript. Indexar arrays funciona ({{trigger.data.payments.totals[0].total}}). Para arrays de tamanho desconhecido, use {{trigger.data.orderLines.length}}.
Body templates
O campobody no nó HTTP é a única coisa que determina o que seu endpoint recebe. O Fire substitui os paths {{...}} do trigger context e faz POST do resultado.
Não há envelope Fire fixo forçado pelo sistema. Mas o dashboard inclui um template canônico de exemplo do qual a maioria dos times parte:
Quando um path de template resolve para um objeto ou array (ex.:
"{{trigger.data}}"), o runtime preserva o tipo JSON em vez de serializar para string. Então "data": "{{trigger.data}}" produz um objeto JSON aninhado real no wire, não um blob string.Autenticação
Autentique configurando credenciais no nó HTTP do flow:
Veja Entrega e retentativas para o setup.
Status routes
O nó HTTP pode distribuir para diferentes nós seguintes baseado no status da resposta:statusCode combina por prefixo de dígito: 2 combina todos os 2xx, 4 combina todos os 4xx, 200 combina apenas 200. Cada route pode extrair valores do body de resposta via responseMapping e expô-los a nós seguintes.
Isolamento por tenant
Cada flow tem escopo no seu account e vendor. O Fire nunca roda um flow entre tenants — quando você configura um flow, ele fica vinculado ao seu tenant por padrão, e você não pode assinar eventos de outro account.Ativação, versionamento e dry-run
- Os flows podem ser ativados ou desativados — pause ou retome o recebimento de eventos sem deletar o flow.
- Cada save cria uma nova versão; versões passadas são mantidas para auditoria, e apenas a última versão ativa roda.
- O botão Probar Flujo do dashboard roda um flow contra um payload sintético de exemplo (um cenário por país) sem afetar dados reais — perfeito para verificar body templates antes de ir para produção.
Padrões comuns
- Um flow por consumidor. Se você tem três serviços downstream (ERP, analítica, broker), use três flows com o mesmo trigger e três nós HTTP apontando para cada um. Adicionar/remover um consumidor vira uma mudança de dashboard, não de código.
- Fan-out condicional. Use um nó
conditiondepois do trigger para ramificar em{{trigger.data.store.locationInfo.country.code}}e rotear pedidos brasileiros para um endpoint fiscal-aware enquanto envia outros países a um genérico. - Routing por loja. Defina
storeCodesno flow para limitá-lo a lojas específicas, ou use o filtro de lojas do dashboard para limitar o firing. - Mapeamento de eventos. Se seu sistema usa outros nomes de evento, transforme o type no body template:
"event_name": "fire.{{trigger.event.type}}".
Próximo
Visão geral de eventos
O modelo event-driven completo e o envelope.
Entrega e retentativas
Timeouts, retentativas, dead-letter, idempotência.
Tratar eventos de pedido
Walkthrough: construir um handler de webhook em 10 minutos.
order.completed
A referência completa do snapshot V4 do pedido.

