Hướng dẫn thực hành · MikroTik

Trong trang này

Tạo Bot Telegram hoặc Zalo

Trang này chỉ chuẩn bị bot và kiểm tra gửi tin. Khi đã có Bot Token, Chat ID và tin thử thành công, quay lại cài cảnh báo. Chọn một kênh; không cần tạo cả hai.

1. Tạo Telegram Bot

  1. Mở @BotFather chính thức trong Telegram. Gửi /newbot.
  2. Nhập tên hiển thị rồi username theo yêu cầu BotFather, thường kết thúc bằng bot. Nếu trùng, chọn tên khác.
  3. Lưu HTTP API token vào trình quản lý mật khẩu. Token này cho phép điều khiển bot; không đưa vào ảnh chụp, Git hoặc website lấy ID không rõ nguồn.
  4. Mở link bot vừa tạo, bấm Start, gửi test. Bot không thể tự bắt đầu chat riêng với người chưa nhắn nó.
  5. Nếu nhận cảnh báo trong group, thêm bot vào đúng group, cấp quyền gửi tin. Gửi /start@TEN_BOT để tạo một update mà bot thấy được ngay cả khi Privacy Mode bật. Không cần tắt Privacy Mode chỉ để gửi cảnh báo.

Hướng dẫn chính thức: BotFathertạo bot.

2. Lấy Telegram Chat ID và gửi thử

Router cần có Internet, giờ đúng, TLS/CA hợp lệ. Mở New Terminal. Thay placeholder trên máy của bạn; chạy hai bước riêng:

:global pppMonInstallBotToken "BOT_TOKEN"
{ :global pppMonInstallBotToken; :local r [/tool fetch url=("https://api.telegram.org/bot" . $pppMonInstallBotToken . "/getUpdates") output=user as-value check-certificate=yes]; :put ($r->"data") }

Trong JSON, tìm tin test hoặc lệnh vừa gửi rồi lấy message.chat.id, không lấy from.id cho group. ID group thường âm; giữ nguyên dấu -. Kết quả [] nghĩa là chưa có update phù hợp: gửi tin mới vào đúng bot/group rồi gọi lại.

Nếu bot đang dùng webhook hoặc có ứng dụng khác đọc updates, lấy chat.id từ ứng dụng đó. Không tự xóa webhook của bot đang dùng cho hệ thống khác. Bộ cảnh báo chỉ gửi tin, không cần webhook, polling hay server chạy 24/7. Telegram getUpdates.

Khai báo Chat ID:

:global pppMonInstallChatId "CHAT_ID"

Gửi một tin thử đến đúng người/group đã chọn:

{ :global pppMonInstallBotToken; :global pppMonInstallChatId; :local r [/tool fetch url=("https://api.telegram.org/bot" . $pppMonInstallBotToken . "/sendMessage") http-method=post http-header-field="Content-Type: application/x-www-form-urlencoded" http-data=("chat_id=" . $pppMonInstallChatId . "&text=TEST_MIKROTIK") output=user as-value check-certificate=yes]; :put ($r->"data") }

Đạt khi: API trả "ok":true và chính chat đích nhận TEST_MIKROTIK. Không coi import monitor hoặc log RUN là test gửi tin thành công.

3. Tạo Zalo Bot

Theo hướng dẫn tạo Bot của Zalo Platforms:

  1. Mở ứng dụng Zalo, tìm OA Zalo Bot Manager.
  2. Trong menu cửa sổ chat, chọn Tạo bot để mở Zalo Bot Creator.
  3. Điền tên theo yêu cầu hiện tại (bắt đầu bằng Bot) và các thông tin bắt buộc, chọn Tạo Bot.
  4. Hệ thống gửi thông tin bot và Bot Token về tài khoản Zalo của bạn. Lưu token riêng tư.
  5. Mở cuộc trò chuyện với bot, gửi test. Nếu dùng group, chỉ dùng khi tài khoản/bot cho phép thêm vào group; lấy ID từ sự kiện thật, không tự đoán từ số điện thoại.

Đây là Bot Token, không phải OA Access Token, App Secret hay ZNS token. Không thêm chữ bot vào token: URL API đã chứa tiền tố đó.

4. Xác thực Zalo, lấy Chat ID và gửi thử

Khai báo token trên router:

:global zaloMonInstallBotToken "BOT_TOKEN"

Kiểm tra token bằng getMe:

{ :global zaloMonInstallBotToken; :local r [/tool fetch url=("https://bot-api.zaloplatforms.com/bot" . $zaloMonInstallBotToken . "/getMe") http-method=post http-header-field="Content-Type: application/json" http-data="{}" output=user as-value check-certificate=yes]; :put ($r->"data") }

Token hợp lệ mới tiếp tục getUpdates. Nếu không có webhook, chạy lệnh rồi gửi một tin mới tới bot trong thời gian chờ:

{ :global zaloMonInstallBotToken; :local r [/tool fetch url=("https://bot-api.zaloplatforms.com/bot" . $zaloMonInstallBotToken . "/getUpdates") http-method=post http-header-field="Content-Type: application/json" http-data="{\"timeout\":\"30\"}" output=user as-value check-certificate=yes]; :put ($r->"data") }

Lấy message.chat.id từ sự kiện vừa nhận. Zalo dùng chuỗi ID, có thể chứa dấu chấm; giữ nguyên toàn bộ. Nếu webhook đã được cấu hình, lấy ID ở webhook đang có; không chạy polling cạnh webhook. Zalo getUpdates.

:global zaloMonInstallChatId "CHAT_ID"

Gửi thử (Chat ID lấy từ API, không nhập dấu nháy hoặc ký tự tự chế):

{ :global zaloMonInstallBotToken; :global zaloMonInstallChatId; :local r [/tool fetch url=("https://bot-api.zaloplatforms.com/bot" . $zaloMonInstallBotToken . "/sendMessage") http-method=post http-header-field="Content-Type: application/json" http-data=("{\"chat_id\":\"" . $zaloMonInstallChatId . "\",\"text\":\"TEST_MIKROTIK\"}") output=user as-value check-certificate=yes]; :put ($r->"data") }

Đạt khi: "ok":true và chat nhận TEST_MIKROTIK. Zalo yêu cầu chat_id dạng chuỗi, text từ 1 tới 2.000 ký tự; sender trong repo gửi văn bản thuần và kiểm tra kết quả. Zalo sendMessage.

5. Xử lý lỗi thường gặp

Biểu hiện Kiểm tra và xử lý
Mode not specified Dán nguyên khối lệnh có URL đầy đủ, không tách các biến local ra nhiều lần Enter.
not allowed by device-mode Làm bước quyền Fetch/Scheduler trong hướng dẫn cài cảnh báo; cần xác nhận vật lý.
Lỗi certificate/TLS Sửa ngày giờ, DNS và CA tin cậy. Không đổi sang check-certificate=yes.
Zalo getMe trả 404/Not Found Kiểm tra đúng Bot Token từ Bot Creator, token còn hiệu lực, URL không lặp bot. Chat ID chưa ảnh hưởng tới getMe.
Telegram 401 Token sai hoặc đã thu hồi. Tạo lại token từ BotFather nếu cần.
400/403 khi gửi Kiểm tra Chat ID, Start, bot có bị chặn/kick hoặc thiếu quyền gửi trong group.
getUpdates rỗng hoặc chờ hết hạn Gửi tin mới đúng bot; kiểm tra webhook và ứng dụng khác đang đọc updates.
API thành công nhưng không thấy tin Đối chiếu đúng chat, bot, tài khoản Zalo/Telegram và thông báo đang tắt/mute.

Thông báo lỗi HTTP có thể không in response body trên một số RouterOS. Chỉ chia sẻ mã lỗi và nội dung đã che token/ID; không dùng /system script print detail để lấy ảnh hỗ trợ vì Source chứa credential.

Nếu lộ token, thu hồi/tạo lại trong công cụ quản lý bot, cập nhật monitor rồi test lại. Không cần reset toàn router để đổi token. Sau khi cài, installer xóa biến nhập tạm nhưng giữ token trong script config để tồn tại qua reboot; admin router vẫn có thể đọc nó.

↑↓ chọn · Enter mở · Esc đóng