Memulai
Tentang Pabal
Apa itu Pabal dan bagaimana ia tersusun, apa yang sudah berfungsi sekarang, dan apa yang belum.
Apa itu Pabal
Pabal (파발, 擺撥) adalah sistem pos estafet pada masa Joseon, tempat kabar mendesak disampaikan secara bersambung sambil berganti kuda. Pabal.me adalah aplikasi pesan yang mengambil nama itu: aplikasi pesan yang kompatibel dengan Telegram dan dijalankan oleh sebuah organisasi atau komunitas di server mereka sendiri.
- Anda menjalankan servernya sendiri. Akun, obrolan, dan foto semuanya disimpan di server dan basis data (PostgreSQL) milik operator. Nama program servernya adalah HunsTelegram (Java 21).
- Bahasanya sama dengan Telegram. Antara aplikasi dan server dipakai MTProto 2.0 (layer 216) yang sama dengan Telegram, dan antara bot dan server dipakai HTTP Bot API yang sama dengan Telegram. Karena itu, aplikasi, pustaka, dan bot yang dibuat untuk Telegram bisa tersambung ke Pabal cukup dengan mengganti alamatnya.
- Ini dunia terpisah yang tidak terhubung dengan Telegram. Akun Pabal hanya ada di server Pabal, dan Anda tidak bisa bertukar pesan dengan pengguna Telegram.
Bagaimana Pabal tersusun
Penjelasan diagram
- Tiga area: di kiri adalah yang berjalan di luar server (aplikasi, program bot, peramban), di tengah dua pintu masuk server, dan di kanan bagian dalam server. Program bot juga berjalan di luar server, yaitu di komputer operator atau pengembang.
- Hanya ada dua pintu masuk: aplikasi langsung tersambung ke port MTProto (8443) (MTProto mengenkripsi dirinya sendiri sehingga tidak perlu HTTPS), sedangkan situs web dan Bot API masuk lewat HTTPS (443).
- Bot tersambung lewat salah satu dari dua jalur: biasanya lewat Bot API di HTTPS (garis tegas), dan jika mau bisa juga lewat MTProto seperti aplikasi (garis putus-putus biru). Jalur mana pun yang dipakai, akun bot dan kotak pesannya sama.
- Garis putus-putus merah adalah satu-satunya panah yang berjalan terbalik: jika bot mengatur webhook, server mengirim update baru ke alamat HTTPS program bot. Selain itu, semuanya adalah permintaan yang masuk dari luar ke server.
- Pencatatan ada di satu tempat: setiap perubahan melewati layanan dan tercatat di penyimpanan event PostgreSQL; hanya foto asli yang disimpan sebagai berkas. Pesan yang dikirim dari aplikasi maupun oleh bot melewati jalur yang sama, sehingga push, daftar obrolan, dan pemulihan saat tersambung ulang berlaku sama untuk semuanya.
Yang sudah berfungsi dan yang belum
| Fitur | Status | Catatan |
|---|---|---|
| Pendaftaran dan masuk (nomor telepon + kode) | Berfungsi | Operator memilih pengiriman kode lewat SMS, email, atau disampaikan oleh admin |
| Obrolan 1:1, penerimaan real-time, banyak perangkat | Berfungsi | Perangkat yang sempat mati akan menyusul yang terlewat begitu dinyalakan lagi |
| Mengedit dan menghapus pesan | Berfungsi | Langsung tampil juga di layar lawan bicara |
| Grup biasa (membuat, menambah anggota, mengeluarkan, nama) | Berfungsi | Anggota ditambahkan langsung dari info grup |
| Mengirim foto, foto profil | Berfungsi | Disimpan dalam satu ukuran, yaitu ukuran aslinya |
| Bot — @BotFather, HTTP Bot API, webhook, bot MTProto | Berfungsi | Tombol, callback, menu perintah, foto, grup |
| Halaman admin, pengaturan operasional | Berfungsi | Hanya terbuka di 127.0.0.1 milik server |
| Situs web dalam 10 bahasa, halaman tautan nama pengguna dan undangan | Berfungsi | Dokumentasi pengembang juga tersedia dalam 10 bahasa |
| Kanal, supergrup | Belum | Mungkin tidak tampil dengan benar di aplikasi |
| Berkas dokumen, video, dan suara, album | Belum | Jika dikirim, ditolak dengan MEDIA_INVALID |
Teks berformat (tebal, miring), parse_mode pada bot | Belum | Dikirim apa adanya. Perintah, sebutan, tautan, dan tagar ditandai otomatis |
| Panggilan suara dan video, obrolan rahasia | Belum | |
| Verifikasi dua langkah (kata sandi cloud) | Belum | Ditolak meskipun Anda mencoba mengaturnya |
| Aplikasi ponsel, notifikasi push | Belum | Saat ini hanya aplikasi desktop macOS |
| Bergabung ke grup lewat tautan undangan | Belum | Tautannya bisa dibuat, tetapi mengekliknya tidak membuat Anda menjadi anggota |
Mode inline (@bot kata kunci), pembayaran, game | Belum |
Hubungan dengan Telegram
Pabal adalah server tersendiri yang mengikuti protokol terbuka Telegram. Pabal tidak berhubungan dengan perusahaan Telegram dan juga tidak tersambung ke server Telegram.
- Yang kompatibel: MTProto 2.0 (4 jenis transport, handshake, pengikatan kunci sementara), format permintaan dan respons layer 216, serta format alamat, permintaan, respons, dan error HTTP Bot API. Hal ini sudah dipastikan dengan menyambungkan Telegram Desktop resmi 6.2.6 tanpa modifikasi (hanya alamat server dan kunci publiknya yang diganti).
- Yang berbeda: akun dan data terpisah untuk setiap server. ID pengguna, ID pesan, dan ID berkas hanya bermakna di dalam server ini. Token bot yang dipakai di Telegram tidak bisa digunakan; Anda harus mendapatkan token baru dari @BotFather di Pabal.
Format tautan
Aplikasi dan server membuat tautan dengan https://pabal.me/. Jika dibuka di peramban, muncul halaman kecil yang membuka aplikasi.
| Tautan | Arti | Alamat yang dibuka di aplikasi |
|---|---|---|
pabal.me/<nama_pengguna> | Membuka obrolan dengan orang atau bot | tg://resolve?domain=<nama_pengguna> |
pabal.me/+<kode_undangan> | Tautan undangan grup (aplikasi terbuka, tetapi bergabung lewat tautan belum berfungsi) | tg://join?invite=<kode_undangan> |
pabal.me/joinchat/<kode_undangan> | Tautan undangan format lama (artinya sama) | tg://join?invite=<kode_undangan> |
Nama pengguna terdiri dari 5–32 huruf Latin, angka, dan garis bawah, dan diawali huruf Latin (nama pengguna bot diakhiri bot). Nama yang sama dengan jalur yang dipakai situs, seperti docs, admin, atau health, tidak bisa dibuka lewat tautan.
Model keamanan
- Aplikasi ↔ server: dienkripsi dengan MTProto 2.0. Aplikasi dibangun dengan kunci publik RSA server tertanam di dalamnya, sehingga server lain tidak bisa berpura-pura menjadi server Pabal. Obrolan setara dengan "obrolan cloud" di Telegram, sehingga server dapat membaca isinya (bukan enkripsi ujung ke ujung). Itulah sebabnya server harus dijalankan oleh orang yang bisa dipercaya.
- Bot ↔ server: Bot API hanya dibuka lewat HTTPS. Token bot adalah kata sandi bot — jika bocor, ganti dengan
/revokedi @BotFather. Token lama dan koneksi yang tersambung dengan token itu langsung diputus. - Server → webhook: server hanya mengirim permintaan ke webhook yang memakai HTTPS dan beralamat publik. Alamat internal seperti jaringan privat, loopback, atau metadata cloud ditolak. Bot dapat memakai
secret_tokenuntuk memastikan permintaan benar-benar datang dari server Pabal. - Administrasi: halaman admin hanya terbuka di server itu sendiri (127.0.0.1), dan datanya hanya bisa dilihat dengan token. Operator masuk lewat tunnel SSH.
- Penyimpanan: auth key disimpan apa adanya di basis data karena server perlu memakainya untuk mendekripsi. Basis data dan cadangannya harus dijaga seketat kunci privat RSA server.
Istilah
| Istilah | Arti |
|---|---|
| MTProto | Protokol terenkripsi antara aplikasi dan server yang dibuat oleh Telegram. Pabal memakai versi 2.0. |
| Layer | Edisi format permintaan dan respons yang dipertukarkan di atas MTProto. Pabal memakai layer 216. |
| Auth key (kunci autentikasi) | Rahasia 2048 bit yang dibuat aplikasi bersama server saat pertama kali tersambung. Status masuk melekat pada kunci ini. |
| DC | Nomor pusat data Telegram. Di Pabal, satu server menangani semua DC 1–5. |
| Update, pts | Perubahan seperti pesan baru, suntingan, atau penghapusan. pts adalah nomor urut perubahan per pengguna, yang memberi tahu perangkat yang sempat terputus apa saja yang terlewat. |
| Peer | Lawan bicara — orang, bot, atau grup. |
| Token bot | String berbentuk <ID_bot>:<rahasia>. Dimasukkan ke alamat Bot API untuk membuktikan identitas bot. |
| Webhook | Cara ketika server mengirim update baru ke alamat HTTPS bot, alih-alih bot yang datang mengambilnya. |