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.

  1. Başlangıçta abone olduğunuz her mülk için GET /v1/properties/{id}/calendar ile önümüzdeki 12-18 ayı çekin.
  2. Sonra webhook'larla güncel kalın: calendar.updated olaylarındaki closed ve opened aralıklarını kopyanıza uygulayın.
  3. Güvenlik ağı olarak her gece bir kez, ya da property_seq boş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.

  1. Ödeme tamamlanınca POST /v1/holds/{id}/confirm çağırın ve kendi rezervasyon numaranızı externalRef olarak gönderin (zorunlu). Opsiyon rezervasyona döner; takvim kapalı kalır.
  2. Vazgeçilirse DELETE /v1/holds/{id}: tarihler açılır.
  3. Süre dolarsa CesiSync tarihleri kendiliğinden açar (süre bitiminden en geç birkaç saniye sonra), siz hold.expired webhook'unu alırsınız ve rezervasyon EXPIRED olur.

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.expired olayları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 (status ve holdExpiresAt). İ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.