Belajar Dasar Bot Telegram

Pendahuluan

Kata bot adalah bentuk singkat dari robot. Bot Telegram berarti robot dalam layanan perpesanan Telegram. Bukan, robot di sini bukan seperti robot dalam film Terminator atau Transformer, melainkan lebih mirip robot dalam pabrik yang merakit mobil atau perangkat elektronik. Masih bingung? Sederhananya, anggap saja bot Telegram itu serupa dengan robot-robot di pabrik yang berfungsi sebagai alat untuk membantu mengotomasi tugas-tugas manusia.

Wah, kok saya masih bingung ya?

Baiklah, saya contohkan dengan sebuah kasus. Misal Budi sedang berdiskusi di Telegram, dan untuk memperkuat pendapatnya Budi pun mencari artikel pendukung dari internet. Apa yang kemudian Budi lakukan? Tentunya dia akan membuka peramban web dan mengetikkan kata kunci di bilah alamat atau pencarian peramban, memilah dan memilih hasil-hasil pencarian yang dinilai dapat memperkuat pendapatnya untuk kemudian menyalin tautan ke laman tersebut dan mengirimnya ke lawan diskusi di Telegram. Pyuh..., sungguh bertele-tele.

Memperkenalkan bot Telegram.

Budi tidak perlu menjalani kerepotan tersebut jika dia menggunakan bantuan bot search engine di Telegram. Cukup dengan dengan membuka percakapan dengan si bot, kemudian mengetikkan kata kunci, maka hasilpun langsung muncul dalam Telegram tanpa perlu berpindah aplikasi. Bahkan, jika si bot memiliki fitur inline, Budi bisa langsung melakukan pencarian dalam jendela yang sama dengan lawan diskusi. Amazing!.

Ada banyak bot di Telegram. Ada yang bisa menjaga grup, mengucapkan selamat datang, mengunduh APK, dan ada juga bot serbaguna yang memiliki beragam kemampuan. Ringkasnya, akan selalu ada bot untuk fungsi yang kita pikirkan. Kemampuan bot hanya dibatasi oleh kemampuan si pembuatnya dan API yang dizinkan oleh Telegram.

Namun dari sekian banyak bot, ia bisa digolongkan ke dalam dua golongan; (1) bot yang memakai akun pengguna biasa, dan (2) bot yang menggunakan akun bot.
Bot yang menggunakan akun bot mudah untuk dikenali, ia selalu memiliki username dan username tersebut selalu berakhiran "bot". Kecuali bot-bot resmi Telegram, misalnya BotFather memiliki username yang tidak berakhiran "bot". Bot jenis inilah yang kini umum disebut bot Telegram, atau lebih khusus dikenal dengan sebutan bot API. Bot API diperkenalkan pada 24 Juni 2015 dan merupakan platform bot resmi dari Telegram.

Sebenarnya, sebelum kemunculan bot API kancah bot Telegram sudah terbentuk dan hidup. Bot tersohor pada zaman itu adalah telegram-bot yang menggunakan akun pengguna biasa yang dijalankan pada telegram-cli. Bot serupa ini umum disebut userbot karena menggunakan akun pengguna dan sulit dibedakan dengan pengguna Telegram pada umumnya. Bahkan dengan userbot kita bisa memiliki kepribadian ganda, yakni sebagai pengguna Telegram biasa dan juga sebagai bot.

Demikianlah riwayat singkat bot Telegram. Berikutnya kita akan mempelajari dasar-dasar bot API. Bot API merupakan bot resmi dari Telegram dan memiliki dokumentasi yang lumayan lengkap, jadi baguslah dijadikan landasan untuk belajar bot lebih lanjut. Untuk selanjutnya dalam artikel ini, saya hanya akan menyebut bot API ini dengan sebutan bot.

Mendaftar Akun Bot

Dokumentasi bot dapat dibaca di laman https://core.telegram.org/bots/api. Namun sebelum berkutat lebih lanjut ke tahap menulis program bot, ada langkah awal yang wajib dilakukan, yakni mendaftar akun bot.
Mendaftar akun bot di Telegram sangatlah mudah. Satu-satunya persyaratan adalah kita memiliki akun Telegram, dan tentu saja mesti (sedikit) mengerti bahasa Inggris. Satu akun Telegram boleh mendaftar hingga 20 akun bot.

Berikut tata-cara mendaftar akun bot.

Mendaftar akun bot ke BotFather
  1. Kita mendaftar akun bot ke @botfather. Jadi, silakan cari username @botfather (atau bisa juga dengan mengklik @botfather pada paragraf ini) dan mulai percakapan dengannya.
    Setelahnya @botfather akan membalas dengan menampilkan daftar perintah yang dapat dimengertinya.
    Karena hendak membuat bot baru, kita pilih perintah /newbot. Bisa dengan mengetik atau dengan mengkliknya.
  2. @botfather kemudian akan menjawab permintaan dengan meminta nama bagi bot kita.

    Alright, a new bot. How are we going to call it? Please choose a name for your bot.

    Ketikkan nama yang diinginkan untuk bot kita. Misalkan kita namai "Borobot". Jangan khawatir, nama ini selalu akan bisa kita ubah nantinya.

  3. @botfather kemudian akan membalas lagi dengan meminta username bagi bot.
    Nah, pilih username dengan bijak karena sifatnya tetap dan tidak akan bisa diubah lagi.
    Username bot harus; (1) sedikitnya terdiri dari 5 huruf, (2) hanya terdiri dari huruf, angka, garis bawah, dan (3) mesti berakhiran "bot".
    Kini mungkin akan sedikit sulit mendapatkan username yang diinginkan karena sudah diambil orang lain. Jadi jika username yang kita minta ternyata ditolak, ganti dengan username yang lain yang masih tersedia.

    Good. Now let's choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot.

  4. Jika tiada kendala, @botfather pun akan mengabulkan permintaan kita dengan memberikan sebuah token.

    Done! Congratulations on your new bot. You will find it at t.me/ngaborobot. You can now add a description, about section and profile picture for your bot, see /help for a list of commands. By the way, when you've finished creating your cool bot, ping our Bot Support if you want a better username for it. Just make sure the bot is fully operational before you do this.

    Use this token to access the HTTP API:
    424607057:AAEWYP5DvPyIwE5_vytQzAlDY96bfYIdyNo

    For a description of the Bot API, see this page: https://core.telegram.org/bots/api

    Simpan dan rahasiakan token ini!. Barangsiapa mengetahui token sebuah bot maka dia bisa mengendalikan bot tersebut. Bayangkan jika sesorang mengetahui token bot kita dan menggunakan bot tersebut untuk hal melanggar hukum.
    Jika (dirasa) ada pihak lain yang mengetahui token bot kita, secepatnya minta token pengganti (revoke) ke @botfather.

  5. Selanjutnya sebagai langkah tambahan, silakan jelajah fitur-fitur pengaturan bot apa saja yang ditawarkan @botfather. Misal atur nama, foto, penjelasan, dan lainnya.

Berikut animasi ilustrasi pembuatan bot yang telah dijelaskan dari nomor 1-5:

Berkomunikasi dengan Bot

Asyik, saya telah memiliki bot!
Tapi, kok botnya diam saja?

Pendaftaran bot yang kita lakukan di atas hanyalah sekedar untuk mendapat token dan username. Untuk membuat bot seutuhnya yang bisa menanggapi perintah, kita harus menulis program untuk bot tersebut.

Wah, padahal saya tidak bisa menulis program komputer...

Jika tidak bisa menulis program komputer, kita bisa menggunakan layanan bot "instant" dari Manybot atau Chatfuel. Saya sendiri belum pernah menggunakan jasa keduanya, jadi jika Anda berminat menggunakannya silakan langsung merujuk ke situsnya masing-masing.
Patut dicamkan bahwasanya bot yang dibuat melalui pihak ketiga maka kemampuannya akan terbatas pada fitur yang mereka tawarkan. Jika kita menginginkan fitur-fitur yang tidak ditawarkan, maka jalan satu-satunya adalah dengan tidak menggunakan layanannya dan menulis sendiri program untuk si bot.

Selanjutnya, kita akan sedikit menulis kode untuk bicara dengan bot. Ketika membaca kata program dan kode, mungkin tekad Anda serentak menyusut. Namun jangan khawatir, sekarang kita hanya akan menulis baris printah sederhana untuk berkomukasi dengan bot, bukan menulis program rumit macam web browser atau inti sistem operasi.

Agar tutorialnya sederhana dan lintas sistem operasi, saya akan jabarkan langkah berkomunikasi dengan server Telegram menggunakan peramban web (web browser). Gunakan peramban keluaran terkini, misal saya pakai Firefox 55. Tujuannya agar bisa langsung menampilkan tanggapan (response) JSON dari server Telegram.

Masih ingat dengan token bot yang tadi kita buat? Siapkan token tersebut karena kini kita akan menggunakannya.
Kita berkomunikasi dengan bot dengan cara menyampaikan request (permintaan) kepada server Telegram. Berikut bentuk permintaannya:

https://api.telegram.org/bot<token>/NAMA_METODE

Metode yang didukung adalah GET dan POST. Daftar NAMA_METODE yang dipahami server Telegram dapat dilihat di sini.

Misal kita menyampaikan permintaan menggunakan metode getMe. Salin kode berikut ke dalam bilah alamat (address bar) peramban.

https://api.telegram.org/bot<token>/getMe

Ganti <token> dengan token bot Anda.

Server Telegram kemudian akan memberi tanggapan (response) terhadap permintaan kita dalam bentuk JSON serupa berikut:

{"ok":true,"result":{"id":424607057,"is_bot":true,"first_name":"Borobot","username":"ngaborobot"}}

Jika dilihat menggunakan penampil JSON Firefox akan tampak seperti berikut:

Response dari server Telegram dilihat menggunakan Firefox

Untuk selanjutnya dalam artikel ini, tanggapan JSON akan ditulis dalam bentuk seperti berikut:

{
  "ok": true,
  "result": {
    "id": 424607057,
    "is_bot": true,
    "first_name": "Borobot",
    "username": "ngaborobot"
  }
}

Bentuk JSON seperti di atas biasa disebut sebagai type atau schema. Di type inilah kita mencari tanggapan data yang diinginkan. Daftar type yang tersedia bisa dilihat di sini.

Misal contoh lain yang lebih rumit; menggunakan metode sendMessage untuk mengirim pesan. Salin kode berikut ke bilah alamat peramban.

https://api.telegram.org/bot<token>/sendMessage?chat_id=<id_tujuan>&text=Apa kabar?

Seperti biasa, ganti <token> dengan token bot Anda. Juga ganti <id_tujuan> dengan nomor ID tujuan. Jika tujuan pesan adalah sebuah channel Anda bisa menggunakan username dari channel tersebut.
Berikut contoh tanggapan dari server Telegram.

{
  "ok": true,
  "result": {
    "message_id": 5,
    "from": {
      "id": 424607057,
      "is_bot": true,
      "first_name": "Borobot",
      "username": "ngaborobot"
    },
    "chat": {
      "id": 32536299,
      "first_name": "si_kabayan",
      "username": "si_kabayan",
      "type": "private"
    },
    "date": 1504857575,
    "text": "Apa kabar?"
  }
}

Dalam contoh tadi kita melakukan permintaan secara manual, namun dalam kenyataannya sebuah bot menyampaikan permintaan dan menerima tanggapan secara otomatis. Bot meminta kepada server Telegram apakah ada pesan untuknya, kemudian Server Telegram akan memberi tanggapan dengan mengirimkan pesan-pesan yang ditujukan bagi bot tersebut.
Ada dua cara yang dapat dilakukan bot untuk meminta pesan, yakni getUpdates dan Webhook.

getUpdates

getUpdates dilakukan dengan meminta menggunakan metode getUpdates.

https://api.telegram.org/bot<token>/getUpdates

Jika tidak ada pesan untuk bot, tanggapannya akan seperti ini:

{
    "ok": true,
    "result": []
}

Jika ternyata ada pesan untuk bot, maka tanggapannya akan serupa ini:

{
  "ok": true,
  "result": [
    {
      "update_id": 800906080,
      "message": {
        "message_id": 1,
        "from": {
          "id": 24904272,
          "is_bot": false,
          "first_name": "Mentari",
          "username": "kuncen",
          "language_code": "en-US"
        },
        "chat": {
          "id": 24904272,
          "first_name": "Mentari",
          "username": "kuncen",
          "type": "private"
        },
        "date": 1504852944,
        "text": "/start",
        "entities": [
          {
            "offset": 0,
            "length": 6,
            "type": "bot_command"
          }
        ]
      }
    },
    {
      "update_id": 800906081,
      "message": {
        "message_id": 2,
        "from": {
          "id": 32536299,
          "is_bot": false,
          "first_name": "si_kabayan",
          "username": "si_kabayan"
        },
        "chat": {
          "id": 32536299,
          "first_name": "si_kabayan",
          "username": "si_kabayan",
          "type": "private"
        },
        "date": 1504852992,
        "text": "/start",
        "entities": [
          {
            "offset": 0,
            "length": 6,
            "type": "bot_command"
          }
        ]
      }
    }
  ]
}

Dari tanggapan di atas bisa kita lihat bot mendapat dua pesan dari dua akun. Jika pesan-pesan itu adalah pesan yang mesti memicu fungsi bot, maka kita harus membuat sebuh fungsi untuk mengolah pesan tersebut.

Proses getUpdates dilakukan berulang terus-menerus. Namun, jika Anda mencoba kembali perintah getUpdates di atas ternyata tanggapan yang diberikan server Telegram adalah sama! Mengapa?
Bot harus diasupi pesan yang berbeda, jika tidak bot akan membalas perintah yang sama terus-menerus. Di sinilah fungsi offset dalam metode getUpdates. Setelah bot mengolah pesan dan memberikannya ke pengguna, maka bot kembali meminta pesan baru ke Telegram dengan menyatakan bahwa ia tidak lagi membutuhkan pesan yang lama.

Tanggapan getUpdates dari Telegram memiliki sebuah kunci bernama update_id. Agar Telegram mengirimkan pesan terbaru, bot mesti meminta pesan dengan memberi offset yang berupa update_id ditambah satu.
Misal, jika bot telah mengolah pesan dengan update_id: 800906081 dari si_kabayan maka bot harus meminta pesan baru dengan cara:

https://api.telegram.org/bot<token>/getUpdates?offset=800906082

Seperti terlihat, offset adalah 800906082 yang merupakan update_id terakhir yang telah diterima dan diolah bot (800906081) ditambah 1.

Jika setelah memakai offset ternyata tidak ada pesan yang baru, bot mesti kembali meminta lagi dan lagi sampai didapat pesan baru. Ini sebuah hal yang tidak efisien.
Sebagai solusinya, kita menggunakan teknik long-polling di mana bot hanya meminta (polling) satu kali dan kemudian menunggu dalam jangkah waktu tertentu. Dalam Telegram kita bisa menggunakan timeout untuk menetapkan long-polling.

https://api.telegram.org/bot<token>getUpdates?offset=800906082&timeout=20

Dalam contoh di atas, timeout adalah 20 yang artinya bot meminta pesan baru, jika tidak ada bot akan menunggu selama 20 detik sebelum kemudian melakukan permintaan lagi.

Wow, repot ya?
Jika Anda akan menggunakan long-polling, lebih baik menggunakan framework bot yang sudah ada. Jadi, kita bisa fokus ke membuat fungsi bot.

Webhook

Cara yang kedua agar bot mendapatkan pesan baru adalah dengan metode Webhook.
Dengan Webhook bukan bot yang meminta pesan terbaru ke server Telegram, melainkan server Telegram sendiri yang akan mengantarkan pesan jika ada pesan baru untuk bot.

Webhook lebih rumit karena ia misalnya memerlukan server tersendiri yang memiliki sambungan https. Jadi kita mesti menyiapkan VPS dan sertifikat koneksi https.
Salah satu keuntungan metode Webhook adalah pesan baru didapat lebih cepat dibanding metoda getUpdates dan kode bot relatif lebih sederhana.

Jika Anda belum paham perihal webhook ini, atau memang botnya masih sederhana dan tidak memiliki banyak pemakai, cara getUpdates sudah cukup memadai.

Happy botting...