130 lines
3.3 KiB
Markdown
130 lines
3.3 KiB
Markdown
# 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 `curl` extension
|
|
- Akses keluar ke `api.telegram.org` (port 443)
|
|
- Akses ke RouterOS API (`192.168.100.2:8728`)
|
|
- `curl` binary di PATH (untuk internal call dari PHP ke Telegram)
|
|
|
|
### Setup Cepat
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
/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**:
|
|
```bash
|
|
tail -f /tmp/telegram-notif.log
|
|
```
|
|
|
|
**Test notifikasi**:
|
|
```bash
|
|
curl "http://localhost:8080/notify-expire.php?key=msr-2026-reset&name=test_user"
|
|
```
|
|
|
|
**Test reset langsung**:
|
|
```bash
|
|
curl "http://localhost:8080/telegram-cb.php?key=msr-2026-reset&test=test_user"
|
|
```
|
|
|
|
**PHP curl extension**:
|
|
```bash
|
|
sudo apt install php-curl
|
|
```
|
|
|
|
### File Reference
|
|
|
|
Source files di `C:\Users\Admin\dev\Mikhmon Server\mikhmon\`:
|
|
- `notify-expire.php`
|
|
- `process/telegram-cb.php`
|
|
- `lib/routeros_api.class.php` (dependency untuk koneksi ke RouterOS)
|