Tutorial Bot Telegram : Instalasi dan Pembuatan Bot Telegram Sederhana Menggunakan PHP dan Apache

Tutorial Bot Telegram : Instalasi dan Pembuatan Bot Telegram Sederhana Menggunakan PHP dan Apache

Telegram merupakan salah satu aplikasi chatting gratis dan memiliki berbagai fitur. Salah satu fitur yang disediakan yaitu Bot. Telegram Bot adalah aplikasi pihak ketiga yang dapat dikontrol menggunakan HTTPS Request ke API Bot yang telah disediakan telegram. Dokumentasi mengenai API Bot dapat dipelajari pada halaman web core telegram (https://core.telegram.org/bots/api).

Kenapa Bot Telegram?

Mungkin dari pembaca ada yang bertanya: Mengapa memilih Telegram sebagai platform dalam membuat bot dibandingkan dengan WhatsApp?. Menilik dari pertanyaan itu kita tahu bahwa banyak beberapa keunggulan Telegram dibandingkan dengan WhatsApp, diantaranya :
- Mempunyai layanan penyimpanan Cloud
- Kirim file tidak terbatas size
- Kirim media tanpa khawatir buram
- Bisa memilih mengirim file asli atau dikompres
- Kapasitas anggota grup bisa diperbesar sampai 5.000 orang
- Punya fitur Secret Chat
- Tidak perlu rubah akun menjadi Bussiness untuk membuat bot

Tapi sayangnya total pengguna Telegram masih kalah dengan WhatsApp. ehh
Untuk membuat bot Telegram, ada beberapa hal yang perlu dipersiapkan, yaitu :
- PHP
- MySQL
- Apache
- Ngrok

Tutorial instalasi PHP, MySQL dan Apache sudah dijelaskan pada tutorial sebelumnya. Teman-teman dapat mencarinya pada Menu Sitemap atau melalui kotak pencarian. Sekedar info, dari awal penulisan/tutorial pada blog ini kita tidak menggunakan aplikasi web server yang sudah terpaket seperti Laragon/Xampp/Wamp dst. Jadi, kita instal satu-persatu library (PHP, Apache, MySQL) yang dibutuhkan agar sewaktu-waktu nanti apabila ada pembaharuan versi kita dapat meng-upgrade secara manual dengan mudah.

Menyiapkan Proxy Server

Layanan proxy server yang akan kita gunakan adalah Ngrok. Ngrok ini merupakan layanan gratis yang memberikan kemampuan kepada aplikasi kita agar bisa diakses online. Download ngrok di ngrok.com/download, ekstrak ngrok dan pindahkan ke folder D. Agar ngrok dapat dipanggil melalui command prompt maka daftarkan ngrok pada environment variable. 

Menyiapkan Bot

Bot pertama yang akan kita buat adalah bot command sapa. Sebelum kita melakukan coding, kita siapkan token bot telegram kita. Untuk membuat bot telegram, kita perlu menghubungi Bot Father. Bot Father adalah sebuah bot telegram yang bertugas untuk membantu kita membuat bot telegram. Buka telegram kamu, kemudian cari Bot Father pada kolom pencarian.

Akan ada banyak botFather yang muncul, pastikan kamu pilih bot yang memiliki centang di belakangnya. Kamu juga bisa klik link berikut untuk memulai chat dengan Bot Father https://t.me/BotFather. 


Untuk membuat bot kamu bisa kirimkan perintah /newbot kepada Bot Father lalu kamu akan diminta memasukkan beberapa informasi seperti nama bot yang ingin dibuat dan username. Silahkan ikuti saja langkahnya hingga bot selesai dibuatkan dan kamu diberi api token. Token ini nantinya akan kita gunakan untuk memberi perintah kepada bot kita. Oleh karena itu, sebisa mungkin jangan bagikan token bot kamu ke orang lain ya. Tapi apabila terlanjur tidak masalah, kamu bisa meminta Bot Father untuk menghapus token dan menggantinya dengan yang baru.

Sampai disini kita sudah mendapati token bot kita yakni : 6309899979:AAFv6StxCik_UxQagWOgMBU_nx4UUEkXsbU

Memulai Coding

Setelah membuat bot di telegram, kita lanjut untuk membuat program untuk bot kita. Program ini dapat kita anggap sebagai otak dari bot kita. Oleh karena itu sebenarnya bot yang telah kita buat sebelumnya dengan Bot Father tidak akan bisa melakukan apa-apa tanpa program.

Siapkan folder untuk project kita, buat sebuah file php baru dengan nama terserah kamu tapi di tutorial ini saya akan membuat bot dengan nama Telebot sehingga file php saya adalah telebot.php. Demikian juga untuk nama foldernya, sehingga susunannya akan seperti ini:

Berikut ini adalah isi untuk file telebot.php

<?php
// initialize bot
$bot = new Telebot("6309899979:AAFv6StxCik_UxQagWOgMBU_nx4UUEkXsbU");

class Telebot {
    private $update;
    private $tasks = [];

    public string $token;
    public string $apiURL;

    public function __construct(string $token){
        $this->token = $token;
        $this->apiURL = "https://api.telegram.org/bot" . $this->token;
    }

    private function createContext($update){
        return new class($this->apiURL, $update){
            public
                $apiURL, $update, $updateId,
                $message, $messageId, $from,
                $chat, $chatId, $date, $text;

            public function __construct($apiURL, $update){
                $this->apiURL = $apiURL;
                $this->update = $update;
                $this->updateId = $update->update_id;
                if ($update->message != null) {
                    $this->message = $update->message;
                    $this->messageId = $update->message->message_id;
                    $this->from = $update->message->from;
                    $this->chat = $update->message->chat;
                    $this->chatId = $update->message->chat->id;
                    $this->date = $update->message->date;
                    $this->text = $update->message->text;
                }
            }

            public function replyWithText(string $text, array $options = []){
                $data["chat_id"] = $this->chatId;
                $data["text"] = $text;

                if (array_key_exists("reply_to_message_id", $options)) {
                    $data["reply_to_message_id"] = $options["reply_to_message_id"];
                }

                if (array_key_exists("parse_mode", $options)) {
                    if (in_array($options["parse_mode"], ["Markdown", "MarkdownV2", "HTML"])) {
                        $data["parse_mode"] = $options["parse_mode"];
                    }
                }
                $queries = http_build_query($data);
                file_get_contents($this->apiURL . "/sendMessage?$queries");
            }
        };
    }
    
    public function command(string $command, callable $callback){
        $task = [
            "args" => [$command, $callback],
            "do" =>  function (string $command, callable $callback) {
                if ($this->update == null) return;

                $ctx = $this->createContext($this->update);

                if ($ctx->message != null) {
                    if (strpos($ctx->text, "/$command") === 0) {
                        $callback($ctx);
                    }
                }
            }
        ];
        array_push($this->tasks, $task);
    }

    public function run(){
        $json = file_get_contents('php://input');
        $this->update = json_decode($json);

        foreach ($this->tasks as $task) {
            $task["do"](...$task["args"]);
        }
    }

}

Berikut ini adalah isi untuk file index.php

<?php
require_once("./telebot.php");

// handle start command
$bot->command("start", function ($ctx) {
    $ctx->replyWithText("Kamu mengirimkan command /start");
});

// handle hello command
$bot->command("hello", function ($ctx) {
    $ctx->replyWithText("Halo kak " . $ctx->from->first_name);
});

// handle username command
$bot->command("username", function ($ctx) {
    $ctx->replyWithText("Username kamu " . $ctx->from->username);
});

// run bot
$bot->run();

Script coding di atas saya ambil dari ruangdeveloper.com. Tiap barisnya terdapat penjelasan yang jelas, jadi silahkan kunjungi web tersebut.

Menjalankan Command Bot

Lalu langkah terakhir, kita jalankan bot Telegram.

Menjalankan ngrok :
jalankan cmd, ketikkan perintah
ngrok http 3060




Menjalankan local hosting :
jalankan cmd, masuk ke dalam folder project bot, kemudian ketikkan perintah
php -S localhost:3060

Menjalankan webhook :
buka browser, kemudian ketikan url dengan format https://api.telegram.org/botXXXX/setWebhook?url=YYYY

- Ganti XXXX dengan bot telegram kamu
- Ganti YYYY dengan url https yang diberikan oleh ngrok

sehingga, secara keseluruhan akan menjadi seperti berikut:
https://api.telegram.org/bot6309899979:AAFv6StxCik_UxQagWOgMBU_nx4UUEkXsbU/setWebhook?url=https://890a-182-2-166-53.ngrok.io

Setelah diakses maka akan menghasilkan response seperti berikut


Menjalankan Bot Telegram

Setelah itu kita coba kirimkan command ke bot kita. Jika semuanya benar maka bot kita dapat merespon command /start dan command /hello.



Berikutnya kita akan menginput data melalui bot telegram yang tentu dengan menggunakan PHP dan juga Database MySQL, stay tune yaa..