Menjalankan telegram bot Api Server sebagai Hosted

Ketika membuat bot telegram berbasis PHP atau berbasis python dengan menggunakan pendekatan native code dan stateless, saya mengalami masalah dengan waktu yang di berikan. Bot telegram webhook memberikan batas waktu respon yang sangat singkat, artinya jika bot tidak merespon dalam waktu 10 detik server api telegram memutuskan koneksi ( timeout ).
Akhirnya saya beralih ke metode long poling, metode ini menggunakan mekanisme untuk menghit server telegram pada method /getUPdates terus menerus. Pada saat awal, server api telegram memang dapat menahan koneksi lebih panjang bahkan sampai 5 menit, namun saat tidak ada chat/pesan masuk ke bot koneksi langsung terputus, dan program harus melakukan hit ulang.
Proses terhubung dan terputus ini menambah jumlah latency, contohnya saat bot telegram sudah lama iddle di butuhkan waktu 1 detik lebih untuk memulai start bot awal. Latency, tentu saja menyebabkan respon time lebih lambat ketika saya kirim perintah di aplikasi telegram. Kirim /get_product, butuh waktu hampir 1 detik untuk membalas pesan terkait.
Waktu respon untuk bot telegra meningkat saat saya menambahkan layer integrasi ke pihak ketiga, dan melakukan 3-5x hit ke api telegram. Warga telegram sudah terbiasa dengan respose time yang rendah, lewat dari 1 detik mereka bisa mengirim spam ( kirim perintah 2x ). Pada akhirnya saya mencari ide, salah satunya dengan menjalankan server bot telegram api sendiri.
Lantas bagaimana cara kerja dari server ini?
Server ini bekerja mirip proxy server, dia menghubungkan kita dengan datacenter telegram. Server DC telegram sendiri ter-enkripsi, dan hanya dapat di akses melalui protokol khusus, biasnaya menggunakann MTProto encryption ateu enkripsi sejenis TLS layer. Untuk masuk ke server ini tidak bisa melalui HTTP biasa, untuk itu di butuhkan wrapper sebagai jembatan meng-akses server telegram.
Salah satu jembatan utama untuk menghubungkan kita ke server telegram bisa menggunakan telegram-bot-api. Apa bedanya dengan library telegram selerti telethon, dan library tingkat low level lainya? Bedanya ini adalah sebuah wrapper ( ibarat nya sebuah agent ) dia bisa menghubungkan akun telegram, atau akun bot ke server telegram.
Untuk dapat terhubung tentunya harus punya client scripts. Ada dua jenis client scripts, yaitu aplikasi berbasis chat telegram untuk user bot atau aplikasi khusus bot telegram untuk akun berbasis bot. Setelah menginstall ini, kamu bisa gunakan IP server sebagai titik akses utama terhubung ke server telegram secara mandiri.
Binary Scripts Execution Program
Telegram-Bot-Api merupakan source code sumber terbuka dan ini adalah mentahan file, untuk menjalankan dan memasang harus di kompilasi ke binary file pada OS yang akan di jalankan. Telegram sendiri sudah memberikan panduan bagaimana cara mengkompilasi dan menjalankanya.
Ikuti link berikut https://tdlib.github.io/telegram-bot-api/build.html, panduan tersebut membawa kamu ke halaman cara melakukan kompilasi program. Program ini di buat dalam bahasa C++, perlu di komplasi agar bisa menjadi binary execution program.
Berikut ini adalah tips melakukan kompilasi untuk ubtuntu 24. LTS, jalankan perintah ini per baris. Tunggu sampai eksekusi selesai baru jalankan perintah lain, ingat perhatikan error nya.
Build manual Open SSL Static dulu :
# 1. Update sistem dan install dependency
sudo apt update
sudo apt install -y build-essential cmake g++ git wget zlib1g-dev libz-dev libssl-dev libcurl4-openssl-dev pkg-config
# 2. Buat direktori build OpenSSL statik
mkdir -p ~/openssl_build && cd ~/openssl_build
# 3. Download OpenSSL terbaru (3.1.3)
wget https://www.openssl.org/source/openssl-3.1.3.tar.gz
tar xvf openssl-3.1.3.tar.gz
cd openssl-3.1.3
# 4. Compile OpenSSL secara statik
./config no-shared --prefix=$HOME/openssl_build/openssl
make -j$(nproc)
make install
# 5. Clone repository Telegram Bot API
cd ~
git clone --recursive https://github.com/tdlib/telegram-bot-api.git
cd telegram-bot-api
# 6. Buat folder build
mkdir build && cd build
# 7. Configure CMake untuk build statik
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DCMAKE_EXE_LINKER_FLAGS="-static -static-libgcc -static-libstdc++" \
-DOPENSSL_USE_STATIC_LIBS=TRUE \
-DOPENSSL_ROOT_DIR=$HOME/openssl_build/openssl \
-DZLIB_LIBRARY=/usr/lib/x86_64-linux-gnu/libz.a
# 8. Build Telegram Bot API (binary statik)
cmake --build . --target telegram-bot-api -j$(nproc)
# 9. Binary Telegram Bot API sekarang ada di ./build/telegram-bot-api
# Bisa dicopy ke server lain tanpa perlu install libssl/zlib lagi
Agak sulit kalau mau build ulang, karena itu build adalah versi statik yang di mana pustaka open SSL di masukin ke dalam paket compiled nya. Kalau mau unduh versi yang tinggal runing bisa unduh di sini, dan saya sudah kompilasikan untuk sistem operasi Ubuntu 20.04.4 LTS x86_64.
Kenapa harus repot membangun server sendiri? Karena penggunaan kita tingkat tinggi bukan tingkat low level. Penggunaan tingkat tinggi tentu saja akan menghasilkan overhead yang lebih besar, program berbasis bot telegram di buat akan menerima latensi tinggi. Butuh 1 detik untuk merespon setiap perintah yang di masukan.
Dengan menggunakan Telegram Bot Api server, bisa jadi sebagai proxy untuk memfasilitasi program tingkat atas. Wrapper ini menyediakan jembatan untuk berkomunikasi dengan server TLS protokol encryption level yang di bangun oleh telegram itu sendiri.
Meskipun idealnya server, program ini bukanlah node datacenter. Dia tidak berjalan sendiri, tugasnya hanya menyambungkan menggunakan socket transfer layer, menyimpan database ke dalam caching database telegram yaitu TdLib.
Kesimpulan
Kurang cocok bagi kamu yang hanya ingin cepat, penggunan cepat tidak perlu membutuhkann proxy, cukup gunakan pustaka resmi seperti telethon, gram-js, mereka semua sudah mendukung untuk terhubung secara socket TLS ke server telegram.
Secara lebih luas teknik ini seperti kita mengakali aplikasi HTTPS agar bisa menggunakan jaringan dari websocket. Ada proxy yang selalu bersifat conencting, menjaga koneksi tetap terubung, sehingga HTTP tidak perlu akses data jauh-jauh sampai ke server DC 5 di amsterdam.