author Ahmad Muhardian

Cara Membuat Bot Telegram Simsimi dengan Layanan Webhook Hook.io


Simsimi bisa kita pinjam otaknya untuk mengendalikan bot Telegram. Sehingga bot bisa berbicara layaknya simsimi.

Kita bisa mengakses kecerdasan Simsimi dengan API Key/Kunci API/Token.

Ada dua kunci API/Token yang diberikan oleh simsimi:

  1. Kunci Trial (gratis)
  2. Kunci Berbayar

Kunci trial hanya berlaku 7 hari dengan batasan 100 request/hari.

Kalau melewati batas itu, Simsimi tidak mau merespon.

Tapi tenang saja, ada triknya. (update: sudah tidak bisa)

Nanti saya kasih tahu dibagian akhir panduan ini 😄.

Baiklah, mari kita mulai membuat bot Telegram dengan kecerdasan Simsimi.

Cara Kerja Bot dengan Hook.io dan Simsimi

Sebelumnya, perlu diketahui cara komunikasi bot dengan Hook.io dan API Simsimi.

Cara komunikasi Bot Telegram dengan Hook.io dan API Simsimi

Bot mengirim teks (pesan) ke Hook.io, kemudian Hook.io meneruskan request tersebut ke Simsimi.

Simsimi memberikan balasan, kode yang di Hook.io memprosesnya dan mengirim balasannya ke Bot.

Gampang kan?


Baca Juga (tulisan sebelumnya):


Bahan-Bahan yang Dibutuhkan

  1. Token Bot Telegram ( Cara mendapatkannya): fungsinya untuk mengakses Bot Telegram.
  2. Akun Hook.io ( Daftar di sini): tempat menyimpan kode bot.
  3. Kunci API/Token Simsimi ( Daftar di sini): fungsinya untuk mengakses kecerdasan Simsimi.

Pastikan sudah menyiapkan semua bahan tersebut.

Membuat Service di Hook.io

Buatlah sebuah service pada Hook.io ( klik di sini).

Name diisi dengan nama yang diinginkan.

Sebagai contoh, saya membuat sebuah service bernama iyan-chan.

Membuat Service di Hook.io

Setelah selesai, kita akan memiliki server sendiri dengan alamat

https://hook.io/<username>/<nama service>/

Contoh punya saya:

https://hook.io/ardianta/iyan-chan/

Membuat Variabel Lingkungan

Setelah itu, silahkan buat variabel lingkungan di https://hook.io/env.

Variabel lingkungan berfungsi untuk menampung token dan API Key, agar kita tidak menulikan token dalam kode.

Karena token bersifat rahasia.

Ada dua variabel yang perlu dibuat:

  • variabel iyan_chan_bot untuk menyimpan token Bot Telegram
  • variabel simsimi_key untuk menyimpan token/API Key Simsimi

Membuat variabel lingkungan hook.io

* Abaikan vairabel token_petani_bot, itu variabel untuk tutorial sebelumnya.

Variabel bersifat case sensitive, huruf besar dan kecil dibedakan.

Variabel ini dapat kita akses pada kode dengan objek hook.env.

Lebih jelasnya, silahkan lihat di langkah berikutnya.

Membuat Kode Kendali Bot

Buka kembali service yang sudah dibuat.

Silahkan ganti kode (hook source) dengan kode berikut ini.

module['exports'] = function iyanChanBot(hook) {

    var request = require('request');    
    var botName = "iyan"; // nama bot, silahkan ganti sesukanya
    var simiUrl = 'http://sandbox.api.simsimi.com/request.p?key='+hook.env.simsimi_key+'&lc=id&ft=1.0&text='+hook.params.message.text;


    // tulis teks yang dikirim dari Telegram ke Logs
    console.log("Telegram: " + hook.params.message.text);

    // buat request ke API Simsimi
      request(simiUrl, function (error, response, body) {
      if (!error && response.statusCode == 200) {
         var data = JSON.parse(body);

         // tampilkan balasan dari Simsimi ke Logs
         console.log(data);

        var pesanBalasan = "";

        // kode error dari Simsimi
        // 400-Bad Request.
        // 401-Unauthorized.
        // 404-Not found.
        // 500-Server Error.
        // 509-melewati batas.

        if(data.result == 509 || data.result == 400 || data.result == 401 || data.result == 404 || data.result == 500 ){
            pesanBalasan = botName + " sedang tidur, silahkan hubungi kakak @ardiantapargo!";
        } else {
            pesanBalasan = data.response;

            // replace teks "simsimi" dengan nama bot
            pesanBalasan = data.response.replace(/simisimi/g, botName);
              pesanBalasan = data.response.replace(/simsimi/g, botName);
            pesanBalasan = data.response.replace(/Simsimi/g, botName);            
            pesanBalasan = data.response.replace(/cimicimi/g, botName);
            pesanBalasan = data.response.replace(/Simi/g, botName);
              pesanBalasan = data.response.replace(/simi/g, botName);
        }

        // kirim balasan dari simsimi ke Bot Telegram
         request
          .post('https://api.telegram.org/bot' + hook.env.iyan_chan_bot + '/sendMessage')
          .form({
                "chat_id": hook.params.message.chat.id,
                "text": pesanBalasan
        });

      }
    });

};

Fungsi utama dari kode di atas adalah menerima dan membuat request.

Pertama Servie Hook.io akan menerima request (chat) dari bot, kemudian request tersebut diteruskan ke API Simsimi.

Setelah mendapatkan balasan dari API simsimi, balasan tersebut kita kirim kembali ke bot.

Perhatikan:

hook.env.simsimi_key dan hook.env.iyan_chan_bot pastikan sama dengan nama variabel lingkungan yang telah dibuat.

Setelah itu, simpan kodenya.

Kode Kendali Bot sudah siap

Jangan lupa juga untuk menjalankan service-nya:

Menjalankan Servie Hook.io

Kalau mendapatkan error seperti ini

Error saat menjalankan service

Abaikan saja.

Itu karena tidak ada parameter yang diberikan.

Nanti parameternya berasal dari Bot Telegram.

Menghubungkan Bot dengan Hook.io

Hubungan Bot dengan Hook.io

Langkah berikutnya menghubungkan Bot dengan Hook.io.

Kita bisa menggunakan URL berikut untuk melakukannya:

https://api.telegram.org/bot<TOKEN>/setWebhook?url=https://hook.io/<hook-user>/<hook-name>

Silahkan diganti:

  • <TOKEN> dengan token bot anda
  • <hook-user> dengan username hook.io anda
  • <hook-name> dengan nama layanan/service hook yang anda buat

Contoh:

https://api.telegram.org/bot247322285:AADCfe2WSna7sclLalfBq5VCmn3yTzii_zQ/setWebhook?url=https://hook.io/ardianta/iyan-chan/

Kemudian, silahkan buka URL tersebut melalui browser.

Jika mendapatkan balasan seperti ini, maka bot berhasil terhubung dengan layanan hook.io.

Menghubungkan Bot dengan Hook.io

Demo Percobaan:

Silahkan chat dengan bot-nya @iyan_chan_bot.

Demo Percobaan Bot Telegram dengan API Simsimi

Yohoo!, Bot sudah bisa merespon layaknya Simsimi.

“Apa yang harus dilakukan bila Bot tidak merespon?”

Pertama coba periksa Logs-nya, apakah ada sesuatu yang ditampilkan di sana?

Karena kita tadi sudah menggunakan fungsi console.log() untuk mencetak output ke sana.

Logs Bot di Hook.io

yang saya tandai merah adalah logs error, karena Bot sudah melampaui batas yang ditetapkan oleh Simsimi. Alias tidur…

Selain itu, kita bisa menlihat logs secara realtime melalui Terminal atau CMD dengan perintah:

curl -N https://hook.io/ardianta/iyan-chan/logs

Contohnya, simak di video ini.

Hal berikutnya yang perlu dilakukan adalah memeriksa kodenya.

Apakah ada kode yang salah ketik?

Apakah ada huruf besar dan huruf kecil yang berbeda?

Silahkan diteliti.

Menambahkan Bot di Grup

Sebelumnya, silahkan setting Bot-nya di @botfather agar bisa bergabung dengan Grup.

Kirim perintah /setjoingroups.

Mengatur Bot agar bisa bergabung dengan Grup

Setelah itu tambahkan ke Grup dan jadikan Botnya sebagai administrator.

Menjadikan Bot sebagai administrator

Atau jika kamu tidak memiliki akses administrator di Grup, silahkan matikan privacy bot-nya.

Kirim perintah /setprivacy ke @botfather.

Lalu pilih Disable.

Menon-aktifkan privacy bot

Keterangan:

  • Enable: artinya bot hanya akan menerima pesan pada grup kalau di-mention atau dengan perintah /.
  • Disable: artinya bot akan menerima semua pesan pada grup.

Perlu diketahui, paket gratis hook.io memiliki batasan 1000 request/bulan.

Jadi gunakan dengan bijak 😄.

Kalau mau lebih banyak, silahkan sewa paket berbayar.

Trik Agar Bot Tetap Hidup

Update [23 Mei 2017]: Simsimi sudah menerapkan Capcha pada webnya. Jadi, kita tidak bisa mengaksesnya melalui bot. Cara ini sudah tidak bisa digunakan lagi…

Seperti yang kita ketahui, masa trial API simsimi sampai 7 hari dengan batasan 100 request/hari.

Artinya Bot kita akan tertidur kalau sudah mengirim pesan sebanyak 100 kali dan akan mati setelah 7 hari.

Kalau mau tetap hidup, berarti harus membayar Kunci API dengan harga paket yang sudah ditentukan.

Harga paket API Key Simsimi

Sepertinya kemahalan kalau hanya untuk eksperimen.

Karena itu, kita perlu sedikit ‘mengakalinya’ 😄.

Silahkan buka, web simsimi.com.

Kemudian klik kanan, pilih inspect elements.

Masuk ke bagian network.

inspect Eelement Network Simsimi

Setelah itu coba kirim pesan ke Simsimi dan perhatikan di bagian Network.

URL Request Simsimi

Lihat apa yang kita dapatkan…

http://www.simsimi.com/getRealtimeReq?uuid=LUHzowu7l7tpHTCfe2RshB8aH0rwambBme2ZveDFAEr&lc=en&ft=1&reqText=apa+kabar+simsimi%3F&status=W

URL request dan sebuah token.

Kalau kita buka URL tersebut, kita akan mendapatkan JSON seperti ini.

Respon Simsimi

Nah! sudah tahu kan apa yang harus dilakukan selanjutnya.

Yap! benar sekali…

kita harus memodifikasi kode kendali bot dengan menggunakan URL Request ke URL tersebut.

Maka jadilah seperti ini.

module['exports'] = function iyanChanBot(hook) {

    var request = require('request');

    var botName = "iyan"; // nama bot, silahkan ganti sesukanya

    //var simiUrl = 'http://sandbox.api.simsimi.com/request.p?key=0858369d-3d2d-4bcd-86b0-eaf9d523d259&lc=id&ft=1.0&text='+hook.params.message.text;

     var simiUrlWeb = 'http://www.simsimi.com/getRealtimeReq?uuid=h4yA3s9wL3QPPZkPY8CfVtb3kcGYZEhZjtmGjXtT1vL&lc=id&ft=1&reqText=' + hook.params.message.text + '&status=W';

      // untuk menyimpan pesan balasan dari Simsimi
      var pesanBalasan = "";

    // tampilkan pesan dari Telegram ke Logs
      console.log("Telegram: " + hook.params.message.text);

      request(simiUrlWeb, function (error, response, body) {

      console.log(response);      

      if (!error && response.statusCode == 200) {
         var data = JSON.parse(body);
         console.log(data);

        // 400-Bad Request.
        // 401-Unauthorized.
        // 404-Not found.
        // 500-Server Error.

        if ( data.status == 509 || data.status == 400 || data.status == 401 || data.status == 404 || data.status == 500){
            pesanBalasan = botName + " sedang tidur, silahkan hubungi kakak @ardiantapargo!";
        } else {
            pesanBalasan = data.respSentence;
              pesanBalasan = data.respSentence.replace(/simisimi/g, botName);
              pesanBalasan = data.respSentence.replace(/simsimi/g, botName);
            pesanBalasan = data.respSentence.replace(/Simsimi/g, botName);            
            pesanBalasan = data.respSentence.replace(/cimicimi/g, botName);
            pesanBalasan = data.respSentence.replace(/Simi/g, botName);
              pesanBalasan = data.respSentence.replace(/simi/g, botName);
        }

      } else {
          // kalau request ke Simsimi gagal
        pesanBalasan = botName + " sedang tidur, silahkan hubungi kakak @ardiantapargo!";

      }


      //kirim balasan ke Telegram
      request
          .post('https://api.telegram.org/bot' + hook.env.iyan_chan_bot + '/sendMessage')
          .form({
                "chat_id": hook.params.message.chat.id,
                "text": pesanBalasan //hook.params.message.text
        });


    });
};

Simpan kodenya dan run lagi servernya.

Selamat mencoba.

Catatan [Mei 2017]: Token yang didapatkan dari Web simsimi sepertinya tidak bertahan lama. Saya tidak tahu persis berapa lama masa token tersebut. Sepertinya mengikuti masa Cookie pada browser.

Pada eksperimen yang saya lakukan di bot @iyan_chan_bot, bot-nya sempat mati. Tapi bisa kembali hidup dengan mengganti tokennya dengan yang baru.

Akhir Kata…

Terima kasih sudah mengikuti panduan ini.

Jangan lupa tinggalkan komentar dan join ke channel @petanikode dan Group @petani_kode di Telegram untuk mendapatkan informasi terbaru.

Baca Juga ini

Cara Membuat Bot Telegram dengan Layanan Hook.io

Cara Membuat Bot Telegram dengan Layanan Hook.io

Bot Telegram bisa dibuat dengan berbagai macam bahasa pemrograman: Bisa PHP, Javascript, Java, Python, Ruby, dan sebagainya. Ada dua pengetahuan dasar yang harus dipahami: Cara Membuat Http Request dan Webhook. Cara Mengurai JSON dari Webservice. Tapi, sekarang masalahnya di mana kita harus taruh kode-kode tersebut? “Sewa server…” Serpertinya terlalu mahal, kalau hanya untuk belajar. “Bagaimana kalau gunakan yang gratis saja.” yap, itu dia jawabannya.

Membuat Bot Telegram Tanpa Menulis Kode Program (Coding)

Membuat Bot Telegram Tanpa Menulis Kode Program (Coding)

Bagi sebagian orang—khususnya yang bukan programmer—mungkin akan merasa kesulitan membuat Bot Telegram… Karena tidak memiliki kemampuan pemrograman/coding. Tapi tenang saja… Kita masih bisa membuat Bot tanpa harus menulis satu baris kode pun. Caranya? Caranya menggunakan bot yang sudah dirancang khusus untuk pembuatan membuat bot. Pada kesempatan ini, kita akan belajar membuat Bot sederhana yang berfungsi untuk membaca RSS Feed Reddit. Catatan: Reddit sudah lama diblokir di Indonesia.

Tutorial Google Maps API: Membuat Marker untuk Menandai Lokasi

Tutorial Google Maps API: Membuat Marker untuk Menandai Lokasi

Marker sering digunakan untuk menandai sebuah lokasi. Biasanya sering digunakan dalam membuat aplikasi Geolocation. Pada kesempatan ini, kita akan belajar membuat marker di Google Maps dan melakukan beberapa modifikasi. Kamu bisa menggunakan contoh kode sebelumnya untuk uji coba. Sudah siap? Mari kita mulai… googletag.cmd.push(function () { googletag.display('div-gpt-ad-multibanner1'); }); Mengenal Objek MarkerMarker merupakan sebuah objek yang bisa kita buat dengan kode berikut: var marker = new google.

Belajar Javascript: Apa itu DOM API? dan Bagaimana Cara Menggunakanya?

Belajar Javascript: Apa itu DOM API? dan Bagaimana Cara Menggunakanya?

Saat kamu memutuskan akan belajar Javascript, maka wajib hukumnya memahami tentang DOM. DOM merupakan metode yang digunakan oleh Javascript untuk...

Eksperimen dengan API Simsimi

Eksperimen dengan API Simsimi

Kali ini saya akan mengajak teman-teman bereksperimen dengan API Simsimi. Apa itu Simsimi? buat yang belum tau, silahkan instal saja aplikasi Simsimi di smarphone-nya. Oke, mari kita mulai. API Simsimi konsepnya sangat sederhana. Kita hanya melakukan request dari URL dengan query string, lalu akan mendapatkan jawaban atau respon berdasarkan data yang dimiliki Simsimi. Respon tersebut, bisa kita olah untuk membuat Simsimi versi kita sendiri. 1. Mendapatkan Kunci APIKunci API atau API Key, merupakan kunci yang digunakan untuk mengakses API Simsimi.

Mengatasi Malsalah Posisi Titik Tengah Google Maps pada Modal

Mengatasi Malsalah Posisi Titik Tengah Google Maps pada Modal

Saat membuat Google Maps pada Modal di template Admin LTE, ada masalah yang membuat saya bingung. Posisi titik tengah Google maps selalu berada di pojok kiri atas. Meskipun saya sudah set titik tengahnya pada trigger event resize, namun tetap saja posisinya berada di pojok kiri atas. masalah sebelumnya, Google Maps tidak bisa ditampilkan karena di letakkan di dalam modal. Meskipun saya sudah set titik tengahnya pada trigger event 'resize', namun tetap saja posisinya berada di pojok kiri atas.