# Cài cảnh báo Zalo Bot cho MikroTik

Bản này dành cho RouterOS 6.49.x và 7. Nó thay bộ Telegram đang dùng bằng Zalo, nhưng giữ nguyên tên `pppoe-monitor`, scheduler, state, ngưỡng và ba nhóm cảnh báo. Không chạy song song hai kênh.

Hai file cài đặt: [zalo-pppoe-monitor-install.rsc](../scripts/zalo-pppoe-monitor-install.rsc) và [zalo-network-alerts-install.rsc](../scripts/zalo-network-alerts-install.rsc).

## 1. Tạo bot và lấy Chat ID

Mở Zalo, tìm OA **Zalo Bot Manager**, chọn **Tạo bot** để mở **Zalo Bot Creator**. Đặt tên bắt đầu bằng `Bot`, tạo xong nhận **Bot Token** qua tin nhắn Zalo. Xem [hướng dẫn chính thức](https://docs.zaloplatforms.com/docs/BOT/create_bot) và [cách lấy Chat ID trong dự án](tao-bot.md). Thêm bot vào chat cá nhân hoặc group cần nhận cảnh báo. Gửi một tin nhắn vào chat đó, sau đó xem `message.chat.id` từ API [getUpdates](https://docs.zaloplatforms.com/docs/BOT/apis/getUpdates).

Chỉ dùng `getUpdates` khi bot **không** đặt webhook; Zalo quy định hai cơ chế này loại trừ nhau. Không đưa Bot Token vào ảnh chụp, log, Git hoặc URL công khai.

## 2. Chuẩn bị TLS và CA

Cả tải installer lẫn gửi Zalo đều bắt buộc `check-certificate=yes`. RouterOS 7 có thể dùng kho CA tích hợp nếu đang cập nhật; RouterOS 6 thiếu CA phải import CA tin cậy từ nhà phát hành/chứng chỉ chính thức rồi đặt `trusted=yes`. Xem [Certificates của MikroTik](https://help.mikrotik.com/docs/spaces/ROS/pages/2555969/Certificates) và [Fetch](https://help.mikrotik.com/docs/spaces/ROS/pages/8978514/Fetch). Không đổi sang `check-certificate=yes`.

## 3. Cài nhanh PPPoE Monitor

Trước khi làm, backup router và bật Safe Mode. Với RouterOS 7, kiểm tra `/system/device-mode/print`; cần `fetch=yes` và `scheduler=yes`.

```routeros
:global zaloMonInstallBotToken "BOT_TOKEN"; :global zaloMonInstallChatId "CHAT_ID"
```

Nếu WAN không phải tên mặc định, khai báo thêm. `pppoe-out2` là tùy chọn.

```routeros
:global zaloMonInstallPppoe1 "WAN1"; :global zaloMonInstallPppoe2 "WAN2"
```

```routeros
/tool fetch url="https://mikrotik.thachanhitt.vn/zalo-pppoe-monitor-install.rsc" dst-path="zalo-pppoe-monitor-install.rsc" check-certificate=yes; /import file-name="zalo-pppoe-monitor-install.rsc"; /file remove [find where name="zalo-pppoe-monitor-install.rsc"]
```

Installer tắt tạm ba scheduler mở rộng và DHCP Alert cũ, thay các script cùng tên bằng bản Zalo, giữ nguyên state PPPoE, đặt marker `pppMonNotifyChannel="zalo"`, rồi xóa credential Telegram còn lưu trong global RAM. Token Zalo không được ghi log.

## 4. Gửi thử và kiểm tra PPPoE

```routeros
/system script run pppoe-monitor
/log print where message~"PPPoE-MON"
:global pppMonNotifyChannel; :put $pppMonNotifyChannel
```

Sender dùng `POST` JSON với `chat_id` và `text` tới Zalo [sendMessage](https://docs.zaloplatforms.com/docs/BOT/apis/sendMessage). Nội dung rỗng hoặc quá 2.000 ký tự bị từ chối; chỉ response có `"ok":true` mới tính gửi thành công.

Để kiểm tra DOWN/phục hồi thật, ngắt đúng một PPPoE, chờ đủ 3 lần đo, sau đó khôi phục. Đừng dùng kết quả import hoặc log tĩnh để kết luận runtime đã đạt.

## 5. Cài cảnh báo mở rộng

Chỉ chạy sau khi marker đã là `zalo`.

```routeros
/tool fetch url="https://mikrotik.thachanhitt.vn/zalo-network-alerts-install.rsc" dst-path="zalo-network-alerts-install.rsc" check-certificate=yes; /import file-name="zalo-network-alerts-install.rsc"; /file remove [find where name="zalo-network-alerts-install.rsc"]
```

Ba nhóm được tạo lại ở `disabled=yes`. Chạy thử một nhóm, xem log/Zalo, rồi bật riêng nhóm cần dùng:

```routeros
/system script run network-alert-router
/system scheduler enable [find where name="network-alert-router-every-1m"]
/system scheduler enable [find where name="network-alert-wan-every-1m"]
/system scheduler enable [find where name="network-alert-lan-security-every-1m"]
```

Kiểm tra DHCP Alert trước khi bật nhóm LAN Security:

```routeros
/ip dhcp-server alert print detail
```

## Cài thủ công / source

Không dán source dài trực tiếp vào Terminal. Tạo các script có đúng tên runtime rồi dán source từ file tương ứng:

- [zalo-pppoe-monitor-config.rsc](../scripts/manual/zalo-pppoe-monitor-config.rsc) → `pppoe-monitor-config` (thay `BOT_TOKEN`, `CHAT_ID`).
- [zalo-pppoe-monitor.rsc](../scripts/manual/zalo-pppoe-monitor.rsc) → `pppoe-monitor`.
- [zalo-pppoe-monitor-reset.rsc](../scripts/manual/zalo-pppoe-monitor-reset.rsc) → `pppoe-monitor-reset`.
- [zalo-network-alert-config.rsc](../scripts/manual/zalo-network-alert-config.rsc) → `network-alert-config`.
- [network-alert-router.rsc](../scripts/manual/network-alert-router.rsc), [network-alert-wan.rsc](../scripts/manual/network-alert-wan.rsc), [network-alert-lan-security.rsc](../scripts/manual/network-alert-lan-security.rsc), [network-alert-lan-dhcp.rsc](../scripts/manual/network-alert-lan-dhcp.rsc) → các script cùng tên.

Tạo scheduler `pppoe-monitor-every-3m` chạy `/system script run pppoe-monitor`; các scheduler nhóm mở rộng giữ Disabled đến khi thử xong.
