This the multi-page printable view of this section. Klik disini untuk ngeprint.

Return to the regular view of this page.

Dokumentasi

Penjelasan dan praktikum lengkap membuat bot Telegram menggunakan Google Apps Script.

Ruang lingkup

Definisi terbatas

  • telegram, adalah aplikasi perpesanan (messenger) yang populer dipergunakan saat ini
  • bot, istilah umum untuk menyebut bot api dalam telegram
  • GAS adalah Google Apps Script, satu diantara service yang disediakan oleh Google
  • Lumpia adalah nama framework atau library GAS yang dijelaskan pada dokumentasi ini

Karakter

Huruf besar kecil pada Telegram tidak pengaruh. namabot, namaBot, NamaBot atau NAMABOT dianggap sama.

Akan tetapi, pada dunia pemrograman khususnya javascript atau Google Apps Script, penggunakan huruf besar dan kecil adalah beda. Sehingga, haruslah berhati-hati dengan sangat.

Pernyataan

Agar membaca dokumentasi tentang disclaimer.

Kontribusi

Jika ada saran dan masukan, silakan berkomentar pada kolom tegursapa atau membuat issue pada repository.

1 - Dasar

Penjelasan dasar-dasar, definisi dan hal terkait lainnya

Pengantar

Jika kamu adalah benar-benar pemula, yang baru mengenal tentang bot dan telegram. Maka kamu perlu membaca materi-materi pengantar ini ya.

1.1 - Apa itu bot

Penjelasan dasar apa itu bot

Definisi

Sederhananya, bot itu akronim dari robot atau dipisah menjadi ro-bot. Trus diambil belakangnya jadilah bot saja.

Kalau istilah robot sudah paham dunk? Bisa dicontek pemahaman dari wikipedia tentang robot.

Jenis Bot

Secara umum ada 2 jenis bot yang saat ini beroperasi pada telegram. Keduanya adalah LEGAL, diizinkan oleh pihak Telegram bahkan difasilitasi.

1. Bot API

Adalah spesial akun yang dibuatkan oleh Telegram melalui @botfather.

Secara umum akan kita sebut sebagai bot api, atau bot biasa, atau bot saja.

Framework Lumpia beroperasi pada bot jenis ini.

Kelebihan

  • berjalan pada sub akun user biasa
  • satu akun user bisa sampe 20 bot, sehingga tidak repot bikin banyak akun
  • mudah pengoperasiaannya, karena api nya terdokumentasi dibuat dengan baik
  • tidak butuh resource khusus, yang penting bisa melakukukan komunikasi HTTP sudah cukup
  • mempunyai fitur-fitur khusus sebagai bot, seperti membuat keyboard inline, inline bot, game base, dll

Kekurangan

  • memiliki keterbatasaan tidak seperti user biasa yang bisa melihat dialog, membuat grup sendiri, memiliki banyak pengaturan, dan lain sebagainya
  • secara default download dan upload sanagt terbatas, berbeda dengan user biasa hingga 2 GB

2. User Bot

Adalah akun user biasa, yang dioperasikan dan diotomatisasi sehingga berperan menjadi bot.

Pengoperasiannya jauh lebih ribet dibanding bot api yang sudah disediakan. Meski demikian memiliki banyak manfaat dibandikan bot biasa.

Kelebihan

  • memiliki kemampuan seperti halnya user biasa
  • download upload file hingga maksimal

Kekurangan

  • jauh lebih rumit proses pembuatan dan pengoperasiannya
  • tidak memiliki spesial fitur seperti keyboard inline

Bot Telegram

Fungsi

Membantu manusia sesuai fungsi dan tugasnya. Biasanya dilakukan terus menerus, setiap saat, dan selalu tersedia jika dibutuhkan.

1.2 - Yang Dibutuhkan

Apa saja yang dibutuhkan

Hal-hal apa sajakah yang diperlukan untuk membuat bot Telegram.. berikut ini diulas.

SDM

SDM atau Sumber Daya Manusia.

Dalam hal ini bisa kamu sebagai pelakunya. Kamu yang sedang belajar, atau yang sudah bisa pemrograman hanya butuh penyesuaian saja.

Atau bisa juga, SDM di sini adalah jasa programmernya. Karena sudah tidak mampu (bukan bidangnya), atau tidak sempat membuatnya (tidak cukup waktu), ataupun butuh team work.

Jika memang tak mampu, karena kebanyakan memang bukan bidangnya. Seorang yang jago berdagang (retail di online shope), belum tentu menguasai komputer apalagi dunia pemrograman. So, tidak perlu memaksakan diri ya. Solusinya kamu bisa sewa jasa programmer.

Termasuk di dalamnya SDM adalah:

  • otak yang encer, klo belum encer perlu giat belajar dan tekun latihan
  • dan indra lainnya untuk mendukung

Jangan ragu untuk memulai, karena manusia adalah makhluk pembelajar yang hebat. Dan semua pernah mengalami yang namanya langkah pertama alias newbie

Account

Akun yang sudah harus dipunyai adalah:

Google

Semestinya sudah punya semua ya. Jika belum, tata caranya tidak dimuat dalam lingkup dokumentasi di sini.

Akun Google dipergunakan untuk mengakses email, drive, dokument, spreadsheet, apps script, dan lain sebagainya.

Menjadi kebutuhan wajib pada pembuatan bot di sini. Cara penggunaaan akun google (buka email, drive, spreadsheet, dll) juga tidak dibahas / bukan cakupan materi ini.

Telegram

Ini juga kebutuhan mandatori. Cara membuat akun Telegram, tidak dibahas (dulu) di sini.

Yang melekat pada akun telegram adalah:

  • harus punya nomor handphone untuk mendaftar
  • punya email untuk mengaktifkan 2FA (sangat direkomendasikan)

Soal telegram akan dibahas pada materi lainnya (insyaAllah).

Komputer

Boleh juga menggunakan handphone (smartphone).

Namun direkomendasikan menggunakan komputer (laptop/pc). Karena layar yang besar memberikan kebebasan atau keleluasaan untuk mengamati dan meneliti.

Aplikasi

Aplikasi yang wajib dipunyai adalah:

Telegram Client

Pengguna handphone bisa download di Playstore atau App Store. Pilihan terbaik adalah Telegram dari official, atau Plus Messenger.

Untuk pengguna desktop, sangat direkomendasikan untuk pakai aplikasi (bukan browser). Download di Desktop Telegram

Browser

Untuk mengakses google drive dan coding google apps script cara termudah adalah menggunakan browser. Silakan pergunakan browser favoritmu, namun disarankan adalah:

  • Google Chrome / Chromium
  • Firefox
  • Safari

Ataupun browser-browser dari turunan mereka.

Browser dapat dipergunakan juga untuk mengakses Telegram Client. Namun, sebaiknya untuk telegram client menggunakan versi aplikasinya saja.

Free

Meski Gratis bukan berarti tanpa biaya ya. Free, sebenarnya lebih tepat diistilahkan “bebas”.

Email, server dan bahkan materi-materi di sini disediakan secara gratis, bukan berarti tanpa biaya untuk mendapatkannya.

Misalnya:

  • kamu tetap butuh biaya untuk mengakses internet jika belum ada koneksi “tumpangan”.
  • kamu butuh listrik, untuk bisa menyalakan komputer, laptop, ngecharge handphone, dan lain sebagainya. Listriknya harus bayar.
  • Kamu pakai laptop / handphone, yang untuk mendapatkannya harus beli atau membayar sejumlah uang.
  • butuh kendaraan untuk beli pulsa, bayar listrik, beli handphone, dan lain sebagainya
  • butuh simcard untuk nomor handphone, syarat registrasi akun telegram / google
  • Jika kamu perlu belajar komputer, mungkin perlu kursus dulu cara pakai komputer. Kursusnya juga butuh biaya.
  • Saat otak atik, butuh camilan atau kopi biar bisa kuat begadang. Camilan dan kopi, harus dibeli jika tidak punya.
  • Item-item lain dan seterusnya..

Biaya-biaya di sini tetap harus dikeluarkan.

Jadi agar tetap dipahami, definisi GRATIS bukan berarti benar-benar tanpa biaya. GRATIS sesuai yang diberikan saja (untuk memperolehnya bisa jadi kamu ada biayanya)

1.3 - Pernyataan

Pernyataan Hukum

Disclaimer

Pengembang dan penulis framework ini bukan orang hukum, tidak mengerti soal hukum, dan tidak punya hubungan (teman/saudara/rekanan) bidang hukum. Namun, tidak ingin bermasalah dengan pihak otoritas hukum dimana saja.

Semua yang dikerjakan hanya ingin bermanfaat seluas-luasnya bagi masyarakat Indonesia pada khususnya, dan seluruh penduduk dunia pada umumnya.

Penyataan

Semua library atau framework yang disediakan disini tersedia secara GRATIS, dan didistribusikan apa adanya (“AS IS”).

Apapun yang terjadi pada akun kamu atau piranti kamu, dari menggunakan Lumpia Framework adalah tanggung jawab kamu sendiri.

Kamu yang bikin, kamu yang memasukkan, kamu yang mengerjakan, kamu yang memperoleh manfaat, kamu juga yang bertanggung jawab atas semua pekerjaanmu.

Apabila terjadi masalah terkait hukum, meskipun kamu menggunakannya secara langsung atau tidak (sebagai end user nya bot), maka tidak ada sangkut pautnya dengan pengembang library ini.

Lumpia, sebagai framework bot telegram, sumber kode bersifat terbuka yang siapa saja dapat melihat, membaca, menelitinya - baik sebelum menggunakan maupun sesudahnya.

Semua kelalailan dan kesalahan akibat oprekanmu, ataupun kesalahan bugs pada framework adalah tanggung jawab kamu sendiri selaku pemakai yang tidak teliti.

Perizinan

Diizinkan menggunakan library ini untuk segala keperluan.

  • Untuk keperluan belajar, edukasi
  • Hobi atau Kesenangan
  • Riset atau Penelitian, mahasiswa atau pegawai
  • Pekerjaan, Profesional, Komersial
  • Bahkan untuk keperluan bisnismu

Disarankan agar mencatumkan sumber – sebagai penghargaan dan berani bermental (berjiwa) besar atas pengakuan karya orang lain.

Persetujuan

Memakai berarti sudah setuju.

Sudah diperingatkan.

Penutup

Semoga keberkahan dan limpahan rezeki yang luas, bagi semua yang memberikan manfaat buat umat. Yang tidak suka menyalah-nyalahkan, tidak mencari-cari masalah, yang sering mempermudah urusan, saling membantu, dan saling sharing memberikan kebaikan.

Mohon bantu di-amin-kan.

2 - Memulai

Langkah awal memulai pembuatan bot menggunakan lumpia - GAS

Baca dahulu PERNYATAAN
untuk mengerti persetujuan penggunaan Lumpia Framework ini.

Langkah

Jika kamu baru pertama kali membuat bot, silakan dinikmati secara perlahan-lahan dan ada baiknya membaca juga pemahaman dasar.

Dan lebih baik lagi jika menonton videonya agar mudah memahaminya.

OK, mari kita mulai dengan langkah sederhana….

1. Buat Proyek

Buka Google Drive, pilih Baru, Lainnya, kemudian pilih Google Apps Script

Penjelasan detail bisa dilihat pada membuat proyek baru pada Google Apps Script

2. Tambah Library

Tambahkan ID Library lumpia

  • Editor Baru: 1Yo6vQRwjG5Gl9jeEF0g2tBTUa0XN5MyT4G_HeDpRr9DvabxhRcSdhPNj
  • Gunakan versi stabil untuk produksi
  • Gunakan versi dengan angka terbesar (screenshot hanya sampel saat dibuat dokumentasi)

Lebih detail, bisa dicek pada halaman versi lumpia.

3. Kode

Untuk bisa menjalankan sebuah bot, butuh token bot yang di dapat dari bot father. Jika belum punya silakan membuat dahulu, bisa diperiksa pada halaman pembuatan token bot

// identifikasi
const token = '123456789:abcdefghijklmno'; // <- isikan token botmu disini
const bot = new lumpia.init(token);

// handle komunikasi via POST dari Telegram ke (webhook) GAS
function doPost(e) {
  bot.doPost(e);
}

// handle untuk user yang mengetik /start
bot.start(ctx => ctx.reply('Started!'));

// handle untuk user yang mengetik /ping
bot.cmd('ping', ctx => ctx.replyIt('Pong!'));

Simpan pakai shortcut, dengan menekan ctrl + s

4. Deploy

Deploy web app, dan dapatkan URL Web App.

Cara mendeploy silakan melihat halaman deploy.

Baru! Sekarang, kita bisa re-deploy menggunakan Editor Baru. Sehingga tidak perlu perpindah-pindah ke editor lama. Silakan simak pada video Halo Lumpia.

5. Set Webhook

Buat fungsi untuk set webhook

function setWebHook() {
  let url = 'URL-HASIL-DEPLOY';
  let result = bot.telegram.setWebhook(url);
  Logger.log(result);
}

Kemudian jalankan.

Video

Sangat direkomendasikan menonton video ini.

Memuat bagaimana cara menggunakan lumpia pertama kali, deploy dengan metode baru tanpa setwebhook ulang, materi-materi dasar membuat token dan penjelasan-penjelasan penting lainnya.

3 - Materi

Koleksi materi, tutorial, dan studi kasus

Beberapa hal perlu urut belajarnya.. jadi sebaiknya belajar berurut adalah rekomendasinya.

3.1 - Halo Lumpia

Materi paling dasar belajar lumpia

Buat teman-teman yang baru mau belajar membuat bot telegram pilihan yang paling tepat memulainya adalah belajar dari sini.

Di sini, kita akan belajar membangun bot telegram secara gratis, cepat, dan mudah menggunakan Google Apps Script.

Atau bagi yang ingin migrasi dari lib v1/v2, perlu juga menyimak materi ini.

šŸ‘£ Pembuatan

Ada 5 langkah sederhana untuk membuat bot, yakni:

  1. Membuat Proyek Baru
  2. Menambahkan ID Library
  3. Memulai Coding, source code dapat dilihat dibawah.
  4. Deploy Web App
  5. setWebhook

Masing-masing telah dijelaskan pada halaman linknya ya.

Untuk lebih detail dapat ditonton pada videonya.

šŸ›  Lanjutan

Pada materi lanjutan dijelaskan bagaimana coding untuk cycle dalam sebuah aplikasi. Yakni, membuat - memodifikasi - dan mendeploy.

Materi juga menjelaskan:

  • bagaiamana cara memecah kode dalam beberapa halaman dengan mudah
  • menambahkan perintah-perintah baru
  • membuat respon dengan fungsi hear dan regex
  • membersihkan error kode dari parse mode
  • cara mendeploy tanpa perubahan url sehingga tidak perlu setwebhook setiap kali ada perubahan

Berbekal poin-poin utama itu, kita akan bisa mengembangkan bot sesuaka hati.

āš™ļø Source Code

Berikut ini source code untuk halo lumpia:

const token = 'TOKEN:BOT-KAMU';

const bot = new lumpia.init(token);
bot.options.log_id = IDKAMU;

function doPost(e) {
  bot.doPost(e);
}

function setWebhook() {
  let url = 'URL_WEB';
  let result = bot.telegram.setWebhook(url);
  Logger.log(result);
}
const button = lumpia.button;
const markup = lumpia.markup;
const helper = lumpia.helper;

// perintah start
bot.start(ctx => {
  // start dengan keyboard inline
  let nama = ctx.from.first_name;
  if (ctx.from.last_name) nama += ' ' + ctx.from.last_name;

  // cleansing nama biar tidak error karakter khusus HTML
  nama = helper.clearHTML(nama);

  let pesan = `Halo <b>${nama}</b>, perkenalkan aku ini bot!`;

  // menu keyboard inline
  let keyboard = [];

  // baris pertama
  // diawali dengan index 0
  keyboard[0] = [
    button.url('šŸ“š Docs', 'https://lumpia.js.org'),
    button.url('šŸ‘„ @botindonesia', 'https://t.me/botindonesia')
  ];

  // baris kedua
  keyboard[1] = [
    button.text('šŸ˜¼ Halo Human', 'me_halo'),
    button.text('šŸ‘€ Apa kabar?', 'me_kabar')
  ];

  ctx.replyWithHTML(pesan, {
    reply_markup: markup.inlineKeyboard(keyboard)
  });

})

bot.action('me_halo', ctx => ctx.reply('Ya, saya.'))
bot.action('me_kabar', ctx => ctx.answerCallbackQuery('āœŠšŸ¼ Tetap semangat ya!'));
bot.cmd('ping', ctx => ctx.replyIt('Pong!'));

bot.hears(['hai', 'hi', 'hallo', 'hei'], ctx => ctx.reply('Hai juga!'));

bot.hears(/ass?alamu'?ala[yi]+ku+m/i, ctx => ctx.replyIt("Wa'alaikumussalam Wr Wb"));

bot.cmd(['ver', 'versi', 'version'], ctx => {
    let version = lumpia.version;
    let pesan = `šŸ¤– Bot ini dibangun menggunakan <b>${version.name}</b> <code>v${version.number}.${version.build}</code>`;
    pesan += `\n\nāœ… Sumber bersama belajar <b>Bot Telegram Indonesia</b>`

    let keyboard = [
        button.url('šŸ“š Docs', 'https://lumpia.js.org'),
        button.url('šŸ‘„ @botindonesia', 'https://t.me/botindonesia')
    ]
    ctx.replyWithHTML(pesan, {
        reply_markup: markup.inlineKeyboard(keyboard)
    });
})

Sumber kode ini bisa didapatkan juga pada Github bangHasan - Halo Lumpia

šŸŽ¬ Video

Langsung disimak saja tanpa materi tulisan..

šŸ—’ Referensi

Disadur dari blog blogHasan

3.2 - Mode Development

Bekerja pada mode development dengan mengaktifkan DEBUG dan verbose

Masih terbersit pada ingatan, tiap kali development bot telegram menggunakan Google Apps Script ketika ada perubahan sedikit kita harus melakukan deployment.

Bayangkan jika ada sebuah proses banyak yang harus berulang-ulang, betapa ribetnya menjalankan rutinitas edit - deploy - test berulang-ulang. Yang mana proses deploy sendiri tidak cepat prosesnya.

Maka pada saat lumpia hadir, hal ini sudah dikonsep sebagaimana hingga saat development dapat dilakukan debugging. Mengubah-ubah fungsi tanpa harus deploy terlebih dahulu.

Method

Terdapat 3 mode atau method untuk menghandle yang diperkenalkan pada tutorial atau materi ke dua ini.

Debug

Yakni sebuah mode dimana ketika diaktifkan, semua pesan yang masuk akan direspon oleh bot menjadi data JSON.

Untuk mengaktifkan mode debug, mudah saja:

// mengaktifkan mode DEBUG
// untuk mendapatkan data JSON
lumpia.DEBUG = true;

Verbose

Yakni sebuah mode, yang akan menampilkan seluruh rangkaian proses, baik trigger, middleware ataupun saat build message, termasuk juga result.

Sehingga dengan mengaktifkan mode verbose ini, kita dapat memantau dan menganalisis proses yang terjadi, dan kira-kira nyangkut dimanakah code yang dibuat ketika ada kesalahan.

Untuk mengaktifkannya juga sama dengan diatas:

// aktifkan mode verbose
lumpia.verbose = true;

Mode verbose ini dapat digunakan bersama handleUpdate()

handleUpdate

Yakni sebuah fungsi khusus pada lumpia framework, untuk memproses sebuah update atau pesan.

Dengan menggunakan fungsi / method ini, kita bisa memanipulasi data apa saja yang akan dikirim atau diproses termasuk jika ada perubahan kondisi tertentu.

Contoh kode untuk menghandle / proses update message dari user:

// matikan mode DEBUG
// setelah mendapatkan data JSON
// lumpia.DEBUG = true;


// aktifkan mode verbose
lumpia.verbose = true;

// fungsi untuk memproses pesan user
function handleUpdate() {
  let text = '/halo';

  let update = { 
    "update_id": 366250335, 
    "message": { 
      "message_id": 863, 
      "from": { 
        "id": 530122912, 
        "is_bot": false, 
        "first_name": "BangHasan", 
        "last_name": "Demo", 
        "username": "banghasandemo", 
        "language_code": "en" 
        }, 
      "chat": { 
        "id": 530122912, 
        "first_name": "BangHasan", 
        "last_name": "Demo", 
        "username": "banghasandemo", 
        "type": "private" 
      }, 
      "date": 1635558143, 
      "text": text, 
      "entities": [{ "offset": 0, "length": 6, "type": "bot_command" }] } 
    };

  bot.handleUpdate(update);

}

Tidak perlu deploy lagi untuk menguji trigger atau command-command yang telah dibikin sebelumnya.

Untuk mengujinya, sekarang tinggal jalankan saja fungsi handleUpdate tersebut.

Video

Tayang pertamakali, hari ini:

Ahad - 31 Oktober 2021
pukul 14:00 WIB.

Untuk lebih jelas memahaminya, silakan ditonton pada video berikut ini.

Kesimpulan

Dengan mengenal mode verbose dan fungsi handleUpdate() saat develop bot telegram menjadi lebih mudah.

Terutama ketika harus membuat sample perulangan kasus, step by step, dan mendebug message by message.

Referensi

Informasi di Telegram: https://t.me/bot_indonesia/70

Disadur dari tulisan asli pada blog bangHasan

3.3 - Regular Expression

Belajar dan mengenal regex menggunakan lumpia framework

Masih pada materi dasar, materi yang sebagian besar orang terlihat membosankan. Karena hasilnya tidak langsung tampak indah. Namun materi dasar adalah pondasi. Tanpa memahami materi dasar, alhasil mentok sana sini.

Regex Lumpia
Belajar Regex pada Lumpia Framework

So, bagi yang belum paham bagaimana menggunakan regex.. silakan dibaca dan dipahami materi ini yak.

ReGex

ReGex merupakan kepanjangan dari Regular Expression.

Perlu diperhatikan saja, regex tiap bahasa pemrograman itu agak berbeda-beda. Meski terlihat sama, tapi ada aja bedanya.

Karena lumpia framework berjalan pada bahasa pemrograman javascript, jadi kata kuncinya adalah regex javascript.

Definisi

Ā 

definisi regex


Ā 

Definisinya regex adalah..
Hmm cari aja deh di google hehe.

Karena bukan perkuliahan yang perlu dibahas secara spesifik dan tuntas, kita cukup ambil poin-poin pentingnya saja di sini yak.

Kalau versi saya sih simple saja, yakni buat nangkap atau ngambil karakter (text) dengan pola tertentu.

Kenapa REGEX?

definisi regex

Mungkin awalnya rumit, tapi setelah mengalami sendiri ketika ada kasus yang komplek harus dikelola.

Maka regex ini menjadi kunci dalam pembuatan bot (proses menangkap, memfilter, mengubah, dan atau menyajikan data) spesifik.

Bahkan hampir setiap penggunaan pada lumpia framework adalah berdasarkan regex.

Coba mari kita perhatikan, bila menggunakan gaya umum untuk mendapatkan seluruh angka dari teks:

umur 21 tahun, berangkat jam 13:00 WIB

bakal ribet memecah-mecahnya.

Dengan mengenal regex, akan terasa mudah mendapatkannya.

… karena regex adalah kunci.

Syntax

Yuk, kita mulai..

Rumusnya selalu diawali dan diakhiri dengan garis miring: /pola/
kemudian dilanjutkan simbol flag jika ada.

/pola/flag

Pemahamanan

Maksud pola adalah pola yang akan kita tangkap pada sebuah teks, misalnya kita akan deteksi kalimat yang ada kata halo nya. Maka penulisannya adalah: /halo/

Sementara flag adalah kondisi tertentu yang diinginkan, misalnya tidak membedakan huruf besar dan huruf kecil pada pola, maka bisa pakai flag i

Sehingga: /halo/i maka ketika user mengetik Halo, halo, haLO, atau HALO dimana saja posisinya, boleh di depan tengah atau belakang, semuanya tetap terdeteksi.

Penerapan

Bagaimana penerapan nya pada bot Telegram yang menggunakan lumpia?

Gunakanlah method hear atau hears untuk mendeteksinya.

Syntax Lumpia:

bot.hears(regex, callback);

Sehingga:

bot.hears(/halo/i, ctx => {
    ctx.reply('halo juga');
})

Simple kan :-D

OKEH, lanjoet..

Tanda Khusus

Tanda khusus yang memiliki arti spesial pada regex. Ga semua harus dihapali, tapi ini yang sering dipakai ya:

  • ^ caping atas artinya diawal kata / kalimat
  • $ dolar, artinya diakhir kalimat
  • . titik berarti sembarang karakter, kecuali ganti baris
  • * artinya 0 karakter atau lebih (banyak)
  • + artinya 1 karakter atau lebih (banyak)
  • ? artinya 0 atau 1. Misal: https? artinya boleh http atau https
  • \b penanda satu kata penuh
  • {m,n} artinya minimal m dan maksimal n, misal A{1,3} artinya huruf A minimal 1 dan maksimal 3
  • [] grup karakter ATAU sebanyak 1 aja, misal [abc] boleh a, b atau c.
  • [^abc] grup yang BUKAN berisi itu di dalamnya
  • | karakter ATAU
  • \w huruf alphabetnumeric. Senilai pola: [a-zA-Z0-9_]
  • \n ganti baris
  • \s spasi
  • \0 karakter null
  • \d artinya digit atau angka, senilai pola [0-9]
  • (...) tanda kurung, berarti hasilnya digrup
  • (?:...) digrup tapi tidak dimasukkan dalam tangkapan
  • (?<nama>...) digrup dan diberi nama

Masih banyak tanda khusus, namun itu yang bakal sering kita pakai ya.

Flag

Flag yang sering dipergunakan:

  • i ignore case untuk tidak membedakan huruf besar dan kecil
  • g global mencari semua pola yang cocok
  • m multiline cari di semua baris
  • u support karakter unicode

Masih ada beberapa flag, namun diawal kita perlu mengenal 3 itu saja dulu. Untuk pendahuluan yang mudah dihapal dan sering dipakai.

Escape

Karena karakter / sudah dipakai sebagai penanda regex. Maka jika ingin menuliskan karakter itu harus di escape penulisannya, dengan karakter backslash \.

Karakter-karakter spesial yang harus di escape adalah semua karakter yang telah disebutkan diatas.

Misalnya untuk menangkap user mengetik apa kabar?, maka penulisan polanya adalah:

/apa kabar\?/

tanpa di escape, tanda tanya (?) akan untuk penangkapan ada huruf r atau tidak.

Contoh lainnya, misalnya:

  • titik: menjadi \.
  • buka kurung: \(
  • plus: \+
  • dst

Use Case

Biar lebih aktual dan lebih dapat feel pemahamannya, langsung saja kita menuju beberapa contoh, kasus, dan implementasinya.

Ping

Ini contoh simple sekaligus untuk menunjukkan escape karakter khusus.

Misal:

User: /ping
Bot : Pong!

Karena kita inginkan pola yang ditangkap adalah ada garis miringnya, maka itu harus di escape.

//ping/i
/\/ping/i

Penjelasan:

  • Garis miring / untuk /ping HARUS di escape dengan backslash : \/
  • Tidak membedakan huruf besar dan kecil dengan flag i
  • Jika tulisan ping hanya boleh diawal teks, maka tandai dengan caping ^, sehingga menjadi: /^\/ping/i
  • terakhir, jika hanya kata ping saja, tidak boleh ada teks lain, maka akhiri dengan tanda $, sehingga finalnya menjadi: /^\/ping$/i

Code pada lumpia framework:

bot.hears(/^\/ping$/i, ctx => {
    ctx.reply('pong!');
})

Sehingga, user mengetik /ping saja (boleh huruf besar atau kecil) yang akan direspon.

user: /ping
bot: pong!

user: /PING
bot: pong!
user: ping
user: piiingg
user: makan emping
user: pingin mie rebus
user: !ping
user: kepingin beli lumpia

Silakan di test, dengan cara re-deploy atau dengan handleUpdate pada lumpia.

Umur

Kasus lain, ada yang ingin menangkap dengan angka saja. Misalnya kebutuhannya disuruh memasukkan umur.

User: umur 21 tahun
Bot : 21

Akan kita tangkap angka 21 nya sesudah user mengetikkan dengan diawali kata umur

Pola nya adalah:

/umur (\d+)/i

Artinya yang akan kita tangkap dengan grup kurung () adalah \d adalah angka saja, dengan terserah panjangnya asalkan minimal 1 karakter angka (makna tanda +).

Pemakaiannya:

bot.hears(/umur (.+)/i, ctx => {
    ctx.reply(ctx.match[1]);
}

Penjelasannya:

  • ctx.match adalah hasil tangkapan group regexnya
  • text yang diinput user, boleh diletakkan di depan, tengah atau akhir.
  • contoh text di awal, user mengetikkan: umur 21 atau umur 21 th
  • contoh text di tengah, user mengetikkan: aku berumur 21 tahun

Echo

Sekarang kita buat fungsi trigger dimana bot akan memantulkan isi text.

Misal:

User: !echo Halo mas
Bot : Halo mas

Maka, pola-nya adalah sebagai berikut:

/^!echo (.+)/i

Maksudnya:

  • ^ kata !echo harus diawal kalimat. Tidak ditengah atau diakhir.
  • () adalah grup pertama untuk hasil yang ditangkap.
  • . sembarang karakter kecuali ganti baris
  • + perulangan sembarang karakter, apa aja minimal 1 sampai tidak terbatas

Sehingga, code pemakaian pada lumpia framework:

bot.hears(/^!echo (.+)/i, ctx => {
    ctx.reply(ctx.match[1]);
}

Penjelasan detailnya mirip dengan /ping

::: warning Silakan dipahami secara perlahan-lahan… :::

Tempat Tanggal Lahir

Misalnya disuruh memasukkan tempat tanggal lahir.

User: !echo Kediri, 23-06-2001
Bot : Kamu lahir di Kediri, tanggal 23-06-2001

Pola deteksi tanggal sederhananya adalah:

/^!echo (.*),\s*(\d\d-\d\d-\d{4})$/i

Artinya :

  • Detek tempat lahir dengan karakter apa saja (.*) sampai ketemu koma.
  • \s* sesudah koma, ada spasi atau tidak, tetep kedetek
  • \d artinya angka, jika \d\d artinya angka dijejer 2x (atau 2 digit)
  • \d{4} artinya angka yang dijejer 4

Code pemakaiannya:

var pola = /^!echo (.*),\s*(\d\d-\d\d-\d{4})$/i;

bot.hears(pola, ctx => {
    ctx.reply("Kamu lahir di "+ctx.match[1]+", tanggal "+ctx.match[2]);
}

Dengan pola penulisan tanggal sederhana ini, secara umum bisa ditangkap dan mudah dipahami.

Namun, ada yang ingin lebih memfilternya atau membuat lebih detail.

Contoh pola kompleksnya:

var pola = /^!echo (.*),\s*((0?[1-9]|[12][0-9]|3[01])-(0?[1-9]|1[012])-\d{4})/i;

Yang ini ga usah diartikan haha.. Cuma buat pelengkap saja agar paham banyak cara menangkap sekaligus mevalidasinya.

Validasinya adalah tanggal tidak boleh lebih dari 31, dan bulan tidak boleh lebih dari 12.

Multiline

Pada beberapa kasus, ada yang ingin menangkap berbaris-baris pesan.

Contoh ini dapat kita temui pada kasus bot hastags.

User:

!echo Puisi Rahasia

Aku akan menulis
sebuah puisi rahasia
tapi ini rahasia ya
rahasia sekali

Maaf, ini rahasia.
Selesai.

Contohnya seperti itu. Bagaimana menangkapnya?

Ada banyak cara atau metode. Namun, cara yang saya sukai adalah dengan menangkap pesan statisnya (!echo), kemudian membuangnya. Dengan demikian, pesan dinamisnya akan kita dapatkan akhirnya.

Pesan statisnya dikit, jadi itu saja yang ditangkap. Maka pesan statis dibuatkan group.

Pola:

/^(!echo )/i

Dan kodenya seperti ini kira-kira:

bot.on(/^(!echo )/i, ctx =>{
    // buang pola yang di dapatkan dengan menggantinya dengan karakter kosong atau tidak ada
    let pesan = ctx.message.text.replace(ctx.match[1],'');
    ctx.reply(pesan);
})

Dengan cara demikian, kita akan mendapatkan isi pesan secara penuh bebas diisi karakter apa saja.

Sapaan Halo

Agar bot terkesan ramah, kadang perlu kita buat bot sapaan.

Kadang ga cukup kata halo, ada yang yang nulisnya macam-macam: halo, hallo, hai, dan seterusnya.

  • Level 1:

Data semua kata yang memungkinkan dipakai:

pola /(halo|hallo)/i

Artinya, pola yang akan ditangkap kata halo, atau hallo yang letaknya dimana saja maka bot akan meresponnya.

Kodenya seperti ini kira-kira:

var pola = /(halo|hallo|helo|hello|hai|hay)/i;

bot.hears(pola, ctx => {
    ctx.reply('Halo juga!');
}

Mari kita tingkatkan dan kembangkan secara bertahap.

Lain-lain

Ada banyak contoh kasus lainnya. Namun, silakan banyak-banyak mencoba sesuai dengan kasus masing-masing.

Karena regex itu ilmu praktek dan latihan, jadi teman-teman harus mencobanya sendiri.

Sekadar buat tambahan referensi, tak perlu diambil hati.. copas aja kalau butuh hehe.

  • Hashtag: /^#[^ !@#$%^&*(),.?":{}|<>]*$/i
  • ASCII: /[ -~]/gm
  • URL: /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()!@:%_\+.~#?&\/\/=]*)/i
  • Email Simple: /[^@ \t\r\n]+@[^ @\t\r\n]+\.[^@ \t\r\n]+/i
  • Email Komplek: /(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))/i
  • Nomor Telp: /^[\+]?[(]?[0-9]{3}[)]?[-\s\.]?[0-9]{3}[-\s\.]?[0-9]{4,6}$/gmi
  • Emoticon: /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/gm
  • ipv4: /(\b25[0-5]|\b2[0-4][0-9]|\b[01]?[0-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}/gm
  • ipv6: /(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))/gm
  • port: /^((6553[0-5])|(655[0-2][0-9])|(65[0-4][0-9]{2})|(6[0-4][0-9]{3})|([1-5][0-9]{4})|([0-5]{0,5})|([0-9]{1,4}))$/
  • latitude, longitude: /^((\-?|\+?)?\d+(\.\d+)?),\s*((\-?|\+?)?\d+(\.\d+)?)$/i
  • version: /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/i

Video

Code

Berikut ini source code pada video.

Referensi

Tulisan ini disadur dari blog bangHasan.

Akhir Kata

Jika ingin live dan biasanya tanggapan juga lebih cepat, sangat disarankan bergabung pada group Telegram @botIndonesia.

šŸ™šŸ¼ Semoga bermanfaat …

3.4 - Deeplink / Referal

Kuliah singkat mengenal deeplink dan implementasinya

Materi ada pada video, belum sempat dibuat berupa tulisan.

Silakan ditonton yak!

Video

Source Code

Berikut ini source code pada video.

4 - Lumpia

Lumpia Framework

Tidak lagi seperti monster: 90% sumber daya tersedia, membuat bot Telegram menjadi mudah.

4.1 - Pengantar

Sekilas tentang Lumpia Framework

Pengantar

Apa ini?

Lumpia Framework atau kita sebut saja lumpia adalah sebuah framework Google Apps Script untuk mempermudah pembuatan bot api pada Telegram.

Google Apps Script atau kita sebut GAS saja, menyediakan fitur library untuk menyematkan sumber kode pihak lain untuk mempermudah membangun sebuah aplikasi.

Lumpia Framework bekerja pada fitur modul library yang tersedia pada Google Apps Script.

Pendahuluan

Library Google Apps Script (GAS) untuk Telegram edisi ke-3, merupakan suksesi dari GAS Library sebelumnya, yakni GASLib edisi 1 dan edisi 2 Lib v2 yang telah berhasil banyak dimanfaatkan.

Terinspirasi dari Telegraf yang dirasa cukup praktis dan efektif pada penggunaan sehari-hari. GASLibv3 membuat karakteristiknya sendiri, lantaran coding pada GAS memiliki banyak keterbatasan seperti tidak support proses (true) async, promise, deteksi tipe blob / stream, tidak banyak paket ready yang bisa langsung diberdayakan, dan berbagai kendala lainnya.

Namun, tidak perlu bekecil hati, framework GASLibv3 ini insyaAllah, lebih dari cukup guna kebutuhan sebuah proyek dalam skala kecil hingga menengah. Apalagi ditambah dukungan komunitas Grup Telegram @botIndonesia yang cukup baik menjadikan kamu tidak bingung harus pergi kemana untuk sharing.

Pada edisi ini, terdapat perubahan cukup besar dan cukup signifikan secara struktur, konsep, dan penggunaan. Tidak lagi seolah sebuah library namun menjadi sebuah framework sempurna dan modern untuk bot telegram. Dengan demikian, harapannya, penggunaan bisa menjadi lebih produktif untuk kebutuhan pekerjaan, kesenangan, maupun tools pembantu lainnya.

Fitur

  • Semakin simple lagi dan lagi
  • Konsep modern, terdapat middleware untuk melakukan hook message
  • Support untuk penyediaan plugin yang dapat disisipkan pada middleware
  • Tidak ribet memikirkan pondasi kodingan, sehingga bisa lebih berfokus pada proses flow proyek bot kamu
  • Dokumentasi bagus, mudah dipelajari dan diikuti
  • Terdapat panduan dan tutorial, secara tertulis maupun video
  • Sumber kode terbuka, yang dapat diperiksa, diteliti, dan dipelajari oleh siapapun
  • GRATIS jika merasa bermanfaat bebas berdonasi untuk mendukung proyek ini.. dipersilakan.
  • Didukung oleh komunitas telegram @botindonesia yang cukup aktif.

Pros

  • Menggunakan bahasa pemrograman javascript yang telah dikenal sangat luas, banyak literasi dan dukungan komunitas luas. Sampai saat ini masih terus dikembangkan.
  • Integrasi dengan seluruh service yang disediakan Google (Drive, Docs, Translate, Map, Bigdata, dan ratusan service lainnya).
  • Bisa dijadikan service restful guna diintegrasikan lebih luas dengan proyek-proyek lainnya
  • Mendukung remote database (oracle, mysql, mariadb, nosql: mongodb, dynamodb, firebase, dlsb), internal (user service properties) ataupun “psedo” seperti spreadsheet.
  • Masih berstatus aktif dalam pengembangan

Cons

  • Sebagaimana halnya melekat pada service Google Apps Script, maka melekat pula kelemahannya pada framework ini. Misal diantaranya, tidak support proses async, terdapat pembatasan fetch, dan limitasi lainnya.
  • Memiliki limitasi sesuai ketentuan Google.

Compare

Kelebihan dibandingkan versi lama

Keterangan Baru (v3.x) Lama (v2.x)
Penulisan Lebih sederhana lagi dan lagi Cukup
Handle Post Sudah tersedia Manual
Handle Error Sudah tersedia Manual
Shorthand Ada -
Middleware Ada -
Fetch Ada Ada
userDB Ada Ada
scriptDB Tidak Ada
Trigger Event Ada -
Context (ctx) Ada -
Debugging Ada -
Markup Ada -

Dan masih banyak lainnya..

Kecocokan

Bagi pengguna library versi 1 dan 2, lumpia (GAS Lib v3) tidak kompatible.

Selamat menyesuaikan!

4.2 - Konsep

Dasar pondasi atau flow lumpia

Lumpia dibangun atas 3 segment saat prosesi. Karena GAS tidak support async, maka ketiganya dipilih secara berurutan.

Misalkan middleware diletakkan pada codingan paling bawah, tetep dijalankan dibagian paling atas (didahulukan).

Bagan

graph TD;
    lumpia("šŸ„ Lumpia") --- helper("šŸ§± helper"):::green;
    lumpia --- markup("šŸ›  markup"):::green;
    lumpia --- fetch("šŸ•ø fetch");
    lumpia --- db[("šŸ‘„ user db")];
    lumpia --- init;
    init --> bot((bot));
    bot(("šŸ¤– bot")) -.-> debug([debug]);
    tg("āœˆļø telegram client") ---> |shorthand|bot
    user(["šŸ‘¤ user"]) --> |text, photo, cb inline, etc..|update[/update/]
    update --> |doPost|bot
    lumpia -.- tg
    subgraph .
        bot --> |ctx|middleware;
        middleware --> ctx{{context}}
        ctx --> broadcast;
        ctx --> trigger;
    end
    broadcast --> ends(["šŸ‘¤ user"])
    trigger --> ends
    
    style lumpia color:blue,fill:#bdd5ef
    style fetch fill:#efd9bd;
    style init fill:#e1efbd
    style ctx fill:#ecedea,color:grey
    style ends color:white,fill:#000;
    style user color:white,fill:#000;
    classDef green fill:#9de0b2
    click broadcast "/docs/lumpia/konsep/#2-broadcast"
    click ctx "/docs/lumpia/ctx"

1. Middleware

Cakupan: use, middleware

Middleware ini bisa mengentikan proses. Misalnya:

bot.use(ctx => console.log('stop') );

Maka, proses akan terhenti tidak dilanjutkan pada event berikutnya.

2. Broadcast

Cakupan: on

Cek bagian update type

3. Trigger

Cakupan: cmd, command, hear, hears, action


Karakteristik

Broadcast dan triger berjalan bersamaan (didahulukan brodcast) ketika middleware sudah selesai diproses dan menghasilkan context

Keduanya tidak saling menghentikan.

Contoh:

bot.on('text' , ctx => ctx.reply('masuk 1'));
bot.cmd('start', ctx => ctx.reply('masuk 2'));

Pesan user yang berupa text dan trigger /start akan dieksekusi (ditangkap keduanya), yang didahulukan adalah jenis broadcast (bot.on), meskipun seandainya codingan diatas dibalik, diletakkan dibawahnya trigger (bot.cmd).

Bisa dianggap sebagai fitur, tapi juga bisa dianggap sebagai bugs juga.

Pandai-pandailah memanfaatkan setuasi-nya.

4.3 - Versi

ID Library dan Versioning

ID Library

lumpia

Adalah versi stabil dari GAS Lib v3.

Semua dokumentasi menggunakan acuan ini.

1Yo6vQRwjG5Gl9jeEF0g2tBTUa0XN5MyT4G_HeDpRr9DvabxhRcSdhPNj
MUD_wfLskZT2D99lRXLh94vvg_do21SJR

bakpia

adalah versi beta, digunakan hanya oleh pengembang buat bahan testing.

1OSN8eNlJtw2ehf3ul7h48Jb8rdeljKhC5Rw3cJo4nkEFITdS01Di0N_S
M2iDAxzI3JJ4n6a8sryWJsfvg_do21SJR

Jika menggunakan bakpia, set variable paling atas untuk menyesuaikan dengan seluruh isi dokumentasi dan sample yang berada di sini:

var lumpia = bakpia;

const token = '12345:abcde';
const bot = new lumpia.init(token);

// dst..

matoa

adalah versi alpha (tahap development)

  • tidak dirilis secara publik.
  • tidak ada versi librarynya, karena dibangun secara langsung

ketikda dikonversi menjadi library, berubah nama menjadi bakpia dan lumpia.

Versi

Nama

Seperti halnya android, kita mengenal Kit Kat, Oreo, dlsb.

Maka, kode library ini diberi kode penamaan nama makanan yang ada di pasar. Jadi kalau dibahas jadi enak, kita ngobrolin makanan hehe..

Nomor

Penomoran versi

Misalnya v3.1

  • Versi mayor adalah versi 3

Dimana nomor 3 adalah generasi atau edisi ke-3 dari Library GAS untuk Telegram ini. Versi ini tidak berubah, atau setidaknya tidak akan berubah dalam jangka dekat bilamana belum ada edisi baru lagi.

  • Versi minor adalah 1

Versi minor adalah versi build. Yang akan terus bertambah nilainya lantaran hasil snapshot dari release versi pada GAS.

Jika terdapat nomor minor yang lompat (tidak ada), berarti dicabut rilisnya. Bisa jadi dikarenakan gagal / cacat, atau kesalahan teknis release.

Log History

Silakan cek pada halaman berikut:

4.4 - Inisiasi

Inisiasi dan Options

RESUME

Table resume semua properti yang melekat pada lumpia.

method params type keterangan
init token
options
string*
json
menginisiasi atau menghubungkan lumpia dengan (token) bot
DEBUG Ā  boolean semua pesan masuk dari Telegram diubah outputnya menjadi json. Tidak mempedulikan middleware atau lainnya.
verbose Ā  boolean mengaktifkan full logging proses framework saat berada di editor
version Ā  Ā  menampilkan informasi lumpia yang sedang dipakai saat ini

Berikut ini penjelasan bagaimana mendeklarasikan, atau menginisasi awal object-object pada saat menggunakan lumpia

init

Dipergunakan saat pertama kali atau tiap kali membuat objek lumpia.

Syntax: new lumpia.init(token, options)

  • token adalah token bot yang didapatkan dari botfather

options

Diisi dalam format JSON.

option keterangan type default contoh
prefix_command awalan perintah command pada bot string / prefix_command: '/!.'
log_id id/username untuk mengirimkan log apabil error.
sebaiknya diisi number untuk user id atau chat id
number, string - log_id: 213567634
username tersedia pada v3.7
mengeset username pada command /start@usernamebot
string kosong username: 'strukturbot'

Dapat juga diakses secara langsung (sesudah bot diinisiasi) :

bot.options.log_id = 213567634;
bot.options.prefix_command = '.!/';

DEBUG

Memaksa bot menampilkan JSON apapun yang diterima ke log_id yang diseting saat pertama kali init.

Berguna untuk debugging isi message.

  • default: false

verbose

Mengaktifkan logging secara detail dipergunakan saat debugging.

Verbose hanya berjalan pada mode panel editor pada GAS ketika menjalanan sebuah fungsi ke doPost atau handleUpdate().

Di bot tidak ada perbedaan apa-apa. Matikan mode verbose ini jika sudah tahap produksi, agar tidak terlalu banyak script bekerja.

  • default: false;
lumpia.verbose = true;

version

Untuk mengetahui versi lumpia yang sedang dipergunakan.

Syntax: lumpia.version

Hasil berupa tipe data object (json) bersifat informasi.

field keterangan
active versi yang aktif saat ini
number selalu 3, sesuai generasi yang direlease
build nomor saat di build, terus bertambah
name nama code library
full penyebuatan secara penuh
group informasi grup
url informasi url

4.5 - Bot

Base variable bot sebagai object base dari lumpia

RESUME

Resume method dan params yang dipergunakan oleh bot.

method params type keterangan
telegram Ā  class untuk mengakses dari bot api telegram
tg Ā  Ā  alias dari telegram
options Ā  json akses mengubah options secara langsung
token Ā  string set/get token
log_id Ā  number/string set/get target id log. Shorthand untuk options.log_id
handleUpdate data json memproses data json
doPost data Ā  memproses data POST pada function doPost
on tipe string menangkap proses event atas tipe update tertentu
start fn function handle proses command start
cmd event [string/regex] handle proses command secara umum
command event [string/regex] alias untuk cmd
hears event [string/regex] handle pesan text dari user
hear event [string/regex] alias untuk hears
use fn function mendaftarkan midleware
action fn function handle callback data
middleware fn function alias untuk use
compose fn function menambahkan function pada handler message

Penjelasan

bot

Adalah variable umum (kamu boleh menggantinya jika mau), yang berupa object gabungan segala middleware, method atau fungsi-fungsi, dan data-data penunjang lainnya.

Seperti halnya pada sistem lainnya (Ruby, Go, NodeJS, PHP, dsb), menggunakan bot sebagai variable untuk menghandlenya.

Pendeklarasian

Contohnya sebagai berikut:

const token = '123:abc';
const bot = new lumpia.init(token);

bot menjadi sebuah object sebagai perwakilan atas bot Telegram dengan ‘jiwa’ token-nya.

Token bot adalah identitasnya. Sehingga misalnya, botnya adalah belarGASbot dengan token 123:abc. Maka ketika kita coding, menyebut bot adalah si belajarGASbot nya (yang telah disambungkan dengan identias token).

Amsal

Sebagai permisalan dalam kehidupan ini, adalah sebagai berikut:

  • botfather adalah ortu yang melahirkan bot
  • Ada permintaan nama, karena belum pernah ada.. kemudian diberilah nama belajarGASBot
  • Selanjutnya mendapatkan token sebagai nomor identitas (Akta Lahir) nya.
  • bot dikalungkan token sebagai tanda peserta. Yakni di deklarasikan, diumumkan.. Wooi si bot ini adalah pengenal untuk belajarGASbot

Sehingga, menyebut bot adalah menyebut object yang telah ditentukan tersebut.

Sebagaimana manusia, bot memiliki fungsi atau istilahnya disebut method.

Kalau manusia bisa makan, minum, jalan-jalan, kencan, dan lainnya. Maka bot memiliki method untuk mengirim pesan, kirim gambar, suara, kick orang, dan lain lain.

Mengenal Method Bot

Contoh fungsi dari telegram.. yakni mengirim pesan. Maka, cara mengaksesnya adalah:

bot.telegram.sendMessage(chat_id, text)

Terdapat 3 field pada susunan diatas:

  • bot penyebutan / pemanggilan bot kita
  • telegram method atau fungsi dari/untuk/ke Telegram
  • sendMessage menjalankan fungsi untuk mengirim pesan.

Fungsi kirim pesan (sendMessage) sendiri memiliki kelengkapan minimal 2 syarat agar terkirim:

  • chat_id adalah ruangan obrolan
  • text adalah isi pesan yang akan dikirim.

Misalnya, mau berkirim pesan ke ruangan (grup) yang memiliki id -10010000001, maka:

bot.telegram.sendMessage(-10010000001, 'Halo Brok!');

maka bot akan mengirim pesan Halo Brok! ke ruangan ber kode id -10010000001.

Darimana kode ruangan (chat_id) ini berasal? Chat ID ditentukan oleh telegram. Kita tidak bisa menentukan sendiri kodenya. Namun kita bisa mengetahui ID nya dengan beberapa cara yang (insyaAllah) nanti akan dijelaskan pada halaman lainnya.

Implementasi GAS

// token bot dari bapak bot
const token = '123:abc';  

// adminbot variable untuk chat_id: boleh id kamu sendiri, boleh id grup
const adminbot = 213567634;   // ini adalah id saya, @hasanudinhs

// inisiasi bot
const bot = new lumpia.init(token);

// fungsi mengirim pesan
function sendMessage() {
  let result = bot.tg.sendMessage(adminbot, 'halo mas brok');
  Logger.log(JSON.stringify(result, null, 2));
}

Kemudian jalankan fungsi tersebut pada Google Apps Script. Cara menjalankannya, bisa disimak pada materi menjalankan fungsi.

Jika berhasil, pesan kamu akan terkirim. Dan pada program, mendapatkan log sendMessage.

Semoga penjelasan sederhana ini bisa dimengerti :-)


Method dan Params

options

Secara fungsi sama seperti options dalam inisiasi.

Namun pada bot dapat diakses secara langsung sebagai setter atau getter.

bot.options.log_id = 213567634;
bot.options.prefix_command: '.!/';
bot.options.username: 'strukturbot';

token

Use this property to get/set bot token.

bot.token = [string]

Log ID

Use this property to get/set bot options log_id.

Alias bot.options.log_id

bot.log_id = [number/string]

doPost

memproses data POST pada function doPost buil-in pada Google Apps Script

bot.doPost(e)

Param Type Description
e data data post

Contoh:

function doPost(e) {
  bot.doPost(e);
}

on

Menangkap event yang disediakan atas tangkapan ctx.broadcast

bot.on(updateTypes, fn)

Param Type Description
updateTypes string/string[] Update type
fn function function

Contoh:

bot.on('photo', ctx => console.log(ctx.photo));

hears

Menangkap dan memproses pesan yang bertipe text.

Alias: hear

bot.hears(triggers, fn)

Param Type Description
triggers string/string[]/RegEx/RegEx[] Triggers
fn function function

command

Command handling.

Alias: cmd

bot.command(commands, fn)

Param Type Description
commands string/string[] Commands
fn function function

start

Handler for /start command.

bot.start(fn)

Param Type Description
fn function function

Dapat menghandle juga beberapa kondisi sebagai berikut :

  • /start@namabot jika nama bot di-set pada parameter username saat inisiasi (lumpia.init) pada options
  • PAYLOAD dapat diakses pada ctx.payload jika terdapat data yang dikirimkan.

action

Registers for handling callback_data actions with string or regular expressions.

bot.action(triggers, fn)

Param Type Description
triggers string/string[]/RegEx/RegEx[] Triggers
fn function function

use

Register a middleware.

Alias middleware

bot.use(fn)

fn is function. With Parameters:

Param Type Description
ctx context context
next function next step

4.6 - Telegram

Semua berkenaan dengan method dari bot api telegram

RESUME

Table resume semua properti yang melekat pada bot.telegram.


bot.telegram dapat juga disingkat menjadi bot.tg

variable bot bisa apa saja. Oleh karena dalam list ini, cukup dituliskan method telegram agar disesuaikan dengan variable penyertanya sendiri.

callApi

Main method to call api telegram.

telegram.callApi(method, data)
Param Type Description
method string method of Bot Api Telegram
data json params of Bot Api Telegram

addStickerToSet

Use this method to add a new sticker to a set created by the bot.

telegram.addStickerToSet(ownerId, name, stickerData) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
ownerId string User identifier of sticker set owner
name string Sticker set name
stickerData Object Sticker data({png_sticker: ‘stiker file’, emojis: ‘šŸ˜‰’, mask__position: '' })

answerCallbackQuery

alias untuk answerCbQuery

answerCbQuery

Use this method to send answers to callback queries.

telegram.answerCbQuery(callbackQueryId, text, [showAlert], [extra]) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
callbackQueryId string Query id
[text] string Notification text
[showAlert] bool Show alert instead of notification
[extra] object Extra parameters

answerGameQuery

Use this method to send answers to game query.

telegram.answerGameQuery(callbackQueryId, url)

Param Type Description
callbackQueryId string Query id
url string Notification text

answerShippingQuery

Use this method to send answers to shipping query.

telegram.answerShippingQuery(shippingQueryId, ok, shippingOptions, [errorMessage])

Param Type Description
shippingQueryId string Shipping Query id
ok bool Specify True if delivery to the specified address is possible
shippingOptions object Shipping Options
[errorMessage] string Error message in human readable form

answerPreCheckoutQuery

Use this method to send answers to shipping query.

telegram.answerPreCheckoutQuery(preCheckoutQueryId, ok, [errorMessage])

Param Type Description
preCheckoutQueryId string Shipping Query id
ok bool Specify True if everything is alright (goods are available, etc.)
[errorMessage] string Error message in human readable form

answerInlineQuery

Use this method to send answers to an inline query.

telegram.answerInlineQuery(inlineQueryId, results, [extra])

Param Type Description
inlineQueryId string Query id
results object[] Results
[extra] object Extra parameters

approveChatJoinRequest

Use this method to approve a chat join request.

telegram.approveChatJoinRequest(chatId, userId, [extra])

Param Type Description
chatId number/string Chat id
userId number User id
[extra] object Extra parameters

banChatSenderChat

Use this method to ban a channel chat in a supergroup or a channel.

banChatSenderChat(chatId, senderChatId, extra) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
senderChatId number Sender id
[extra] object Extra parameters

createNewStickerSet

Use this method to create new sticker set owned by a user.

telegram.createNewStickerSet(ownerId, name, title, stickerData, [isMasks]) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
ownerId string User identifier of sticker set owner
name string Sticker set name
title string Sticker set title
stickerData object Sticker data({png_sticker: ‘stiker file’, emojis: ‘šŸ˜‰’, mask__position: '' })
[isMasks] bool Pass True, if a set of mask stickers should be created

declineChatJoinRequest

Use this method to decline a chat join request.

telegram.declineChatJoinRequest(chatId, userId, [extra])

Param Type Description
chatId number/string Chat id
userId number User id
[extra] object Extra parameters

deleteChatStickerSet

Use this method to delete a group sticker set from a supergroup.

telegram.deleteChatStickerSet(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id

deleteMessage

Use this method to delete bot messages.

telegram.deleteMessage(chatId, messageId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
messageId string Message id

setStickerSetThumb

Use this method to set the thumbnail of a sticker set.

telegram.setStickerSetThumb(name, userId, [thumb]) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
name string Sticker set name
userId string User identifier of the sticker set owner
thumb File A PNG image with the thumbnail, must be up to 128 kilobytes in size and have width and height exactly 100px, or a TGS animation with the thumbnail up to 32 kilobytes in size

deleteStickerFromSet

Use this method to delete a sticker from a set created by the bot.

telegram.deleteStickerFromSet(stickerId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
stickerId string File identifier of the sticker

editMessageCaption

Use this method to edit captions of messages sent by the bot or via the bot.

telegram.editMessageCaption(chatId, messageId, inlineMessageId, caption, [extra])

Param Type Description
chatId number/string Chat id
messageId string Message id
inlineMessageId string Inline message id
caption string Caption
[extra] object Extra parameters

editMessageMedia

Use this method to edit media of messages sent by the bot or via the bot.

telegram.editMessageMedia(chatId, messageId, inlineMessageId, media, [extra])

Param Type Description
chatId number/string Chat id
messageId string Message id
inlineMessageId string Inline message id
media InputMedia InputMedia
[extra] object Extra parameters

editMessageLiveLocation

Use this method to edit live location messages sent by the bot or via the bot.

telegram.editMessageLiveLocation(latitude, longitude, chatId, messageId, inlineMessageId, [markup]) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
latitude string Latitude of new location
longitude string Longitude of new location
chatId number/string Chat id
messageId string Message id
inlineMessageId string Inline message id
[markup] object Keyboard markup
[extra] object Extra parameters

editMessageReplyMarkup

Use this method to edit only the reply markup of messages sent by the bot or via the bot.

telegram.editMessageReplyMarkup(chatId, messageId, inlineMessageId, markup, [extra])

Param Type Description
chatId number/string Chat id
messageId string Message id
inlineMessageId string Inline message id
markup object Keyboard markup
[extra] object Extra parameters

editMessageText

Use this method to edit text messages sent by the bot or via the bot.

telegram.editMessageText(chatId, messageId, inlineMessageId, text, [extra])

Param Type Description
chatId number/string Chat id
messageId string Message id
inlineMessageId string Inline message id
text string Message
[extra] object Extra parameters

forwardMessage

Forwards message.

telegram.forwardMessage(chatId, fromChatId, messageId, [extra])

Param Type Description
chatId number/string Target Chat id
fromChatId number/string Source Chat id
messageId number Message id
[extra] object Extra parameters

sendCopy

Sends message copy.

telegram.sendCopy(chatId, message, [extra])

Param Type Description
chatId number/string Target Chat id
message object Message
[extra] object Extra parameters

copyMessage

Use this method to copy messages of any kind.

telegram.copyMessage(chatId, message, [extra])

Param Type Description
chatId number/string Target Chat id
fromChatId number/string Source Chat id
messageId number Message id
[extra] object Extra parameters

getWebhookInfo

Use this method to get current webhook status. Requires no parameters. On success, returns a WebhookInfo object. If the bot is using getUpdates, will return an object with the url field empty.

telegram.getWebhookInfo()

getChat

Use this method to get up to date information about the chat (current name of the user for one-on-one conversatio ns, current username of a user, group or channel, etc.).

telegram.getChat(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id

getChatAdministrators

Use this method to get a list of administrators in a chat. On success, returns an Array of ChatMember objects that contains information about all chat administrators except other bots. If the chat is a group or a supergroup and no administrators were appointed, only the creator will be returned.

telegram.getChatAdministrators(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id

setGameScore

Use this method to set the score of the specified user in a game. On success, if the message was sent by the bot, returns the edited Message, otherwise returns True. Returns an error, if the new score is not greater than the user’s current score in the chat.

telegram.setGameScore(userId, score, inlineMessageId, chatId, messageId, [editMessage], [force]) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
userId number Target User id
score number Target User id
inlineMessageId string Inline message id
chatId number/string Target Chat id
messageId number/string Message id
[editMessage] boolean edit target message, default value is True
[force] boolean Pass True, if the high score is allowed to decrease. This can be useful when fixing mistakes or banning cheaters

getGameHighScores

Use this method to get data for high score tables. Will return the score of the specified user and several of his neighbors in a game. On success, returns an Array of GameHighScore objects.

telegram.getGameHighScores(userId, inlineMessageId, chatId, messageId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
userId number\ Target User id
inlineMessageId string Inline message id
chatId number/string Target Chat id
messageId number/string Message id

getChatMember

Use this method to get information about a member of a chat.

telegram.getChatMember(chatId, userId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
userId number User identifier

getChatMembersCount

Use this method to get the number of members in a chat.

telegram.getChatMembersCount(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id

getFile

Returns basic info about a file and prepare it for downloading.

telegram.getFile(fileId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
fileId string File id

Returns link to file.

telegram.getFileLink(fileId)

Param Type Description
fileId string/object File id or file object

getMe

Returns basic information about the bot.

telegram.getMe() šŸ‘‰šŸ¼ šŸ“‘

getMyCommands

Use this method to get the current list of the bot’s commands. Requires no parameters. Returns Array of BotCommand on success.

telegram.getMyCommands() šŸ‘‰šŸ¼ šŸ“‘

getStickerSet

Use this method to get a sticker set.

telegram.getStickerSet(name)

Param Type Description
name string Short name of the sticker set
šŸ‘‰šŸ¼ šŸ“‘

getUserProfilePhotos

Returns profiles photos for provided user.

telegram.getUserProfilePhotos(userId, [offset], [limit]) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
userId number Chat id
[offset] number Offset
[limit] number Limit

setChatPermissions

Use this method to set default chat permissions for all members.

telegram.setChatPermissions(chatId, permissions)

Param Type Description
chatId number/string Chat id
permissions object New default chat permissions

banChatMember

Use this method to ban a user in a group, a supergroup or a channel. In the case of supergroups and channels, the user will not be able to return to the chat on their own using invite links, etc.

telegram.banChatMember(chatId, userId, [extra])

Param Type Description
chatId number/string Chat id
userId number User id
[extra] object Extra parameters

restrictChatMember

Use this method to restrict a user in a supergroup.

telegram.restrictChatMember(chatId, userId, [extra])

Param Type Description
chatId number/string Chat id
userId number User id
[extra] object Extra parameters

promoteChatMember

Use this method to promote or demote a user in a supergroup or a channel.

telegram.promoteChatMember(chatId, userId, [extra])

Param Type Description
chatId number/string Chat id
userId number User id
[extra] object Extra parameters

setChatAdministratorCustomTitle

New custom title for the administrator; 0-16 characters, emoji are not allowed

telegram.setChatAdministratorCustomTitle(chatId, userId, [extra])

Param Type Description
chatId number/string Chat id
userId number User id
title string Custom title

Use this method to export an invite link to a supergroup or a channel.

telegram.exportChatInviteLink(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id

setChatPhoto

Use this method to set a new profile photo for the chat.

telegram.setChatPhoto(chatId, photo) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
photo File New chat photo

deleteChatPhoto

Use this method to delete a chat photo.

telegram.deleteChatPhoto(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id

setChatTitle

Use this method to change the title of a chat.

telegram.setChatTitle(chatId, title) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
title string New chat title, 1-255 characters

setChatDescription

Use this method to change the description of a supergroup or a channel.

telegram.setChatDescription(chatId, description) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
description string New chat description, 0-255 characters

setChatStickerSet

Use this method to set a new group sticker set for a supergroup.

telegram.setChatStickerSet(chatId, stickerSetName) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
stickerSetName string Name of the sticker set

pinChatMessage

Use this method to pin a message in a supergroup.

telegram.pinChatMessage(chatId, messageId, [extra])

Param Type Description
chatId number/string Chat id
messageId number Message id
[extra] object Extra parameters

unpinChatMessage

Use this method to unpin a message in a supergroup chat.

telegram.unpinChatMessage(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
[extra] object Extra parameters

unpinAllChatMessages

Use this method to clear the list of pinned messages in a chat

telegram.unpinAllChatMessages(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id

leaveChat

Use this method for your bot to leave a group, supergroup or channel.

telegram.leaveChat(chatId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id

deleteWebhook

Removes webhook integration.

telegram.deleteWebhook() šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
[extra] object Extra parameters

sendAudio

Sends audio.

telegram.sendAudio(chatId, audio, [extra])

Param Type Description
chatId number/string Chat id
audio File Document
[extra] object Extra parameters

sendGame

Sends game.

telegram.sendGame(chatId, gameName, [extra])

Param Type Description
chatId number/string Chat id
gameName String Game short name
[extra] object Extra parameters

sendChatAction

Sends chat action.

telegram.sendChatAction(chatId, action)

Param Type Description
chatId number/string Chat id
action string Chat action

sendContact

Sends document.

telegram.sendContact(chatId, phoneNumber, firstName, [extra])

Param Type Description
chatId number/string Chat id
phoneNumber string Contact phone number
firstName string Contact first name
[extra] object Extra parameters

sendDice

Sends dice.

telegram.sendDice(chatId, [extra])

Param Type Description
chatId number/string Chat id
[extra] object Extra parameters

sendDocument

Sends document.

telegram.sendDocument(chatId, doc, [extra])

Param Type Description
chatId number/string Chat id
doc File Document
[extra] object Extra parameters

sendLocation

Sends location.

telegram.sendLocation(chatId, latitude, longitude, [extra])

Param Type Description
chatId number/string Chat id
latitude number Latitude
longitude number Longitude
[extra] object Extra parameters

sendMessage

Sends text message.

telegram.sendMessage(chatId, text, [extra])

Param Type Description
chatId number/string Chat id
text string Message
[extra] object Extra parameters

sendPhoto

Sends a photo.

telegram.sendPhoto(chatId, photo, [extra])

Param Type Description
chatId number/string Chat id
photo File Photo
[extra] object Extra parameters

sendMediaGroup

Sends media album.

telegram.sendMediaGroup(chatId, media, [extra])

Param Type Description
chatId number/string Chat id
media InputMedia[] Media array
[extra] object Extra parameters

sendSticker

Sends sticker.

telegram.sendSticker(chatId, sticker, [extra])

Param Type Description
chatId number/string Chat id
sticker File Document
[extra] object Extra parameters

setStickerPositionInSet

Use this method to move a sticker in a set created by the bot to a specific position.

telegram.setStickerPositionInSet(sticker, position)

Param Type Description
sticker string File identifier of the sticker
position number New sticker position in the set, zero-based

sendVenue

Sends venue information.

telegram.sendVenue(chatId, latitude, longitude, title, address, [extra])

Param Type Description
chatId number/string Chat id
latitude number Latitude
longitude number Longitude
title string Venue title
address string Venue address
[extra] object Extra parameters

sendInvoice

Sends invoice.

telegram.sendInvoice(chatId, invoice)

Param Type Description
chatId number/string Chat id
invoice object Invoice object

sendVideo

Sends video.

telegram.sendVideo(chatId, video, [extra])

Param Type Description
chatId number/string Chat id
video File Document
[extra] object Extra parameters

sendAnimation

Sends video.

telegram.sendAnimation(chatId, animation, [extra])

Param Type Description
chatId number/string Chat id
animation File Document
[extra] object Extra parameters

sendVideoNote

Sends round video.

telegram.sendVideoNote(chatId, video, [extra])

Param Type Description
chatId number/string Chat id
video File Video note file
[extra] object Extra parameters

sendVoice

Sends voice.

telegram.sendVoice(chatId, voice, [extra])

Param Type Description
chatId number/string Chat id
voice File/string File, file id or HTTP URL
[extra] object Extra parameters

sendPoll

Sends a poll.

telegram.sendPoll(chatId, question, options, [extra])

Param Type Description
chatId number/string Chat id
question string Poll question
options string[] Answer options
[extra] object Extra parameters

setMyCommands

Use this method to change the list of the bot’s commands

telegram.setMyCommands(commands)

Param Type Description
commands object[] List of bot commands

sendQuiz

Sends quiz.

telegram.sendQuiz(chatId, question, options, [extra])

Param Type Description
chatId number/string Chat id
question string Poll question
options string[] Answer options
[extra] object Extra parameters

stopPoll

Stops anonymous poll.

telegram.stopPoll(chatId, messageId, [extra])

Param Type Description
chatId number/string Chat id
messageId string Poll message id
options string[] Answer options
[extra] object Extra parameters

stopMessageLiveLocation

Use this method to stop updating a live location message sent by the bot or via the bot (for inline bots) before live_period expires.

telegram.stopMessageLiveLocation(chatId, messageId, inlineMessageId, [markup]) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
messageId string Message id
inlineMessageId string Inline message id
[markup] object Keyboard markup

uploadStickerFile

Use this method to upload a .png file with a sticker for later use in createNewStickerSet and addStickerToSet methods.

telegram.uploadStickerFile(ownerId, stickerFile) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
ownerId string User identifier of sticker file owner
stickerFile File Png image with the sticker

setWebhook

Specifies an url to receive incoming updates via an outgoing webhook.

telegram.setWebhook(url, [extra]) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
url string Public url for webhook
[extra] object Extra parameters

unbanChatMember

Use this method to unban a previously kicked user in a supergroup.

telegram.unbanChatMember(chatId, userId) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
userId number User id
[extra] object Extra parameters

unbanChatSenderChat

Use this method to unban a previously banned channel chat in a supergroup or channel.

unbanChatSenderChat(chatId, senderChatId, extra) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
chatId number/string Chat id
senderChatId number Sender id
[extra] object Extra parameters

setPassportDataErrors

Informs a user that some Telegram Passport elements they provided contains errors. The user will not be able to re-submit their Passport to you until the errors are fixed (the contents of the field for which you returned the error must change).

telegram.setPassportDataErrors(errors) šŸ‘‰šŸ¼ šŸ“‘

Param Type Description
[errors] PassportElementError[] An array describing the errors

4.7 - Context

Variable yang menghandle update pesan dari Telegram dan metod-metod respon cepat terhadapnya

Dimana itu ctx ?

Lihatlah code berikut:

bot.cmd('ping', ctx => ctx.reply('Pong!'));

Keterangan:

  • ctx adalah context itu.
  • reply adalah method (shorthand) untuk menghandle pesan

Berikut kerangka isi dari ctx.

Context

Context dibuat per request dan berisi beberapa properti:

Property Description
ctx.telegram Telegram client instance
ctx.tg alias ctx.telegram
ctx.updateType Update type (message, inline_query, etc.)
[ctx.updateSubTypes] Update subtypes (text, sticker, audio, etc.)
[ctx.message] Received message
[ctx.editedMessage] Edited message
[ctx.inlineQuery] Received inline query
[ctx.chosenInlineResult] Received inline query result
[ctx.callbackQuery] Received callback query
[ctx.shippingQuery] Shipping query
[ctx.preCheckoutQuery] Pre-checkout query
[ctx.channelPost] New incoming channel post of any kind ā€” text, photo, sticker, etc.
[ctx.editedChannelPost] New version of a channel post that is known to the bot and was edited
[ctx.poll] New version of a anonymous poll that is known to the bot and was changed
[ctx.pollAnswer] This object represents an answer of a user in a non-anonymous poll.
[ctx.chat] Current chat info
[ctx.from] Sender info
[ctx.match] Regex match
[ctx.broadcast] update type bot.on

Shortcuts

Context shortcuts for message update:

Shortcut Bound to Available Params
addStickerToSet telegram.addStickerToSet
createNewStickerSet telegram.createNewStickerSet
deleteChatPhoto telegram.deleteChatPhoto
deleteMessage telegram.deleteMessage
deleteStickerFromSet telegram.deleteStickerFromSet
exportChatInviteLink telegram.exportChatInviteLink
forwardMessage telegram.forwardMessage
getChat telegram.getChat
getChatAdministrators telegram.getChatAdministrators
getChatMember telegram.getChatMember
getChatMembersCount telegram.getChatMembersCount
getMyCommands telegram.getMyCommands
getStickerSet telegram.getStickerSet
leaveChat telegram.leaveChat
pinChatMessage telegram.pinChatMessage
reply telegram.sendMessage text, extra
replyWithAudio telegram.sendAudio
replyWithChatAction telegram.sendChatAction
replyWithDice telegram.sendDice
replyWithDocument telegram.sendDocument
replyWithGame telegram.sendGame
replyWithHTML telegram.sendMessage text, extra
replyWithInvoice telegram.sendInvoice
replyWithLocation telegram.sendLocation
replyWithMarkdown telegram.sendMessage text, extra
replyWithMediaGroup telegram.sendMediaGroup
replyWithPhoto telegram.sendPhoto
replyWithPoll telegram.sendPoll
replyWithQuiz telegram.sendQuiz
replyWithSticker telegram.sendSticker
replyWithVideo telegram.sendVideo
replyWithVideoNote telegram.sendVideoNote
replyWithVoice telegram.sendVoice
setChatDescription telegram.setChatDescription
setChatPhoto telegram.setChatPhoto
setChatTitle telegram.setChatTitle
setMyCommands telegram.setMyCommands
setPassportDataErrors telegram.setPassportDataErrors
setStickerPositionInSet telegram.setStickerPositionInSet sticker, position
setStickerSetThumb telegram.setStickerSetThumb
setStickerSetThumb telegram.setStickerSetThumb
stopPoll telegram.stopPoll
unpinChatMessage telegram.unpinChatMessage
unpinAllChatMessages telegram.unpinAllChatMessages
uploadStickerFile telegram.uploadStickerFile
banChatMember telegram.banChatMember
unbanChatMember telegram.unbanChatMember
replyIt telegram.sendMessage text, extra
replyItWithAudio telegram.sendAudio (v3.6) audio, extra
replyItWithDocument telegram.sendDocument (v3.6) doc, extra
replyItWithHTML telegram.sendMessage (v3.6) text, extra
replyItWithLocation telegram.sendLocation (v3.6) lat, lon, extra
replyItWithMarkdown telegram.sendMessage (v3.6) text, extra
replyItWithPhoto telegram.sendPhoto (v3.6) photo, extra
replyItWithSticker telegram.sendSticker (v3.6) sticker, extra
replyItWithVideo telegram.sendVideo (v3.6) video, extra

Context shortcuts for callback_query update:

Shortcut Bound to Available Params
addStickerToSet telegram.addStickerToSet
answerCbQuery telegram.answerCbQuery text, showAlert, extra
answerGameQuery telegram.answerGameQuery url
createNewStickerSet telegram.createNewStickerSet
deleteChatPhoto telegram.deleteChatPhoto
deleteMessage telegram.deleteMessage
deleteStickerFromSet telegram.deleteStickerFromSet
editMessageCaption telegram.editMessageCaption caption, extra
editMessageMedia telegram.editMessageMedia media, extra
editMessageReplyMarkup telegram.editMessageReplyMarkup markup
editMessageText telegram.editMessageText text, extra
exportChatInviteLink telegram.exportChatInviteLink
forwardMessage telegram.forwardMessage
getChat telegram.getChat
getChatAdministrators telegram.getChatAdministrators
getChatMember telegram.getChatMember
getChatMembersCount telegram.getChatMembersCount
getStickerSet telegram.getStickerSet
leaveChat telegram.leaveChat
pinChatMessage telegram.pinChatMessage
reply telegram.sendMessage text, extra
replyWithAnimation telegram.sendAnimation animation, extra
replyWithAudio telegram.sendAudio
replyWithChatAction telegram.sendChatAction
replyWithDice telegram.sendDice
replyWithDocument telegram.sendDocument
replyWithGame telegram.sendGame
replyWithHTML telegram.sendMessage text, extra
replyWithInvoice telegram.sendInvoice
replyWithLocation telegram.sendLocation
replyWithMarkdown telegram.sendMessage text, extra
replyWithMediaGroup telegram.sendMediaGroup
replyWithPhoto telegram.sendPhoto
replyWithPoll telegram.sendPoll
replyWithSticker telegram.sendSticker
replyWithVideo telegram.sendVideo
replyWithVideoNote telegram.sendVideoNote
replyWithVoice telegram.sendVoice
setChatDescription telegram.setChatDescription
setChatPhoto telegram.setChatPhoto
setChatTitle telegram.setChatTitle
setStickerPositionInSet telegram.setStickerPositionInSet sticker, position
setStickerSetThumb telegram.setStickerSetThumb
stopPoll telegram.stopPoll
unpinChatMessage telegram.unpinChatMessage
unpinAllChatMessages telegram.unpinAllChatMessages
uploadStickerFile telegram.uploadStickerFile
unbanChatMember telegram.unbanChatMember
replyIt telegram.sendMessage text, extra
replyItWithAudio telegram.sendAudio (v3.6) audio, extra
replyItWithDocument telegram.sendDocument (v3.6) doc, extra
replyItWithHTML telegram.sendMessage (v3.6) text, extra
replyItWithLocation telegram.sendLocation (v3.6) lat, lon, extras
replyItWithMarkdown telegram.sendMessage (v3.6) text, extra
replyItWithPhoto telegram.sendPhoto (v3.6) photo, extra
replyItWithSticker telegram.sendSticker (v3.6) sticker, extra
replyItWithVideo telegram.sendVideo (v3.6) video, extra

Context shortcuts for inline_query update:

Shortcut Bound to
answerInlineQuery telegram.answerInlineQuery

Context shortcuts for shipping_query update:

Shortcut Bound to
answerShippingQuery telegram.answerShippingQuery

Context shortcuts for pre_checkout_query update:

Shortcut Bound to
answerPreCheckoutQuery telegram.answerPreCheckoutQuery

Example

Check in this code:

const bot = new lumpia.init(token)

bot.command('quit', (ctx) => {
  // Explicit usage
  ctx.telegram.leaveChat(ctx.message.chat.id)
})

bot.on('text', (ctx) => {
  // Explicit usage
  ctx.telegram.sendMessage(ctx.message.chat.id, `Echo: ${ctx.message.text}`)
})

bot.on('callback_query', (ctx) => {
  // Explicit usage
  ctx.telegram.answerCbQuery(ctx.callbackQuery.id)
})

bot.on('inline_query', (ctx) => {
  const result = []
  // Explicit usage
  ctx.telegram.answerInlineQuery(ctx.inlineQuery.id, result)
})
const bot = new lumpia.init(token)

bot.command('quit', (ctx) => {
  // Explicit usage
  ctx.tg.leaveChat(ctx.chat.id)
})

bot.on('text', (ctx) => {
  // Explicit usage
  ctx.tg.sendMessage(ctx.chat.id, `Echo: ${ctx.message.text}`)
})

bot.on('callback_query', (ctx) => {
  // Explicit usage
  ctx.tg.answerCbQuery(ctx.callbackQuery.id)
})

bot.on('inline_query', (ctx) => {
  const result = []
  // Explicit usage
  ctx.tg.answerInlineQuery(ctx.inlineQuery.id, result)
})
const bot = new lumpia.init(token)

bot.command('quit', (ctx) => {
  // Using context shortcut
  ctx.leaveChat()
})

bot.on('text', (ctx) => {
  // Using context shortcut
  ctx.reply(`Echo: ${ctx.message.text}`)
})

bot.on('callback_query', (ctx) => {
  // Using context shortcut
  ctx.answerCbQuery()
})

bot.on('inline_query', (ctx) => {
  const result = []
  // Using context shortcut
  ctx.answerInlineQuery(result)
})

Kesinambungan

Adalah konsep jika dimasukkan sebuah trigger, jika trigger ditemukan maka tetep diteruskan ke trigger selanjutnya.

Untuk dapat berkesinambungan, perlu dijalankan fungsi next() pada context.

const bot = new lumpia.init(token)

bot.cmd('ping', (ctx) => {
  // User typing: /ping
  ctx.reply('pong!')
})

// tidak akan dieksekusi
bot.cmd('ping', (ctx) => {  
  // User typing: /ping
  ctx.reply('pong 2!');
})
const bot = new lumpia.init(token)

bot.cmd('ping', (ctx, next) => {
  // User typing: /ping
  ctx.reply('pong!');
  next();
})

// perintah tetap dieksekusi
bot.cmd('ping', (ctx) => {  
  // User typing: /ping
  ctx.reply('pong 2!')
})

4.8 - Update Type

Tipe-tipe update yang tersedia untuk context

Update Type

Di pergunakan saat deteksi trigger on.

bot.on('message', fn);
bot.on('photo', fn);

// ... etc

Tipe update tersedia adalah sebagai berikut. Keterangan masing-masing tipe ada di dalam referensi sumber asli.

Type

  • raw
  • message
  • edited_message
  • channel_post
  • edited_channel_post
  • inline_query
  • chosen_inline_result
  • callback_query
  • shipping_query
  • pre_checkout_query
  • poll
  • poll_answer
  • my_chat_member
  • chat_member

Ref: update

Sub Type

  • text
  • reply_to_message
  • reply_markup
  • via_bot
  • edit_date
  • author_signature
  • entities
  • animation
  • audio
  • document
  • photo
  • sticker
  • video
  • video_note
  • voice
  • caption
  • caption_entities
  • media_group_id
  • contact
  • dice
  • game
  • poll
  • venue
  • location
  • new_chat_members
  • left_chat_member
  • new_chat_title
  • new_chat_photo
  • delete_chat_photo
  • group_chat_created
  • supergroup_chat_created
  • channel_chat_created
  • message_auto_delete_timer_changed
  • migrate_to_chat_id
  • migrate_from_chat_id
  • pinned_message
  • invoice
  • successful_payment
  • connected_website
  • passport_data
  • proximity_alert_triggered
  • voice_chat_scheduled
  • voice_chat_started
  • voice_chat_ended
  • voice_chat_participants_invited

Ref: message

Entity Type

  • mention @username
  • hashtag #hashtag
  • cashtag $USD
  • bot_command /start@jobs_bot
  • url https://telegram.org
  • email do-not-reply@telegram.org
  • phone_number +1-212-555-0123
  • bold bold text
  • italic italic text
  • underline underlined text
  • strikethrough strikethrough text
  • code monowidth string
  • pre monowidth block
  • text_link for clickable text URLs
  • text_mention for users without usernames

Ref: Entity

Tips

Informasi bot type update dapat ditemukan pada:

ctx.broadcast dan ctx.updateType

4.9 - Helper

Koleksi method bantuan guna keperluaan saat development

Inisiasi

Untuk inisiasi awal

const helper = lumpia.helper;

// atau

const Helper = lumpia.helper;

Silakan menggunakan huruf besar atau kecil untuk konstantanya, sesuaikan sendiri dengan kebiasaan masing-masing.

Helper

Koleksi method untuk membantu saat development.

clearHTML

membersihkan text dari tags html (meng-escape), sehingga tidak terjadi error saat berada pada parse_mode HTML.

Format:

clearHTML(text)
let text = 'Bilangan 12 < 23';

let pesan = helper.clearHTML(text);

clearMarkdown

membersihkan text dari tags markdown (meng-escape), sehingga tidak terjadi error saat berada pada parse_mode markdown.

Format:

clearMarkdown(text)
let text = 'Hitungan 2 * 3 adalah 6';

let pesan = helper.clearMarkdown(text);

forEach

seperti forEach pada javascript, namun bisa dipergunakan untuk objek (JSON).

Format:

forEach(object, callback);

callback memiliki 2 parameter:

  • contain
  • index
var data = [ 'satu', 'dua', 'tiga']; // contoh tipe array
var data = { satu: 1, dua: 2};  // contoh tipe json

helper.forEach(data, (isi, index) => {
    console.log(index, isi);
});

isIn

Memerika apakah suatu nilai terdapat pada sebuah array

Format:

isIn(list, index)
let admin = [ 123, 456 ];
let id = msg.from.id;

if (helper.isIn(admin, id)) {
    console.log('Dia adalah admin!');
}

random

membuat hasil acak untuk bilangan atau array.

Format:

random(list);
random(min, max);

params:

  • list bertipe array
  • min dan max bertipe integer
let list = ['aku', 'kamu', 'dia'];

helper.random(list) // hasil acakan dari aku, kamu, atau dia
helper.random(0,100) // hasil acakan antara angka 1 - 100

textBlob

membuat text bertipe blob

Format:

textBlob(namaFile, text)

params:

  • namaFile tanpa ekstensi, otomatis akan ditambahkan .txt
  • text bertipe string
let blob = helper.textBlob('namaFile', 'Hasanudin H Syafaat');

Output

Tipe output pada Google Apps Script dalam mode web app.

Secara umum dapat dipergunakan untuk merespon fungsi pada doPost(e).

Ada 3 yang tersedia:

  • outputText(text) menghasilkan keluaran bertipe text
  • outputJSON(data) menghasilkan keluaran bertipe JSON, biasanya cocok untuk pembuatan REST API
  • outputHTML(html) menghasilkan keluaran bertipe HTML, biasanya cocok untuk bertipe website biasa

nama

alias: name

menghasilkan format nama user, baik plain text ataupun html.

Format:

name(object);

return:

  • first
  • last
  • fullname
  • username
  • html
 let nama = helper.name(ctx.from);
 
 console.log(nama.fullname);

typeCheck

mengecek tipe suatu variable

Format:

typeCheck(data);
let data = [ 1, 2, 3];

let tipe = helper.typeCheck(data);

console.log(tipe) // result: array
if (tipe === 'array') console.log('Data bertipe Array!');

compactOptions

membersihkan objek dari null / undefined.

Format:

compactOptions(data);
let options = { satu: 1, kosong: null, tidak: undefined };

compactOptions(options);

hasProp

Memeriksa apakah objek tertentu memiliki properti dengan nama tertentu.

Format:

hasProp(object, key);
let obj = { 'foo': 'bar', 'baz': () => {} }

hasProp(obj, 'foo') // true
hasProp(obj, 'baz') // true
hasProp(obj, 'abc') // false

hasPropType

Checks if a given object has a property with a given name.

Furthermore performs a typeof check on the property if it exists

let obj = { 'foo': 'bar', 'baz': () => {} }

hasPropType(obj, 'foo', 'string') // true
hasPropType(obj, 'baz', 'function') // true
hasPropType(obj, 'abc', 'number') // false

Button

bantuan untuk pembuatan keyboard inline, kompabilitas Lib V1/2.

method params keterangan
text text, data, hide jika ditekan menghasilkan callback data
inline text, data, hide alias dari method text diatas
query text, data bounding ke switch_inline_query
jika ditekan, akan memilih jendala chat yang mana sebagai tujuan
queryChat text, data bounding ke switch_inline_query_current_chat
jika ditekan, pada text box memunculkan username dan text isian. Digunakan untuk bot inline
url text, url, hide jika ditekan akan menuju ke url

Default untuk hide adalah false.

Sample belum dibikin (lagi M šŸ¤£)

Silakan tinggalkan komentar saja jika ingin membantu melengkapi dokumentasi…

5 - Bot Father

Penjelasan tentang bapak bot

Halaman khusus tentang bot father alias bapak bot di Telegram.

5.1 - Pengantar

Penjelasan sekilas tentang bot father

Berbeda dengan dunia kenyataan, bahwa siapa pun lahir adalah dari seorang ibu. Maka di Telegram, semua bot api di-“lahir”-kan (dibuat / didaftarkan) dari seorang bapak. Bapak Bot dalam bahasa Inggris adalah Bot Father.

.

Jadi jika ingin membuat bot, pertama kali yang harus dilakukan adalah mendaftarkan secara administratif ke bapak bot.

Di situ akan ditanya (memasukkan) terlebih dahulu 2 hal yang paling dasar, yakni nama dan username bot. Informasi lainnya (deskripsi, foto, pengaturan, dll) bisa menyusul.

Definisi

@botFather adalah official bot (bot resmi) dari Telegram, yang berfungsi untuk membuat bot baru, mengelola (menejemen) bot yang sudah ada, ataupun menghapus.

Dari sini lah semua bot api telegram berawal mula.

Centang Biru

Karena ini adalah bot terpenting pada Telegram, maka bot ini memiliki tanda verifikasi.

Pastikan jika berinteraksi dengan @botFather yang memiliki tanda centang birunya.

Administratif

Jangan lupakan, saat sudah coding membuat bot masih ada bapak bot untuk menseting dan administrasinya.

5.2 - Mendaftar Bot

Mendaftar dan mendapatkan token bot api
@botfaher untuk mendapatkan token bot

Untuk memulai membuat bot api, kamu wajib punya token bot. Langkah yang harus dilakukan untuk mendapatkannya adalah dengan mendaftarkan bot ke @botfather.

Berikut ini langkah-langkah mendapatkan token pada botfather :

1. @botFather

Klik @botFather ini untuk memulai.

Atau buka di kolom pencarian, ketikkan @botfather

2. Klik Start

Klik Start jika belum.

3. NewBot

Ketik /newbot untuk memulai register bot baru.

Jika sebelumnya kamu sudah punya bot, maka langkah ini tidak akan asing lagi.

4. Nama

Silakan diberi nama bot sesuai dengan keinginan.

Nama bot berbeda dengan username bot ya. Sesudah memberi nama, selanjutnya baru akan memberi username.

5. username

Kemudian proses pembuatan username bot.

Ketentuan username bot adalah:

  • panjangnya 5 sampai 32 karakter
  • username boleh kombinasi huruf dan angka
  • harus dimulai dengan huruf
  • besar kecil gak pengaruh
  • harus diakhiri dengan kata bot

Contoh: belajarGASbot

Nama diakhirnya ada bot-nya.

Jika terjadi kesalahan, kemungkinan dikarenakan:

  • username bot sudah terpakai
  • username bot tidak sesuai ketentuan karakternya
  • username tidak diakhiri kata bot

Ilustrasi

Maka kira-kira seperti ini

Token Bot

Jika semua berhasil, kamu akan mendapatkan token bot untuk dijadikan handle (pegangan) pada proses pembuatan bot.

Seperti contoh pada ilsutrasi tersebut, tokennya adalah:

1898186619:AAEqvamWnZiwjvVN6AE1JyWPSmz6X5nEOg

Token ini bersifat credential ya, jangan di share atau dibagikan.

Selanjutnya, pada kolom pencarian search nama bot kamu sudah bisa ditemukan.

5.3 - Privacy

Seting privacy bot pada group

Secara default bot telegram privacy nya aktif.

Artinya, pada GROUP / SUPERGROUP :

  • bot tidak membaca atau menerima isi pesan dalam group
  • bot ditandai tidak memiliki akses pesan (pada list group)
  • bot hanya membaca pesan yang diawali dengan command yang diawali garis miring, seperti: /perintah

Kegunaan

Dengan posisi privacy bot yang aktif, bermanfaat:

  1. bot tidak akan kena flood (banjir) pesan dari user. Tentu saja berpengaruh terhadap performa bot, jika grupnya sangat besar.
  2. user memiliki trust (kepercayaan) lebih besar terhadap bot yang menghidupkan privacy. Artinya percakapannya tidak akan masuk ke bot (disadap).

Problem

Jika membuat bot pakai command !ping di group, bot tidak akan merespon.

Bagaimana solusinya?

~

Disabled Privacy

  1. buka @botfather
  2. ketik /setprivacy
  3. pilih bot yang akan di ubah privacy-nya
  4. Klik tombol Disable
  5. Cycle bot dari grup: keluarkan bot, lalu masukkan lagi

Biasanya cara ini sudah cukup.

Debugging

Untuk memastikan bot bisa menerima pesan atau tidak. Aktifkan mode debug pada lumpia:

lumpia.DEBUG = true;

Jika bot menerima pesan, namun tidak merespon. Berarti ada kesalahan koding.

Enable Privacy

Caranya sama saja dengan disabled diatas. Pada pilihan klik tombol Enable.

6 - Google Apps Script

Penjelasan mendetail tentang Google Apps Script

Menjelaskan tentang pengoperasikan Google Apps Script dan referensinya.

6.1 - Proyek Baru

Pembuatan Proyek Baru

Untuk preferensi bahasa, silakan disesuaikan sendiri ya. Karena meski dalam bahasa indonesia, kenyataannya google masih campur aduk bahasanya, belum sepenuhnya 100% tertranslate.

Rekomedasinya menggunakan preferensi sesuai bahasa aslinya.

Buka Proyek

Ada beberapa cara untuk membuka proyek baru pada Google Apps Script.

Cara pertama dan kedua hasilnya sama.

1. Script GAS

Buka script.google.com, kemudian pilih Project Baru

2. via Drive

Bisa juga buat proyek baru lewat Google Drive. Caranya, pilih Baru, Lainnya, kemudian pilih Google Apps Script

3. via Apps

Dibuka dari aplikasi semisal lewat spreadsheet atau app google lainnya. Cara ini hanya ketika ingin terhubung langsung dengan aplikasi aktif.

Panel Editor

Ilustrasi dari panel editor proyek baru

panel editor
panel editor

Sampai tahap ini, kamu telah berhasil memuat proyek baru.

Untuk menyimpan, tekan ctrl + s atau klik logo disk pada kotak biru panel editor.

6.2 - Deploy Web App

Cara mendeploy web app

Setiap perubahan, sedikit atau banyak pada Google Apps Script, wajib dilakukan new deploy. Ingat, new deploy.

Angka versi deploy selalu bertambah, tidak mengapa.. jangan khawatir.

1. Editor Lama

Selalu dan selalu, gunakan editor lama. Penjelasannya mengapa ada di video atau periksa halaman Editor Baru vs Editor Lama

2. Publikasikan

Pilih Publikasikan, Terapkan sebagai aplikasi web.

3. Perizinan

Jika meminta otorisasi, silakan cek halaman perizinan.

4. Deploy

Pada halaman deploy as web app, isikan:

  • Project version selalu pilih NEW
  • Pesan deploy, diisi apa saja. Contoh di screenshot: pertamax
  • Execute the app as: biarkan saja me (email@dgmail.com)
  • Who has access to the app: pilih anyone, even anonymous

Kemudian, terakhir klik tombol Deploy

5. URL Web App

Setelah deploy, akan di dapatkan URL Web App.

URL ini yang akan dipasangkan pada webhook.

6.3 - Perizinan

Perizinan aplikasi Google Apps Script

Bilakan mana Google Apps Script meminta otorisasi, lantaran baru pertama kali mengakses satu atau beberapa service tertentu maka kamu perlu meninjau dan memberikan izin.

Misalnya, pertama kali mengakses atau menjalankan:

  • fetch ke situs luar, telegram termasuk situs di luar google. Maka harus diizinkan agar dapat berjalan.
  • mengakses service spreadsheet, google drive, dll
  • mengakses tambahan layanan baru
  • dan beberapa tinjuan izin lainnya, bergantung skup nya

Kemudian kamu bisa memeriksanya, dan mempertimbangkannya apakah memberinya izin atau membatalkan dan memeriksanya ulang.

1. Permintaan Otorisasi

2. Pilih akun

Pilih akun yang telah login sebelumnya.

3. Lanjutan

Pilih atau klik, tulisan lanjutan. Posisinya sangat kecil.

4. Tetap Buka

Tetap buka aplikasi, meski mendapatkan peringatan oleh Google. Peringatan ini bersifat normatif, karena akan mengakses service baru agar berhati-hati.

5. Izinkan

Terakhir, kamu harus memberinya izin untuk melanjutkan.

7 - Library

Daftar Library yang berkaitan dengan GAS

Banyak library yang tersebar untuk melengkapi proyek GAS kita. Sehingga kita tidak perlu susah-susah membuild sendiri.

Jika kamu punya library menarik lainnya, silakan diinformasikan pada kolom komentar ya.

Katagori

Kita buat dalam 2 katagori, yang bertipe General (umum) dan bertipe Plugins.

Ditambahkan 1 lagi, yakni kode sumber terbuka - yang menggunakan lumpia framework.

7.1 - Umum

Library dapat dipergunakan secara umum untuk proyek GAS

Pra-Kata

Tidak semua library dimasukkan. Yang paling memiliki korelasi dan paling bermanfaat secara umum dipergunakan akan dimasukkan.

Silakan memberikan saran atau masukkan via komentar dibawah.

List

Berikut ini daftar Library yang dapat membantu proyek GAS kalian

Library ID Link Keterangan
cheerio 1ReeQ6WO8kKNxoaA_O0XEQ589cIrRvEBA9qcWpNqdOP17i47u6N9M5Xh0 repo versi GAS untuk cheerio.js.org
CopyFolder 1LV7u9yCHVQFRvgDvbkWNZIgU5Ysjzdez7a508Nom0E4f5xzkM0AURH6Y repo mengcopy folder pada google drive
DocsServiceApp 108j6x_ZX544wEhGkgddFYM6Ie09edDqXaFwnW3RVFQCLHw_mEueqUHTW repo membantu pengolahan google doc
Firefast 18XQQ44n7ineBH4-nwzxMu-uC9bywPhpzDlfrON9aLd13AHOxkGR9MlFe link menggunakan service firebase
GASProjectApp 1to51j1yqDvtTrJIoHzgOffCnZOK9MTCcSkky6niwRJlTLTNpxIfj3bI repo membantu pengelolaan proyek GAS
miniSheetDBv1 1NLQhvkXR9BHzlLELujjwFuEwY9rKaSPGZdE9Fqlfuccza0T4Fe3n5kXk repo fungsi spreadsheet
miniSheetDBv2 1wMvpNwIL8fCMS7gN5XKPY7P-w4MmKT9yt_g2eXDGBtDErOIPq2vcNxIN repo fungsi spreadsheet
mustache 1lcqqb7B6cGLVCCBUc50Xt2FzaxovDUiWJA29q7MacTzY1BReRwI0BRnc repo text template

cheerio

Versi GAS dari cheerio.js.org.

Ada 2 varian:

gs

gasify

Sekarang sudah mode arsip / readonly.

CopyFolder

This is Google Apps Script library for copying folder on Google Drive.

DocsServiceApp

This is a Google Apps Script library for supporting Document service, Docs API, Spreadsheet service, Sheets API, Slides service and Slides API. The aim of this library is to compensate the processes that they services cannot achieve.

Firefast

Menghubungkan dengan service firebase

GASProjectApp

This is a Google Apps Script library for creating, updating and exporting Google Apps Script project of the standalone type using Drive API. In this case, Apps Script API is not used.

miniSheetDBv2

Suksesor dari miniSheetDBv1 untuk pengolahan Google Spreadsheet.

Dapat dipergunakan untuk segala keperluan terkait spreadsheet, baik bot atau aplikasi lainnya. Bot: hashtag, autoreply, logging, session, dlsb.

Repository:

Mustache

Mustache is a logic-less template syntax. It can be used for HTML, config files, source code - anything. It works by expanding tags in a template using values provided in a hash or object.

We call it “logic-less” because there are no if statements, else clauses, or for loops. Instead there are only tags. Some tags are replaced with a value, some nothing, and others a series of values.

7.2 - Plugins

Library GAS yang bisa langsung dipergunakan bersama Lumpia Framework

Cara Buat

Cara membuat plugins sendiri..

Menyusul…

List

Library ID Link Keterangan
Genius Lyric 1pIILo5YhzgcGMH2j8tLTEBmK-hf_Vv0W6wsL0YCQXAT6BrvgaK3F9Uld repo Mendapatkan lirik dari genius.com
Keyboard Builder 1CdmLLLtBE1wZ2oxdwYPYMdPIXZLVtdqGEm7k-01JTuAW3Q1-v3DFto-I repo membantu pembuatan keyboard
WizardScene 19EqMaIYrXTLyMuc6Pvocb3R5kYpxyRUdfg48NYvl1anhGjFKIJjepz8k repo pembuatan skenario berbasis session

Genius Lyric

Mendapatkan lirik dari genius.com

Repository:

Keyboard Builder

Simple and powerful reply and inline keyboard builder for Telegram Bots

Versi GAS dari Telegram Keyboard

Repository:

WizardScene

Pembuatan sekenario untuk Bot Telegram, seperti halnya sebuah session.

Repository:

7.3 - Kode Terbuka

Sumber kode terbuka yang bermanfaat

Jika kamu punya kode bot terbuka yang menggunakan lumpia, silakan di share di sini yak..

Akan sangat bermanfaat buat para pembelajar sebagai rujukan dan contoh-contoh kasus.

Jadwal-Sholat

Contoh sederhana yang apik untuk mengandle RESTFUL API, menggunakan method lumpia.fetch

Fungsi utamanya membuat bot jadwal sholat yang di request oleh user dengan memanfaatkan api.myquran.com

Cuplikan:

//mencari data jadwal sholat dari api myQuran. dengan paramater kode kota dan tanggal
function infoSholat(nama_kota, kode_kota) {
  var date = new Date();
  var tanggal = Utilities.formatDate(date, "Asia/Jakarta", "yyyy/MM/dd");
  var respon = api.get("/v1/sholat/jadwal/" + kode_kota + "/" + tanggal);
  try {
    if (respon.status) {
      var data_sholat = respon.data;
      return "šŸ•Œ <b>Jadwal Sholat untuk wilayah " + data_sholat.lokasi + " (" + data_sholat.daerah + ") dan sekitarnya</b>\n\n<code><b>" + data_sholat.lokasi + " (" + data_sholat.jadwal.tanggal + ")</b>\n\n\tImsak   = " + data_sholat.jadwal.imsak + "\n\tSubuh   = " + data_sholat.jadwal.subuh + "\n\tDzuhur  = " + data_sholat.jadwal.dzuhur + "\n\tAshar   = " + data_sholat.jadwal.ashar + "\n\tMaghrib = " + data_sholat.jadwal.maghrib + "\n\tIsya    = " + data_sholat.jadwal.isya + "\n\nSumber:KEMENAG RI</code>";
    } else {
      return "Data Empty!";
    }
  } catch (e) {
    return "Server Error : " + e.message;
  }
}

8 - Showcase

Showcase bot kalian yang pakai GAS Lib v3 - Lumpia!

Silakan dishare pada komentar ya..

InsyaAllah akan diupdate

9 - More

Dokumentasi tambahan

Kamu bisa memberikan saran apa saja dan tambahan di sini.

9.1 - Draft

Poin-poin dokumentasi

Draft untuk menuliskan dokumentasi versi awal.

Main

  • Dasar
    • Apa itu bot
    • Cara kerja bot
    • Requirement
    • Disclaimer
    • Grup vs Supergroup
    • Webhook dan Polling
    • Limitasi Bot
  • Memulai
  • Bot Father
    • Pengantar
    • Mendaftar Bot
    • Ganti Token / Revoke
    • Ganti Foto
    • Set Profile - About dan Description
    • Set Privacy
    • Set Command
    • Inline Bot
    • Web login
    • Game
  • Google Apps Script
    • Penjelasan
    • Proyek Baru
    • Editor Lama / Baru
    • Halaman Baru
      • Mengurutkan
    • Menulis Kode
      • Menjalankan fungsi
    • Deploy
    • Perizinan
    • Limitasi GAS
    • Trigger
    • Seting
    • Database
    • Utility
  • Lumpia
    • Pengantar
      • Tentang
      • Fitur
      • Pros
      • Cons
      • Compare
    • Event Emiter
    • ID Library
    • inisiasi (Options)
    • Base Bot
    • Context
    • Helper
    • Markup
    • Telegram
    • Shorthand
    • Event
    • Update Type
  • UserDB
  • Fetch
  • Use Case
    • Halo Bot
    • HandleUpdate, tanpa deploy
    • Keyboard Biasa
    • Keyboard Inline
    • Kirim Foto atau Multimedia
    • Kirim foto dari drive
    • Inline Bot
    • Hastag
    • Welcome Bot
    • Bad words
    • Hapus Pesan
    • Hapus Service (join)
    • Translator
    • Navigator
    • PDF Converter
    • OCR
    • Database mySQL
    • Database firebase
  • Library
    • General
    • Plugins
  • More
    • FAQ
    • Doc Guide
    • Simple Test

9.2 - FAQ

Pertanyaan yang sering diajukan

Berikut ini adalah daftar pertanyaan yang sering diajukan oleh pengguna.


Draft

  • Umum
  • Bot API
  • UserBot
  • Kesalahan Code

9.3 - Teaser

Intro, teaser, dan iklan lumpia

Pengantar

Halaman ini untuk mendokumentasikan intro atau teaser tentang lumpia framework yang tersebar pada berbagai media.

Materi

Kumpilan teaser pada materi lumpia.

Halo Lumpia

Mode Development

Regex - Ekspresi Reguler

9.4 - Domain

Tentang domain lumpia dan bot telegram

Harapannya suatu saat dapat membuat domain khusus untuk ruang pembelajaran bot Indonesia. Guna memajukan dan memperkaya referensi dan semangat anak-anak muda untuk belajar pemrograman melalui sarana bot telegram.

Nama domain khusus juga dapat menjadikan pencirian dan identitas. Memiliki brand, dan kemudahan dalam penyebutan. Dapat dijadikan sebuah rumah besar berisi ruang-ruang belajar dan sekat-sekat ilmu lainnya.

Mohon maaf bila berasa personalisasi. Saat ini tidak ada budget, sehingga di sub-kan pada domain pribadi lumpia.banghasan.com

Update

8 September 2021

Dapat sub-domain lumpia.js.org

9.5 - Donasi

Jika berasa manfaat dan ingin turut bantu pengembangan, dapat berdonasi agar lebih baik

Donasi

Dapat disalurkan melalui:

9.6 - Docs Guide

Guide untuk Pembuatan Dokumentasi

Akses Terbatas


Akses Public

Pageinfo

This is placeholder content.

{ {% pageinfo color="primary" %} }
This is placeholder content.
{ {% /pageinfo %} }

TIPS

  • {< tag >} untuk isi HTML
  • {% tag %} untuk isi Markdown

Gara-gara perbedaan command tag ini, bisa bikin error atau kacau hasil

Custom

Sudah dicustom untuk penambahan Css dan Javascript, dengan cara:

1. Edit config

Pada config.toml tambahkan:

custom_css = ["css/namafile.css"]
custom_js = ["js/namafile.js"]

2. Struktur

Tata letaknya di folder /static/css dan /static/js

Keyboard

Single

<div class='keyboard'>ctrl + c</div>

ctrl + c

Tag KBD

{ {< kbd ctrl >} } + { {< kbd c >} }

ctrl + c

Alert

{ {% alert title="judul" color="jenis" %} }
isi pesan
{ {% /alert %} }

Spoiler

{ {% spoiler title="Judul" %} }
isi
{ {% /spoiler %} }

Foto

Cara aman letakkan pada folder /static

Normal

Format markdown:

![Puncak Pedang - Klotok](/images/pedang.jpg "Puncak Pedang - Klotok")

Gambar Tag

Cocok buat model galeri

{ {< gambar src="/foto.jpg" caption="Mican.." alt="kitten" title="Mungil dan Imut" >} }

Photo Tag

Dengan fitur border dan bayangan. Untuk menekankan informasi foto. Atribut caption untuk mengisi figcaption.

Figcaption css nya belum selesai dibenerin.

{ {< photo src="/images/pedang.jpg" alt="Puncak Pedang" title="Puncak Pedang - Klotok" caption="Puncak Pedang - Klotok" >} }

Figure

Format CSS belum cocok.

{ {< figure src="/images/pedang.jpg" title="Puncak Pedang - Klotok" >} }

Mermaid

graph TD;
    A-->B;
    A-->C;
    B-->D;
    C-->D;

TAB Card

Tabpane

Card

Hightlight

Html

{ {< highlight html >} }
... code html ...
{ {< /highlight >} }

output:

<section id="main">
  <div>
   <h1 id="title">{{ .Title }}</h1>
    {{ range .Pages }}
        {{ .Render "summary"}}
    {{ end }}
  </div>
</section>

File

{ {< code file=static/code/examples/ping.js highlight="javascript" >} }

Eksternal

Gist

{ {< gist banghasan 0a3711290e6b6d621d7550e5653a4c01 >} }

Twitter

{ {< tweet 1428660612091977732 >} }

twitter tiba-tiba error

Ascii Cinema

{ {< asciicast 428738 >} }

Google Slide

Test Presentasi

9.7 - Tester Kecil

Test code


kosong