Início rápido
Este guia vai do zero a um evento entregue, conferido e com o histórico de tentativas na tela. Tudo acontece no ambiente de desenvolvimento, que existe para você integrar sem sujar o histórico de produção.
Os exemplos leem a chave de uma variável de ambiente:
export NOTYFACIL_KEY=whk_test_xxxxxxxxxxxxxxxxxxxx-
Cadastre o tipo de evento.
Só tipos cadastrados podem ser publicados. É o que impede um erro de digitação de virar um evento que ninguém recebe.
Janela do terminal curl -X POST https://api.notyfacil.com.br/v1/event-types \-H "Authorization: Bearer $NOTYFACIL_KEY" \-H "Content-Type: application/json" \-d '{"name":"pedido.pago"}' -
Cadastre o Consumer.
O Consumer é quem recebe, normalmente um cliente seu. O
externalIdé o id dele no seu sistema, e é por ele que você o referencia daqui para a frente.Janela do terminal curl -X POST https://api.notyfacil.com.br/v1/consumers \-H "Authorization: Bearer $NOTYFACIL_KEY" \-H "Content-Type: application/json" \-d '{"externalId":"cliente-42","name":"Padaria do Zé"}' -
Cadastre o endpoint e guarde o secret.
Janela do terminal curl -X POST https://api.notyfacil.com.br/v1/endpoints \-H "Authorization: Bearer $NOTYFACIL_KEY" \-H "Content-Type: application/json" \-d '{"consumer":"cliente-42","url":"https://padariadoze.com.br/webhooks","events":["pedido.pago"]}'{ "id": "ep_01JB8Y1D6TQ4X8N2VK5HWZ3RFM", "url": "https://padariadoze.com.br/webhooks", "events": ["pedido.pago"], "secret": "whsec_…" }O
secretaparece só nesta resposta. É com ele que o receptor confere a assinatura; se perder, o caminho é rotacionar. -
Teste o endpoint antes de publicar.
Janela do terminal curl -X POST https://api.notyfacil.com.br/v1/endpoints/ep_01JB8Y1D6TQ4X8N2VK5HWZ3RFM/test \-H "Authorization: Bearer $NOTYFACIL_KEY"A chamada espera a entrega de teste e devolve o que aconteceu.
success: truequer dizer que a sua URL respondeu2xx; é a hora de conferir se a verificação de assinatura do seu lado aceitou. -
Publique o evento.
Janela do terminal curl -X POST https://api.notyfacil.com.br/v1/events \-H "Authorization: Bearer $NOTYFACIL_KEY" \-H "Content-Type: application/json" \-H "Idempotency-Key: pedido-1234-pago" \-d '{"consumer":"cliente-42","type":"pedido.pago","data":{"pedidoId":1234,"valorCentavos":4990}}'const resposta = await fetch('https://api.notyfacil.com.br/v1/events', {method: 'POST',headers: {Authorization: `Bearer ${process.env.NOTYFACIL_KEY}`,'Content-Type': 'application/json','Idempotency-Key': 'pedido-1234-pago',},body: JSON.stringify({consumer: 'cliente-42',type: 'pedido.pago',data: { pedidoId: 1234, valorCentavos: 4990 },}),})const evento = await resposta.json()$ch = curl_init('https://api.notyfacil.com.br/v1/events');curl_setopt_array($ch, [CURLOPT_POST => true,CURLOPT_RETURNTRANSFER => true,CURLOPT_HTTPHEADER => ['Authorization: Bearer ' . getenv('NOTYFACIL_KEY'),'Content-Type: application/json','Idempotency-Key: pedido-1234-pago',],CURLOPT_POSTFIELDS => json_encode(['consumer' => 'cliente-42','type' => 'pedido.pago','data' => ['pedidoId' => 1234, 'valorCentavos' => 4990],]),]);$evento = json_decode(curl_exec($ch), true);{ "id": "evt_01JB8XZQ4T9M2NKPWV3RYCF7HD", "status": "queued", "deliveries": 1 }202quer dizer aceito e gravado, não entregue.deliveriesé quantas Entregas foram criadas; zero quer dizer que nenhum endpoint está inscrito no tipo. -
Confira a entrega e as tentativas.
Janela do terminal curl https://api.notyfacil.com.br/v1/events/evt_01JB8XZQ4T9M2NKPWV3RYCF7HD/deliveries \-H "Authorization: Bearer $NOTYFACIL_KEY"curl https://api.notyfacil.com.br/v1/deliveries/dlv_01JB8Y3K7QF2V9D5WZ0XH4M1RC/attempts \-H "Authorization: Bearer $NOTYFACIL_KEY"Cada tentativa traz o status HTTP que a sua URL devolveu, a duração e o começo da resposta. O mesmo histórico aparece no painel.
E agora
Seção intitulada “E agora”- Leia as garantias de entrega antes de ir para produção: elas mudam o código de quem recebe.
- Mande o link de verificando a assinatura para quem vai implementar o receptor.
- Em produção, a chave é
whk_live_e a URL do endpoint precisa serhttps. Veja ambientes e chaves.