Cookies

Մենք օգտագործում ենք անհրաժեշտ cookie-ներ՝ մեր կայքի աշխատանքն ապահովելու համար: Ձեր համաձայնությամբ մենք օգտագործում ենք նաև cookie-ներ վերլուծության (Google Analytics) և թիրախավորված մարքեթինգի (Meta Pixel) համար: Կարդալ Գաղտնիության քաղաքականությունը

Ծրագրավորողներ և ինտեգրացիաներWebhooks
Ծրագրավորողներ և ինտեգրացիաներ

Webhooks

Ստացեք HTTP հարցում այն պահին, երբ ամրագրումը ստեղծվում է, հաստատվում, տեղափոխվում, չեղարկվում կամ ավարտվում է, և միացրեք BookifyLabs-ը ձեր սեփական համակարգերին:

Ավելացնել վերջնակետ (endpoint)

  1. Որպես սեփականատեր, բացեք Կարգավորումներ բաժինը բիզնեսի տիրույթում և գտեք Webhooks քարտը:
  2. Սեղմեք Ավելացնել վերջնակետ և մուտքագրեք հանրային https:// URL: Մասնավոր ցանցի հասցեները և localhost-ը մերժվում են:
  3. Պատճենեք ստեղծումից հետո ցուցադրվող ստորագրման գաղտնաբառը (signing secret): Այն սկսվում է whsec_-ով և ցուցադրվում է միայն մեկ անգամ:
  4. Ուղարկեք փորձնական իրադարձություն՝ ստեղծելով ամրագրում, ապա ստուգեք Առաքումներ ցուցակը:

Դուք կարող եք ունենալ մինչև 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 օր:

Օգտակար է իմանալԳաղտնաբառի վերագեներացումը անմիջապես չեղարկում է հինը: Նախ թարմացրեք ձեր ընդունիչը, եթե չեք կարող թույլ տալ ընդհատում, կամ դադարեցրեք վերջնակետը փոխարկման ընթացքում: