Jadwal Google Form Otomatis Buka dan Tutup Sesuai Waktu dengan Google Apps Script

Table of Contents

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:

Tanggal: 17 September 2026
Form mulai dibuka: 09.00 WIB
Form ditutup: 10.30 WIB

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:

  1. Google Form.

  2. Akun Google.

  3. Akses ke Google Apps Script.

  4. 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 WIB
MULAI: new Date(2026, 8, 17, 9, 0, 0),
// 17 September 2026 - 10:30 WIB
SELESAI: 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 lama
hapusTriggerUlangan();
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.

BulanNilai JavaScript
Januari0
Februari1
Maret2
April3
Mei4
Juni5
Juli6
Agustus7
September8
Oktober9
November10
Desember11

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:

bukaUlangan
tutupUlangan

Contohnya:

FungsiJadwal
bukaUlangan17 September 2026 09.00
tutupUlangan17 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 TERTUTUP
09.00
↓
Trigger bekerja
↓
Google Form TERBUKA
09.00–10.29
↓
Peserta dapat mengirim jawaban
10.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:

  1. Membuka Google Form.

  2. Menghapus trigger lama.

  3. Mengecek waktu sekarang.

  4. Menentukan apakah Form harus terbuka atau tertutup.

  5. Membuat trigger buka.

  6. Membuat trigger tutup.

  7. 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.00
Selesai : 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