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:
- Kunci Trial (gratis)
- 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.
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
- Token Bot Telegram ( Cara mendapatkannya): fungsinya untuk mengakses Bot Telegram.
- Akun Hook.io ( Daftar di sini): tempat menyimpan kode bot.
- 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
.
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
* 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.
Jangan lupa juga untuk menjalankan service-nya:
Kalau mendapatkan error seperti ini
Abaikan saja.
Itu karena tidak ada parameter yang diberikan.
Nanti parameternya berasal dari Bot Telegram.
Menghubungkan 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.
Demo Percobaan:
Silahkan chat dengan bot-nya @iyan_chan_bot.
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.
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
.
Setelah itu tambahkan ke Grup dan jadikan Botnya sebagai administrator.
Atau jika kamu tidak memiliki akses administrator di Grup, silahkan matikan privacy bot-nya.
Kirim perintah /setprivacy
ke
@botfather.
Lalu pilih Disable.
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.
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.
Setelah itu coba kirim pesan ke Simsimi dan perhatikan di bagian Network.
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.
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.