Webhooks
Ստացեք HTTP հարցում այն պահին, երբ ամրագրումը ստեղծվում է, հաստատվում, տեղափոխվում, չեղարկվում կամ ավարտվում է, և միացրեք BookifyLabs-ը ձեր սեփական համակարգերին:
Ավելացնել վերջնակետ (endpoint)
- Որպես սեփականատեր, բացեք Կարգավորումներ բաժինը բիզնեսի տիրույթում և գտեք Webhooks քարտը:
- Սեղմեք Ավելացնել վերջնակետ և մուտքագրեք հանրային https:// URL: Մասնավոր ցանցի հասցեները և localhost-ը մերժվում են:
- Պատճենեք ստեղծումից հետո ցուցադրվող ստորագրման գաղտնաբառը (signing secret): Այն սկսվում է
whsec_-ով և ցուցադրվում է միայն մեկ անգամ: - Ուղարկեք փորձնական իրադարձություն՝ ստեղծելով ամրագրում, ապա ստուգեք Առաքումներ ցուցակը:
Դուք կարող եք ունենալ մինչև 5 վերջնակետ մեկ բիզնեսի համար: Յուրաքանչյուրը կարող է դադարեցվել և վերսկսվել, դրա URL-ը կարող է փոխվել, դրա գաղտնաբառը կարող է վերագեներացվել, կամ այն կարող է հեռացվել իր առաքման պատմության հետ միասին:
Իրադարձություններ
| Իրադարձություն | Ուղարկվում է, երբ |
|---|---|
appointment.created | Ամրագրումը կատարվում է առցանց, Booky-ի կամ ձեր թիմի կողմից: |
appointment.confirmed | Սպասման մեջ գտնվող ամրագրումը հաստատվում է: |
appointment.rescheduled | Ժամը կամ մասնագետը փոխվում է: |
appointment.cancelled | Ամրագրումը չեղարկվում է ձեր կամ հաճախորդի կողմից: |
appointment.completed | Ամրագրումը նշվում է որպես ավարտված ավարտման էկրանի միջոցով: |
Հարցման ձևաչափ
Յուրաքանչյուր առաքում POST հարցում է JSON մարմնով (body): data օբյեկտը ամրագրման վիճակն է իրադարձության պահին. կրկնակի փորձերը ուղարկում են նույն մարմինը:
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": "…", "…": "…" }
}
}Ստուգել ստորագրությունը
Ստորագրությունը 16-ական HMAC-SHA256 է <timestamp>.<raw body> տողի վրա, որը կոդավորված է ձեր վերջնակետի գաղտնաբառով: Հաշվարկեք այն հարցման հում (raw) մարմնից, նախքան որևէ JSON վերլուծություն (parsing), և համեմատեք հաստատուն ժամանակի (constant-time) ֆունկցիայով:
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; // older than 5 minutes
const expected = crypto
.createHmac("sha256", secret)
.update(`${ts}.${rawBody}`)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}- Մերժեք 5 րոպեից ավելի հին ժամանակային դրոշմները (timestamps)՝ կրկնվող հարձակումներից (replay) պաշտպանվելու համար:
- Հեռացրեք կրկնօրինակները X-Bookify-Event-ID-ով. կրկնակի փորձը կրում է նույն ID-ն:
- Պատասխանեք ցանկացած 2xx կոդով 10 վայրկյանի ընթացքում: Դանդաղ աշխատանքը կատարեք պատասխանելուց հետո:
Կրկնակի փորձեր և առաքման պատմություն
Առաքումը, որի ժամանակը սպառվում է, կամ ստանում է 408, 425, 429 կամ ցանկացած 5xx պատասխան, կրկնվում է յուրաքանչյուր 12 ժամը մեկ՝ մինչև 30 փորձ: Վերահասցեավորումներին (redirects) չեն հետևում, իսկ այլ 4xx պատասխանները համարվում են վերջնական: Առաքումներ աղյուսակը ցույց է տալիս յուրաքանչյուր իրադարձության կարգավիճակը (սպասման մեջ, ուղարկվում է, կրկնվում է, առաքված է, ձախողված է), փորձերը, մեր պահպանած պատասխանը (մինչև 4 ԿԲ) և հաջորդ փորձի ժամանակը: Ձախողված կամ կրկնվող առաքումները կարող են ուղարկվել Կրկնել հիմա կոճակով: Պատմությունը պահպանվում է 30 օր: