Bot Telegram: Membuat Hashtag di Chat memanfaatkan Google Script dan Spreadsheet (I)
Kali ini kita akan membuat bot telegram yang jauh lebih rumit dibanding biasanya. Karena tak hanya melibatkan spreadsheet, namun lengkap fungsi CRUD pada database dipakai. Jika tidak siap untuk mumet, lambaikan tangan. Eh, lompati saja materi ini jika tidak sanggup.
Namun, seorang pembelajar sejati yakin tidak akan menyerah hanya dengan level kerumitan seperti ini saja kan? Yoo, pelan-pelan saja kita mulai nya. Pelan-pelan dipelajari dan dipraktekkan. Alon-alon, asal kelakon.
Pendahuluan
Seperti biasa, saya jelaskan dahulu sebagai pengantar tulisan ini yak.
Latar Belakang
Fitur hashtag pada bot telegram, ternyata menjadi sangat favorit untuk dipergunakan dikalangan pengelola grup. Ini lantaran, untuk menjawab FAQ alias pertanyaan yang sangat-sangat sering (bosan) ditanyakan. Daripada males menulis, tinggal ketik hashtag nya, maka user akan dikasih tau jawaban template yang sudah ditentukan sebelumnya.
Contoh kasus, nanya aturan grup, tujuan, cara membuat A, struktur pengelola organisasi, tata tertib grup, informasi produk, alamat, kontak center, anggota kelas, nama guru-guru, jadwal piket, dan lain sebagainya.
Selama ini, sebagian user telegram bisa memanfaatkan GeDebug untuk melakukannya. Namun, tidak sedikit juga yang ingin membuat sendiri biar nama botnya kerasa lebih berkelas, sesuai brand, faktor keamanan atau kenyamanan, gengsi, dan alasan lainnya.
Karena sebelumnya kita sudah belajar membuat bot menggunakan google script, jadi ini level lanjutan lagi yang kelasnya lebih advanced ya.
Ruang Lingkup
Bot yang akan kita buat ini memanfaatkan Google Script sebagai hostingannya. Dan spreadsheet nya sebagai pengganti database untuk menyimpan hashtag.
Bot sample ini dibuat tanpa limitasi grup tertentu. Jadi bisa dipakai di semua grup, siapa saja bisa pakai, bahkan juga di private. Karena itu jika ingin membuatnya lebih spesifik hanya bekerja pada grup-grup tertentu, tidak boleh diprivate, atau hanya user tertentu saja yang boleh mengakses, silakan di modifikasi sendiri. Sengaja dibuat begini, sebagai challenge buat teman-teman yang memiliki semangat kreatif sekaligus filter buat yang males mengembangkan hehe..
Sekali lagi bot ini dibuat sesimple mungkin, biar mudah dijelaskan dan dipahami.
Tag yang diizinkan hanya berjenis teks. Jenis lainnya seperti foto, audio, sticker, lokasi dan lain-lain silakan dikembangkan sendiri. Karena akan menjadi sangat-sangat komplek jika dibahas.
Kemudian juga tidak ada fitur menambah tag dengan cara reply. Fitur ini mudah dibuatnya, namun sama seperti sebelumnya. Anggap sebagai challenge jika ingin menambahkannya.
Juga fitur-fitur kompleks lainnya, tidak disertakan. Intinya dibuat sesimple mungkin dengan CRUD sederhana.
Eh CRUD, apa itu ? CRUD itu operasi database untuk Create (membuat), Read (membaca), Update, dan Delete (hapus). Plus satu lagi, LIST atau mendata isinya. Ada lagi search nya.
Vote
Hasil vote pada group Telegram @botphp juga menunjukkan positif. Vote yang dibuat dengan tempo singkat (kurang dari 10 jam, diikuti 152 user) menunjukkan respon setuju untuk membuat tutorial ini. Seandainya hasil vote kebanyakan memilih netral ataupun yang lainnya saja akan diurungkan tutorial ini alias di konsumsi kalangan sendiri aja haha..
Sumber Vote: https://t.me/botphp/261562
Bisa jadi ini materi terakhir secara umum dibuat untuk google script. Meski sebenarnya ada 1 lagi yang menarik dibahas, yaitu pakai database sesungguhnya, yakni firebase dengan rencana proyek membuat absensi kehadiran siswa atau karyawan full crud list dan dilengkapi reportingnya. Eh, apa enaknya yang ini dibuat workshop saja? đ
Asumsi
Asumsi yang dibangun pada tulisan yang ini, masih sama dengan sebelumnya malahan sudah lebih dari itu.
- Sudah membaca dan praktek pada tulisan sebelumnya, tentang Bot Telegram, yakni Bot Welcome Gratis dengan Google Script. Jika belum membaca, dibaca dulu yak!
- Plus baca juga tentang Google Script aksesoris lanjutan tentang keyboard dan inline, untuk menambah wawasan membuat dan memodifikasi perintah library.
- Mengerti tentang operasi hashtag pada bot GeDebug. Yang belum mengerti bisa membaca dokumentasi tentang hastag gedebug.
Dengan asumsi seperti diatas, jangan sampai ada pertanyaan dasar lagi ya misalnya bagaimana cara membuat token bot telegram?
FAQ
Sebenarnya gak banget deh beberapa pertanyaan ini, tapi ternyata ada aja yang nanyain. Meski beberapa pertanyaan lainnya Oke juga.
Jadi saya cantumkan dulu di sini.
T: Boleh saya bertanya?
J: Ini sudah pertanyaan. Kalau mau bertanya, langsung saja apa yang mau ditanyakan.
T: Bisa gak buatnya pakai hp android?
J: Bisa, asal kuat melototi huruf-huruf kecil di hp yang cuma sekitar layar 6 inch. Dibandikan di layar monitor laptop 12 inch, 14â atau bahkan 15/17/21 inch.
T: Bisa ga buatnya di Mac?
J: Jelas bisa, ini kan pakai browser. Sepanjang bisa buka browser dan punya akses google bisa mencobanya.
T: Pakai bahasa pemrograman apa?
J: Ngikut google script, pakai javascript
T: Grup nya kan Bot PHP, kok bahasa bot javascript?
J: Sejak awal memang dikhususkan buat bahasa pemrograman PHP, tapi bahasa pemrograman lainnya juga OKE. Hanya saja, kawatirnya saya kurang paham menjawab. Karena core belajar saya sejak dulu ya bermain di PHP. Namun, biar gak bosen kita lompat ke javascript. Karena hosting gratisan bot untuk PHP sulit di dapat, cari yang mudah saat ini gratisan favorit yakni google drive/script/spreadsheet/firebase.
T: Gimana kak? T: Gak bisa
J: Pertanyaan sejenis ini gak jelas, gak ditanggapi ya. Jangan berharap dapat ramah tamah, apanya yang gimana? Kamu harus belajar menjelaskan permasalahannya dahulu, yang sudah dicoba apa, kemudian bertanya dengan jelas.
T: âĻ
J: âĻ (ga bisa nebak nanya apa)
Mulai
Okay, mari kita mulai. Gasss!!
Sebagai langkah acuan memulai, coding yang akan di pakai adalah pada tutorial awal Bot Telegram, yakni Bot Welcome Gratis dengan Google Script atau pakai tutorial yang kedua Google Script aksesoris lanjutan tentang keyboard dan inline.
Itu yang akan kita modif atau tambah-tambahkan.
Spreadsheet
Siapkan sebuah spreadsheet. Buat baru nama filenya bebas, sedangkan nama sheetnya tags
. Sebenarnya bebas juga mau dikasih nama lainnya, cuma harus dimodif disesuaikan sendiri di script bawahnya nanti ya.
Kolom pertama adalah nama tagnya, sedang kolom kedua adalah isi tag nya.
Kira-kira seperti ini:
Sheet ini akan kita pakai buat database, alias penampungan tags.
Baris pertama berisi name
, kemudian value
Silakan diisi beberapa tag buat sample.
Sebagai contoh bisa dilihat di https://docs.google.com/spreadsheets/d/1o3EE2zAo4Je1bRRJsas0wF0fvbKRqIU8a89qh-NkURo/edit?usp=sharing.
Pada contoh file ini, yang paling perlu diliat adalah ID filenya.
https://docs.google.com/spreadsheets/d/1o3EE2zAo4Je1bRRJsas0wF0fvbKRqIU8a89qh-NkURo
Lihat url nya, ID File sheet di atas adalah 1o3EE2zAo4Je1bRRJsas0wF0fvbKRqIU8a89qh-NkURo
ID File sheet inilah yang akan kita pergunakan untuk coding berikutnya.
HashTags
Buat berbagai fungsi tag untuk CRUD + List + Search. Penjelasannya ada di dalam codingannya ya.
Biar gak rumit dan panjang, bikin File New Script aja dan beri nama hashtags
. Di situ akan kita simpan semua fungsi terkait dengan tags.
Variable
Hapus seluruh isi file hashtags
tadi. Dan buat variable global untuk inisiasi:
// variable global umum
// Masukkan ID File Sheetmu Di SINI
let ssid = "Masukkan ID File Sheetmu Di SINI";
// nama sheet nya
let sheetName = "tags"
// buat variable baru untuk menampung sheet nya
let sheet = SpreadsheetApp.openById(ssid).getSheetByName(sheetName);
// --- spesifik
// menentukan kolom pertama dimana nama tag di simpan, yakni Name
let kolom = 1;
// pencarian dimulai dari baris ke 2
// baris pertama kita pakai buat judul kolom sheet tag (name dan value)
let baris = 2;
// inisiasi posisi kolom hasil (nilai tag)
let kolomHasil = 2;
Tambah Tag
Fungsi untuk menambah tag. Kita gak bisa langsung tambahkan tag. Jadi harus dicek terlebih dahulu apa sudah ada tag sebelumnya atau tidak.
// fungsi untuk menambah tag
function tagTambah(kata, isi) {
// cari dulu kata tag-nya sudah ada apa belum
// fungsi pencariannya ada dibawah
let barisTag = tagCariIndex(kata);
// jika tag sudah ada, kita akan update
if (barisTag) {
// tentukan target range untuk diupdate
let targetRange = sheet.getRange(barisTag, kolomHasil);
targetRange.setValues([[isi]]);
// tampilkan pesan tag sudah berhasil diupdate
return 'âī¸ Tag '+kata+' diupdate';
// jika tag belum ada, kita tambahkan
} else {
// cari posisi terakhir di sheet dan tambahkan
let lastRow = sheet.getLastRow();
sheet.appendRow([kata, isi]);
// tampilkan pesan tag sudah berhasil ditambahkan
return 'â
Tag '+kata+' sudah ditambahkan';
}
}
Hapus Tag
Fungsi hapus tag
ini sebenarnya adalah menghapus baris pada spreadsheet. Namun, harus dicari terlebih dahulu baris mana yang akan kita hapus.
// fungsi untuk menghapus tag
function hapusTag(kata) {
// cari dulu kata tag-nya sudah ada apa belum
let barisTag = tagCariIndex(kata);
// jika tag sudah ada, kita hapus
if (barisTag) {
sheet.deleteRow(barisTag);
return 'â
Tag '+kata+' telah dihapus.';
} else {
// kalau gak ketemu, tampilkan saja pesan error
return 'âšī¸ Tag '+kata+' tidak ditemukan untuk dihapus.';
}
}
Cari Tag
Fungsi untuk mencari tag, jika ketemu akan kita tampilkan value nya.
// fungsi buat nyari tag dan temukan isinya
function tagCari(kata) {
// menemukan nomor index
// hasilnya -2 sesuai start barisnya
let indexCari = tagCariIndex(kata);
// definisikan hasil dulu, anggap gagal atau tidak ketemu
let hasil = false;
// jika pencarian berhasil, update hasilnya
if(indexCari) {
// tentukan kolom isi tag, yakni di kolom berikutnya (kolomHasil=2)
let tagIsi = sheet.setActiveRange(sheet.getRange(indexCari, kolomHasil))
// hasil isi tag dijadiin return value fungsi
hasil = tagIsi.getValue();
}
return hasil;
}
List Tag
fungsi untuk membuat list atau daftar tag yang sudah dibuat.
// fungsi buat membuat daftar semua tag name
function tagList() {
// mendapatkan semua isi kolom buat dicari
// dimulai dari baris 2
let isiKolom = sheet.getRange(baris, kolom, sheet.getLastRow()).getValues();
// definisikan hasil dulu
let hasil = "đ Tag tersedia:\n\n";
for (var i=0; i<isiKolom.length; i++) {
// susun berjejer kesamping
// jika ingin kebawah, ganti " " dengan "\n"
hasil += isiKolom[i][0] + ' ';
}
return hasil;
}
Pendukung
Fungsi-fungsi untuk mendukung tag di atas. Kalau tidak disertakan yang ini, bakal error lho.
// fungsi buat nyari tag dan hasilnya berupa nomor barisnya saja
// agar bisa dipakai disemua fungsi yang memerlukannya
function tagCariIndex(kata) {
// buat regex kata kunci yang sama persis kecuali huruf besar kecil (inCase Sensitive)
let kataKunci= new RegExp("^"+kata+"$", "i");
// mendapatkan semua isi kolom buat dicari
// dimulai dari baris 2
let isiKolom = sheet.getRange(baris, kolom, sheet.getLastRow()).getValues();
// menemukan nomor index
// hasilnya -2 sesuai baris memulainya
let indexCari = isiKolom.findIndex(kataKunci);
// definisikan hasil dulu, anggap gagal atau tidak ketemu
let hasil = false;
// jika pencarian berhasil, update hasilnya
if(indexCari != -1) {
// hasil kita tambah sesuai baris mulai (2)
hasil = indexCari + baris;
}
return hasil;
}
// fungsi buat nyari text di dalam array dipakai di fungsi tagCariIndex
// kata kunci search dalam mode regex
// cuma temuan pertama aja yang dihasilkan
Array.prototype.findIndex = function(search){
if(search == "") return false;
for (var i=0; i<this.length; i++)
if (search.exec(this[i])) return i;
return -1;
}
Test Case
Ini saya sertakan fungsi buat ngetes atau mendebug. Tidak HARUS di copas ke codingannya. Hanya buat test atau yang mengerti aja. Abaikan yang ini, jika tidak mengerti alias tidak berguna bagimu.
// -- fungsi test
function testHapus() {
let ret = hapusTag('#tambah');
Logger.log(ret);
}
function testTambah() {
let kata = "#tambah";
let isi = "Isi tambahan";
let ret = tagTambah(kata, isi);
Logger.log(ret);
}
function testList() {
let ret = tagList();
Logger.log(ret);
}
function testCari() {
let ret = tagCari('#umur');
Logger.log(ret);
}
Code Bot
Oke, kita balik ke file kode bot. Untuk mengintegrasikan fungsi-fungsi tag di atas ke dalam bot.
Kayaknya terlalu panjang jika dimasukkan di sini ya, saya buat di tulisan baru saja bagian ke 2 nya. Judulnya saya revisi jadi bagian pertama.
Silakan dilanjutkan ke bagian ke -2.
Youtube
Buat yang males membaca, bisa menonton video nya di youtube.
Link Video: 12. Bot Telegram Fitur Hashtag (Google Script dan Spreadsheet)
Lihat daftar video: http://j.mp/botphplist
Penutup
Sengaja tidak saya sertakan full source code nya. Karena kebanyakan langsung di copas dan dijalankan, dan keluarlah error, kemudian bertanya kok ga bisa.
Maaf ya, sengaja biar mengikuti langkahnya satu per satu dari atas.
Jika ada pertanyaan, saran atau masukkan silakan didiskusikan. Jika ingin diskusi live dan biasanya jawabannya juga lebih cepat, baiknya bergabung saja di group Telegram @botIndonesia. Karena rame, bisa disambut oleh teman-teman yang lainnya yak.
O iya semoga bermanfaat, jangan lupa komentarnya jika sudah membaca ini.. đ