Setup Teras (A–D)
Sijil Auto • Token • Email
A. Struktur Google Sheet (Tab: IQRDC_2026)
Buat satu tab bernama IQRDC_2026 dan sediakan kolum berikut (disyorkan ikut susunan).
Buat satu tab bernama IQRDC_2026 dan sediakan kolum berikut (disyorkan ikut susunan).
- Timestamp
- ParticipantID (cth: IQRDC-2026-000123)
- FullName
- Category
- PaymentStatus (PAID / UNPAID)
- SubmissionStatus (SUBMITTED / NOT_SUBMITTED)
- VerificationStatus (PENDING / VERIFIED)
- Award (GOLD / SILVER / BRONZE / PARTICIPATION)
- CertificateID (auto)
- Token (auto)
- TokenExpiry (auto)
- CertPdfFileId (auto)
- CertPdfUrl (auto)
- EmailSent (YES / NO)
- EmailSentAt
- UpdatedAt
Logik pemprosesan: Sistem hanya menjana sijil apabila PaymentStatus=PAID, SubmissionStatus=SUBMITTED, VerificationStatus=VERIFIED, dan Award sudah diisi.
B. Google Drive Folder
Sediakan folder output PDF untuk sijil.
Sediakan folder output PDF untuk sijil.
B1 — Buat Folder
Drive
Cipta folder: IQRDC_2026_Certificates (PDF output). (Opsyen) folder template: IQRDC_2026_Templates.
B2 — Ambil Folder ID
Copy ID
Buka folder → lihat URL → salin ID folder (akan digunakan dalam Apps Script sebagai CERT_FOLDER_ID).
C. Template Sijil (Google Slides)
Sediakan satu Google Slides template sijil dengan placeholder yang konsisten (supaya script boleh replace).
Sediakan satu Google Slides template sijil dengan placeholder yang konsisten (supaya script boleh replace).
- Letak teks placeholder pada slide, contoh: {{FULL_NAME}}, {{PARTICIPANT_ID}}, {{AWARD}}, {{CERTIFICATE_ID}}, {{DATE_ISSUED}}, {{VERIFY_URL}} (opsyen)
- Simpan sebagai “Template IQRDC 2026 Certificate”
- Ambil Slides Template ID daripada URL (untuk SLIDES_TEMPLATE_ID)
D. Apps Script (Auto-generate + Auto-email + Token Portal)
Paste kod Apps Script penuh, kemudian isi 4 konfigurasi utama.
Paste kod Apps Script penuh, kemudian isi 4 konfigurasi utama.
const SHEET_NAME = "IQRDC_2026";
const CERT_FOLDER_ID = "PASTE_FOLDER_ID";
const SLIDES_TEMPLATE_ID = "PASTE_TEMPLATE_ID";
let PORTAL_BASE_URL = "PASTE_WEB_APP_URL"; // isi selepas deploy Web App
Trigger disyorkan: time-driven setiap 15 minit untuk scan row VERIFIED dan auto proses sijil + email.
function createTimeTrigger() {
ScriptApp.newTrigger("runCertificatePipeline")
.timeBased()
.everyMinutes(15)
.create();
}
Nota: Kod Apps Script penuh biasanya panjang. Jika Prof mahu, saya boleh “inject” kod penuh itu dalam page ini juga (single page), tetapi page akan jadi sangat panjang. Untuk operasi, cukup Prof simpan kod di Apps Script dan gunakan portal HTML (F) sebagai muka peserta.
E Teruskan ke Deploy Web App