Telegram Bot untuk manajemen Hotspot MikroTik via REST API. Buat, kelola, dan hapus user hotspot langsung dari Telegram.
Pengganti MiHKMon yang sudah outdated dan buggy di RouterOS 7.x.
| Command | Deskripsi |
|---|---|
/start |
Menu utama dengan inline keyboard |
/adduser |
Buat user (auto generate username/password) |
/adduser nama |
Buat user manual (username = password) |
/adduser user pass |
Buat user dengan custom user & password |
/voucher |
Generate batch voucher (3/5/10/20 sekaligus) |
/listuser |
Lihat semua user dengan pagination |
/deleteuser |
Hapus user + kick session aktif |
/active |
Lihat user yang sedang online |
/info |
Info server (CPU, RAM, uptime) |
/income |
Laporan pendapatan (harian/mingguan/bulanan) |
/reboot |
Reboot MikroTik (dengan konfirmasi) |
/help |
Panduan penggunaan |
- π Admin-only β hanya Telegram ID tertentu yang bisa akses
- π WireGuard β koneksi aman VPS β MikroTik (support CGNAT)
- β‘ REST API β native RouterOS 7.x, tanpa library tambahan
- π§Ή Auto-cleanup β user otomatis dihapus saat masa aktif habis
- π° Income tracking β pendapatan dihitung saat user pertama kali login
- π« Batch Voucher β generate banyak user sekaligus
- π Username = Password β format simple, tinggal copy
- π Manual & Auto β bisa buat user custom atau auto generate
- π WebFig Proxy β akses MikroTik WebFig dari mana saja via HTTPS
- π Reboot β restart router dari Telegram dengan auto status check
| Profile | Harga | Masa Aktif | Speed |
|---|---|---|---|
| 1 Hari | Rp 3.000 | 1 hari | β10M / β3M |
| 2 Hari | Rp 5.000 | 2 hari | β15M / β3M |
| 7 Hari | Rp 15.000 | 7 hari | β20M / β4M |
| Keluarga | Rp 50.000 | 30 hari | β20M / β5M |
Edit
src/utils.jsuntuk menyesuaikan harga dan profile.
- MikroTik RouterOS 7.x (tested on 7.21.3)
- VPS Ubuntu 20.04+ dengan Node.js 18+
- WireGuard tunnel antara VPS dan MikroTik
- Telegram Bot Token dari @BotFather
Bot berjalan di VPS dan berkomunikasi dengan MikroTik melalui WireGuard tunnel.
π Panduan WireGuard (klik untuk expand)
# Install WireGuard
sudo apt update && sudo apt install wireguard -y
# Generate keys
wg genkey | tee /etc/wireguard/server_private.key | wg pubkey > /etc/wireguard/server_public.key
# Lihat keys
cat /etc/wireguard/server_private.key
cat /etc/wireguard/server_public.keyEdit config:
sudo nano /etc/wireguard/wg0.conf[Interface]
PrivateKey = <PRIVATE_KEY_VPS>
Address = 10.10.10.1/24
ListenPort = 51820
PostUp = iptables -A INPUT -p udp --dport 51820 -j ACCEPT
PostDown = iptables -D INPUT -p udp --dport 51820 -j ACCEPT
[Peer]
# MikroTik
PublicKey = <PUBLIC_KEY_MIKROTIK>
AllowedIPs = 10.10.10.2/32sudo systemctl enable --now wg-quick@wg0# Buat WireGuard interface
/interface wireguard add name=wg-vps listen-port=13231
# Lihat public key (catat untuk config VPS)
/interface wireguard print
# Tambah peer (VPS)
/interface wireguard peers add \
interface=wg-vps \
public-key="<PUBLIC_KEY_VPS>" \
endpoint-address=<IP_PUBLIC_VPS> \
endpoint-port=51820 \
allowed-address=10.10.10.0/24 \
persistent-keepalive=25
# Assign IP
/ip address add address=10.10.10.2/24 interface=wg-vps
# Firewall
/ip firewall filter add chain=input action=accept protocol=udp dst-port=13231
Penting: Public key saling tukar!
- VPS config
[Peer]β isi public key MikroTik- MikroTik peer β isi public key VPS
# Enable www service (allow dari WireGuard + lokal)
/ip service set www address=10.10.10.1/32,192.168.88.0/24 disabled=no port=80
# Buat user khusus API
/user add name=mikrobot password=PASSWORD_KUAT group=full
# Dari VPS
ping 10.10.10.2
curl -u mikrobot:PASSWORD http://10.10.10.2/rest/system/resource# Clone repository
git clone https://github.com/username/mikrobot.git /opt/mikrobot
cd /opt/mikrobot
# Install dependencies
npm install
# Copy dan edit config
cp .env.example .env
nano .env# Telegram Bot (dari @BotFather)
BOT_TOKEN=your_telegram_bot_token
ADMIN_IDS=123456789
# MikroTik (via WireGuard)
ROUTER_HOST=10.10.10.2
ROUTER_PORT=80
ROUTER_USER=mikrobot
ROUTER_PASS=your_password
# Settings
USERNAME_LENGTH=6
TIMEZONE=Asia/Jakarta| Variable | Deskripsi |
|---|---|
BOT_TOKEN |
Token dari @BotFather |
ADMIN_IDS |
Telegram user ID admin (pisahkan dengan koma untuk multiple admin) |
ROUTER_HOST |
IP MikroTik di WireGuard network |
ROUTER_PORT |
Port REST API (default: 80) |
ROUTER_USER |
Username API di MikroTik |
ROUTER_PASS |
Password API |
USERNAME_LENGTH |
Panjang username yang di-generate (default: 6) |
TIMEZONE |
Timezone untuk format tanggal |
π‘ Dapatkan Telegram ID kamu dengan mengirim pesan ke @userinfobot
# Test run
node src/index.js
# Production dengan PM2
npm install -g pm2
pm2 start src/index.js --name mikrobot
pm2 startup
pm2 saveKalau ISP pakai CGNAT, IP publik MikroTik bisa berubah setelah mati listrik/reboot. Pasang watchdog agar tunnel auto-recover:
# Copy script
sudo cp scripts/wg-watchdog.sh /opt/wg-watchdog.sh
sudo chmod +x /opt/wg-watchdog.sh
# Test
sudo /opt/wg-watchdog.sh
# Pasang cron (cek setiap 5 menit)
sudo crontab -eTambahkan baris ini:
*/5 * * * * /opt/wg-watchdog.sh
π Log watchdog bisa dilihat di
/var/log/wg-watchdog.log
Auto generate:
- Kirim
/adduseratau tap "β Tambah User" di menu - Pilih profile (1 Hari, 2 Hari, 7 Hari, Keluarga)
- Bot auto-generate username & password (format:
abc123/abc123)
Manual username:
- Kirim
/adduser namaβ username=password=nama - Atau
/adduser user passβ custom username & password - Pilih profile, selesai!
- Kirim
/voucher - Pilih profile
- Pilih jumlah (3, 5, 10, atau 20)
- Bot generate semua voucher sekaligus
- Kirim
/deleteuserβ pilih dari daftar - Atau langsung:
/deleteuser username123 - User yang sedang online akan di-kick otomatis
- Kirim
/incomeβ pilih periode (hari ini, minggu ini, bulan ini, atau total) - Income hanya dihitung saat user pertama kali login ke hotspot
- Breakdown per profile: jumlah Γ harga
- Bot cek setiap 1 jam apakah ada user yang masa aktifnya sudah habis
- User expired otomatis di-kick + dihapus dari MikroTik
- Admin mendapat notifikasi di Telegram setiap kali ada user yang dihapus
Edit file src/utils.js:
export const PROFILES = {
'1hari': {
name: '1hari',
label: '1 Hari',
'session-timeout': '1d 00:00:00',
'rate-limit': '3M/10M',
price: 3000, // Harga dalam Rupiah
validityDays: 1, // Masa aktif (hari)
},
// Tambah profile baru di sini...
};
β οΈ Nama profile (name) harus sama persis dengan user-profile di MikroTik.
ββββββββββββββββ βββββββββββββββββββββ ββββββββββββββββ
β Admin β β VPS Ubuntu β β MikroTik β
β (Telegram) ββββββΆβ MikroBot (Node) ββββββΆβ RouterOS 7 β
β βββββββ Grammy + Axios βββββββ REST API β
ββββββββββββββββ β WireGuard Client β β WireGuard β
β β° Scheduler β ββββββββββββββββ
βββββββββββββββββββββ
10.10.10.1 10.10.10.2
User dibuat β Belum login (income: 0)
β Pertama login ke hotspot
β Scheduler deteksi di active sessions
β Income tercatat β
mikrobot/
βββ package.json
βββ .env.example
βββ .gitignore
βββ README.md
βββ scripts/
β βββ wg-watchdog.sh # Auto-recovery WireGuard tunnel
βββ hotspot/ # Template login MikroTik
β βββ login.html # Login (2 tab: Voucher + Manual)
β βββ alogin.html # After login + status
β βββ status.html # Status koneksi
β βββ logout.html # Logout + summary
β βββ error.html # Error page
β βββ redirect.html # Redirect page
β βββ md5.js # CHAP authentication
βββ src/
β βββ index.js # Entry point
β βββ bot.js # Grammy bot + admin middleware
β βββ config.js # Environment config
β βββ mikrotik.js # MikroTik REST API client
β βββ database.js # JSON-based logging + income tracking
β βββ scheduler.js # Auto-cleanup + activation checker
β βββ utils.js # Helpers + profile/price definitions
β βββ commands/
β βββ start.js # /start
β βββ adduser.js # /adduser (auto & manual)
β βββ voucher.js # /voucher
β βββ listuser.js # /listuser
β βββ deleteuser.js # /deleteuser
β βββ activeuser.js # /active
β βββ serverinfo.js # /info
β βββ income.js # /income
β βββ reboot.js # /reboot
β βββ help.js # /help
βββ data/
βββ mikrobot.json # Database (auto-created)
- REST API di-bind hanya ke IP WireGuard (
10.10.10.1/32) - Hanya admin (by Telegram ID) yang bisa mengakses bot
- Semua traffic terenkripsi melalui WireGuard tunnel
- Gunakan user API terpisah di MikroTik (jangan pakai admin)
- WireGuard watchdog auto-recovery jika tunnel putus (CGNAT)
Akses MikroTik WebFig dari mana saja melalui domain HTTPS, tanpa perlu expose port router langsung.
Browser β https://mikro.domain.com β Nginx (VPS) β WireGuard β MikroTik WebFig (10.10.10.2:80)
Tambahkan A record di DNS provider:
mikro.domain.com β IP_VPS
Jika pakai Cloudflare, set DNS Only (grey cloud) agar SSL certbot bisa jalan.
sudo nano /etc/nginx/sites-available/mikro-webfigserver {
listen 80;
server_name mikro.domain.com;
# Basic auth (wajib! jangan expose WebFig tanpa password)
auth_basic "MikroTik WebFig";
auth_basic_user_file /etc/nginx/.htpasswd-mikro;
location / {
proxy_pass http://10.10.10.2/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
# WebSocket support (untuk WebFig terminal)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}# Enable site
sudo ln -s /etc/nginx/sites-available/mikro-webfig /etc/nginx/sites-enabled/
# Buat password file
sudo apt install apache2-utils -y
sudo htpasswd -c /etc/nginx/.htpasswd-mikro admin
# Test & reload
sudo nginx -t && sudo systemctl reload nginxsudo certbot --nginx -d mikro.domain.comBuka https://mikro.domain.com di browser β masukkan basic auth β WebFig muncul.
- Selalu pakai basic auth β WebFig punya login sendiri, tapi basic auth menambah layer proteksi
- Gunakan password kuat untuk basic auth dan user MikroTik
- Jangan disable HTTPS β semua traffic harus terenkripsi
- Traffic mengalir: Browser β HTTPS β Nginx β WireGuard (encrypted) β MikroTik
- Pertimbangkan whitelist IP di nginx jika hanya diakses dari lokasi tertentu:
# Tambahkan di dalam block server
allow 123.456.789.0/24; # IP kantor/rumah
deny all;MIT License β Bebas dipakai dan dimodifikasi.
- Grammy β Telegram Bot framework
- MikroTik REST API β RouterOS 7.x
- WireGuard β VPN tunnel