Script sertifikat kali ini merupakan versi improvement dari artikel sebelumnya yang terinspirasi dari Sourabh Choraria dengan tambahan fitur yang lebih banyak dan efisien.
Anda harus lebih dulu menyimak artikel Mengirim Sertifikat Ke Telegram sebelum melanjutkan ke materi iniSiLiKiDi
BAHAN BAKU
Untuk mengimplementasikan eksperimen ini perlu dipersiapkan beberapa hal:
- Satu file Google Slide, Sheets, dan Folder Google Drive.
- ID dari ketiganya, cara mendapatkan masing-masing ID silahkan simak dalam artikel ini.
- Bot Telegram berikut API Token, anda dapat menyimak cara membuatnya mendapatkan API Token pada artikel ini.
- Satu file Apps Script, anda bisa menyimak cara membuatnya dan deployment Web Apps di artikel ini.
- Script eksperimen ini yang dapat unduh atau salin dari repository.
- ID User anda sebagai admin bot yang akan digunakan untuk menampung keterangan error bila terjadi kendala, gunakan @simrsinfobot untuk mengetahui ID User anda.
Di dalam script terdapat beberapa konstata yang harus anda isi dengan ID, API TOKEN, dan URL file bahan baku milik anda:
Bila anda menemui kendala saat deployment silahkan simak cara penanganannya pada artikel iniSiLiKiDi
OPTIMALISASI LEBIH BAIK
Berikut beberapa peningkatan fitur dan perbaikan logika program dari script sebelumnya:
- Tidak lagi mengirimkan sertifikat yang masih berbentuk template melainkan sudah dipastikan terisi data peserta dengan akurat.
- Subfolder sertifikat hanya berisi sertifikat dalam format PDF tidak lagi dalam format Google Slide
- Penanganan lebih baik untuk beberapa file dengan nama file yang sama dan format yang berbeda tetapi tetap dikirim dalam format PDF
- Logika program lebih diefisienkan lagi walaupun masih hybrid menggunakan ES5 dan ES6 agar tetap mudah dipahami
- Pencarian nama tidak case sensitive namun tetap eksak untuk mengarahkan user agar tetap menuliskan dengan benar ejaan namanya
- Sertifikat dikirimkan ke Telegram dalam bentuk file PDF dan link online untuk kenyamanan user
ARSIP SERTIFIKAT
Pada script aslinya tidak disediakan penanganan arsip yang sebetulnya sangat berguna untuk menghindari pembuatan berulang untuk sertifikat yang datanya sama.
Pada optimalisasi versi pertama sudah disediakan pengecekan arsip sebelum pembuatan, hanya saja belum bisa menangani beberapa file yang namanya sama dengan format berbeda.
Fungsi cariSertifikat() dioptimalkan dengan penambahan sinyal true-false pada nilai kembaliannya [return]. True berarti tidak perlu lagi melakukan proses pembuatan, sedangkan False berarti arsip sertifikat tidak ada perlu untuk dibuat baru.
CEK DATA PESERTA
Pada script aslinya memang tidak dirancang by request melainkan diproses semua data peserta secara masal. Tentunya ini berisiko menghabiskan batas kuota harian yang diterapkan Google serta berisiko ditandai sebagai spam.
Versi optimalisasi sudah dirancang memproses berdasarkan permintaan saja dan itupun harus sesuai dengan catatan data di Sheets. Selain itu, tidak lagi dikirimkan melalui GMail yang rentan kuota dan cap spamming, melainkan langsung dikirimkan melalui Telegram.
SOLUSI PROMISE DENGAN saveAndClose()
Salah satu kendala script aslinya adalah terkadang terjadi pengiriman sertifikat yang masih berbentuk template. Pengiriman lebih dulu terjadi sebelum data peserta benar-benar terisi dalam Slide.
Utilities.sleep(), cPromisePolyfill, hingga dicoba mengubah susunan proses, tetap saja kurang membantu mengatasi masalah Asynchronous dalam script ini.
Sumber masalah baru diketahui saat proses pembuatan serfitikat [createCertificates()] di mana cloning template slide tetap dibiarkan dalam mode editing tidak disimpan dan ditutup sekalipun data peserta terisi dengan tepat. Sedangkan pengiriman tidak mungkin menunggu lama slide di-save and close.
Sehingga cukup dengan solusi sederhana menambahkan metode saveAndClose() segera setelah proses pengisian data dari Sheets di template Slide selesai dilakukan, dan hasilnya tidak terjadi lagi pengiriman sertifikat yang masih berupa template.
SERBA PDF
Baik saat dikirimkan ke user maupun arsip sertifikat sudah dalam bentuk PDF. Sebelumnya masih berbentuk cloning Google Slide sebagai template sekaligus arsip sertifikat.
PDF sudah menjadi standar dokumen yang bisa dibuka di lintas platform. Google Slide merupakan produk cloud ketika dikondisikan offline dikonversi menjadi PPTX standar Office. Tentunya tidak semua perangkat mendukung Microsoft Office dan sertifikat pun tidak membutuhkan banyak halaman.
FUNGSI INTI
doPost menjadi core function dan antarmuka dengan Telegram API. Fungsi inilah yang bertanggung jawab dalam menangkap, aransemen proses, dan pengiriman balik ke Telegram.
Secara tidak langsung diterapkan promise dengan struktur kondisional If Else untuk memastikan proses berjalan sesuai urutan: periksa arsip, periksa data, buat sertifikat, dan kirim sertifikat.
Pada saat mencapai proses pembuatan sertifikat dan pengirimannya, dibuat dua objek untuk kiriman balik ke Telegram:
- File PDF Sertifikat
- Link PDF Online
Di sini pula proses penghapusan dan konversi slide sertifikat ke pdf sertifikat lalu diarsipkan ke subfolder di Google Drive, sekaligus pengiriman ke Telegram. Serta filter command bot telegram dan nama peserta yang disertakan dalam command tersebut.
KONVERSI KE PDF
Konversi dilakukan dengan metode getAs(contentType). contentType adalah pilihan format hasil konversi. contentType dapat berupa kode MIME type seperti "application/pdf" atau kode Enum "PDF"
Berdasarkan dokumentasi Apps Script, akan lebih aman validitasnya jika menggunakan kode MIME type "application/pdf" dibandingkan kode Enum.
MEMBUAT ARSIP PDF
PDF yang dihasilkan dari getAs("application/pdf") belum berbentuk file yang bisa langsung diakses atau dibuka melainkan berada di cache/buffer yang akan hilang pada akhir alur program.
Untuk kebutuhan tersebut digunakan metode createFile() untuk menyimpan PDF dari cache/buffer ke folder Drive agar bisa diakses permanen.
PENAMAAN PDF
Metode setName() digunakan untuk penamaan file yang akan disimpan di folder Drive.
MENGHAPUS FILE SLIDE
setTrashed( true ) adalah metode yang disediakan dalam Class File untuk menghapus secara aman dengan cara memindahkan file ke tempat sampah Drive bukan untuk menghapus secara permanen.
DriveApp.getFileById( sertifikatID[i] ).setTrashed( true );
FINAL SCRIPT
Final Script dapat diunduh di repository. Hasil eksekusi script saat user mengirimkan sintak command /sertifikat nama_peserta di Telegram akan direspon seperti tampak berikut:
Dapatkan skrip semua materi di repository
Dukung donasi agar tutorial ini tetap operasional:
SiLiKiDi
Komentar
Posting Komentar