Dokumentasi pengembang
Bahasa Indonesia

Menjalankan server

Administrasi dan pengaturan

Halaman admin, pengiriman kode pendaftaran (SMS dan email), nilai pengaturan server, pencadangan, dan keamanan โ€” referensi untuk operator.

Server dilengkapi halaman admin yang dibuka lewat peramban. Di sana Anda melihat status server, menentukan cara pengiriman kode pendaftaran dan masuk, serta mengelola pengguna dan bot. Dokumen ini adalah referensi yang merangkum halaman admin dan nilai pengaturan server di satu tempat. Jika Anda perlu memasang server terlebih dahulu, lihat Instalasi server.

Tampilan halaman admin berbahasa Korea. Karena itu, saat dokumen ini menyebut tab, tombol, atau pengaturan, label Koreanya dicantumkan di dalam kurung agar mudah ditemukan.

Membuka halaman admin

Halaman admin berada di /admin/ pada port HTTP admin (8080 dalam susunan produksi) dan hanya terbuka di server itu sendiri (127.0.0.1). Operator masuk lewat tunnel SSH.

# di komputer Anda (biarkan tetap berjalan)
ssh -N -L 8080:127.0.0.1:8080 <pengguna>@<server>
# peramban: http://localhost:8080/admin/

# token (di server)
sudo cat /srv/pabal/pabal_server/data/admin-token

Masukkan token, lalu tekan Buka (์—ด๊ธฐ). Peramban mengingat token itu, dan Anda bisa menghapusnya dengan Hapus token (ํ† ํฐ ์ง€์šฐ๊ธฐ) di kanan atas. Jika ingin menentukan token sendiri, berikan TELEGRAM_ADMIN_TOKEN (minimal 16 karakter) โ€” dengan begitu berkas token tidak ditulis.

Isi setiap tab

TabIsiDiperbarui
Dasbor (๋Œ€์‹œ๋ณด๋“œ)Orang, sesi, dan koneksi yang sedang tersambung; jumlah orang, bot, grup, pesan, dan foto; waktu aktif, port, dan DB; JVM; pemeriksaan status. Jika nomor uji menyala, muncul pita peringatan5 detik
Kode pendaftaran (๊ฐ€์ž… ์ฝ”๋“œ)Kode yang sedang menunggu (nomor, cara pengiriman, status pengiriman, kode, sisa waktu, jumlah salah input) dan catatan terbaru. Salin atau batalkan kode3 detik
Pengguna (์‚ฌ์šฉ์ž)Semua akun โ€” nomor telepon, email login (bisa diedit), status tersambung, jumlah perangkat yang masuk, jumlah pesan. Keluar dari semua perangkat (๋ชจ๋“  ๊ธฐ๊ธฐ ๋กœ๊ทธ์•„์›ƒ), Blokir nomor (๋ฒˆํ˜ธ ์ฐจ๋‹จ)10 detik
Bot (๋ด‡)Bot yang dibuat dengan BotFather โ€” pembuatnya, menu perintah, cara tersambung (MTProto ยท polling HTTP ยท alamat webhook dan alasan kegagalannya), jumlah update yang menunggu10 detik
Pengaturan (์„ค์ •)Aturan pendaftaran dan masuk, SMS, email (SMTP), pemblokiran nomor teleponDisimpan manual
Penyimpanan (์ €์žฅ์†Œ)Direktori data dan alamat DB (kata sandi disembunyikan), jumlah dan ukuran foto, jumlah stream penyimpanan per jenis10 detik

Tindakan berbahaya (keluar, blokir, pembatalan kode) baru dijalankan jika ditekan dua kali.

Kode pendaftaran dan masuk

Saat seseorang memasukkan nomor telepon di aplikasi, server membuat kode dan mengirimkannya dengan cara yang dipilih di tab Pengaturan (์„ค์ •).

Cara pengirimanTujuan kodeLayar aplikasi
Halaman admin (๊ด€๋ฆฌ ํ™”๋ฉด)Tab Kode pendaftaran (๊ฐ€์ž… ์ฝ”๋“œ). Operator menyalinnya dan memberitahukannya langsungNomor โ†’ "Kode telah dikirim" โ†’ kode (jika nomornya baru, nama)
SMSPesan teks lewat salah satu dari Twilio ยท Solapi ยท webhookSama dengan halaman admin
Email (์ด๋ฉ”์ผ)Email lewat SMTPNomor โ†’ masukkan email โ†’ "Kode telah dikirim ke email" โ†’ kode
  • Dengan cara email, pendaftaran baru boleh memakai alamat apa saja, dan alamat itu menjadi email login akun tersebut. Akun yang sudah ada hanya menerima kode di email login yang terdaftar โ€” ini mencegah orang masuk dengan memasukkan alamatnya sendiri untuk nomor milik orang lain. Akun lama yang tidak punya email login akan dikirimi lewat SMS (jika sudah diatur) atau lewat halaman admin sebagai gantinya. Email login bisa diisikan di tab Pengguna (์‚ฌ์šฉ์ž).
  • Pengiriman berlangsung di belakang, sehingga aplikasi langsung beralih ke layar kode. Hasil pengiriman (berhasil atau gagal beserta alasannya) muncul di tab Kode pendaftaran.
  • Pendaftaran (memasukkan nama) hanya bisa dilakukan setelah kode dimasukkan dengan benar. Kode yang salah hanya diterima sebanyak batas yang diizinkan; setelah itu, kode yang benar pun ditolak.

Pengaturan โ€” pendaftaran dan masuk

ButirArtiBawaan
Izinkan pendaftaran baru (์ƒˆ ๊ฐ€์ž… ํ—ˆ์šฉ)Jika dimatikan, hanya akun yang sudah ada yang bisa masuk. Nomor baru ditolak sebagai "nomor tidak valid"Nyala
Cara pengiriman kode (์ฝ”๋“œ ์ „๋‹ฌ ๋ฐฉ์‹)Halaman admin (๊ด€๋ฆฌ ํ™”๋ฉด) / SMS / Email (์ด๋ฉ”์ผ)Halaman admin
Tampilkan kode di halaman admin (๊ด€๋ฆฌ ํ™”๋ฉด์— ์ฝ”๋“œ ํ‘œ์‹œ)Tetap menampilkan kode di tab Kode pendaftaran meskipun memakai cara SMS atau email (untuk berjaga-jaga jika pengiriman gagal)Nyala
Nomor uji (ํ…Œ์ŠคํŠธ ๋ฒˆํ˜ธ (+99966โ€ฆ))Sesuai server (์„œ๋ฒ„ ์„ค์ •๋Œ€๋กœ) / Nyalakan (์ผœ๊ธฐ) / Matikan (๋„๊ธฐ). Matikan di produksiSesuai server
Jumlah digit kode (์ฝ”๋“œ ์ž๋ฆฟ์ˆ˜) ยท masa berlaku (์ฝ”๋“œ ์œ ํšจ ์‹œ๊ฐ„)5โ€“6 digit ยท 1โ€“60 menit5 digit ยท 5 menit
Jeda permintaan ulang (์žฌ์š”์ฒญ ๊ฐ„๊ฒฉ) ยท maksimum per hari (๋ฒˆํ˜ธ๋‹น ํ•˜๋ฃจ ์ตœ๋Œ€ ์š”์ฒญ)Detik sampai nomor yang sama bisa menerima kode lagi (0โ€“3600) ยท jumlah maksimum dalam 24 jam (1โ€“1000)60 detik ยท 10 kali
Batas salah input (ํ‹€๋ฆฐ ์ž…๋ ฅ ํ—ˆ์šฉ ํšŸ์ˆ˜)Jika terlampaui, kode itu dikunci (1โ€“20)5 kali

Pengaturan โ€” SMS

PenyediaNilai yang diisiCatatan
Webhook (์›นํ›…)Alamat penerima di Alamat webhook (์›นํ›… ์ฃผ์†Œ, https://โ€ฆ), header Authorization (opsional)Server mengirim POST {"phone":"+8210โ€ฆ","code":"12345","text":"โ€ฆ"}. Berhasil jika 2xx. Untuk menyambungkan ke server SMS Anda sendiri atau layanan lain
TwilioAccount SID, Auth Token, nomor pengirim (๋ฐœ์‹  ๋ฒˆํ˜ธ) atau Messaging Service SIDSeluruh dunia, termasuk nomor luar negeri
Solapi (dahulu CoolSMS)API Key, API Secret, nomor pengirimSMS domestik Korea. Nomor pengirim harus nomor yang sudah didaftarkan sebelumnya di Solapi. Nomor +82 dikirim dalam format 010โ€ฆ

Di dalam teks pesan Anda bisa memasukkan {code} (kode) dan {minutes} (masa berlaku). Nilai bawaan: [ํŒŒ๋ฐœ] ์ธ์ฆ ์ฝ”๋“œ: {code} (artinya "[Pabal] Kode verifikasi: {code}"). Setelah menyimpan, periksa dengan Kirim uji (ํ…Œ์ŠคํŠธ ๋ฐœ์†ก).

Pengaturan โ€” email (SMTP)

LayananServer ยท port ยท keamananNama pengguna ยท kata sandi
Gmailsmtp.gmail.com ยท 587 ยท STARTTLSAlamat Gmail ยท sandi aplikasi (Akun Google โ†’ Keamanan โ†’ Verifikasi 2 Langkah โ†’ Sandi aplikasi)
Naversmtp.naver.com ยท 587 ยท STARTTLSID ยท kata sandi (aktifkan penggunaan POP3/SMTP di pengaturan email Naver)
Relay email internalAlamat relay ยท 25 ยท tidak ada (์—†์Œ)Kosongkan

Alamat pengirim (๋ณด๋‚ด๋Š” ์ฃผ์†Œ) harus alamat yang boleh dipakai mengirim oleh akun SMTP tersebut. Subjek (์ œ๋ชฉ) dan isi (๋ณธ๋ฌธ) juga bisa memakai {code} dan {minutes}.

Mengelola pengguna

  • Keluar dari semua perangkat (๋ชจ๋“  ๊ธฐ๊ธฐ ๋กœ๊ทธ์•„์›ƒ): memutus semua status masuk (auth key) akun tersebut. Dipakai untuk pengguna yang kehilangan perangkatnya.
  • Blokir nomor (๋ฒˆํ˜ธ ์ฐจ๋‹จ): nomor itu tidak bisa menerima kode, dan akun dengan nomor itu langsung dikeluarkan dari semua perangkat. Sama dengan daftar Blokir nomor telepon (์ „ํ™”๋ฒˆํ˜ธ ์ฐจ๋‹จ) di tab Pengaturan (์„ค์ •).
  • Email login (๋กœ๊ทธ์ธ ์ด๋ฉ”์ผ): diperlukan agar akun yang sudah ada bisa masuk lewat email saat memakai cara email.
  • @BotFather adalah bot di dalam server, jadi tidak bisa dikeluarkan.

Mengelola bot

Di tab Bot (๋ด‡) Anda bisa melihat cara tersambung setiap bot โ€” apakah tersambung lewat MTProto, apakah memanggil getUpdates lewat HTTP dalam 1 menit terakhir, serta apa alamat webhook-nya dan apakah sedang gagal (beserta alasannya). Jika jumlah update yang menunggu terus bertambah, program bot sedang berhenti atau webhook-nya sedang gagal. Penghapusan bot dan penerbitan ulang token dilakukan oleh pembuat bot di @BotFather.

Variabel lingkungan

Server membaca berkas pengaturan (server-config.json) lalu menimpanya dengan variabel lingkungan. Berkas compose produksi sudah menetapkan nilai-nilai di bawah, jadi biasanya Anda cukup mengubah .env.

VariabelArtiNilai di compose produksi
TELEGRAM_PORTPort MTProtoMTPROTO_PORT (8443)
TELEGRAM_HOSTAlamat yang didengarkan MTProto0.0.0.0
TELEGRAM_PUBLIC_HOSTAlamat server yang diberitahukan ke aplikasi (help.getConfig)PUBLIC_IP
TELEGRAM_WEB_PORTPort situs web, dokumentasi, Bot API, dan halaman admin8080
TELEGRAM_WEB_HOSTAlamat yang didengarkan port itu. Bawaan 127.0.0.10.0.0.0 (di dalam kontainer; di host hanya dibuka di 127.0.0.1)
TELEGRAM_PUBLIC_URLAlamat situs web. Dipakai untuk tautan (me_url_prefix), tautan undangan, contoh di dokumentasi, dan gambar pratinjauhttps://DOMAIN/
TELEGRAM_DATA_DIRLokasi foto, admin-token, dan operations.json/app/data
TELEGRAM_RSA_KEYJalur kunci privat RSA server (dibuat di awal jika belum ada; kunci publiknya .pub)/app/keys/private.pem
TELEGRAM_DC_IDNomor DC server ini(bawaan image: 1)
TELEGRAM_DB_TYPEmemory ยท h2 ยท postgresqlpostgresql
TELEGRAM_DB_URL, TELEGRAM_DB_USERNAME, TELEGRAM_DB_PASSWORDKoneksi JDBCjdbc:postgresql://pabal-postgres:5432/pabal, pabal, POSTGRES_PASSWORD
TELEGRAM_DB_MAX_POOL_SIZEJumlah koneksi DB20
TELEGRAM_ADMIN_TOKENToken halaman admin (jika kosong, dibuat di data/admin-token)ADMIN_TOKEN
TELEGRAM_TEST_NUMBERSNomor uji +99966โ€ฆ. Khusus pengembanganfalse
TELEGRAM_WEBHOOK_ALLOW_LOCALMengizinkan webhook bot memakai http:// dan alamat internal. Khusus pengembangan(tidak diatur = false)
JAVA_OPTSOpsi JVM (memori)Nilai di .env

Berkas data

BerkasIsiIzin
keys/private.pemKunci privat RSA server. Jangan pernah dikeluarkan dari server600
keys/private.pem.pubKunci publik. Dipakai untuk build aplikasi dan /docs/server-key.pemโ€”
data/admin-tokenToken halaman admin600
data/operations.jsonNilai dari tab Pengaturan (์„ค์ •) โ€” aturan pendaftaran, nilai rahasia SMS dan SMTP, nomor yang diblokir600
data/media/Foto asliโ€”
Tabel events PostgreSQLAkun, obrolan, pesan, status masuk, bot, pengaturan webhook โ€” catatan semua perubahanโ€”

Catatan keamanan

  • Jangan buka port admin langsung ke internet. Caddy dalam susunan produksi memblokir jalur administrasi seperti /admin, /health, dan /metrics dengan 404.
  • Semua permintaan data admin memerlukan Authorization: Bearer <token>, dan halaman dari situs lain tidak bisa membacanya.
  • Nilai rahasia SMS dan SMTP hanya ada di operations.json; halaman dan API hanya memberi tahu "Tersimpan" (์ €์žฅ๋จ). Jika kolom nilai rahasia dibiarkan kosong saat menyimpan, nilai lama tetap dipakai.
  • Token dan nilai rahasia tidak dicetak ke log, dan nomor telepon di log disamarkan. Alamat Bot API (yang memuat token) juga tidak dicatat ke log.
  • Auth key tersimpan di DB, jadi siapa pun yang bisa mengakses DB dapat membuka lalu lintas pengguna. Jaga DB dan cadangannya seketat kunci RSA.

Keterbatasan

  • Kode yang sedang menunggu dan catatan terbaru ada di memori, jadi hilang saat server dimulai ulang (cukup minta lagi dari aplikasi).
  • Pengiriman sungguhan oleh penyedia SMS harus diperiksa dengan akun masing-masing penyedia. Server menyusun permintaan sesuai dokumentasi setiap penyedia.
  • Yang belum ada: penghapusan akun, penghapusan paksa bot, melihat isi pesan, melihat log, dan grafik.