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 Dinasti Joseon: kabar mendesak diteruskan secara beranting oleh penunggang yang berganti kuda di setiap pos. Pabal.me adalah aplikasi pesan yang mengambil nama itu: aplikasi pesan yang kompatibel dengan Telegram dan dijalankan oleh 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 persis sama dengan Telegram. Aplikasi dan server berkomunikasi dengan MTProto 2.0 (layer 216) yang sama dengan Telegram, sedangkan bot dan server dengan 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.
Berbicara dengan agen AI: jika bot suara dinyalakan, bot membalas pesan dan juga menerima telepon. Anda bisa bertanya lewat teks kepada sebuah bot dari komputer, meneleponnya dari ponsel atau Apple Watch, dan siapa saja bisa membuat bot seperti itu dengan @BotFather. Fitur ini masih disiapkan; apa yang bisa dilakukan dan ke mana data pergi dikumpulkan di Agen AI.
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 punya enkripsi 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 utuh), dan jika mau bisa juga lewat MTProto seperti aplikasi (garis putus-putus biru). Jalur mana pun yang dipakai, akun bot dan kotak pesannya tetap 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.
Gambar di atas adalah jalur pesan. Server yang menyalakan bot suara punya pintu masuk tambahan untuk panggilan — relay panggilan (UDP 3478) dan pintu masuk audio Apple Watch (WSS). Jalur itu digambar di Agen AI.
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 |
| Mengirim berkas (semua format) | Berfungsi | Nama dan formatnya tetap utuh. Berkas di atas 10MB memakai upload.saveBigFilePart, batas bawaan 2GB |
| Bot — @BotFather, HTTP Bot API, webhook, bot MTProto | Berfungsi | Tombol, callback, menu perintah, foto, berkas, 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 |
| Panggilan 1:1 | Berfungsi | Panggilan antara jaringan yang berbeda bergantung pada pengaturan relay (TURN) di server |
| Notifikasi push — Android | Berfungsi | Notifikasi pesan dan dering panggilan meskipun aplikasi sedang tertutup. Operator harus menyiapkan Firebase (Instalasi server) |
| Notifikasi — Mac, Windows | Berfungsi | Ditampilkan sebagai notifikasi komputer selama aplikasi terbuka (tanpa push) |
| Melihat dan mengeluarkan perangkat yang masuk (Perangkat di pengaturan) | Berfungsi — belum dicek dengan aplikasi sungguhan | Perangkat yang masuk kurang dari 24 jam lalu tidak bisa mengeluarkan perangkat lain (aplikasi Android dan desktop tidak menampilkan pemberitahuan apa pun). Sudah dicek dengan tes server; pemeriksaan ujung ke ujung dengan aplikasi sungguhan belum dilakukan — Menggunakan aplikasi — Menjaga akun |
| Ekspor data (aplikasi desktop) | Berfungsi — belum dicek dengan aplikasi sungguhan | Obrolan, foto, berkas, dan informasi akun. Paling banyak tiga kali mulai per hari; jika server dimulai ulang, ekspor diulang dari awal. Masa tunggu Telegram, persetujuan dari perangkat lain, dan catatan ekspor belum ada. Diuji dengan permintaan yang dikirim aplikasi desktop, sesuai urutannya; pemeriksaan ujung ke ujung dengan aplikasi sungguhan belum dilakukan |
| Mengganti nomor telepon | Mati secara bawaan | Jika operator menyalakannya, kode dikirim lewat SMS ke nomor baru (hanya di server yang SMS-nya sudah diatur) — Administrasi dan pengaturan — Kode pendaftaran dan masuk |
| Kanal, supergrup | Belum | Mungkin tidak tampil dengan benar di aplikasi |
| Pesan video dan suara | Belum | Bisa dikirim sebagai berkas, tetapi tidak diputar di dalam aplikasi |
| Album (beberapa kiriman dalam satu kesatuan) | Belum | Jika Anda mengirim beberapa sekaligus, semuanya tetap sampai, tetapi ditampilkan satu per satu dan tidak disatukan |
Teks berformat (tebal, miring), parse_mode pada bot | Belum | Dikirim apa adanya. Perintah, sebutan, tautan, dan tagar ditandai otomatis |
| Panggilan grup, obrolan rahasia | Belum | |
| Verifikasi dua langkah (kata sandi cloud) | Belum | Ditolak meskipun Anda mencoba mengaturnya |
| Aplikasi iPhone | Sedang disiapkan | Versi 1.0 sudah diajukan ke peninjauan App Store (2026-09-23). Versi 1.0 belum punya notifikasi push, jadi pesan diterima selama aplikasi terbuka. Versi 1.1 yang berisi push sedang diuji secara internal (TestFlight) |
| 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 | |
| Bot suara (jika menelepon bot, AI yang menjawab) | Sedang disiapkan | Baru menyala jika server, dokumen hukum, dan aplikasi yang memuat layar konfirmasi sudah siap. Mati di pabal.me, sedang diuji di server pengembangan — Bot suara |
| Aplikasi jam tangan untuk Apple Watch (panggilan bot suara) | Sedang disiapkan | Hanya uji internal (TestFlight). Menelepon bot suara dengan jam tangan tanpa iPhone — Menggunakan aplikasi — Apple Watch |
| Simpan percakapan (percakapan panggilan disimpan sebagai teks di obrolan Anda) | Sedang disiapkan | Teks layar konfirmasi belum ditinjau secara hukum — Menggunakan aplikasi — bot suara |
| Panggilan dari bot (bot yang Anda izinkan menelepon Anda dengan suara AI) | Mati | Menunggu tinjauan hukum; belum ada pula versi aplikasi dengan layar izin — Menggunakan aplikasi — Mengizinkan bot menelepon Anda |
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 6.2.6 resmi 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 atas 5–32 karakter berupa 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. - Server → notifikasi Android: notifikasi push melewati Firebase Cloud Messaging (FCM) milik Google. Isi notifikasi (nama pengirim, pratinjau pesan) dienkripsi server dengan kunci yang hanya dimiliki ponsel tersebut sebelum dikirim, sehingga Google tidak bisa membacanya dan hanya melihat informasi pengiriman seperti token perangkat dan waktu kirim. Operator juga bisa menghilangkan isi pesan sama sekali dari notifikasi.
- Server → notifikasi iPhone: notifikasi push iPhone melewati APNs milik Apple. Sama seperti di Android, yang terlihat oleh Apple hanyalah teks luar "New notification"; pengirim dan isinya dienkripsi dengan kunci yang hanya dimiliki perangkat itu dan dibuka di dalam ponsel. Ini berlaku mulai build aplikasi yang berisi push (1.1).
- Panggilan bot suara (sedang disiapkan): berbeda dengan panggilan antarmanusia, panggilan dengan bot tidak dienkripsi ujung ke ujung. Gateway suara Pabal membuka audio lalu meneruskannya ke model AI, dan dengan mesin bawaan audio panggilan dikirim ke Google di Amerika Serikat (Google Cloud
us-central1). Hal yang bisa ditentukan operator — menjalankan server sendiri, kunci model milik pemilik bot, mode stream, sakelar operator — ada di Agen AI — yang bisa kita tentukan sendiri. - 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. |
| Notifikasi push | Pemberitahuan yang membangunkan ponsel saat aplikasi tertutup atau tidak sedang di layar. Pabal mengirimkannya ke aplikasi Android lewat Google FCM dan ke aplikasi iPhone lewat Apple APNs. |
| 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. |
| Agen AI | Bot yang membalas pesan dan juga menerima telepon. Di Pabal, ini adalah bot yang suaranya dinyalakan (sedang disiapkan). |
| Bot suara | Bot yang bisa ditelepon orang. Yang menjawab panggilan bukan kode pemilik bot, melainkan model suara AI. |
| Gateway suara | Komponen Pabal (pabal-voice) yang menjadi salah satu ujung panggilan menggantikan bot, membuka audio, dan bertukar audio dengan model AI. Berbeda dengan gateway MTProto tempat aplikasi tersambung. |
| Mode stream | Cara kerja bot suara di mana server pengembang bot, bukan model AI, yang menerima audio panggilan secara langsung. |
| Simpan percakapan | Jika penelepon memilihnya, setelah panggilan selesai percakapannya disimpan sebagai teks hanya di obrolannya sendiri. Teks itu tidak dikirim ke bot maupun pemilik bot. |