order.completed real do Fire. Você vai configurar um endpoint HTTPS, configurar um Integration Flow no dashboard do Fire e verificar de ponta a ponta.
Ao final você terá:
- Um flow do Fire que dispara em cada pedido completado
- Um endpoint HTTPS recebendo o body do evento
- Processamento idempotente com resposta rápida
Este guia se aplica aos quatro eventos que o Fire emite em produção:
order.completed, order.cancelled, order.invoiced, order.reversed. O walkthrough usa order.completed; os outros três seguem o mesmo padrão com formatos distintos de data.O que você vai construir
Um só endpoint, um só Integration Flow. Quando funciona paraorder.completed, o mesmo endpoint trata todos os outros eventos do Fire ramificando por event.type.
Pré-requisitos
- Uma conta Fire com acesso ao dashboard (Settings → Integration Flows)
- Uma URL HTTPS acessível publicamente (use ngrok para dev local)
- Algo para rodar um serviço Node/Python/Go — qualquer coisa que sirva
POSTe parseie JSON
Passo 1 — Suba um endpoint mínimo
Comece com o handler menor possível. As preocupações de produção (auth, dedup, persistência) entram no passo 5.Node.js
https://<random>.ngrok.app). Você cola no flow do Fire no próximo passo.
Passo 2 — Configure um Integration Flow
No dashboard do Fire, vá em Settings → Integration Flows → New flow.Defina o escopo
Escolha o account, vendor e (opcionalmente) lojas específicas para as quais este flow deve disparar. Deixe lojas vazio para combinar todas as lojas do vendor.
Adicione um nó HTTP
Arraste um nó HTTP no canvas. Conecte-o ao trigger.
- Método:
POST - URL: a URL do ngrok do passo 1 mais o path
/fire/events - Headers:
Content-Type: application/json - Auth: deixe em branco por enquanto — adicionamos no passo 5
Use o template canônico de body
Cole o template canônico do body no campo Body. Ele produz o envelope padrão A maioria das equipes parte do template Webhook Test — Full Order Data que vem no dashboard — é o mesmo formato com cada campo de
{ event, data, _meta } que seu handler espera.data.* expandido explicitamente.Passo 3 — Dispare um evento de teste
Duas formas de verificar a fiação: Opção A — Probar Flujo (dry run). No editor do flow, clique em Probar Flujo e escolha um cenário de exemplo. O Fire despacha um evento sintético através do seu flow vivo. Seu endpoint deve registrá-lo em segundos. Opção B — Pedido real. Injete um pedido de teste real pelo seu pipeline normal (POS, quiosque ouPOST /v1/orders). Quando ele alcançar status=COMPLETED e paymentStatus=SUCCEEDED, o flow roda e você verá a requisição no seu endpoint.
Se nada chegar em 30 segundos, confira Settings → Integration Flows → Executions para ver execuções com falha e a mensagem de erro.
Passo 4 — Leia o payload
Seu handler agora recebe uma requisição cujo body fica assim:data é o snapshot V4 do pedido — o registro completo do pedido. Veja order.completed para a referência campo a campo.
Passo 5 — Deixe pronto para produção
O handler mínimo do passo 1 funciona para o demo. Para produção você precisa de mais três coisas.Confirme rápido, processe async
O Fire dá timeout em 30 segundos. Confirme primeiro; processe em background.Deduplique por event.id
O Fire faz retry em qualquer resposta não-2xx. Use event.id (o ID de execução do flow) para pular duplicatas.
Autentique a requisição
O Fire não assina webhooks de saída com HMAC hoje. Autentique adicionando uma credencial ao nó HTTP do seu flow e validando do seu lado. Três opções:- Bearer token — defina
Authorization: Bearer <secret>nos headers do flow; valide no seu handler. - API key — defina
x-api-key: <secret>nos headers do flow; valide. - OAuth2 client credentials — para tenants que precisam de tokens rotativos; o flow busca o token automaticamente.
Assinatura HMAC (
X-Fire-Signature) está no roadmap e será opt-in quando sair. Por enquanto, um secret compartilhado no header do flow é o mecanismo canônico de autenticação.Erros comuns
- Valores monetários são strings × 10000.
payments.totals[0].total === "229000"significa 22.9. Parseie com uma biblioteca decimal; nunca comparseFloat. event.idé o ID de execução do flow, não o ID do pedido. Useevent.idcomo chave de idempotência; usedata.orderIdcomo chave de negócio.fulfillment.deliverypode estar presente mesmo em pedidos dine-in / pickup com zeros placeholder. Ramifique porfulfillment.service.code, não pordelivery !== null.payments.totals[]epaymentMethods[]misturam camelCase e snake_case. Leia tantocurrencyCodequantocurrency_codedefensivamente nesses objetos.
Próximos passos
Referência order.completed
Referência completa do payload, incluindo blocos fiscais BR.
Referência order.cancelled
Payload de cancelamento com metadata de auditoria.
Integration Flows
Cobertura mais profunda de scoping, body templates e tipos de nó.
Entrega e retentativas
Política de retry, dead-letter e modelo de idempotência.

