Jawaban singkat: sistem booking WhatsApp AI = n8n + Google Sheets (slot ketersediaan) + AI ekstrak preferensi user → cek slot real-time → konfirmasi → reminder H-1 & H-0 → cancel/reschedule otomatis. Cocok: salon, klinik, kursus, konsultasi, rental, event. Semua visual no-code. Artikel ini arsitektur lengkap, format data, flow booking, dan edge case handling.
Jenis Bisnis yang Butuh Booking WhatsApp AI
| Kategori | Contoh | Slot Type | Kompleksitas |
|---|---|---|---|
| Personal Care | Salon, spa, barbershop, nail art, massage | Waktu tetap (30/60/90 menit), staff spesifik | Sedang |
| Kesehatan | Klinik, dokter gigi, fisioterapi, psikolog, check-up | Waktu fleksibel, dokter spesifik, room | Tinggi (privasi, regulasi) |
| Pendidikan | Kursus, les privat, workshop, training, sertifikasi | Sesi berulang (mingguan), batch/private | Sedang |
| Konsultasi | Hukum, pajak, bisnis, keuangan, arsitek | Slot 30/60 menit, konsultan spesifik | Sedang |
| Event & Rental | Studio foto, meeting room, alat, venue, kendaraan | Durasi jam/hari, item spesifik | Rendah-Sedang |
| Food & Beverage | Restoran private dining, catering, cooking class | Waktu + pax + menu | Tinggi |
Arsitektur Sistem Booking (n8n Visual)
Format Data Google Sheets (4 Tab Wajib)
1. Tab “Slot_Tersedia” (Master Jadwal)
| Kolom | Contoh | Keterangan |
|---|---|---|
| Slot_ID | SLT-20260115-1330-AMAN | Unique: Tanggal-Waktu-Staff |
| Tanggal | 2026-01-15 | Format YYYY-MM-DD |
| Waktu_Mulai | 13:30 | Format HH:MM (24 jam) |
| Waktu_Selesai | 14:00 | Durasi 30 menit |
| Staff | Aman | Nama staff / dokter / ruang |
| Layanan | Potong Rambut | Kategori layanan |
| Durasi_Menit | 30 | Untuk validasi |
| Harga | 150000 | Angka saja |
| Status | TERSEDIA | TERSEDIA / BOOKED / BLOCKED / OFF |
| Catatan | Khusus pria | Opsional |
Generate otomatis: Script/Apps Script generate slot 3 bulan ke depan berdasarkan jam operasional & staff. Atau manual update mingguan.
2. Tab “Booking_Log” (Riwayat Semua Booking)
| Kolom | Contoh |
|---|---|
| Booking_ID | BK-20260115-001 |
| Slot_ID | SLT-20260115-1330-AMAN |
| Nomor_User | 628123456789 |
| Nama_User | Budi Santoso |
| Layanan | Potong Rambut |
| Staff | Aman |
| Tanggal | 2026-01-15 |
| Waktu | 13:30 |
| Status | KONFIRMASI / SELESAI / BATAL / NO_SHOW |
| Waktu_Booking | 2026-01-14 20:15:00 |
| Waktu_Konfirmasi | 2026-01-14 20:16:00 |
| Waktu_Reminder_H1 | 2026-01-14 10:00:00 |
| Waktu_Reminder_H0 | 2026-01-15 08:00:00 |
| Catatan_User | Rambut tebal, potong pendek |
3. Tab “Staff_Jadwal” (Master Staff & Libur)
| Kolom | Contoh |
|---|---|
| Staff | Aman |
| Role | Senior Barber |
| Jam_Mulai | 09:00 |
| Jam_Selesai | 21:00 |
| Hari_Libur | Minggu |
| Cuti_Tanggal | 2026-01-20|2026-01-21 |
| Aktif | TRUE |
4. Tab “Layanan_Menu” (Daftar Layanan & Durasi)
| Kolom | Contoh |
|---|---|
| Kode | PR-01 |
| Nama | Potong Rambut |
| Durasi_Menit | 30 |
| Harga | 150000 |
| Staff_Bisa | Aman|Budi|Citra |
| Deskripsi | Potong + keramas + styling |
| Aktif | TRUE |
AI Prompt Ekstrak Booking Intent (Node AI Classifier)
{
“intent”: “BOOKING | CEK_SLOT | KONFIRMASI | BATAL | RESCHEDULE | TANYA_JADWAL”,
“layanan”: “kode/nama layanan (dari Layanan_Menu)”,
“staff_preferensi”: “nama staff / ‘apa saja’ / null”,
“tanggal”: “YYYY-MM-DD / ‘besok’ / ‘lusa’ / ‘minggu depan’ / null”,
“waktu_preferensi”: “pagi/siang/sore/malam / HH:MM / ‘bebas’ / null”,
“durasi_estimasi”: “menit / null”,
“catatan”: “request khusus user / null”,
“confidence”: 0.0-1.0
}
CONTOH:
User: “Mau booking potong rambut besok siang pak Aman” → {“intent”:”BOOKING”,”layanan”:”Potong Rambut”,”staff_preferensi”:”Aman”,”tanggal”:”2026-01-15″,”waktu_preferensi”:”siang”,”durasi_estimasi”:30,”catatan”:null,”confidence”:0.95}
User: “Slot kosong besok jam 14:00?” → {“intent”:”CEK_SLOT”,”layanan”:null,”staff_preferensi”:null,”tanggal”:”2026-01-15″,”waktu_preferensi”:”14:00″,”durasi_estimasi”:null,”catatan”:null,”confidence”:0.9}
User: “Batalin booking besok jam 13:30” → {“intent”:”BATAL”,”layanan”:null,”staff_preferensi”:null,”tanggal”:”2026-01-15″,”waktu_preferensi”:”13:30″,”durasi_estimasi”:null,”catatan”:null,”confidence”:0.9}
Flow Booking Lengkap (n8n Workflow Utama)
- Trigger → AI Classifier (di atas)
- Switch (Intent):
- BOOKING: Sheets Read Slot_Tersedia (filter tanggal, staff, status=TERSEDIA) → AI bangun daftar slot → User pilih → Sheets Update Slot=BOOKED + Write Booking_Log → Kirim konfirmasi + Google Maps link lokasi
- CEK_SLOT: Sheets Read Slot_Tersedia → AI format daftar → Kirim
- KONFIRMASI: User balas “YA” / “KONFIRMASI” → Sheets Update Booking_Log Status=KONFIRMASI → Kirim “Terkonfirmasi kak!”
- BATAL: Sheets Read Booking_Log (filter user + tanggal/waktu) → Sheets Update Slot=TERSEDIA + Booking_Log Status=BATAL → Kirim “Dibatalkan kak, slot dibuka lagi.”
- RESCHEDULE: BATAL lama + BOOKING baru (atomic: node Function handle transaksi)
- TANYA_JADWAL: Sheets Read Slot_Tersedia (filter tanggal minggu ini) → AI format kalender mingguan → Kirim
Reminder Otomatis (Cron Jobs – Wajib untuk No-Show Rate Rendah)
| Reminder | Cron Schedule | Target | Template Pesan |
|---|---|---|---|
| H-1 (Besok) | Daily 10:00 | Booking tanggal besok Status=KONFIRMASI | “Kak [Nama], ingat besok [Tanggal] jam [Waktu] booking [Layanan] dgn [Staff] di [Lokasi]. Maps: [Link]. Balas ‘BATAL’ kalau tidak bisa ya.” |
| H-0 (Hari Ini) | Daily 08:00 | Booking hari ini Status=KONFIRMASI | “Kak [Nama], hari ini jam [Waktu] booking [Layanan]. Datang 10 menit sebelum ya. Butuh reschedule? Balas ‘RESCHEDULE’.” |
| Post-Visit (H+1) | Daily 10:00 | Booking kemarin Status=SELESAI | “Kak [Nama], terima kasih kunjungan kemarin! Gimana hasilnya? Butuh follow-up? Balas ‘REVIEW’ kirim link Google Review.” |
Edge Case Handling (Wajib Diimplementasikan)
| Kasus | Solusi Bot |
|---|---|
| User pilih slot yang sudah booked (race condition) | Node IF cek status slot SEBELUM update → kalau sudah BOOKED: “Maaf kak, slot tadi keboking orang lain. Slot lain: [daftar lagi].” |
| User booking di masa lalu | AI Classifier: tanggal < today → intent=TANYA_JADWAL, balas: "Tanggal itu sudah lewat kak. Mau booking tanggal depan?" |
| User booking di hari libur staff | Slot_Tersedia sudah filter Staff_Jadwal (libur & cuti) → tidak muncul slot. Kalau user minta staff yg libur: “Staff [Nama] libur tanggal itu. Staff lain tersedia: [daftar].” |
| Double booking user yang sama | Node IF cek Booking_Log user + tanggal/waktu overlap → “Kak, Anda sudah booking [Layanan] jam [Waktu] tanggal itu. Mau ganti?” |
| No-show (user tidak datang) | Admin update Status=NO_SHOW → Cron H+1 kirim: “Kak, kemarin booking tidak hadir. Mau booking ulang? Atau ada kendala?” |
| User balas angka tidak valid (pilih slot) | Node IF validasi angka → tidak valid: “Maaf kak, balas nomor 1/2/3 sesuai daftar ya.” |
| Cancel letzte minute (<2 jam) | Flag “LATE_CANCEL” di Booking_Log → kebijakan: fee / tidak bisa booking 1 minggu. Bot informasikan. |
Dashboard Booking (Sheets Tab “Booking_Dashboard”)
- Total Booking / Hari, Minggu, Bulan
- Occupancy Rate: Slot BOOKED / Total Slot Tersedia (per staff, per hari)
- No-Show Rate: Status=NO_SHOW / Total Booking
- Late Cancel Rate: Flag LATE_CANCEL / Total Cancel
- Revenue: SUM Harga dari Booking_Log Status=SELESAI
- Top Layanan & Top Staff
- Peak Hours (heatmap jam)
- Conversion: Chat → Booking (dari Chat_History join Booking_Log)
Checklist Launch Sistem Booking Minggu Ini
- [ ] Definisi layanan, durasi, harga, staff di Layanan_Menu & Staff_Jadwal
- [ ] Generate Slot_Tersedia 3 bulan ke depan (script / manual)
- [ ] Setup AI Classifier prompt booking (copy template di atas)
- [ ] Import workflow: Trigger → Classifier → Switch 6 intent → Sheets Read/Write
- [ ] Setup atomic update: Slot + Booking_Log (node Function transaksi)
- [ ] Setup 3 Cron Reminder: H-1 10:00, H-0 08:00, H+1 10:00
- [ ] Edge case: race condition, masa lalu, libur staff, double booking, no-show
- [ ] Setup Booking_Dashboard (PIVOT tables)
- [ ] Uji: booking baru, cek slot, konfirmasi, batal, reschedule, tanya jadwal
- [ ] Uji edge case: pilih slot booked, tanggal lewat, staff libur, double booking
- [ ] Launch: mode pendamping 7 hari → monitor occupancy, no-show, user feedback
FAQ: Sistem Booking Reservasi WhatsApp AI
Apakah sistem ini handle konflik jadwal (race condition) saat 2 user pilih slot sama?
Ya — Node IF cek status slot SEBELUM update (SELECT FOR UPDATE logic via Sheets: baca → IF status=TERSEDIA → UPDATE). Kalau antara baca & update user lain booking: update ke-2 akan gagal (status sudah BOOKED) → bot balas “Slot tadi keboking orang lain, ini slot lain.” Untuk volume tinggi: butuh database dengan transaksi ACID (PostgreSQL/Supabase) bukan Sheets.
Bisakah user booking berulang (misal setiap Senin 10:00 selama 3 bulan)?
Bisa — Node Loop: generate multiple Booking_Log entries + update multiple Slot_Tersedia. Atau fitur “Recurring Booking” di Sheets: kolom Recurring_Weekly=TRUE, End_Date. Cron mingguan generate slot berikutnya. Template include logic ini.
Bagaimana handle pembayaran booking (DP / full)?
Workflow booking: setelah konfirmasi → kirim rekening/VA/QRIS + “Bayar DP 50% / Full dalam 2 jam ya kak, kalau tidak slot dibuka lagi.” → Cron cek payment (manual admin / Payment Gateway callback) → Status=KONFIRMASI kalau bayar, Status=BATAL kalau timeout.
Apakah butuh integrasi Google Calendar / Outlook?
Bisa — Node HTTP Request ke Google Calendar API / Microsoft Graph → create event untuk staff. Atau satu arah: staff subscribe kalender Sheets (export CSV → import Calendar). Untuk mulai: Sheets cukup, staff cek HP/WhatsBot reminder.
Template sistem booking lengkap sudah jadi di mana?
Ebook + Template n8n — include: 4 tab Sheets format, AI Classifier prompt booking, workflow 6 intent, atomic update logic, 3 cron reminder, edge case handlers, Booking_Dashboard, recurring booking logic, payment integration guide.
Baca juga: Cara Membuat Sistem Booking dan Reservasi Otomatis via WhatsApp AI untuk panduan lengkapnya.