Dokumentasi pengembang
Bahasa Indonesia

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

Orang · program Pintu masuk Server Pabal (HunsTelegram) Aplikasi PabalPabal.app · Telegram Program botpustaka · curl Perambansitus · dokumen · tautan MTProto:8443 · terenkripsi HTTPS :443Caddy (TLS otomatis) GatewayMTProto 2.0 · layer 216 Bot API · webhook/bot<token>/<metode> Situs web · dokumen/ · /docs/ · /nama_pengguna Layanan kotak pesan · daftar obrolan update real-time (pts) grup · foto · profil kode daftar · auth key @BotFather · registri bot halaman admin (127.0.0.1) PostgreSQLpenyimpananevent Berkasfoto aslidata/media Bot MTProto POST webhook (HTTPS)
Susunan Pabal — dua pintu masuk, satu tempat pencatatan

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

FiturStatusCatatan
Pendaftaran dan masuk (nomor telepon + kode)BerfungsiOperator memilih pengiriman kode lewat SMS, email, atau disampaikan oleh admin
Obrolan 1:1, penerimaan real-time, banyak perangkatBerfungsiPerangkat yang sempat mati akan menyusul yang terlewat begitu dinyalakan lagi
Mengedit dan menghapus pesanBerfungsiLangsung tampil juga di layar lawan bicara
Grup biasa (membuat, menambah anggota, mengeluarkan, nama)BerfungsiAnggota ditambahkan langsung dari info grup
Mengirim foto, foto profilBerfungsiDisimpan dalam satu ukuran, yaitu ukuran aslinya
Mengirim berkas (semua format)BerfungsiNama dan formatnya tetap utuh. Berkas di atas 10MB memakai upload.saveBigFilePart, batas bawaan 2GB
Bot — @BotFather, HTTP Bot API, webhook, bot MTProtoBerfungsiTombol, callback, menu perintah, foto, berkas, grup
Halaman admin, pengaturan operasionalBerfungsiHanya terbuka di 127.0.0.1 milik server
Situs web dalam 10 bahasa, halaman tautan nama pengguna dan undanganBerfungsiDokumentasi pengembang juga tersedia dalam 10 bahasa
Panggilan 1:1BerfungsiPanggilan antara jaringan yang berbeda bergantung pada pengaturan relay (TURN) di server
Notifikasi push — AndroidBerfungsiNotifikasi pesan dan dering panggilan meskipun aplikasi sedang tertutup. Operator harus menyiapkan Firebase (Instalasi server)
Notifikasi — Mac, WindowsBerfungsiDitampilkan sebagai notifikasi komputer selama aplikasi terbuka (tanpa push)
Melihat dan mengeluarkan perangkat yang masuk (Perangkat di pengaturan)Berfungsi — belum dicek dengan aplikasi sungguhanPerangkat 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 sungguhanObrolan, 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 teleponMati secara bawaanJika 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, supergrupBelumMungkin tidak tampil dengan benar di aplikasi
Pesan video dan suaraBelumBisa dikirim sebagai berkas, tetapi tidak diputar di dalam aplikasi
Album (beberapa kiriman dalam satu kesatuan)BelumJika Anda mengirim beberapa sekaligus, semuanya tetap sampai, tetapi ditampilkan satu per satu dan tidak disatukan
Teks berformat (tebal, miring), parse_mode pada botBelumDikirim apa adanya. Perintah, sebutan, tautan, dan tagar ditandai otomatis
Panggilan grup, obrolan rahasiaBelum
Verifikasi dua langkah (kata sandi cloud)BelumDitolak meskipun Anda mencoba mengaturnya
Aplikasi iPhoneSedang disiapkanVersi 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 undanganBelumTautannya bisa dibuat, tetapi mengekliknya tidak membuat Anda menjadi anggota
Mode inline (@bot kata kunci), pembayaran, gameBelum
Bot suara (jika menelepon bot, AI yang menjawab)Sedang disiapkanBaru 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 disiapkanHanya 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 disiapkanTeks layar konfirmasi belum ditinjau secara hukum — Menggunakan aplikasi — bot suara
Panggilan dari bot (bot yang Anda izinkan menelepon Anda dengan suara AI)MatiMenunggu 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.

Aplikasi dan server membuat tautan dengan https://pabal.me/. Jika dibuka di peramban, muncul halaman kecil yang membuka aplikasi.

TautanArtiAlamat yang dibuka di aplikasi
pabal.me/<nama_pengguna>Membuka obrolan dengan orang atau bottg://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 /revoke di @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_token untuk 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

IstilahArti
MTProtoProtokol terenkripsi antara aplikasi dan server yang dibuat oleh Telegram. Pabal memakai versi 2.0.
LayerEdisi 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.
DCNomor pusat data Telegram. Di Pabal, satu server menangani semua DC 1–5.
Update, ptsPerubahan 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 pushPemberitahuan 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.
PeerLawan bicara — orang, bot, atau grup.
Token botString berbentuk <ID_bot>:<rahasia>. Dimasukkan ke alamat Bot API untuk membuktikan identitas bot.
WebhookCara ketika server mengirim update baru ke alamat HTTPS bot, alih-alih bot yang datang mengambilnya.
Agen AIBot yang membalas pesan dan juga menerima telepon. Di Pabal, ini adalah bot yang suaranya dinyalakan (sedang disiapkan).
Bot suaraBot yang bisa ditelepon orang. Yang menjawab panggilan bukan kode pemilik bot, melainkan model suara AI.
Gateway suaraKomponen 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 streamCara kerja bot suara di mana server pengembang bot, bukan model AI, yang menerima audio panggilan secara langsung.
Simpan percakapanJika penelepon memilihnya, setelah panggilan selesai percakapannya disimpan sebagai teks hanya di obrolannya sendiri. Teks itu tidak dikirim ke bot maupun pemilik bot.