Cookies

Za delovanje našega spletnega mesta uporabljamo nujno potrebne piškotke. Z vašim privoljenjem uporabljamo tudi piškotke za analitiko (Google Analytics) in ciljno usmerjeno trženje (Meta Pixel). Preberi pravilnik o zasebnosti

Razvijalci in integracijeSpletne kljuke (Webhooks)
Razvijalci in integracije

Spletne kljuke (Webhooks)

Prejmite zahtevo HTTP takoj, ko je termin ustvarjen, potrjen, prestavljen, odpovedan ali zaključen, in povežite BookifyLabs z lastnimi sistemi.

Dodajte končno točko

  1. Kot lastnik odprite Nastavitve v obsegu podjetja in poiščite kartico Spletne kljuke.
  2. Kliknite Dodaj končno točko in vnesite javni URL https://. Zasebni omrežni naslovi in localhost bodo zavrnjeni.
  3. Kopirajte tajni ključ za podpisovanje, prikazan po ustvarjanju. Začne se z whsec_ in je prikazan samo enkrat.
  4. Pošljite preizkusni dogodek tako, da ustvarite termin, nato pa preverite seznam Dostave.

Imate lahko do 5 končnih točk na podjetje. Vsako je mogoče zaustaviti in ponovno zagnati, spremeniti njen URL, ponovno ustvariti njen tajni ključ ali jo izbrisati skupaj z njeno zgodovino dostave.

Dogodki

DogodekPoslano, ko
appointment.createdJe rezervacija ustvarjena spletno, s strani Bookyja ali s strani vaše ekipe.
appointment.confirmedJe čakajoči termin potrjen.
appointment.rescheduledSe spremeni čas ali strokovnjak.
appointment.cancelledJe termin odpovedan z vaše strani ali s strani stranke.
appointment.completedJe termin označen kot opravljen na zaslonu ob zaključku.

Format zahteve

Vsaka dostava je POST z JSON telesom. Objekt data je posnetek termina v trenutku, ko se je dogodek zgodil; ponovni poskusi pošljejo enako telo.

POST https://example.com/hooks/bookify
Content-Type: application/json
User-Agent: BookifyLabs-Webhooks/1.0 (+https://bookifylabs.com)
X-Bookify-Event-ID: evt_3f6c…
X-Bookify-Timestamp: 1757145600
X-Bookify-Signature: 4b1d…

{
  "id": "evt_3f6c…",
  "type": "appointment.created",
  "created_at": 1757145600,
  "data": {
    "appointment": { "id": 1234, "status": "booked", "start_at": "…", "…": "…" }
  }
}

Preverite podpis

Podpis je šestnajstiški HMAC-SHA256 nad nizom <timestamp>.<raw body>, šifriran s tajnim ključem vaše končne točke. Izračunajte ga iz surovega telesa zahteve, pred kakršnim koli razčlenjevanjem JSON, in ga primerjajte s funkcijo s konstantnim časom izvajanja.

import crypto from "node:crypto";

function verify(rawBody, headers, secret) {
  const ts = headers["x-bookify-timestamp"];
  const sig = headers["x-bookify-signature"];
  if (Math.abs(Date.now() / 1000 - Number(ts)) > 300) return false; // starejše od 5 minut
  const expected = crypto
    .createHmac("sha256", secret)
    .update(`${ts}.${rawBody}`)
    .digest("hex");
  return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}
  • Zavrnite časovne žige, starejše od 5 minut, da preprečite ponovitvene napade.
  • Odstranite podvojitve na X-Bookify-Event-ID: ponovni poskus nosi enako identifikacijsko številko (ID).
  • Odgovorite s katero koli kodo 2xx v roku 10 sekund. Počasna opravila izvedite po odzivu.

Ponovni poskusi in zgodovina dostave

Dostava, ki potteče ali prejme odgovor 408, 425, 429 ali katero koli kodo 5xx, se ponovno poskusi vsakih 12 ur do 30-krat. Preusmeritvam se ne sledi, drugi odgovori 4xx pa se obravnavajo kot dokončni. Tabela Dostave prikazuje status vsakega dogodka (v čakanju, pošiljanje, ponovno poskušanje, dostavljeno, neuspešno), število poskusov, shranjen odgovor (do 4 KB) in čas naslednjega poskusa. Neuspešne dostave ali tiste v ponovnem poskušanju lahko sprožite z možnostjo Ponovno poskusi zdaj. Zgodovina se hrani 30 dni.

Dobro je vedetiPonovno ustvarjanje tajnega ključa takoj razveljavi starega. Če ne morete privoščiti prekinitve, najprej posodobite svoj sprejemnik ali pa med preklopom zaustavite končno točko.