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
- Kot lastnik odprite Nastavitve v obsegu podjetja in poiščite kartico Spletne kljuke.
- Kliknite Dodaj končno točko in vnesite javni URL https://. Zasebni omrežni naslovi in localhost bodo zavrnjeni.
- Kopirajte tajni ključ za podpisovanje, prikazan po ustvarjanju. Začne se z
whsec_in je prikazan samo enkrat. - 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
| Dogodek | Poslano, ko |
|---|---|
appointment.created | Je rezervacija ustvarjena spletno, s strani Bookyja ali s strani vaše ekipe. |
appointment.confirmed | Je čakajoči termin potrjen. |
appointment.rescheduled | Se spremeni čas ali strokovnjak. |
appointment.cancelled | Je termin odpovedan z vaše strani ali s strani stranke. |
appointment.completed | Je 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.