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.