Bot Telegram: Membuat Hashtag di Chat memanfaatkan Google Script dan Spreadsheet (I)

9 menit saja

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..

Hasil Vote

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.

  1. Sudah membaca dan praktek pada tulisan sebelumnya, tentang Bot Telegram, yakni Bot Welcome Gratis dengan Google Script. Jika belum membaca, dibaca dulu yak!
  2. Plus baca juga tentang Google Script aksesoris lanjutan tentang keyboard dan inline, untuk menambah wawasan membuat dan memodifikasi perintah library.
  3. 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

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.

New File Fungsi Tag

Biar gak rumit dan panjang, bikin File New Script aja dan beri nama hashtags. Di situ akan kita simpan semua fungsi terkait dengan tags.

hastags file

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 += sheet.setActiveRange(sheet.getRange(i + baris, kolom)).getValue() + " ";
  }  
  
  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. Meski nama grupnya untuk bahasa pemrograman PHP, namun bahasa pemrograman lain juga boleh ikutan nimbrung. Karena rame, bisa disambut oleh teman-teman yang lainnya yak.

O iya semoga bermanfaat, jangan lupa komentarnya jika sudah membaca ini.. 😘

Tinggalkan komentar