Vận hành Bot Telegram tự động hóa tác vụ & Quản lý VPN WireGuard
Kinh nghiệm thực chiến từ dự án IHR Telegram Bot: Kiến trúc kép HTTP API kết hợp Browser automation fallback, điều khiển bật/tắt VPN từ xa và cơ chế tự phục hồi bằng Windows Scheduled Task.
1. Nhu cầu: Trợ lý cá nhân tự động hóa qua Telegram
Telegram là kênh tương tác tức thì thuận tiện nhất để nhận cảnh báo, ra lệnh từ xa cho máy tính cá nhân hoặc máy chủ VPS.
Trong một hệ thống tự động hóa điểm danh / chấm công và vận hành mạng (như dự án IHR Telegram Bot):
- Bot cần thực hiện các tác vụ định kỳ tự động (Check-in, Check-out, kiểm tra trạng thái ca trực).
- Bot có khả năng bật / tắt / chẩn đoán đường truyền WireGuard VPN trực tiếp từ tin nhắn Telegram mà không cần mở ứng dụng VPN thủ công.
- Bot phải chạy bền bỉ 24/7 trên máy tính cá nhân (hoặc VPS Windows/Linux), tự động hồi sinh ngay khi máy tính khởi động lại mà không cần người dùng đăng nhập (Zero-login Autostart).
2. Kiến trúc xử lý kép: HTTP Fast Path + Browser Fallback
Một trong những bài học quan trọng nhất khi viết bot tự động hóa web:
- Tầng 1 (HTTP Fast Path): Gửi request HTTP thuần bằng
fetchhoặcaxios. Tốc độ siêu nhanh (< 200ms), tiêu tốn cực ít RAM. - Tầng 2 (Headless Browser Fallback): Khi hệ thống đích đổi cơ chế bảo mật (yêu cầu render JavaScript phức tạp hoặc click tọa độ DOM):
- Bot tự động kích hoạt một tiến trình trình duyệt ngầm (Puppeteer / Playwright).
- Tự động điền form, click đúng vào các button (ví dụ
#btnCheckIn,#btnCheckOut), chụp ảnh màn hình xác nhận và gửi lại về Telegram cho người dùng.
3. Điều khiển WireGuard VPN trực tiếp qua Telegram
Người dùng có thể nhắn các lệnh nhanh trên điện thoại:
/vpn: Kiểm tra trạng thái hầm VPN (đang Bật hay Tắt, IP hiện tại là gì)./vpnon: Bật kết nối WireGuard./vpnoff: Ngắt kết nối WireGuard./vpndiag: Đo kiểm độ trễ (ping) và kiểm tra DNS leak.
Triển khai gọi lệnh WireGuard an toàn trong Node.js:
import { exec } from 'child_process';
import util from 'util';
const execPromise = util.promisify(exec);
export async function toggleWireguard(enable = true) {
const cmd = enable
? 'wireguard /installtunnelservice "C:\\Program Files\\WireGuard\\wg0.conf"'
: 'wireguard /uninstalltunnelservice wg0';
try {
const { stdout, stderr } = await execPromise(cmd);
return { success: true, message: enable ? 'Đã bật WireGuard VPN' : 'Đã tắt WireGuard VPN' };
} catch (error) {
return { success: false, error: error.message };
}
}
4. Cơ chế Windows Scheduled Task Boot Wrapper (Chạy ngầm không cần Login)
Nếu chỉ cài đặt bot chạy trong thư mục Startup của Windows, bot sẽ chỉ khởi động khi bạn đã mở máy và nhập mã PIN đăng nhập Windows. Nếu máy tính bị restart do Windows Update trong đêm, bot sẽ "chết" cho tới sáng hôm sau!
Giải pháp: Windows Scheduled Task chạy dưới quyền SYSTEM
Tạo một tác vụ hệ thống bằng lệnh schtasks:
schtasks /create /tn "IHR Telegram Bot Boot" `
/tr "powershell.exe -ExecutionPolicy Bypass -File C:\Tools\ihr-telegram-bot\boot_service.ps1" `
/sc onstart `
/ru "SYSTEM" `
/rl HIGHEST `
/f
/sc onstart: Kích hoạt ngay khi nhân hệ điều hành Windows vừa nạp xong, trước cả khi màn hình đăng nhập người dùng xuất hiện./ru "SYSTEM": Chạy với quyền dịch vụ tối cao, không bị giới hạn phiên làm việc của người dùng.- File
boot_service.ps1đóng vai trò Watchdog: Nếu tiến trìnhnode.exechẳng may bị crash vì lỗi mạng, script sẽ tự động khởi động lại sau 10 giây.
5. Tóm tắt bài học thực tế
- Phân quyền truy cập Telegram (Whitelist): Luôn lưu danh sách Telegram Chat ID được phép ra lệnh trong file
allowed-telegram-ids.txt. Bất kỳ ai ngoài danh sách gửi lệnh sẽ bị bot từ chối phản hồi ngay lập tức để tránh lộ lệnh điều khiển hệ thống. - Status phản hồi nhanh (Cached Status): Nút kiểm tra trạng thái
/statusnên hiển thị dữ liệu đã lưu trong cache từ vòng lặp trước đó, không nên bắt người dùng đợi probe mạng trực tiếp để đạt tốc độ phản hồi dưới 1 giây.