Gagal RSVP / Ucapan GSheet? Ini Langkah Mudah Setup Apps Script Laxy Motions!

Penyebab kegagalan RSVP & Ucapan di Google Sheets biasanya dikarenakan kesalahan konfigurasi deployment Google Apps Script atau ketidakcocokan ID undangan antara data.json dan Code.gs. Google Apps Script bertindak sebagai perantara (REST API) untuk menerima kiriman data dari website klien lalu menulisnya ke tab spreadsheet database secara otomatis.

📖
Skenario Penggunaan Nyata

Bayangkan Anda ingin agar setiap kali ada tamu mengisi konfirmasi kehadiran di website undangan digital, datanya langsung masuk ke spreadsheet Google Drive Anda tanpa perlu hosting server database berbayar. Dengan melakukan setup dan mendeploy Code.gs dari Apps Script, website undangan akan terhubung langsung ke spreadsheet database secara otomatis.

✨ Keunggulan Integrasi Google Sheets API

  • Serverless & Gratis: Tidak memakan resource CPU/RAM hosting Anda dan sepenuhnya gratis menggunakan infrastruktur Google Cloud.
  • Logika Pengisian Real-Time: Data konfirmasi kehadiran (RSVP) langsung tertulis dalam hitungan detik saat tamu mengklik tombol kirim.
  • Fleksibilitas Pengelolaan: Mempelai dapat langsung melihat, memfilter, dan mengunduh laporan kehadiran tamu dari file Google Sheets mereka sendiri.

🛠️ Persiapan Database & Deployment Google Apps Script

Langkah 1: Mengunggah Template Spreadsheet

  1. Buka Google Drive Anda menggunakan akun Google aktif.
  2. Klik tombol Baru (New) → Upload file, kemudian pilih berkas master template database: RSVP_SheetTemplate.xlsx (dapat ditemukan di folder template undangan terkait, misal: templates/bali/_backend/).
  3. Setelah berhasil diunggah, klik kanan berkas tersebut di Google Drive → Buka dengan (Open with) → Google Sheets (sistem Google Sheets akan mengonversinya secara otomatis menjadi lembar kerja spreadsheet online).
  4. PENTING: Ganti nama file spreadsheet tersebut (misalnya menjadi nama mempelai) agar Anda dapat membedakan database antar-klien dengan mudah.
  5. Hapus semua baris contoh di bawah header pada tab Tamu, RSVP, dan Ucapan. Berkas template berisi data contoh (termasuk ucapan untuk Andy & Zhea) yang akan ikut tampil di undangan klien jika tidak dihapus. Baris header jangan dihapus.

Langkah 2: Memahami Struktur Tab Database

Di dalam Google Sheet baru Anda, terdapat 3 tab utama yang wajib dipertahankan namanya (case-sensitive) beserta urutan header kolomnya tanpa ada perubahan:

  • Tamu: Daftar nama-nama tamu undangan yang diimpor untuk keperluan link personal dan kuota RSVP (kolom: nama, max_pax, sudah_rsvp, kehadiran, jumlah_pax).
  • RSVP: Log konfirmasi kehadiran tamu yang diisi secara otomatis oleh API saat tamu menekan tombol konfirmasi (kolom: timestamp, nama, kehadiran, jumlah_pax).
  • Ucapan: Log ucapan doa restu tamu yang masuk secara otomatis (kolom: timestamp, nama, pesan, status, kehadiran). Kolom kehadiran belum ada di berkas template; Code.gs menambahkannya otomatis saat ucapan pertama masuk. Anda bisa memoderasi ucapan dengan mengubah nilai kolom status menjadi hidden agar tidak muncul di halaman depan.
💡
Catatan Data Mempelai

Berbeda dengan sistem versi terdahulu, data detail profil mempelai, countdown, dan daftar acara pernikahan kini sepenuhnya dimuat dari berkas data.json di folder template klien, bukan dari Google Sheets. Hal ini membuat waktu muat halaman jauh lebih cepat dan andal.

Langkah 3: Menempelkan Kode Apps Script

  1. Pada Google Sheet Anda yang baru saja disimpan, buka menu Extensions (Ekstensi) → Apps Script.
  2. Hapus seluruh kode bawaan (jika ada tulisan function myFunction(), hapus bersih).
  3. Di Data Editor, klik Generate All, buka tab Code.gs, lalu salin seluruh kodenya dan paste ke editor Google Apps Script. Nilai UNDANGAN_ID, DEFAULT_MAX_PAX, dan ALLOW_OPEN_RSVP di kode ini sudah terisi dari data Anda. Alternatifnya, salin berkas Code.gs di folder _backend/ template (misal: templates/bali/_backend/Code.gs); isi kodenya sama, tetapi nilai CONFIG harus diisi manual seperti langkah berikut.
  4. Jika memakai _backend/Code.gs, di blok CONFIG bagian atas, ganti nilai UNDANGAN_ID: 'andy-zhea' dengan ID undangan klien. Nilainya harus sama persis dengan undangan_id di data.json. Jika allow_open_rsvp di data.json bernilai true, ubah juga ALLOW_OPEN_RSVP menjadi true. DEFAULT_MAX_PAX (bawaan 2) adalah kuota tamu jika kolom max_pax dikosongkan.
  5. Klik tombol Simpan (Save) atau tekan Ctrl + S.

Langkah 4: Mendeploy Apps Script sebagai Web App

⚠️
Perhatikan Langkah Deployment Ini

Jika konfigurasi salah, website undangan tidak akan bisa mengirimkan data RSVP. Pastikan opsi 'Who has access' diset ke 'Anyone'.

  1. Di sudut kanan atas editor Apps Script, klik tombol Deploy (Terapkan) → pilih New deployment (Penerapan baru).
  2. Klik ikon roda gigi kecil (Pilih jenis) → pilih Web app (Aplikasi web).
  3. Konfigurasikan pengaturannya sebagai berikut:
    • Description (Deskripsi): Masukkan deskripsi bebas, misalnya: Laxy API v1.0.0.
    • Execute as (Jalankan sebagai): Pilih Me ([email protected]).
    • Who has access (Siapa yang memiliki akses): Pilih Anyone (Siapa saja). Jangan memilih "Anyone with Google Account" karena tamu undangan tidak wajib login Google.
  4. Klik tombol Deploy.
  5. Jika muncul dialog otorisasi, klik Authorize Access → Pilih akun Google Anda → Klik Advanced (Lanjutan) di pojok kiri bawah → Klik Go to Laxy Motions (Unsafe) → Klik Allow.
  6. Salin URL Aplikasi Web yang dihasilkan (URL ini akan diawali dengan https://script.google.com/macros/s/.../exec).

Langkah 5: Konfigurasi data.json

  1. Di dalam root direktori folder template undangan klien Anda (satu level dengan index.html), buka berkas data.json menggunakan code editor.
  2. Cari key rsvpApiUrl dan isi nilainya dengan URL Web App Google Apps Script yang telah Anda salin sebelumnya. Pastikan juga key undangan_id diisi sesuai dengan ID undangan pengantin:
    {
      "_schema": 1,
      "undangan_id": "andy-zhea",
      "rsvpApiUrl": "https://script.google.com/macros/s/AKfycb...CONTOH-URL-DEPLOYMENT.../exec",
      "default_max_pax": 2,
      "allow_open_rsvp": false,
      "disable_rsvp_submit": false
      // ... data profil mempelai dan acara di bawahnya ...
    }
  3. Pastikan disable_rsvp_submit bernilai false. Berkas data.json demo bawaan template memakai true, sehingga form RSVP dan ucapan hanya berjalan dalam mode demo dan tidak menyimpan apa pun ke Google Sheets.
  4. Simpan berkas data.json tersebut. Sekarang sistem frontend undangan dan database Google Sheets Anda telah tersinkronisasi secara penuh.
💡
Pro Tips Keamanan & Kemudahan Deployment

1. Ambil Code.gs dari Data Editor: Tab Code.gs di jendela Generate All berisi kode yang sama dengan _backend/Code.gs, tetapi UNDANGAN_ID, DEFAULT_MAX_PAX, dan ALLOW_OPEN_RSVP sudah terisi dari data Anda. Risiko salah ketik UNDANGAN_ID (penyebab error wrong_id) jadi lebih kecil.

2. Deploy Ulang Setiap Perubahan: Setiap kali Anda mengedit isi file Code.gs di Apps Script, Anda WAJIB membuat deployment baru (Deploy → New deployment) dan menyalin URL baru ke data.json agar perubahannya berlaku di website. Mengedit file tanpa mendeploy ulang tidak akan mengubah API yang sedang berjalan.

💡 Pertanyaan Sering Ditanya (FAQ)

Hal ini terjadi jika Anda lupa mengatur hak akses "Who has access" ke "Anyone" pada saat mendeploy Web App. Silakan lakukan deployment ulang (New deployment), ganti akses ke 'Anyone', jalankan sebagai pemilik email ('Me'), lalu perbarui URL rsvpApiUrl di berkas data.json Anda.

Penyebab paling umum adalah nilai undangan_id di data.json tidak sama persis dengan UNDANGAN_ID di Code.gs. Apps Script menolak semua permintaan dengan error wrong_id, sehingga form RSVP menampilkan "Maaf, nama Anda tidak ada dalam daftar tamu undangan ini", pengiriman RSVP dan ucapan gagal, dan daftar ucapan kosong. Untuk memastikan, buka di browser [URL Web App]?action=getUcapan&id=[undangan_id]. Jika hasilnya {"ok":false,"error":"wrong_id"}, kedua ID belum sama. Pencocokan ID membedakan huruf besar dan kecil (case-sensitive): andy-zhea dan Andy-Zhea dianggap berbeda. Samakan kedua nilai. Jika yang Anda ubah adalah Code.gs, buat deployment baru lalu perbarui rsvpApiUrl di data.json.

Sangat direkomendasikan untuk menduplikasi master file spreadsheet untuk setiap klien baru. Satu spreadsheet mewakili database satu klien pengantin agar data antar klien Anda tidak bercampur.