Мониторинг сайта с оповещением в Telegram

Вот пример скрипта на PHP, который проверяет доступность сайта каждые 5 минут и отправляет сообщение в Telegram, если сайт недоступен. Для отправки сообщения в Telegram используется его Bot API.

  1. Создайте Telegram-бота через BotFather и получите токен.
  2. Найдите ваш Telegram chat ID (например, с помощью @userinfobot).
  3. Создайте файл PHP в нужной папке:
<?php

// Конфигурация
$siteUrl = "https://test.ru"; // URL сайта для проверки
$botToken = "xxxxxxxxxxxxxxxxxxxxxxx"; // Токен Telegram-бота
$chatId = "-00000000000000"; // Ваш Telegram Chat ID
$checkInterval = 300; // Интервал проверки в секундах (5 минут)

// Функция для проверки доступности сайта
function checkSiteAvailability($url) {
    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Возвращает ответ как строку
    curl_setopt($ch, CURLOPT_NOBODY, true); // Не загружает тело ответа
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Таймаут на запрос 10 секунд
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // Следует за редиректами
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // Проверяет SSL-сертификаты
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); // Проверяет хост SSL
    curl_exec($ch);

    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Получает HTTP-код ответа
    $curlError = curl_errno($ch); // Проверяет ошибки cURL
    curl_close($ch);

    // Если ошибки cURL нет и код ответа HTTP в диапазоне 200–399, то сайт доступен
    return ($curlError === 0 && $httpCode >= 200 && $httpCode < 400);
}

// Функция для отправки сообщения в Telegram
function sendTelegramMessage($botToken, $chatId, $message) {
    $url = "https://api.telegram.org/bot{$botToken}/sendMessage";
    $postData = [
        'chat_id' => $chatId,
        'text' => $message
    ];

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($postData));
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_exec($ch);
    curl_close($ch);
}

// Основной цикл проверки
while (true) {
    if (!checkSiteAvailability($siteUrl)) {
        $message = "❗️Сайт {$siteUrl} недоступен! Проверьте работу сервера.";
        sendTelegramMessage($botToken, $chatId, $message);
    } else {
        echo "Сайт {$siteUrl} доступен.\n";
    }
    sleep($checkInterval); // Ждем указанный интервал перед следующей проверкой
}

 

Пошаговые действия:

  1. Настройка сервера:
    • Разместите скрипт на сервере, поддерживающем PHP.
    • Убедитесь, что PHP имеет доступ к curl.
  2. Запуск в фоне:
    • Используйте nohup или screen, чтобы запустить скрипт в фоне. Например:
nohup php /path/to/script.php > /dev/null 2>&1 &

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

три + два =