Takvimi doğru senkronlamak
Çift rezervasyonu önleyen akış: olaylar, düzeltme taraması ve iCal alternatifi.
CesiSync'te tarihlerin tek doğru kaynağı ağdır: veritabanı, aynı mülkte çakışan iki kaydı yazmayı reddeder. Siz yine de kendi sisteminizde bir kopya tutuyorsanız, şu üç adımı izleyin.
- Başlangıçta abone olduğunuz her mülk için
GET /v1/properties/{id}/calendarile önümüzdeki 12-18 ayı çekin. - Sonra webhook'larla güncel kalın:
calendar.updatedolaylarındakiclosedveopenedaralıklarını kopyanıza uygulayın. - Güvenlik ağı olarak her gece bir kez, ya da
property_seqboşluğu gördüğünüzde, takvimi baştan çekip karşılaştırın.
Müşteriye "müsait" demeden hemen önce GET /v1/properties/{id}/availability ile son durumu sorun. Rezervasyon gönderdiğinizde son sözü veritabanı söyler: çakışırsa 409 alırsınız, asla iki kayıt oluşmaz.
Opsiyon akışı
Müşteri ödeme yaparken tarihleri tutmak için POST /v1/holds kullanın. Gövdede kendi opsiyon / talep numaranızı holdRef olarak gönderin (zorunlu). Süre mülk sahibinin belirlediği opsiyon süresidir (örn. 15 dakika, 1 saat, 2 gün); daha kısasını holdMinutes ile isteyebilirsiniz. Tarihler herkes için kapanır.
- Ödeme tamamlanınca
POST /v1/holds/{id}/confirmçağırın ve kendi rezervasyon numaranızıexternalRefolarak gönderin (zorunlu). Opsiyon rezervasyona döner; takvim kapalı kalır. - Vazgeçilirse
DELETE /v1/holds/{id}: tarihler açılır. - Süre dolarsa CesiSync tarihleri kendiliğinden açar (süre bitiminden en geç birkaç saniye sonra), siz
hold.expiredwebhook'unu alırsınız ve rezervasyonEXPIREDolur.
Ek süre isteme
Ödeme biraz gecikiyorsa POST /v1/holds/{id}/extend ile (minutes vermezseniz mülk sahibinin süresi kadar) ek süre isteyin. Süre mülk sahibinin sınırını aşamaz (400 extension_too_long); yalnızca bitmesine son 5 dakika kala (409 extension_too_early) ve en çok 3 kez uzatılabilir, sonra yeniden opsiyon alırsınız. Aynı tarihler için sırada başka bir acente varsa 409 queue_waiting alırsınız: o durumda opsiyon süresi dolunca tarihler sıradakine geçer. Sonuç yanıtta (holdExpiresAt) ve hold.extended olayında gelir.
Cevabı beklemek: webhook mu, sorgulama mı?
- Webhook:
hold.confirmed,hold.extended,hold.expiredolaylarını dinleyin; ekranınızda bekleyen bir pencere varsa sunucunuz olayı kullanıcıya iletsin (WebSocket/SSE). - Sorgulama: webhook kurmak istemeyenler
GET /v1/holds/{id}adresini 5 saniyede bir çağırabilir (statusveholdExpiresAt). İkisini birlikte kullanmak en güvenlisidir: webhook hızlı, sorgulama kaçanı yakalar.
Sıra (waitlist)
İstediğiniz tarihler başka bir acentenin opsiyonundaysa POST /v1/waitlist ile sıraya girin (holdRef ile). Tarihler açıldığında ilk sıradaki acente waitlist.available alır ve 5 dakika boyunca (priorityUntil) o tarihlere yalnızca o opsiyon alabilir; almazsa sıra bir sonrakine geçer. Tarihler zaten müsaitse 409 dates_available alırsınız: doğrudan opsiyon alın. Sırayı GET /v1/waitlist ile görür, DELETE /v1/waitlist/{id} ile bırakırsınız.
iCal ile okuma
Webhook veya API kullanamayan yazılımlar için her abonelikte size özel bir iCal adresi vardır (GET /v1/properties/{id}/calendar.ics, ya da panelde Aboneliklerim). İçinde yalnızca kapalı geceler bulunur; isim veya ayrıntı yoktur. Abonelik biterse adres çalışmaz.
iCal istemcileri adresi saatte bir gibi aralıklarla çeker; bu yüzden çift rezervasyonu tek başına önlemez. Rezervasyon göndermeden önce müsaitliği API ile doğrulayın.