Telegram Expiry Notifier + Reset Button — Deploy ke Server
Overview
Mengganti direct call Telegram API dari RouterOS dengan PHP intermediary agar bisa kirim inline button "Reset" untuk user hotspot yang expired.
Arsitektur
RouterOS scheduler (Family)
↓ call HTTP GET
↓
notify-expire.php (server)
↓ POST ke Telegram API
↓
⚠️ User X expired [🔄 Reset] (ke topik Notif Expire)
↓ admin klik "Reset"
↓ callback_query = "reset_X" ke Bot API
↓
tg-cb-poll scheduler (router, tiap 60s)
↓ call HTTP GET
↓
telegram-cb.php (server)
↓ polling getUpdates → proses callback
↓ RouterOS API: set limit-uptime=0, comment="", reset-counters
↓
✅ User X has been reset (ke topik Notif Expire)
Files
| File | Fungsi |
|---|---|
notify-expire.php |
Kirim notif + inline button ke Telegram |
telegram-cb.php |
Polling callback query + eksekusi reset |
setup.sh |
Setup script untuk server (install PHP + deploy) |
Prerequisites (Server)
- Linux server (tested on Ubuntu/Debian)
- PHP 7.4+ dengan
curlextension - Akses keluar ke
api.telegram.org(port 443) - Akses ke RouterOS API (
192.168.100.2:8728) curlbinary di PATH (untuk internal call dari PHP ke Telegram)
Setup Cepat
# 1. Copy files ke server
scp notify-expire.php player@somewhere:/home/player/telegram-notif/
scp telegram-cb.php player@somewhere:/home/player/telegram-notif/
scp setup.sh player@somewhere:/home/player/telegram-notif/
# 2. SSH ke server
ssh player@somewhere
# 3. Run setup
cd ~/telegram-notif
chmod +x setup.sh
./setup.sh
# 4. Start PHP built-in server (background)
nohup php -S 0.0.0.0:8080 -t /home/player/telegram-notif > /tmp/telegram-notif.log 2>&1 &
Update RouterOS Scheduler
A. Family scheduler — notifikasi
Ganti on-event:
# OLD
/tool fetch url=("https://api.telegram.org/bot" . $bot . "/sendMessage?chat_id=" . $chat . "&text=" . $msg) http-method=get keep-result=no
# NEW — arahkan ke IP Tailscale server
/tool fetch url=("http://100.100.31.46:8080/notify-expire.php?key=msr-2026-reset&name=" . $name) http-method=get keep-result=no
B. Tambah scheduler polling callback
/system scheduler add name=tg-cb-poll interval=00:01:00 start-time=startup on-event=":delay 10s;/tool fetch url=\"http://100.100.31.46:8080/telegram-cb.php?key=msr-2026-reset\" http-method=get keep-result=no" disabled=no
Secret Key
msr-2026-reset — shared secret di URL parameter key. Diganti sesuai kebutuhan.
Bot Config
- Token:
5115036608:AAGeyXVq5eNvdAkaCQHU9NfH16uAAiSKiuk - Group:
-1002554941429(laporkan) - Topic ID:
42(Notif Expire)
RouterOS Credentials (untuk callback reset)
- IP:
192.168.100.2 - User:
mi4 - Password:
m14
Troubleshooting
Logs:
tail -f /tmp/telegram-notif.log
Test notifikasi:
curl "http://localhost:8080/notify-expire.php?key=msr-2026-reset&name=test_user"
Test reset langsung:
curl "http://localhost:8080/telegram-cb.php?key=msr-2026-reset&test=test_user"
PHP curl extension:
sudo apt install php-curl
File Reference
Source files di C:\Users\Admin\dev\Mikhmon Server\mikhmon\:
notify-expire.phpprocess/telegram-cb.phplib/routeros_api.class.php(dependency untuk koneksi ke RouterOS)