Jadwal Google Form Otomatis Buka dan Tutup Sesuai Waktu dengan Google Apps Script
Jadwal Google Form Otomatis Buka dan Tutup Sesuai Waktu dengan Google Apps Script
Mengatur Google Form agar otomatis terbuka dan tertutup sesuai jadwal sangat berguna untuk berbagai keperluan, seperti ujian online, ulangan sekolah, pendaftaran, survei, maupun pengumpulan tugas.
Dengan bantuan Google Apps Script, kita dapat membuat sistem jadwal Google Form yang secara otomatis:
Menutup Google Form sebelum waktu yang ditentukan.
Membuka Google Form tepat pada waktu mulai.
Menutup kembali Google Form ketika waktu selesai.
Menyediakan fungsi buka dan tutup secara manual.
Menggunakan zona waktu Indonesia, yaitu Asia/Jakarta (WIB).
Pada tutorial ini kita akan membuat sistem Jadwal Google Form Otomatis menggunakan Google Apps Script.
Apa Itu Google Apps Script?
Google Apps Script adalah platform berbasis JavaScript yang dapat digunakan untuk mengotomatisasi berbagai layanan Google, termasuk Google Forms, Google Sheets, Gmail, dan Google Drive.
Dalam tutorial ini, Google Apps Script digunakan untuk mengatur status penerimaan respons Google Form berdasarkan waktu yang telah ditentukan.
Contohnya:
Sebelum pukul 09.00, Form ditutup.
Pada pukul 09.00, Form otomatis dibuka.
Pada pukul 10.30, Form otomatis ditutup kembali.
Persiapan
Sebelum mengikuti tutorial, siapkan:
Google Form.
Akun Google.
Akses ke Google Apps Script.
ID Google Form yang akan digunakan.
Cara Mendapatkan ID Google Form
Buka Google Form yang akan digunakan.
Contoh URL:
https://docs.google.com/forms/d/1gLnHloRU3d-H04SVMsNHzBGw6_kB1AK18KT0Jom062c/edit
ID Form adalah bagian di antara /d/ dan /edit.
Contohnya:
1gLnHloRU3d-H04SVMsNHzBGw6_kB1AK18KT0Jom062c
ID tersebut kemudian dimasukkan ke dalam kode Apps Script.
Membuat Google Apps Script
Buka Google Form kemudian pilih:
⋮ → Editor skrip
atau buka Google Apps Script melalui:
https://script.google.com/
Buat project baru.
Hapus kode bawaan kemudian masukkan kode berikut.
Script Jadwal Google Form Otomatis
/***************************************************** JADWAL GOOGLE FORM - SMK DWIJA PRAJA* Versi stabil tanpa setCustomClosedFormMessage()****************************************************/const CONFIG = {// ==========================================// ID GOOGLE FORM// ==========================================FORM_ID: "1gLnHloRU3d-H04SVMsNHzBGw6_kB1AK18KT0Jom062c",// ==========================================// JADWAL ULANGAN// ==========================================// 17 September 2026 - 09:00 WIBMULAI: new Date(2026, 8, 17, 9, 0, 0),// 17 September 2026 - 10:30 WIBSELESAI: new Date(2026, 8, 17, 10, 30, 0)};/***************************************************** MENGAMBIL GOOGLE FORM****************************************************/function getForm() {if (!CONFIG.FORM_ID ||CONFIG.FORM_ID === "MASUKKAN_ID_FORM_DI_SINI") {throw new Error("FORM_ID belum diisi. Masukkan ID Google Form pada CONFIG.");}return FormApp.openById(CONFIG.FORM_ID);}/***************************************************** SETUP JADWAL** Jalankan fungsi ini SATU KALI****************************************************/function setupUlangan() {const form = getForm();// Hapus trigger lamahapusTriggerUlangan();const sekarang = new Date();// ==========================================// JIKA BELUM WAKTUNYA// ==========================================if (sekarang < CONFIG.MULAI) {form.setAcceptingResponses(false);Logger.log("FORM DITUTUP - Menunggu waktu mulai.");}// ==========================================// JIKA SEDANG DALAM WAKTU UJIAN// ==========================================else if (sekarang >= CONFIG.MULAI &&sekarang < CONFIG.SELESAI) {form.setAcceptingResponses(true);Logger.log("FORM DIBUKA - Ujian sedang berlangsung.");}// ==========================================// JIKA SUDAH SELESAI// ==========================================else {form.setAcceptingResponses(false);Logger.log("FORM DITUTUP - Waktu ujian sudah selesai.");}// ==========================================// TRIGGER BUKA// ==========================================if (CONFIG.MULAI > sekarang) {ScriptApp.newTrigger("bukaUlangan").timeBased().at(CONFIG.MULAI).create();}// ==========================================// TRIGGER TUTUP// ==========================================if (CONFIG.SELESAI > sekarang) {ScriptApp.newTrigger("tutupUlangan").timeBased().at(CONFIG.SELESAI).create();}Logger.log("--------------------------------");Logger.log("SETUP ULANGAN BERHASIL");Logger.log("--------------------------------");Logger.log("Mulai : " +Utilities.formatDate(CONFIG.MULAI,"Asia/Jakarta","dd-MM-yyyy HH:mm:ss"));Logger.log("Selesai : " +Utilities.formatDate(CONFIG.SELESAI,"Asia/Jakarta","dd-MM-yyyy HH:mm:ss"));}/***************************************************** MEMBUKA FORM****************************************************/function bukaUlangan() {const form = getForm();form.setAcceptingResponses(true);Logger.log("================================");Logger.log("ULANGAN DIBUKA");Logger.log(Utilities.formatDate(new Date(),"Asia/Jakarta","dd-MM-yyyy HH:mm:ss"));Logger.log("================================");}/***************************************************** MENUTUP FORM****************************************************/function tutupUlangan() {const form = getForm();form.setAcceptingResponses(false);Logger.log("================================");Logger.log("ULANGAN DITUTUP");Logger.log(Utilities.formatDate(new Date(),"Asia/Jakarta","dd-MM-yyyy HH:mm:ss"));Logger.log("================================");}/***************************************************** HAPUS TRIGGER ULANGAN****************************************************/function hapusTriggerUlangan() {const triggers =ScriptApp.getProjectTriggers();triggers.forEach(function(trigger) {const fungsi =trigger.getHandlerFunction();if (fungsi === "bukaUlangan" ||fungsi === "tutupUlangan") {ScriptApp.deleteTrigger(trigger);}});}/***************************************************** BUKA MANUAL****************************************************/function bukaManual() {const form = getForm();form.setAcceptingResponses(true);Logger.log("FORM BERHASIL DIBUKA SECARA MANUAL.");}/***************************************************** TUTUP MANUAL****************************************************/function tutupManual() {const form = getForm();form.setAcceptingResponses(false);Logger.log("FORM BERHASIL DITUTUP SECARA MANUAL.");}
Penjelasan Bagian Penting dalam Script
1. FORM_ID
Bagian ini digunakan untuk menentukan Google Form yang akan dikontrol.
FORM_ID: "ID_GOOGLE_FORM"
Ganti dengan ID Google Form Anda.
Contoh:
FORM_ID: "1gLnHloRU3d-H04SVMsNHzBGw6_kB1AK18KT0Jom062c"
2. Menentukan Waktu Mulai
Pada bagian:
MULAI: new Date(2026, 8, 17, 9, 0, 0),
formatnya adalah:
new Date(tahun, bulan, tanggal, jam, menit, detik)
Perlu diperhatikan bahwa nomor bulan dimulai dari 0.
| Bulan | Nilai JavaScript |
|---|---|
| Januari | 0 |
| Februari | 1 |
| Maret | 2 |
| April | 3 |
| Mei | 4 |
| Juni | 5 |
| Juli | 6 |
| Agustus | 7 |
| September | 8 |
| Oktober | 9 |
| November | 10 |
| Desember | 11 |
Jadi:
new Date(2026, 8, 17, 9, 0, 0)
berarti:
17 September 2026 pukul 09.00.
3. Menentukan Waktu Selesai
Waktu selesai ditentukan melalui:
SELESAI: new Date(2026, 8, 17, 10, 30, 0)
Artinya Google Form akan ditutup pada:
17 September 2026 pukul 10.30 WIB.
4. Fungsi setupUlangan()
Fungsi utama yang perlu dijalankan adalah:
setupUlangan()
Fungsi ini melakukan beberapa pekerjaan sekaligus.
Pertama, mengecek waktu sekarang.
Kemudian script menentukan kondisi Google Form:
Sebelum ujian
Form → Tertutup
Saat ujian berlangsung
Form → Terbuka
Setelah ujian
Form → Tertutup
Selain itu, fungsi ini membuat trigger otomatis untuk membuka dan menutup Form.
5. Trigger Otomatis
Google Apps Script menggunakan time-driven trigger untuk menjalankan fungsi berdasarkan waktu.
Trigger buka:
ScriptApp.newTrigger("bukaUlangan").timeBased().at(CONFIG.MULAI).create();
Trigger tersebut akan menjalankan:
bukaUlangan()
pada waktu yang telah ditentukan.
Sedangkan trigger tutup menjalankan:
tutupUlangan()
pada waktu selesai.
6. Fungsi Membuka Google Form
Fungsi:
function bukaUlangan() {
menggunakan:
form.setAcceptingResponses(true);
Nilai true berarti Google Form menerima respons.
Dengan demikian, peserta dapat mulai mengerjakan ujian.
7. Fungsi Menutup Google Form
Untuk menutup Form digunakan:
form.setAcceptingResponses(false);
Nilai false berarti Google Form tidak lagi menerima respons.
8. Fungsi Buka dan Tutup Manual
Script juga menyediakan kontrol manual.
Untuk membuka Form secara manual, jalankan:
bukaManual()
Sedangkan untuk menutup Form:
tutupManual()
Fitur ini berguna apabila terjadi kondisi tertentu, misalnya:
Ujian harus dibuka lebih awal.
Ujian harus diperpanjang.
Ujian harus ditutup sementara.
Ada masalah teknis saat pelaksanaan.
Cara Menjalankan Script untuk Pertama Kali
Setelah kode dimasukkan, jangan langsung menjalankan bukaUlangan().
Pilih fungsi:
setupUlangan
kemudian klik:
Run / Jalankan
Pada penggunaan pertama, Google akan meminta izin.
Klik:
Review permissions
Kemudian pilih akun Google yang digunakan.
Jika muncul peringatan aplikasi belum diverifikasi, pilih:
Advanced → Go to project
Kemudian pilih:
Allow
Izin diperlukan karena script harus mengakses Google Form dan membuat trigger otomatis.
Mengecek Trigger
Setelah setupUlangan() berhasil dijalankan, buka menu:
Triggers / Pemicu
Biasanya terdapat dua trigger:
bukaUlangantutupUlangan
Contohnya:
| Fungsi | Jadwal |
|---|---|
| bukaUlangan | 17 September 2026 09.00 |
| tutupUlangan | 17 September 2026 10.30 |
Jika kedua trigger sudah muncul, sistem siap digunakan.
Contoh Alur Sistem
Misalnya jadwal ujian:
09.00–10.30 WIB
Maka sistem bekerja seperti berikut:
08.59↓Google Form TERTUTUP09.00↓Trigger bekerja↓Google Form TERBUKA09.00–10.29↓Peserta dapat mengirim jawaban10.30↓Trigger bekerja↓Google Form TERTUTUP
Dengan sistem ini, guru tidak perlu membuka dan menutup Google Form secara manual.
Cara Mengubah Jadwal
Misalnya ujian akan dilaksanakan pada:
20 September 2026 pukul 08.00–09.30 WIB
ubah bagian konfigurasi menjadi:
MULAI: new Date(2026, 8, 20, 8, 0, 0),SELESAI: new Date(2026, 8, 20, 9, 30, 0)
Setelah mengubah jadwal, jalankan kembali:
setupUlangan()
Script akan menghapus trigger lama terlebih dahulu dan membuat trigger baru sesuai jadwal.
Mengapa Harus Menggunakan setupUlangan()?
Fungsi setupUlangan() dirancang sebagai pusat pengaturan jadwal.
Ketika dijalankan, script:
Membuka Google Form.
Menghapus trigger lama.
Mengecek waktu sekarang.
Menentukan apakah Form harus terbuka atau tertutup.
Membuat trigger buka.
Membuat trigger tutup.
Menampilkan informasi jadwal pada log.
Karena itu, jangan membuat trigger bukaUlangan dan tutupUlangan secara manual jika tidak diperlukan.
Tips Agar Jadwal Berjalan dengan Benar
1. Periksa Zona Waktu
Pastikan zona waktu project Apps Script menggunakan:
(GMT+07:00) Jakarta
Anda dapat memeriksanya melalui:
Project Settings → Time zone
Gunakan zona:
Asia/Jakarta
Hal ini penting agar jadwal ujian sesuai dengan waktu Indonesia Barat.
2. Jangan Menghapus Trigger
Setelah setupUlangan() berhasil dijalankan, pastikan trigger tetap tersedia.
3. Jangan Menjalankan setup Berulang Kali Tanpa Alasan
Sebenarnya script sudah memiliki fungsi untuk menghapus trigger lama:
hapusTriggerUlangan();
sehingga menjalankan setup kembali tidak akan menggandakan trigger buka/tutup.
4. Uji Sebelum Digunakan
Sebaiknya lakukan pengujian menggunakan waktu beberapa menit ke depan.
Misalnya:
Mulai : 12.00Selesai : 12.05
Kemudian periksa apakah Form benar-benar terbuka dan tertutup sesuai jadwal.
Kelebihan Sistem Ini
Sistem Jadwal Google Form Otomatis ini memiliki beberapa kelebihan:
Tidak memerlukan server sendiri.
Tidak memerlukan hosting.
Menggunakan Google Apps Script.
Dapat digunakan untuk ujian online.
Form dapat dibuka otomatis.
Form dapat ditutup otomatis.
Mendukung kontrol manual.
Trigger lama dibersihkan sebelum membuat jadwal baru.
Cocok untuk kebutuhan sekolah.
Kesimpulan
Dengan menggunakan Google Forms dan Google Apps Script, guru dapat membuat sistem jadwal Google Form otomatis tanpa harus membuka dan menutup Form secara manual.
Konsep dasarnya sederhana:
Tentukan Form↓Tentukan waktu mulai↓Tentukan waktu selesai↓Jalankan setupUlangan()↓Trigger dibuat↓Form otomatis dibuka↓Form otomatis ditutup
Sistem ini dapat dikembangkan lebih lanjut menjadi aplikasi ujian online yang memiliki countdown timer, halaman informasi sebelum ujian, pembatasan akses, dashboard monitoring, dan pengaturan jadwal beberapa kelas sekaligus.
Jika digunakan untuk ujian sekolah, sebaiknya lakukan pengujian terlebih dahulu sebelum jadwal ujian sebenarnya agar seluruh trigger dan izin Apps Script sudah berjalan dengan baik.
Post a Comment