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 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

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 masuk · 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 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

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
Bot — @BotFather, HTTP Bot API, webhook, bot MTProtoBerfungsiTombol, callback, menu perintah, foto, 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
Kanal, supergrupBelumMungkin tidak tampil dengan benar di aplikasi
Berkas dokumen, video, dan suara, albumBelumJika dikirim, ditolak dengan MEDIA_INVALID
Teks berformat (tebal, miring), parse_mode pada botBelumDikirim apa adanya. Perintah, sebutan, tautan, dan tagar ditandai otomatis
Panggilan suara dan video, obrolan rahasiaBelum
Verifikasi dua langkah (kata sandi cloud)BelumDitolak meskipun Anda mencoba mengaturnya
Aplikasi ponsel, notifikasi pushBelumSaat ini hanya aplikasi desktop macOS
Bergabung ke grup lewat tautan undanganBelumTautannya bisa dibuat, tetapi mengekliknya tidak membuat Anda menjadi anggota
Mode inline (@bot kata kunci), pembayaran, gameBelum

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.

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 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 /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.
  • 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.
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.