Tích hợp thông báo tự động qua Telegram hoặc Slack giúp đội ngũ quản trị hệ thống nhận được tin báo ngay lập tức khi dịch vụ gặp sự cố hay đĩa cứng bị đầy.



Cả Telegram và Slack đều cung cấp giao diện webhook/API chuẩn REST đơn giản, rất dễ gọi từ lệnh curl trong Bash hoặc Invoke-RestMethod trong PowerShell.

1. Chuẩn bị Token / Webhook

Before configuring scripts, you need to set up the notification endpoints:

Telegram Bot

  1. Tìm bot @BotFather trên Telegram và gửi lệnh /newbot để tạo bot mới. Lưu lại API Token (ví dụ: 123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ).

  2. Tạo một Group Telegram, thêm bot vừa tạo vào group.

  3. Lấy Chat ID của group bằng cách gửi 1 tin nhắn vào group, sau đó mở trình duyệt truy cập: [https://api.telegram.org/bot](https://api.telegram.org/bot)<YOUR_BOT_TOKEN>/getUpdates Lưu lại dãy số id của chat (thường bắt đầu bằng dấu -, ví dụ: -100123456789).

Slack Incoming Webhook

  1. Truy cập Slack API Apps, bấm Create New App -> From scratch.

  2. Chọn Incoming Webhooks -> Bật Activate Incoming Webhooks -> Bấm Add New Webhook to Workspace.

  3. Chọn channel nhận thông báo và bấm Allow. Sao chép đường dẫn Webhook URL (dạng [https://hooks.slack.com/services/T.../B.../X](https://hooks.slack.com/services/T.../B.../X)...).

2. Tích hợp thông báo vào Script Bash (Linux)

Bash sử dụng công cụ curl có sẵn để gửi HTTP POST request.

Bash
#!/bin/bash

# --- CẤU HÌNH CẢNH BÁO ---
TELEGRAM_BOT_TOKEN="123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"
TELEGRAM_CHAT_ID="-100123456789"

SLACK_WEBHOOK_URL="https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"

# --- HÀM GỬI TELEGRAM ---
send_telegram() {
    local message="$1"
    curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_BOT_TOKEN}/sendMessage" \
        -d "chat_id=${TELEGRAM_CHAT_ID}" \
        -d "text=${message}" \
        -d "parse_mode=HTML" > /dev/null
}

# --- HÀM GỬI SLACK ---
send_slack() {
    local message="$1"
    # Tạo payload JSON cho Slack
    local payload=$(cat <<EOF
{
    "text": "${message}"
}
EOF
)
    curl -s -X POST -H 'Content-type: application/json' --data "$payload" "$SLACK_WEBHOOK_URL" > /dev/null
}

# --- VÍ DỤ SỬ DỤNG TRONG LUỒNG KIỂM TRA SỰ CỐ ---
SERVICE="nginx"

# Kiểm tra xem dịch vụ có đang chạy không
if ! systemctl is-active --quiet "$SERVICE"; then
    HOSTNAME=$(hostname)
    TIME=$(date '+%Y-%m-%d %H:%M:%S')
    
    # 1. Soạn nội dung cảnh báo Telegram (hỗ trợ thẻ HTML)
    MSG_TELEGRAM="🚨 <b>ALERT: Service Down!</b>%0A<b>Server:</b> ${HOSTNAME}%0A<b>Service:</b> ${SERVICE}%0A<b>Time:</b> ${TIME}"
    send_telegram "$MSG_TELEGRAM"
    
    # 2. Soạn nội dung cảnh báo Slack
    MSG_SLACK="🚨 *ALERT: Service Down!*\n*Server:* ${HOSTNAME}\n*Service:* ${SERVICE}\n*Time:* ${TIME}"
    send_slack "$MSG_SLACK"
fi

3. Tích hợp thông báo vào Script PowerShell (Windows)

PowerShell sử dụng cmdlet Invoke-RestMethod tích hợp sẵn để gửi yêu cầu API.

PowerShell
# --- CẤU HÌNH CẢNH BÁO ---
$TelegramToken  = "123456789:ABCdefGhIJKlmNoPQRsTUVwxyZ"
$TelegramChatId = "-100123456789"

$SlackWebhookUrl = "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"

# --- HÀM GỬI TELEGRAM ---
function Send-TelegramAlert {
    param ([string]$Message)
    
    $Uri = "https://api.telegram.org/bot$TelegramToken/sendMessage"
    $Body = @{
        chat_id    = $TelegramChatId
        text       = $Message
        parse_mode = "HTML"
    }
    
    Invoke-RestMethod -Uri $Uri -Method Post -Body $Body | Out-Null
}

# --- HÀM GỬI SLACK ---
function Send-SlackAlert {
    param ([string]$Message)
    
    $Payload = @{ text = $Message } | ConvertTo-Json
    Invoke-RestMethod -Uri $SlackWebhookUrl -Method Post -ContentType 'application/json' -Body $Payload | Out-Null
}

# --- VÍ DỤ SỬ DỤNG TRONG LUỒNG KIỂM TRA SỰ CỐ ---
$ServiceName = "Spooler" # Ví dụ kiểm tra Print Spooler service
$Service = Get-Service -Name $ServiceName -ErrorAction SilentlyContinue

if ($Service.Status -ne 'Running') {
    $ComputerName = $env:COMPUTERNAME
    $Time = (Get-Date).ToString("yyyy-MM-dd HH:mm:ss")
    
    # 1. Gửi cảnh báo qua Telegram
    $TgMsg = "🚨 <b>ALERT: Windows Service Stopped!</b><br><b>Server:</b> $ComputerName<br><b>Service:</b> $ServiceName<br><b>Time:</b> $Time"
    Send-TelegramAlert -Message $TgMsg
    
    # 2. Gửi cảnh báo qua Slack
    $SlackMsg = "🚨 *ALERT: Windows Service Stopped!*\n*Server:* $ComputerName\n*Service:* $ServiceName\n*Time:* $Time"
    Send-SlackAlert -Message $SlackMsg
}

Mẹo tối ưu cảnh báo cho DevOps / SysAdmin

  • Định dạng tin nhắn:

    • Telegram: Đặt parse_mode=HTML hoặc MarkdownV2 để in đậm (<b>), nghiêng (<i>), chèn emoji cảnh báo (🚨, ⚠️, ) giúp thông báo trực quan.

    • Slack: Sử dụng định dạng Block Kit của Slack để tạo các ô thông báo màu đỏ (khi lỗi) hoặc màu xanh (khi hệ thống hồi phục).

  • Tránh bão thông báo (Alert Fatigue): Đối với các sự cố kéo dài, nên thêm cơ chế ghi log/cache thời điểm gửi cảnh báo gần nhất để chỉ gửi lại tin nhắn sau mỗi 15-30 phút thay vì gửi liên tục mỗi phút khi cronjob chạy.