Booking grup & kelas
Terima booking kelas atau sesi grup di Termilo dengan kapasitas resource dan kursi tersisa per jadwal. Satu layanan, banyak peserta per slot — tanpa risiko overbooking.
Model kapasitas#
Kelas memakai primitif booking yang sama dengan sesi privat — tidak ada tipe khusus. Bedanya hanya kapasitas. Modelkan kelas sebagai layanan yang diikat ke sebuah resource dengan capacity lebih dari 1, lalu mesin ketersediaan menghitung berapa kursi yang masih tersisa di tiap slot.
- Sumber kapasitas adalah kolom
capacitypada tabelresources(bawaan1). Isi12untuk kelas 12 kursi. - Tiap slot membawa
capacityRemaining— sisa kursi setelah booking aktif dikurangi. - Satu booking memesan satu kursi. Peserta berikutnya membuat booking sendiri sampai
capacityRemainingmencapai0.
Bentuk satu slot dari hasil GET /book/:tenantSlug/availability.
Menyiapkan kelas#
Tiga langkah, semuanya dari dashboard (sesi Google + header CSRF):
- Buat resource lewat
POST /api/resourcesdengancapacity> 1 — wajib mengisitypedanname. - Atur jam operasional layanan di Mengatur ketersediaan agar tiap kemunculan kelas menjadi slot tersendiri.
Field POST /api/resources. Endpoint ini butuh peran tulis (tenant_owner / tenant_admin) dan header X-Termilo-CSRF.
Membaca kapasitas tersisa#
Endpoint ketersediaan publik (tanpa auth) mengembalikan satu daftar slot, masing-masing dengan capacityRemaining. Saring slot yang masih punya kursi sebelum menampilkannya:
finalAuthority: "booking_create_recheck_under_lock". Angka kursi bisa berubah antara saat dibaca dan saat booking dibuat — otoritas terakhir selalu pengecekan ulang di bawah lock, bukan respons ini.Jendela query dibatasi maksimum 31 hari (fromMs – toMs dalam UTC epoch milidetik).
Menerima booking kelas#
Booking kelas memakai endpoint create yang sama dengan sesi privat. Header Idempotency-Key wajib, dan customer perlu mengisi email atau telepon.
Booking baru lahir dengan status held dan holdExpiresAtMs = sekarang + 10 menit; konfirmasi dari dashboard memindahkannya ke confirmed. Tiap booking aktif mengurangi capacityRemaining satu kursi.
BOOKING_SLOT_UNAVAILABLE (409) — bukan overbooking.Waitlist & reminder#
Saat kelas penuh, daftar tunggu otomatis (waitlist) yang menggeser peserta saat ada pembatalan tidak tersedia. Kelas penuh berarti slot menampilkan capacityRemaining: 0 dan booking ditolak. Kelola daftar tunggu secara manual di luar Termilo.
waitlist di Termilo. Reminder terjadwal (H-1, 1 jam sebelum) juga tidak tersedia. Konfirmasi booking terkirim lewat email; WhatsApp bukan kanal kirim — hanya nomornya yang tersimpan di booking. Webhook booking keluar sudah live. Lihat Webhooks untuk event live (mis. booking.created).Batas MVP#
Termilo mendukung kelas berkapasitas sederhana berbasis kapasitas resource. Yang berikut sengaja di luar MVP:
- Tidak tersediaWaitlist otomatis dengan promosi saat ada pembatalan
- Tidak tersediaMemesan beberapa kursi dalam satu booking
- Tidak tersediaRangkaian kelas berulang yang dikelola sebagai satu kesatuan
Tetap pada pola kelas berbagi-kapasitas sederhana, dan satu booking per kursi, agar perilaku tetap dapat diprediksi dan bebas overbooking.