ვებჰუკები
მიიღეთ HTTP მოთხოვნა იმ მომენტში, როდესაც ჯავშანი იქმნება, დასტურდება, გადაიგეგმება, უქმდება ან სრულდება, და დააკავშირეთ BookifyLabs თქვენს საკუთარ სისტემებთან.
ბოლოწერტილის (endpoint) დამატება
- როგორც მფლობელმა, გახსენით პარამეტრები ბიზნესის არეალში და იპოვეთ ბარათი ვებჰუკები.
- დააჭირეთ ბოლოწერტილის დამატება და შეიყვანეთ საჯარო https:// URL. კერძო ქსელის მისამართები და localhost უარყოფილია.
- დააკოპირეთ შექმნის შემდეგ ნაჩვენები ხელმოწერის საიდუმლო გასაღები (signing secret). ის იწყება
whsec_-ით და ნაჩვენებია მხოლოდ ერთხელ. - გაგზავნეთ სატესტო მოვლენა ჯავშნის შექმნით, შემდეგ შეამოწმეთ სიგნალების გაგზავნის (Deliveries) სია.
თქვენ შეგიძლიათ გქონდეთ 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": "…", "…": "…" }
}
}ხელმოწერის გადამოწმება
ხელმოწერა არის თექსვსმეტობითი HMAC-SHA256 სტრიქონზე <timestamp>.<raw body>, თქვენი ბოლოწერტილის საიდუმლო გასაღების გამოყენებით. გამოთვალეთ ის მოთხოვნის პირველადი ტანიდან (raw body), ნებისმიერ JSON პარსინგამდე, და შეადარეთ მუდმივი დროის ფუნქციით (constant-time function).
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; // 5 წუთზე ძველი
const expected = crypto
.createHmac("sha256", secret)
.update(`${ts}.${rawBody}`)
.digest("hex");
return crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(sig));
}- უარყავით დროის ნიშნულები (timestamps), რომლებიც 5 წუთზე ძველია, განმეორებითი შეტევების (replay) თავიდან ასაცილებლად.
- წაშალეთ დუბლიკატები X-Bookify-Event-ID-ზე დაყრდნობით: განმეორებით ცდას გადააქვს იგივე ID.
- უპასუხეთ ნებისმიერი 2xx კოდით 10 წამში. ნელი სამუშაო შეასრულეთ პასუხის დაბრუნების შემდეგ.
განმეორებითი ცდები და გაგზავნის ისტორია
გაგზავნა, რომელსაც ეწურება დრო (timeout), ან იღებს 408, 425, 429 ან ნებისმიერ 5xx პასუხს, მეორდება ყოველ 12 საათში 30 მცდელობამდე. გადამისამართებები (redirects) არ მიჰყვება და სხვა 4xx პასუხები განიხილება საბოლოოდ. ცხრილი გაგზავნები (Deliveries) აჩვენებს თითოეული მოვლენის სტატუსს (მოლოდინშია, იგზავნება, მეორდება, გაგზავნილია, ვერ გაიგზავნა), მცდელობებს, ჩვენ მიერ შენახულ პასუხს (4 KB-მდე) და შემდეგი მცდელობის დროს. წარუმატებელი ან განმეორებადი გაგზავნები შეიძლება გაიგზავნოს ღილაკით ახლა განმეორება. ისტორია ინახება 30 დღის განმავლობაში.