DOCS

Lyssna på events med webhooks

Få realtidsaviseringar om events för er Zonos-integration.

Webhooks ger Zonos möjlighet att proaktivt meddela era externa system när vissa events inträffar. När det prenumererade eventet inträffar skickar Zonos en HTTP POST-förfrågan till den webhook-URL ni anger. Förfrågningens body innehåller eventdetaljer så att ert system kan bearbeta eventet programmatiskt.

Webhooks är användbara för att integrera Zonos med andra plattformar, utlösa automatiserade arbetsflöden och synkronisera data mellan system i realtid. Ni kan till exempel använda webhooks för att:

  • Uppdatera ert orderhanteringssystem när en order skapas i Zonos
  • Meddela er fulfillment-leverantör när en sändning avbokas
  • Logga statusändringar för internationella ordrar för revisionsändamål

Webhook-typer 

Alla tillgängliga webhook-typer finns i enumerationen WebhookType. Exempelpayloads för varje typ finns i vår guide om Händelsetyper.

Skapa webhooks 

Så här skapar ni en webhook via API:

1mutation WebhookCreate($input: WebhookCreateInput!) {
2 webhookCreate(input: $input) {
3 id
4 url
5 type
6 status
7 secret
8 headers {
9 key
10 }
11 }
12}

Viktigt: Spara värdet för secret när ni skapar webhooken — det returneras endast här, och ni behöver det för att verifiera webhook-signaturer. Se Verifiera webhook-signaturer nedan.

Redigera webhook-detaljer 

Så här redigerar ni en befintlig webhook via API:

1mutation WebhookUpdate($input: WebhookUpdateInput!) {
2 webhookUpdate(input: $input) {
3 id
4 url
5 type
6 status
7 }
8}

Verifiera webhook-signaturer 

Varje webhook-förfrågan som Zonos skickar innehåller en zonos-signature-header så att ni kan bekräfta att förfrågan verkligen kom från Zonos och att innehållet inte har ändrats under överföringen.

Headerns värde har följande format:

timestamp=<unix-timestamp-ms>,hmac=<base64-encoded-signature>
  • timestamp — tidpunkten, i Unix-epoktid i millisekunder, då förfrågan signerades.
  • hmac — en HMAC-SHA256-signatur av den råa JSON-förfrågans body, beräknad med er webhooks secret som nyckel och Base64-kodad.

För att verifiera en förfrågan:

  1. Läs ut värdena för timestamp och hmac från headern zonos-signature.
  2. Beräkna er egen HMAC-SHA256-signatur över den råa, oparsade förfrågans body, med hjälp av det secret ni fick när ni skapade webhooken.
  3. Jämför er beräknade signatur med värdet för hmac med hjälp av en konstant-tidsjämförelse, och avvisa förfrågan om de inte matchar.
  4. Avvisa eventuellt förfrågningar där timestamp är äldre än några minuter för att skydda mot upprepning (replay) av en avlyssnad förfrågan. Zonos upprätthåller inte något leveransfönster själv, så denna kontroll är upp till er.
1const crypto = require("crypto");
2 
3function verifyZonosWebhook(rawBody, signatureHeader, secret) {
4 const [timestampPart, hmacPart] = signatureHeader.split(",");
5 const receivedHmac = hmacPart.split("=")[1];
6 
7 const expectedHmac = crypto
8 .createHmac("sha256", secret)
9 .update(rawBody)
10 .digest("base64");
11 
12 const receivedBuffer = Buffer.from(receivedHmac);
13 const expectedBuffer = Buffer.from(expectedHmac);
14 
15 if (receivedBuffer.length !== expectedBuffer.length) {
16 return false;
17 }
18 
19 return crypto.timingSafeEqual(receivedBuffer, expectedBuffer);
20}

Obs! Om ni har konfigurerat anpassade headers på er webhook inkluderas även dessa exakt i varje förfrågan tillsammans med zonos-signature.

Visa webhook-loggar 

Så här visar ni webhook-loggar via API:

1query WebhookLogs(
2$first: Int
3$after: String
4$filter: WebhookLogsFilterInput
5) {
6 webhookLogs(first: $first, after: $after, filter: $filter) {
7 edges {
8 node {
9 id
10 type
11 url
12 createdAt
13 responseStatus
14 }
15 }
16 }
17}
GraphQL API ReferenceTypes, inputs, and operations used in this guide
Boka en demo

Var den här sidan till hjälp?