Masuk Dunia Software Development

2016-03-07 (6)

Banyak orang yang ingin memasuki dunia software development, dan bertanya ke saya: saya perlu belajar bahasa/teknologi yang mana saat ini? Ada yang sudah kerja di IT lalu ingin masuk software development (ada yang di departemen IT, ada yang jaga warnet, dsb). Ada juga anak SMU yang nanya bahasa dan teknologi apa yang perlu dipelajari duluan, dsb. Di sini saya akan berusaha membahas pendekatan pembelajaran yang mungkin, dan sekilas teknologi yang ada saat ini dan kelemahan/kelebihannya dari sudut pandang pemula.

Hal pertama yang perlu Anda pikirkan adalah: apa motivasi Anda? ada yang karena ingin uang lebih karena membuat aplikasi bisa menghasilkan uang banyak, atau Anda ingin sekedar berkontribusi untuk opensource (yang dasar motivasinya juga banyak). Motivasi ini biasanya akan menentukan jalan apa yang bisa dipilih untuk menjadi developer.

Saya dan teman-teman saya dari tempat kuliah (informatika ITB) memiliki kelebihan karena dipandang “pintar”, dan pasti bisa belajar teknologi apapun (dan biasanya memang begitu karena sudah diajari dasar berbagai macam hal ketika kuliah). Dari tempat kami pertama bekerja, ada yang mendalami dan menjadi ahli di bidang yang spesifik (misalnya telekomunikasi, atau enterprise development), ada juga yang bosan dan berpindah bidang. Jadi bagi kami tidak ada kewajiban untuk memilih apakah perlu belajar Java dulu atau PHP dulu, lalu mencari kerja yang sesuai. Untuk kebanyakan orang lain, tentunya pendekatan tersebut biasanya tidak berlaku, tapi ada beberapa pendekatan lain yang mungkin.

Inti dari pendekatan untuk masuk dunia sofware development adalah membuat sofware. Tentunya sulit mencari kerja tanpa pengalaman. Jadi bagaimana mencari pengalaman tanpa bekerja di sebuah software house atau menerima proyek sebagai freelancer?

Pendekatan pertama yang saya lihat adalah melalui dunia opensource. Salah satu orang terkenal adalah Con Kolivas, seorang ahli anastesi, yang tidak punya background computer science, tapi sangat tertarik pada linux dan menjadi developer kernel Linux. Tentunya kecerdasan dan dedikasi orang tersebut luar biasa, tapi tidak perlu kontribusi ke proyek yang sangat high profile untuk bisa masuk melalui dunia opensource. Cara yang paling sederhana adalah dengan membuat plugin untuk berbagai proyek open source, seperti misalnya wordpress, joomla, dan berbagai software lain. Membuat plugin tidak melibatkan proyek utama, jadi mudah dilakukan. Jika sudah cukup confident, Anda juga bisa mengirimkan patch/pull request untuk proyek utama.

Pendekatan berikutnya adalah membuat app sendiri untuk dipublish melalui dunia app store. Ketika masih demam app store, banyak orang nekat terjun membeli buku atau mengambil kursus untuk memprogram iOS atau Android. Sebagian dari mereka sangat berhasil dan menjadi jutawan (dalam USD), dan sebagian gagal. Tapi pendekatan ini bisa berhasil karena: kita bisa membuat aplikasi yang kita mau, tidak dibatasi waktu, dan ada targetnya (menjual app).

Jika Anda ingin membuat aplikasi web, maka pendekatan di atas bisa diganti dengan membuat web app sendiri. Terserah Anda jenis web yang ingin Anda buat seperti apa. Anda juga bisa mencari teman yang bisnis online dan mencoba membantu membuatkan web app untuk teman tersebut.

Pendekatan lainnya, yang menurut saya agak berisiko adalah dengan nekat belajar teknologi tertentu saja, dan berusaha mencari pekerjaan yang berhubungan dengan teknologi tersebut. Anda bisa meyakinkan orang bahwa Anda mengenal teknologi tertentu dan mengambil proyek freelance sesuai teknologi tersebut, atau berusaha mengambil sertifikasi khusus teknologi tertentu (misalnya Java atau .NET) dan berusaha langsung mencari kerja dengan menggunakan sertifikasi itu.

Anda bisa melihat di posisi Anda saat ini apa yang bisa Anda gali untuk memulai. Mungkin Anda masih SMU jadi tahu apa kebutuhan anak-anak SMU dan bisa membuat app yang sesuai. Mungkin Anda bekerja di perusahaan tertentu dan bisa melihat app apa yang bisa dikembangkan untuk perusahaan jenis itu.

Memilih teknologi yang dipelajari adalah hal yang sulit: teknologi berkembang sangat cepat meski dasarnya masih sama. Saya ambil contoh teknologi Java. Teknologi ini ada sejak pertengahan 1990an, dan masih ada dan dipakai sampai sekarang. Tapi teknologi Java (meliputi bahasa, API, runtime environment) sudah berubah banyak. Berbagai fitur bahasa Java ditambahkan setiap kali versi major baru dirillis. Berbagai framework dan tools muncul dan dan mati bergantian. Untuk mengcompile saja ada beberapa pendekatan (manual, ant, maven, gradle), ada berbagai framework sisi server yang selalu silih berganti (struts, spring, grails, dan puluhan lain yang tidak saya ingat), belum lagi berbagai library yang perlu dikuasai, misalnya library apa untuk membuat PDF, library apa untuk memproses gambar, dan berbagai library lain. Belajar bahasa Java saja tidak cukup untuk membuat kebanyakan aplikasi real world, kita tetap perlu belajar framework, library, dan tools yang spesifik untuk aplikasi tersebut.

Penjelasan di atas hanya untuk memberi gambaran bahwa belajar bahasa saja tidak cukup, itu hanya awalnya saja. Hal yang penting ketika mempelajari sebuah bahasa adalah benar-benar memahami fitur-fiturnya, supaya tidak bingung ketika fitur itu dipakai di framework atau library tertentu.

Sekarang saya akan bahas beberapa teknologi dasar yang menurut saya perlu diketahui, lalu berikutnya berbagai teknologi yang bisa Anda pilih, sesuai dengan keadaan Anda.

Teknologi dasar pertama adalah SQL. Ini bisa dipelajari terpisah dari bahasa manapun. Semua aplikasi butuh penyimpanan, dan meskipun teknologi NoSQL mulai banyak dipakai, tapi SQL masih digunakan di mana-mana. Aplikasi server memakai berbagai DBMS (Misalnya SQL Server, MySql, Posgres), aplikasi mobile memakai SQLite, bahkan aplikasi browser bisa memakai WebSQL (saat ini disupport oleh Chrome, Safari, Opera).

Teknologi berikutnya adalah HTML/CSS dan JavaScript. HTML dan CSS dasar diperlukan karena banyak sekali user interface dibuat berdasarkan HTML/CSS. Aplikasi web tentunya memakai teknologi itu, tapi banyak app di desktop dan app store juga memakai HTML/CSS untuk user interfacenya. Mengenal javascript juga akan sangat berguna untuk membuat web yang interaktif, dan bahkan sekarang JavaScript juga bisa dipakai memprogram sisi server dengan NodeJS. Salah satu hal praktis yang bisa dibuat dengan HTML/CSS/JS adalah dengan membuat extension untuk browser (contoh extension browser yang terkenal adalah AdBlock).

Jangan lupa pelajari berbagai tools yang ada, terutama command line yang bisa dipanggil program lain. Ini akan sangat berguna untuk mengurangi pekerjaan memprogram. Anda bisa menulis beberapa ribu baris untuk meresize berbagai format gambar, tapi Anda bisa lebih gampang memanggil program imagemagick dari dalam program Anda untuk melakukannya dengan satu baris saja. 

Setelah itu Anda bisa memilih salah satu teknologi utama yang ingin Anda kuasai. Misalnya Anda bisa mendalami teknologi .NET (bisa melalui berbagai bahasa .NET misalnya C# atau Visual Basic .NET). Teknologi .NET saat ini cukup banyak dipakai di berbagai perusahaan besar. Teknologi ini sangat Microsoft centric, walau sekarang mulai dibuka sourcenya agar disupport di platform lain. Dari pengamatan saya, untuk teknologi Web tidak banyak perusahaan menengah atau kecil yang memakai .NET. Jika Anda memprogram aplikasi desktop untuk Windows, maka .NET merupakan pilihan yang bagus. Teknologi .NET bisa juga dipakai untuk memprogram mobile, terutama Windows Phone. Ada juga tools tambahan yang memungkinkan kita membuat program .NET yang jalan di Android ataupun iOS, tapi saya lebih menyarankan Anda memakai Java untuk Android dan Objective C atau Swift untuk iOS.

Alternatif teknologi .NET adalah Java. Java bisa dipakai untuk memprogram aplikasi desktop, mobile (Android), dan Web (Java 2 EE dengan berbagai teknologi dan framework yang ada). Cukup banyak juga enterprise yang memakai Java, apalagi karena Java ini bisa dideploy di berbagai OS, termasuk Linux (yang biaya lisensinya gratis). Dari pengamatan saya: bebereapa perusahaan besar memakai lebih dari satu teknologi (misalnya Java dan .NET sekaligus), karena mereka tidak ingin ditekan oleh vendor tertentu (kalau vendor berusaha menjual harga mahal, maka bisa bilang: saya switch aja deh ke teknologi yang satu lagi).

Anda bahkan bisa menjadikan HTML/JS/CSS menjadi teknologi utama Anda karena sekarang semua jenis aplikasi bisa diprogram dengan HTML/JS. Anda bisa membuat mobile app dengan Phonegap/Cordova, bisa membuat web app dengan menggunakan nodejs di sisi server.

Di sisi open source, ada berbagai alternatif. Yang saya maksud dengan open source di sini adalah open source yang tidak didukung perusahaan besar (Java dan .NET sekarang sudah open source juga). Teknologi PHP masih dipakai diberbagai perusahaan besar (misalnya facebook), tapi sekarang sebagian besar sudah diprogram menggunakan framework tertentu (Larave, CodeIgniter, Nette, dan ratusan framework lain), tidak seperti dulu di mana orang memprogram langsung PHP prosedural tanpa framework.

Meski di luar negeri sudah sangat populer, sepanjang pengetahuan saya penggunaan teknologi Python, Ruby dan lain-lain masih kurang di Indonesia. Mungkin karena tidak ada vendor tertentu yang berusaha menjual produk ke perusahaan (tidak seperti Java atau .NET) sehingga ini masih kurang populer. Jika Anda mau mengambil berbagai pekerjaan freelance dari luar negeri.

Jika Anda spesifik ingin membuat aplikasi iOS, maka sebaiknya Anda belajar Objective C atau Swift. Bahasa Swift lebih sederhana, tapi masih sangat berkembang (terutama sepanjang tahun lalu). Bahasa Swift ini cukup sederhana, tapi sangat Apple centric, dan ilmunya tidak berlaku untuk platform lain.

Selagi belajar teknologi tersebut, Anda sebaiknya belajar berbagai macam hal yang berhubungan dengan development, misalnya versioning (sekarang yang populer menggunakan Git), testing (tergantung teknologi apa yang Anda pakai), deployment (misalnya dengan docker), tools untuk setup development (misalnya dengan Vagrant), IDE (tergantung bahasa yang ingin dipakai). Teknologi-teknologi ini adalah pelengkap yang penting dipelajari, dan lebih mudah dipelajari sambil praktik.

Pertanyaan berikutnya adalah bagaimana cara belajarnya? Anda bisa membeli buku lalu membacanya (silakan dibandingkan sendiri, karena buku yang dianggap bagus oleh satu orang dianggap jelek oleh orang lain), Anda juga bisa mengambil kursus online baik di Coursera, EDX, Udemy, maupun yang lain. Jika Anda suka pendekatan video, banyak sekali tutorial gratis di youtube.

Setelah yakin dengan kemampuan Anda, Anda juga bisa mengambil berbagai sertifikasi. Saya sendiri tidak pernah mengambil sertifikasi pemrograman, jadi kurang tahu bagaimana pandangan perusahaan terhadap berbagai sertifikasi yang ada.

Keahlian yang paling dibutuhkan dalam memprogram adalah mencari jawaban atas error yang ditemui. Keahlian Anda mencari dengan Google akan sangat berguna. Situs stack overflow juga akan sangat membantu dalam menjawab berbagai pertanyaan Anda. Satu hal yang penting adalah: pahami berbagai istilah yang ada, ini akan sangat memudahkan ketika Anda mencari sesuatu menggunakan search engine.

Selamat memasuki dunia development software.

Membuat Bot Telegram

Messenger telegram masih kurang populer di Indonesia, padahal Telegram memiliki banyak kelebihan dibanding messenger lain, misalnya: lebih cepat, bisa diakses via web, sinkronisasi pesan, dsb. Salah satu fitur yang baru diperkenalkan oleh Telegram adalah bot. Bot adalah software yang secara otomatis merespon pesan yang kita berikan.

Setelah saya membuat bot Bot Alkitab, beberapa orang bertanya bagaimana caranya membuat bot. Dengan harapan Telegram jad lebih populer, saya tuliskan di sini dasar pembuatan bot.

Sebelum membaca Artikel ini, silakan baca dulu artikel dari telegram yang memperkenalkan soal bot, lalu bereksperimen lah dengan bot-bot yang sudah ada, supaya bisa mengerti fitur bot dan interaksi dengan bot:

https://telegram.org/blog/bot-revolution

Mendaftarkan Bot

Sekarang setelah siap membuat bot, langkah pertama adalah mendaftarkan nama bot kita. Ini dilakukan dengan menggunakan BotFather.

Perintah yang perlu digunakan adalah /newbot. Perlu diperhatikan bahwa semua bot harus memiliki akhiran “Bot”. Setelah selesai, kita akan mendapatkan token, semacam ini: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Token ini tidak boleh disebar (karena orang lain bisa mengambil alih bot Anda).

botfather

Setelah didaftarkan, kita bisa langsung menambahkan bot di daftar teman kita.

daftar-teman

Ketika mulai chat, ada tombol “Start”

tombol-start

Jika kita tekan itu, yang terjadi adalah kita mengirimkan perintah “/start” ke bot (semua perintah bot dimulai dengan “/”).

pesan-pertama

Tapi kita belum menulis kode untuk bot kita, jadi bot kita belum bisa membalas apapun.

Menerima Pesan

Bot bisa menerima pesan dengan dua cara: polling dan webhook.

Polling artinya kita yang akan meminta pesan ke server telegram. Kira-kira begini: eh ada nggak pesan buat bot saya, kalo nggak ada, bilang aja nggak ada setelah N detik ya. Kalau dalam N detik ada pesan masuk, langsung berikan ke saya pesannya.

Cara kedua adalah dengan webhook. Kira-kira begini: ini saya punya URL, kalau ada pesan masuk, segera posting ke URL ini ya, nanti saya proses. URL ini harus HTTPS.

Telegram hanya mau mengantarkan pesan dengan salah satu cara di atas, tidak bisa keduanya, defaultnya adalah cara pertama.

Cara pertama cocok jika server dijalankan secara internal. Misalnya jika dijalankan di raspberry pi di rumah. Kita tidak perlu IP publik, tidak perlu punya domain, tidak perlu setup HTTPS, dsb. Cara ini agak sedikit lebih lambat dari cara kedua jika penggunanya banyak.

Cara kedua cocok jika Anda sudah punya web server eksternal dan sudah punya HTTPS, atau memakai layanan yang sudah memakai HTTPS (contohnya Google App Engine).

Pertama saya bahas cara polling karena ini sangat praktis ketika development. Pertama kita coba akses pesan yang diterima bot. Kita bisa meminta menggunakan browser seperti ini:


https://api.telegram.org/botTOKEN/getUpdates

Contohnya seperti ini:

getupdates

Sebenarnya ada beberapa parameter ekstra yang bisa kita tambahkan. Pertama adalah timeout: menyatakan berapa lama kita akan menunggu sampai ada pesan. Kedua adalah limit yang menyatakan berapa pesan yang ingin kita terima (max 100). Dan ketiga yang penting adalah offset.

Jika Anda coba refresh URL sebelumnya (tanpa memberikan offset), maka telegram tidak tahu apakah Anda sudah memproses pesan itu atau tidak (batasnya 24 jam). Untuk memberi tahu telegram bahwa pesan tadi sudah kita baca, kita perlu memberikan offset berupa update_id terakhir plus 1, jadi untuk mendapatkan pesan-pesan setelah pesan di atas, saya bisa menambahkan offset seperti ini (sekalian saya berikan contoh memberikan timeout dan limit):


https://api.telegram.org/botTOKEN/getUpdates?offset=142757037&timeout=2&limit=1

Hasil kembalian getUpdates seperti ini:

{"ok":true,"result":[{"update_id":142757036,
"message":{"message_id":3,"from":{"id":24912310,"first_name":"Yohanes","last_name":"Nugroho","username":"yohanesn"},"chat":{"id":24912310,"first_name":"Yohanes","last_name":"Nugroho","username":"yohanesn"},"date":1436950746,"text":"\/start"}}]}

Isi “result” adalah array of message (ada berbagai jenis message, bisa teks, video, dokumen, dsb, tapi dalam tutorial ini yang akan saya tangani hanya yang berisi “text”. Anda bisa membaca API Telegram untuk menangani jenis pesan yang lain.

Untuk membalas pesan, kita bisa menggunakan sendMessage. Anda bisa mencoba di browser (menggunakan token Anda) seperti ini (lihat chat_id di JSON di atas):


https://api.telegram.org/botTOKEN/sendMessage?chat_id=24912310&text=hello

Jika kita ingin menampilkan pesan sebagai balasan dari message tertentu, kita bisa menambahkan reply_to_message_id. Misalnya di atas tercantum message_id adalah 3:


https://api.telegram.org/botTOKEN/sendMessage?chat_id=24912310&text=hello&message_id=3

Jika kita menggunakan Python, kita bisa mendapatkan pesan updatenya dengan library requests (urllib juga bisa, tapi requests lebih enak). Karena URL requestnya sama semua prefixnya, saya membuat fungsi request_url untuk mempersingkat. Berikutnya agar singkat, saya hanya akan membahas PHP saja (dan Anda tetap bisa dengan mudah menerjemahkan ke Python).

def request_url(method):
    return  "https://api.telegram.org/bot"+TOKEN+"/" + method

def getUpdates(offset, limit=100, timeout=100):
    r = requests.get(request_url("getUpdates"),
                     params={"offset":offset,
                      "limit": limit,
                      "timeout": timeout
                      } )
    #asumsi semuanya OK
    result = json.loads(r.content)
    if result["ok"]:
        return result["result"]
    return []

Kode yang sama di PHP:

<?php

include("token.php");

function request_url($method)
{
	global $TOKEN;
	return "https://api.telegram.org/bot" . $TOKEN . "/". $method;
}

function get_updates() 
{
        $resp = file_get_contents(request_url("getUpdates"));
        $update = json_decode($resp, true);
         
?>

Kerangka sebuah program PHP command line (metode polling) yang menangani pesan adalah seperti ini:

<?php
include("token.php");

function request_url($method)
{
	global $TOKEN;
	return "https://api.telegram.org/bot" . $TOKEN . "/". $method;
}

function get_updates($offset) 
{
	$url = request_url("getUpdates")."?offset=".$offset;
        $resp = file_get_contents($url);
        $result = json_decode($resp, true);
        if ($result["ok"]==1)
            return $result["result"];
        return array();
}

function send_reply($chatid, $msgid, $text)
{
    $data = array(
        'chat_id' => $chatid,
        'text'  => $text,
        'reply_to_message_id' => $msgid

    );
    // use key 'http' even if you send the request to https://...
    $options = array(
    	'http' => array(
        	'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
        	'method'  => 'POST',
        	'content' => http_build_query($data),
    	),
    );
    $context  = stream_context_create($options);

    $result = file_get_contents(request_url('sendMessage'), false, $context);
    print_r($result);
}

function create_response($text)
{
   return "definisi " . $text;
}


function process_message($message)
{
    $updateid = $message["update_id"];
    $message_data = $message["message"];
    if (isset($message_data["text"])) {
	$chatid = $message_data["chat"]["id"];
        $message_id = $message_data["message_id"];
        $text = $message_data["text"];
        $response = create_response($text);
        send_reply($chatid, $message_id, $response);
    }
    return $updateid;
}


function process_one()
{
	$update_id  = 0;

	if (file_exists("last_update_id")) {
		$update_id = (int)file_get_contents("last_update_id");
	}

	$updates = get_updates($update_id);

	foreach ($updates as $message)
	{
     		$update_id = process_message($message);
	}
	file_put_contents("last_update_id", $update_id + 1);

}

while (true) {
	process_one();
}
          
?>

Anda bisa mengakses sourcenya di sini:

https://gist.github.com/yohanes/987e1d48cbca9fde9377

Perhatikan bahwa ini perlu dijalankan di command line seperit ini:

$ php telegram-poll.php

Dan selama program masih berjalan, maka pesan yang masuk akan dibalas. Jika dijalankan di web server, maka akan timeout setelah beberapa detik/menit.

Isi file token.php hanyalah seperti ini:

<?php
$TOKEN="TOKENANDA";
?>

Untuk metode webHook, perbedaannya hanya pada fungsi get_updates, dan process_one tidak diperlukan, loop while juga tidak diperlukan, karena pesan akan dikirim satu per satu dengan POST. Kita cukup membaca POST yang masuk (dengan membaca php//:input), dan mendecode JSON-nya.

<?php
//bagian awal sama dengan sebelumnya

$entityBody = file_get_contents('php://input');
$message = json_decode($entityBody, true);
process_message($message);

?>

Source lengkap di:

https://gist.github.com/yohanes/3181a5424d10ea5e2429

Untuk menggunakan methode webHook, Anda harus melakukan beberapa hal:

  1. Mempersiapkan URL HTTPS
  2. Menset urlWebhook

Untuk bagian pertama: Anda perlu memiliki hosting yang mendukung HTTPS, Anda juga bisa memakai layanan cloudflare.com yang otomatis membungkus web Anda dengan https. Berikutya kita perlu mensetup web hook. Contohnya jika URL file php tersebut adalah:

http://cintaprogramming.com/xx.php

maka kita set dengan cara mengunjungi (menggunakan browser atau curl):

https://api.telegram.org/botTOKEN/setWebhook?url=https://cintaprogramming.com/xxx.php

Anda akan mendapatkan balasan:

{"ok":true,"result":true,"description":"Webhook was set"}

Jika ingin kembali menggunakan metode polling, maka set URL menjadi kosong:

https://api.telegram.org/botTOKEN/setWebhook?url=

Anda akan mendapatkan balasan:

{"ok":true,"result":true,"description":"Webhook was deleted"}

Atau jika memang belum diset:

{"ok":true,"result":true,"description":"There is no webhook to delete"}

Berikutnya terserah Anda bagaimana ingin memproses data masukan dari pengguna, misalnya bisa query ke database, bisa melakukan komputasi, dsb.

Jika kode Anda jalan di versi lokal/polling, tapi tidak ketika menggunakan webhook, maka Anda perlu mendebug. Pertama test apakah: webhook dipanggil oleh telegram (bisa dicoba dengan menuliskan isi $entityBody ke file). Kedua cek apakah Anda bisa memanggil send_reply. Beberapa hosting mematikan file_get_contents untuk mengakses HTTP/HTTPS, atau mendisable modul SSL (untuk kasus ini, mungkin harus diganti memakai modul curl) . Coba skrip paling sederhana di atas sebelum menambahkan kode custom Anda untuk reply (misalnya Anda mengakses MySQL, siapa tahu kode Anda yang error karena salah database atau salah query).

Saran saya: gunakan polling dulu sampai yakin sudah benar, setelah itu baru gunakan webhook.

Contoh ini sebenarnya adalah penyederhanaan sebuah kamus. Seharusnya bot ini membalas dengan definisi dari database, tapi di contoh ini bot selalu membalas dengan “definisi ” + KATA.

Sebuah bot bisa memiliki banyak perintah yang diawali dengan “/” (slash), terserah pembuat bot yang mendefinisikan. Misalnya jika kita membuat bot cuaca, kita bisa membuat perintah: “/cuaca NAMAKOTA” (untuk mendapatkan cuaca saat ini) atau “/ramalan NAMAKOTA” (untuk mendapatkan ramalan seminggu). Untuk menangani perintah-perintah ini kita bisa menggunakan parsing teks sederhana. Contoh parsing yang bisa dilakukan split teks menjadi kata-kata: jadikan kata pertama menjadi lower case, dan trim (hapus spasinya), lalu cek apakah sama dengan “/cuaca” atau “/ramalan”. Dan berikutnya lakukan aksi sesuai dengan perintahnya.

Setelah kita memiliki perintah-perintah tersebut. Kita bisa mendaftarkan perintahnya ke BotFather supaya Telegram bisa melakukan autocomplete perintah ketika user mengetikkan karakter /.

Demikian tutorial singkat bot Telegram. Jika ada pertanyaan, silakan tinggalkan di bagiann komentar, dan akan berusaha saya jawab (atau mungkin akan saya buatkan tutorial bagian kedua untuk menjelaskan lebih detail).