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.
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
- Buka Google Drive Anda menggunakan akun Google aktif.
- 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/). - 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).
- PENTING: Ganti nama file spreadsheet tersebut (misalnya menjadi nama mempelai) agar Anda dapat membedakan database antar-klien dengan mudah.
- 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). Kolomkehadiranbelum ada di berkas template;Code.gsmenambahkannya otomatis saat ucapan pertama masuk. Anda bisa memoderasi ucapan dengan mengubah nilai kolom status menjadihiddenagar tidak muncul di halaman depan.
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
- Pada Google Sheet Anda yang baru saja disimpan, buka menu Extensions (Ekstensi) → Apps Script.
- Hapus seluruh kode bawaan (jika ada tulisan
function myFunction(), hapus bersih). - 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, danALLOW_OPEN_RSVPdi kode ini sudah terisi dari data Anda. Alternatifnya, salin berkasCode.gsdi folder_backend/template (misal:templates/bali/_backend/Code.gs); isi kodenya sama, tetapi nilai CONFIG harus diisi manual seperti langkah berikut. - Jika memakai
_backend/Code.gs, di blokCONFIGbagian atas, ganti nilaiUNDANGAN_ID: 'andy-zhea'dengan ID undangan klien. Nilainya harus sama persis denganundangan_iddidata.json. Jikaallow_open_rsvpdidata.jsonbernilaitrue, ubah jugaALLOW_OPEN_RSVPmenjaditrue.DEFAULT_MAX_PAX(bawaan2) adalah kuota tamu jika kolommax_paxdikosongkan. - Klik tombol Simpan (Save) atau tekan
Ctrl + S.
Langkah 4: Mendeploy Apps Script sebagai Web App
Jika konfigurasi salah, website undangan tidak akan bisa mengirimkan data RSVP. Pastikan opsi 'Who has access' diset ke 'Anyone'.
- Di sudut kanan atas editor Apps Script, klik tombol Deploy (Terapkan) → pilih New deployment (Penerapan baru).
- Klik ikon roda gigi kecil (Pilih jenis) → pilih Web app (Aplikasi web).
- 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.
- Description (Deskripsi): Masukkan deskripsi bebas, misalnya:
- Klik tombol Deploy.
- 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.
- Salin URL Aplikasi Web yang dihasilkan (URL ini akan diawali dengan
https://script.google.com/macros/s/.../exec).
Langkah 5: Konfigurasi data.json
- Di dalam root direktori folder template undangan klien Anda (satu level dengan
index.html), buka berkasdata.jsonmenggunakan code editor. - Cari key
rsvpApiUrldan isi nilainya dengan URL Web App Google Apps Script yang telah Anda salin sebelumnya. Pastikan juga keyundangan_iddiisi 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 ... } - Pastikan
disable_rsvp_submitbernilaifalse. Berkasdata.jsondemo bawaan template memakaitrue, sehingga form RSVP dan ucapan hanya berjalan dalam mode demo dan tidak menyimpan apa pun ke Google Sheets. - Simpan berkas
data.jsontersebut. Sekarang sistem frontend undangan dan database Google Sheets Anda telah tersinkronisasi secara penuh.
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.
🔗 Modul Panduan Terkait
Langkah berikutnya setelah database siap adalah menyunting konten di Data Editor:
💡 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.