Jumat, 16 Oktober 2015

Filled Under: , , , , , , , , , , , , , , , , , , ,

Tutorial Sederhana Cara Membuat Bot Telegram dengan Perintah/Command menggunakan API Telegram Bot dan bahasa pemrograman PHP (part 1)

Share

Tutorial Sederhana Cara Membuat Bot Telegram dengan Perintah/Command menggunakan API Telegram Bot dan bahasa pemrograman PHP


Oke, sebelum masuk ke bahasan tentang bot Telegram, ada baiknya kita review sekilas tentang Telegram dulu.
Sekilas tentang Telegram : Apa itu Telegram dan Mengapa pake Telegram? 
Logo Telegram
Mungkin temen-temen yang udah pada kesasar nyari tentang ini kemungkinan besar udah pada tahu apa Telegram itu. Sekedar review aja ya, bagi beberapa yang mungkin belum tahu apa itu Telegram dan kenapa kita sebaiknya pake/pindah ke Telegram. Telegram itu aplikasi instant messaging (aplikasi sejenis WhatsApp, LINE, KakaoTalk) yang masih kurang populer di Indonesia. Padahal banyak banget lho kelebihan pake Telegram jika dibandingkan dengan aplikasi lainnya. Ini gambar ilustrasi tentang beberapa kelebihan Telegram.
Why switch to Telegram?
Dari gambar di atas itu bisa dilihat kelebihan-kelebihan yang ada di Telegram :
1. Pribadi, di Telegram ada fitur di mana orang bisa ngirim pesan ke orang lain yang mana pesannya bakalan hilang dalam beberapa detik (bisa disetting lamanya). Fitur ini cocok buat ngirim pesan dengan tingkat kerahasiaan yang tinggi.
2. Berbasis cloud, itu datanya disimpen di cloud jadi bisa diakses dari berbagai perangkat (tablet, smartphone, komputer), gak kaya' WA yang gak bisa diakses dari komputer. Selain itu, kalo temen-temen ada yang mau lihat history chat (mungkin buat mengenang keromantisan jaman sebelum putus sama mantan), bisa ngelihat semua selama emang belum dihapus. Beda sama LINE yang kalo kita scroll ke atas bakalan mentok sampe bagian tertentu dan beberapa foto yang udah lama banget gak bisa lagi dibuka.
3. Ukuran pesan di Telegram itu lebih kecil, jadinya gak ngehabisin banyak bandwidth dan lebih cepet nyampenya (cucok banget kalo lagi kesasar di pedalaman, sinyal cuma dapet 1 dan koneksi internet dari HP cuma bisa EDGE atau malah GPRS .___. ).
4. Servernya terdistribusi, jadi servernya ini ada di beberapa tempat, jadinya lebih aman (gak lewat banyak perangkat) dan lebih cepet (kalo servernya deket, otomatis bakalan lebih cepet ngaksesnya).
5. API-nya terbuka, yang ini manfaat banget buat developer. Adapun API di Telegram ini ada 2 jenis, yang API Telegram biasa sama API Bot yang baru mau kita bahas.
6. Gratis tis :D (katanya selamanya). Gak perlu mbayar per tahun setelah penggunaan setahun kaya' WA dan gak ada iklan, secara yang bikin Telegram itu organisasi non-profit alias gak ngejar untung (katanya sih...) .
7. Lebih aman.
8. Ukuran file yang bisa dikirim lebih gede. Beda sama WA yang batesnya cuma sekitar antara 16-30 MB, di Telegram gak perlu khawatir soalnya bates maksimal file yang bisa dikirim sampe 1,5 GB. :D. Gak perlu ribet deh cari cara buat nge-root aplikasi WA-nya cuma buat ngirim file gede.

Apa itu Telegram Bot?
Kaya' yang udah dijelasin tadi, API di Telegram itu ada 2, API Telegram biasa sama API Telegram Bot. API Telegram Bot ini pake bot, akun Telegram yang dijalanin pake software dan punya fitur AI. Bot bisa ngelakuin banyak hal - kaya' untuk mengajarkan sesuatu, mainan, nyari sesuatu, broadcast, ngingetin tentang sesuatu (reminder), ngehubungin dengan layanan lain, bahkan sampe ngirim perintah/command ke perangkat internet of things . Buat yang belum tahu apa itu internet of things, ilustrasi sederhananya itu kaya' aplikasi smarthome. Contohnya itu pas kita ngirim perintah ke bot telegram, terus ntar AC di rumah kita bisa otomatis mati sendiri (cocok kalo kita sering lupa matiin AC di rumah). Contoh lain itu kalo kita pengen ngirim perintah ke bot biar rice cooker kita otomatis nanak nasi sendiri, jadinya pas pulang ntar bisa langsung makan nasi *ngayal*. Keren yaah, gak sabar e nunggu pas IoT udah nge-trend di Indonesia kaya' yang sekarang lagi happening di negara2 maju :D.

Untuk yang mau nyobain sejenis prototype atau contoh dari bot yang udah dibikin orang lain, ini ada contoh bot yang udah dibikin dan bisa dicoba untuk tahu lebih tentang bot. Ya sekedar nyoba biar punya bayangan implementasi bot sebenernya tuh kaya' gimana. Cara memakai bot yang udah ada ini, tinggal masuk ke Telegram, terus add nama bot-nya ini di bagian "search username".
  • @ImageBot – ketik gambar yang mau dicari terus bot-nya bakalan ngirim gambar yang dicari
  • @TriviaBot – sejenis bot kuis gitu. bisa dipake buat mainan kuis bareng temen.
  • @PollBot – bot ini bisa di-add ke grup buat polling atau voting.
  • @AlertBot – buat reminder, tinggal setting waktu reminder-nya.
  • @HotOrBot – mirip aplikasi pencari jodoh, Tinder :D.
  • @GithubBot – bisa nge-track update di GitHub
  • @StoreBot – buat cari bot baru dan nge-rate botnya
Kalo pengen tahu informasi tentang fitur dan interaksi dengan bot lebih lanjut, bisa baca :
https://telegram.org/blog/bot-revolution


Oke, mungkin review sekilas tentang Telegram, kelebihannya, dan fitur bot udah cukup ya. Sekarang masuk ke bagian intinya : bikin bot Telegram yang bisa dipake. Berikut ini langkah-langkahnya.
Membuat Bot
1. Add akun Telegram dengan nama @BotFather
2. Ketik perintah /newbot. Masukkan nama bot yang diinginkan (yang tampil di layar) dan username dari bot (yang ini harus unik dan berakhiran "bot").
3. Setelah itu, kita bakalan dapet token, mirip seperti : 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Token ini gak boleh disebar supaya gak ada orang lain yang mengambil alih bot yang udah dibikin.


4. Sesudah bot-nya dibuat, kita dapat menambahkan bot-nya ke daftar teman


5. Ketika mulai chat, bakalan ada perintah /start. Bot-nya gak bakalan mbales apapun soalnya kita emang belum nulis kode tentang apa yang bakalan dilakuin sama bot-nya sewaktu kita ngetik perintah tertentu. Biar bot-nya tahu apa yang perlu dilakuin pas kita ngetik perintah tertentu, kita perlu bikin kode programnya.

Menerima Perintah
Bot bisa menerima perintah yang kita kirimkan lewat dua cara, yaitu getUpdates dan webHook. Berikut ini adalah ilustrasi cara kerja dari keduanya :

Ilustrasi cara getUpdates

Ilustrasi cara webHook

Seperti yang diperlihatkan pada gambar di atas, perbedaan utama dari webHook dan getUpdates adalah pada webHook, bot akan memanggil skrip yang ada di server web yang kita pasang sedangkan pada getUpdates, server kita akan meng-query apakah ada pesan atau tidak setiap interval waktu tertentu (bisa kita setting).

Untuk cara yang pertama (getUpdates) :
Setiap beberapa detik, program kita akan tanya ke bot yang udah kita buat "ada perintah user atau gak ya?". Kalo ada perintah user yang diterima sama bot, perintah itu langsung diproses sama programnya dan programnya bakalan menjawab perintah user tersebut (lewat bot-nya). Sementara kalo gak ada perintah, program-nya gak bakal menjalankan apapun.

Sedangkan untuk cara yang kedua (webHook):
Setiap kali bot nerima perintah dari user, bot bakal manggil program kita (caranya dengan manggil URL yang berisi program kita) dan program kita bakalan menjawab perintah user tersebut (lewat bot-nya).

Oh iya, sebagai info tambahan, Telegram ini cuma mau nerima pesan lewat salah satu cara di atas (webHook/getUpdates), jadinya gak bisa make keduanya sekaligus.

Kapan kita sebaiknya pake salah satu cara getUpdates/webHook ini?
Cara yang pertama (getUpdates) ini cocok kalau kita gak punya server dengan IP publik, domain, dan HTTPS. Sayangnya lewat cara ini, perintah cuma bisa diambil setiap interval waktu tertentu sama komputer/server tempat program disimpen (tergantung yang ditentukan oleh pengguna) dan gak bisa benar-benar realtime. Efek lainnya, komputer/server tempat program itu harus ngambil updates tiap interval waktu tertentu dan relatif lebih besar resource komputasi dan bandwidth yang dibutuhin (tapi gak perlu khawatir, file JSON kecil kok ukurannya). Poin plus-nya getUpdates ini itu cocok buat penggunaan skala kecil yang tidak terlalu membutuhkan waktu respon yang cepat atau untuk yang mau nyoba-nyoba dulu (cucok buat newbie nih).
Cara kedua (webHook) ini cocok kalo kita butuh yang realtime di mana setiap user masukin perintah, program langsung menjawab perintah user tersebut. Untuk make cara webHook ini, kita perlu hosting, domain, dan HTTPS dengan IP publik supaya Telegram bisa manggil program yang ada di domain tersebut kalo bot kita dapet perintah.
Tips tambahan : untuk yang cara kedua (webHook) ini biar gak dihack dan dispam orang lain, ada baiknya program kita itu disimpen di direktori yang dalem banget, kalo bisa direktori-nya pake token kita aja (atau kalo mau ditambah boleh) <- yang ini saran dari Telegram-nya langsung.

Cara menerima perintah lewat getUpdates
Di sini saya bakalan njelasin tentang cara program kita ngambil perintah yang dikirimin ke bot lewat getUpdates. Cara yang pertama ini akan kita bahas terlebih dahulu karena lebih praktis dibanding yang kedua. Kita bisa melihat pesan yang diterima bot dengan mengetikkan URL ini pada browser :
https://api.telegram.org/bot<token bot>/getUpdates
di mana <token bot> adalah token yang telah kita dapat saat membuat bot. Supaya file JSON dari URL yang kita ketikkan bisa berisi sesuatu, terlebih dahulu kita bisa kirim pesan ke bot yang telah kita buat. Setelah itu, ketikkan URL untuk menerima perintah lewat getUpdates. Contoh URL dan hasilnya adalah sebagai berikut :
Gambar 1
Seperti yang diperlihatkan pada gambar di atas, kembalian dari telegram adalah file JSON di mana setiap pesan memiliki beberapa atribut seperti update_id, message_id, id pengirim, nama pengirim, isi pesan, dsbg. Ada beberapa parameter ekstra yang bisa kita tambahkan setelah getUpdates, antara lain :
- timeout : lama waktu menunggu sampai ada pesan (untuk polling)
- limit : jumlah maksimal pesan yang ingin diterima
- offset : yang paling penting, untuk ngasih tahu telegram kalo pesan udah dibaca sama program kita, jadinya gak perlu ditampilkan lagi pas kita ngambil update di lain waktu. Kalo kita gak setting offset-nya, perintah kita yang udah diproses bakalan diproses lagi. Jadinya kalo kita ngetik lagi suatu perintah, program bakalan menjalankan perintah yang sebelumnya dan perintah yang kita ketikkan. Adapun cara setting offsetnya ini dilakukan dengan melihat update_id dari seperti yang diperlihatkan pada gambar 1 di atas, di mana update_id nya adalah 947959739. Untuk menandai kalo perintah itu sudah dibaca sama program kita dan gak perlu ditampilkan lagi, kita bisa nambahin parameter offset=update_id+1 (pada kasus ini, update_id=947959739 sehingga offset=947959740). Contoh penggunaan offset diperlihatkan pada gambar di bawah ini.
Gambar 2
Seperti yang diperlihatkan pada gambar 2 di atas, pesan dengan update_id 947959739 sudah ditandai sebagai terbaca jadinya udah gak ditampilkan lagi. Jadinya dengan nambahin ?offset=<update_id>+<angka tertentu>, kita bisa menandai kalo pesan/perintah dengan update_id dan <angka tertentu> pesan setelah itu sudah dibaca dan tidak perlu lagi ditampilkan lagi.

Cara mengirim pesan lewat perintah sendMessage
Setelah bot mengambil perintah yang diketikkan user, bot bisa mengembalikan jawaban dengan mengirimkan pesan kembali ke user. Adapun cara bot mengirimkan pesan kembali ke user ini adalah dengan perintah sendMessage. Coba ketikkan di browser (pake token bot yang sudah kita buat) URL seperti ini:

https://api.telegram.org/bot<token bot>/sendMessage?chat_id=<chat id kita>&text=hello
di mana <token bot> adalah token yang sudah didapat dan <chat id kita> adalah chat_id dari user yang akan menerima pesan yang kita kirimkan. Untuk mengetahui chat_id kita, dapat kita lihat dari file JSON di atas di bagian
"chat":{"id":
Di sini, chat_id saya adalah 135388637. Temen-temen bisa sesuaikan chat_id itu dengan chat_id dari akun Telegram temen-temen sendiri.

Source Code untuk Mengirim Pesan Lewat Telegram
Setelah kita tahu bagaimana cara bot Telegram mengirim pesan ke kita, kita dapat memulai membuat skrip sederhana untuk mengirimkan pesan ke akun Telegram kita. Adapun skrip untuk melakukan ini dalam bahasa pemrograman PHP adalah sebagai berikut :
<?php
$token_bot="<token_bot>";
$data['chat_id']=<ID_penerima>;
$data['text']="<isi teks>";
function kirimperintah($perintah,$token_bot,array $keterangan=null)
{
$url="https://api.telegram.org/bot".$token_bot."/";
$url.=$perintah."?";
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS,$keterangan);
$output = curl_exec($ch);
curl_close($ch);
return $output;
}
kirimperintah("sendMessage",$token_bot,$data);
echo 'done';
?>
di mana <token_bot> adalah token yang didapat ketika membuat bot, <ID_Penerima> adalah ID temen-temen sendiri dan <isi_teks> adalah pesan yang ingin dikirimkan. Adapun untuk di Windows, saya pernah coba tapi CURL-nya eror walaupun sudah diinstal. Solusinya adalah mengganti curl dengan file_get_contents, sehingga skrip-nya menjadi :
<?php
$token_bot="<token_bot>";
$data['chat_id']=<ID_penerima>;
$data['text']="<isi teks>";
function kirimperintah($perintah,$token_bot,array $keterangan=null)
{
$url="https://api.telegram.org/bot".$token_bot."/";
$url.=$perintah."?";
foreach ($keterangan as $k => $v) {
    $url.=$k."=".$v."&";
}
$url=rtrim($url,"&");
$result=file_get_contents($url);
return $output;
}
kirimperintah("sendMessage",$token_bot,$data);
echo 'done';
?>
Sayangnya, saya pernah coba dengan file_get_contents, bisa dicoba di rumah tapi tidak bisa dicoba di server yang terhubung ke perangkat keamanan Cisco Catalyst, jadi yang pake Windows mungkin bisa mulai ngelirik Linux ;).
Sekian tutorial sederhana dari saya, untuk tutorial dengan perintah/command akan saya update selanjutnya. Akhir kata, makasih yaa yang udah pada baca :D. Feel free to comment ya, terutama kalo misalnya ada masalah atau mau tanya sesuatu, I'm available here to help :)! Yang mau komen juga boleh banget kok xD.


48 komentar:

  1. mkasih tutornya, bermanfaat gan.

    BalasHapus
  2. senang sekali. Terima kasih yang sebesar-besarnya.

    BalasHapus
  3. Terima kasih. Semoga bermanfaat

    BalasHapus
  4. gan ! bagaimana caranya agar bot bisa kluar di pesan BOT. maklum newbie nih

    BalasHapus
  5. gan, script nya sumber darimana gan? sy mau tau fungsi2 nya tq

    BalasHapus
  6. Mas tolong Naikin Traffic ini dong http://stage48.net/wiki/index.php/JKT48 Biar Mengungguli AKB48 Visitor. *Indonesia Bangga

    BalasHapus
  7. mas cara mengetahui chat_id kontak lain gmna ya?

    BalasHapus
  8. cara mengetahui chat_id boot yg telah kita buat bagaimana?

    BalasHapus
  9. siiip.. sangat bermanfaat..
    ditunggu tuts yg WebHook :)

    BalasHapus
  10. kalo koneksi ke internet nya via proxy gimana yak...?

    BalasHapus
  11. cara menganti gambat profil bot,dimana iya

    BalasHapus
  12. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  13. Komentar ini telah dihapus oleh pengarang.

    BalasHapus
  14. monggo yang mau main kuis edukasional yang menantang, bisa coba-coba bot ane ==> BetulAtauSalahBot

    Terima kasih :)

    BalasHapus
  15. cara membuat tombol untuk bot gimana yah? atau membuat kata link ke url gimana caranya?

    BalasHapus
  16. Maaf admin koq saya udah bikin tapi gk ada menunya ya?

    BalasHapus
  17. Masih belum paham gan. wajar sih, newbie. hehe.

    BalasHapus
  18. Pengin buat bot jualan di telegram. www.elzaqstore.com

    BalasHapus
  19. ini yang saya carii makasih kisanak,, sangat membantu ilmunya.

    BalasHapus
  20. Ini contoh bot telegram yang saya buat.

    - https://kaktheo.blogspot.com/2016/10/membuat-bot-telegram-skkksolobot.html
    - https://kaktheo.blogspot.com/2016/10/membuat-bot-line-skkksolobot.html

    BalasHapus
  21. bro cara mengirim dari id kira ke bot melalui php / url gimana ?

    BalasHapus
  22. Terimakasih.sharenya cukup. Membantu. Tinggal dilengkapi dengan cara membuat perintah terutama kodingnya. Saya ingin bisa bot tentang odoj bgmn ya caranya ada yg bisa bantu?

    BalasHapus
  23. Terimakasih.sharenya cukup. Membantu. Tinggal dilengkapi dengan cara membuat perintah terutama kodingnya. Saya ingin bisa bot tentang odoj bgmn ya caranya ada yg bisa bantu?

    BalasHapus
  24. Ini yang ane cari-cari gan, thx yah gan sangat bermanfaat :D

    BalasHapus
  25. mas bs buatkan sy bot,perintah di trx pulsa,cp 089662521555

    BalasHapus
  26. gan newbie ini, itu script php nya taruh dimana

    BalasHapus
  27. mantap gan. saya coba di Vb6 , ternyata bisa

    BalasHapus
  28. good artikel, walaupun saya tetap g paham. maklum g begitu paham programming

    BalasHapus
  29. Makasih tutorialnya, mo ikut nyobain dulu... Thx

    BalasHapus
  30. Udah bisa buat bot tapi ndak bisa ngisinya...

    BalasHapus
  31. Admin, webhooknya gimana? lebih tertarik webhook :)

    BalasHapus
  32. Makasih gan tutorialnya bermanfaat sekali

    BalasHapus
  33. Makasih gan tutorialnya bermanfaat sekali

    BalasHapus
  34. ketika saya coba masuk kan command :
    https://api.telegram.org/bot/sendMessage?chat_id=&text=hello

    muncul error :
    {"ok":false,"error_code":400,"description":"Bad Request: chat not found"}

    kesalahan nya dimana y..?
    mohon bimbingan nya

    BalasHapus
    Balasan
    1. Chat_id nya gan tuh dipakai dengan nomer yang di chat botnya

      Hapus
  35. ketika saya coba masuk kan command :
    https://api.telegram.org/bot(token saya)/sendMessage?chat_id=(id saya)&text=hello

    muncul error :
    {"ok":false,"error_code":400,"description":"Bad Request: chat not found"}

    BalasHapus
  36. Ini yang sedang ane cari. trims sharingya smoga berkah..

    BalasHapus
  37. mantab gan,sangat membantu. terima kasih banyak

    BalasHapus
  38. Pagi Pak Mau tanya,
    apakah bisa pesan yang diterima oleh bot telegram di forward ke bot telegram lainnya?
    Mohon penjelasannya, terima kasih

    BalasHapus
    Balasan
    1. tidak, setiap bot telegram sudah ada tokennya kan.. jadi misal anda buat banyak bot di 1 akun telegram maka tidak terforward ke semua bot .. hanya yang sesuai dengan tokennya

      Hapus

Jangan lupa komen ya... hehehe :)