Telegram bot WordPress интеграция: кастомные уведомления за 5 шагов

a blue button with a white arrow on it

Введение: зачем нужны кастомные уведомления в Telegram

Telegram‑бот – это удобный канал для мгновенного оповещения владельцев сайтов. Вместо постоянного мониторинга админ‑панели вы получаете сообщения в личном чате: новые записи, комментарии, сбои 500‑ошибок плагинов и даже статус аптайма. В этой статье мы подробно разберём процесс telegram bot wordpress интеграция от регистрации бота до безопасной отправки запросов.

Шаг 1. Регистрация бота и получение токена

Для начала нужен собственный бот в Telegram. Откройте чат с @BotFather, выполните команду /newbot и следуйте подсказкам. После создания вы получите токен вида 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11. Сохраните его в wp-config.php как константу, чтобы токен не оказался в открытом коде.

define('TELEGRAM_BOT_TOKEN', 'YOUR_TELEGRAM_BOT_TOKEN_HERE'); 

Шаг 2. Настройка webhook в WordPress

Telegram использует webhook‑механизм: при получении сообщения сервер делает POST‑запрос на ваш URL. Создайте файл telegram-webhook.php в корне темы и добавьте обработчик.

add_action('init', function () { if (isset($_GET['telegram-webhook'])) { // Получаем тело запроса $update = json_decode(file_get_contents('php://input'), true); // Здесь можно добавить логику ответа, но для уведомлений нам это не нужно http_response_code(200); exit; } }); 

Зарегистрировать webhook можно один раз через WP‑CLI или админ‑панель:

$url = home_url('/telegram-webhook.php?telegram-webhook=1'); $response = wp_remote_get("https://api.telegram.org/bot". TELEGRAM_BOT_TOKEN. "/setWebhook?url=". urlencode($url)); if (is_wp_error($response)) { error_log('Telegram webhook error: '. $response->get_error_message()); } 

Шаг 3. Уведомления о новых записях

WordPress генерирует действие publish_post каждый раз, когда запись переходит в статус «опубликовано». Подключим к нему функцию отправки сообщения.

function tg_notify_new_post($post_ID, $post) { $chat_id = 'YOUR_CHAT_ID'; // ID чата или канала $title = get_the_title($post_ID); $link = get_permalink($post_ID); $text = "📝 Новая статья: *$title*n$link"; $payload = [ 'chat_id' => $chat_id, 'text' => $text, 'parse_mode' => 'Markdown' ]; $url = "https://api.telegram.org/bot". TELEGRAM_BOT_TOKEN. "/sendMessage"; wp_remote_post($url, ['body' => $payload]); return $post_ID; } add_action('publish_post', 'tg_notify_new_post', 10, 2); 

Текст сообщения формируем в Markdown, чтобы добавить эмодзи и выделить заголовок.

Шаг 4. Уведомления о новых комментариях

Для комментариев используем хук comment_post. Добавим проверку статуса, чтобы не спамить при модерации.

function tg_notify_new_comment($comment_ID, $comment_approved) { if (1!== $comment_approved) return; $comment = get_comment($comment_ID); $post = get_post($comment->comment_post_ID); $chat_id = 'YOUR_CHAT_ID'; $text = "💬 Новый комментарий к "{$post->post_title}":n". "{$comment->comment_author}: {$comment->comment_content}"; $payload = [ 'chat_id' => $chat_id, 'text' => $text, 'parse_mode' => 'HTML' ]; $url = "https://api.telegram.org/bot". TELEGRAM_BOT_TOKEN. "/sendMessage"; wp_remote_post($url, ['body' => $payload]); } add_action('comment_post', 'tg_notify_new_comment', 10, 2); 

Шаг 5. Мониторинг ошибок плагинов и аптайма

Когда плагин падает с ошибкой 500, важно получить сигнал сразу. Мы будем использовать уже написанный в блоге пошаговый гайд по кастомной ошибке 500. Добавим обработчик shutdown, который проверит наличие фатальных ошибок и отправит их в Telegram.

function tg_report_fatal_error() { $error = error_get_last(); if ($error && $error['type'] === E_ERROR) { $chat_id = 'YOUR_CHAT_ID'; $text = "🚨 Фатальная ошибка в плагине: {$error['message']} в {$error['file']} на строке {$error['line']}"; $payload = ['chat_id' => $chat_id, 'text' => $text]; $url = "https://api.telegram.org/bot". TELEGRAM_BOT_TOKEN. "/sendMessage"; wp_remote_post($url, ['body' => $payload]); } } add_action('shutdown', 'tg_report_fatal_error'); 

Для контроля аптайма удобно запускать периодический запрос к wp_remote_head и, если сервер не отвечает, отправлять предупреждение.

function tg_check_uptime() { $response = wp_remote_head(home_url()); if (is_wp_error($response)) { $chat_id = 'YOUR_CHAT_ID'; $text = "⚠️ Сайт недоступен: ". $response->get_error_message(); $payload = ['chat_id' => $chat_id, 'text' => $text]; $url = "https://api.telegram.org/bot". TELEGRAM_BOT_TOKEN. "/sendMessage"; wp_remote_post($url, ['body' => $payload]); } } // Планируем проверку каждые 5 минут if (!wp_next_scheduled('tg_check_uptime')) { wp_schedule_event(time(), 'five_minutes', 'tg_check_uptime'); } add_action('tg_check_uptime', 'tg_check_uptime'); 

Не забудьте добавить кастомный интервал five_minutes в cron_schedules – иначе WordPress не поймёт, что это валидный период.

Шаг 6. Лучшие практики и безопасность

Отправка запросов в Telegram открывает потенциальный вектор атак. Чтобы минимизировать риски, выполните следующее:

  • Храните токен в wp-config.php и ограничьте доступ к файлу правами 640.
  • Проверяйте, что $_GET['telegram-webhook'] присутствует, иначе обработчик может принимать произвольные POST‑запросы.
  • Ограничьте список разрешённых IP‑адресов Telegram (можно получить из api.telegram.org) и сравнивайте их с $_SERVER['REMOTE_ADDR'].
  • Для защиты от ботов используйте методы из статьи Bot Mitigation WordPress.
  • Если вы используете Varnish для кэширования, убедитесь, что запросы к telegram-webhook.php не кэшируются – см. Varnish WordPress кэширование.
  • При работе с REST API проверяйте подписи запросов, как описано в Как защитить WordPress от атак на REST API.

Следуя этим рекомендациям, вы получите надёжный канал уведомлений без ущерба для безопасности.

Заключение

Интеграция Telegram‑бота в WordPress – это быстрый способ повысить реакцию на новые события, ошибки и падения сайта. Мы рассмотрели весь процесс: от получения токена до отправки кастомных сообщений и мониторинга аптайма. Применяйте готовый код, адаптируйте его под свои задачи и не забывайте о безопасности. Теперь ваш сайт будет «говорить» в Telegram, а вы – всегда быть в курсе происходящего.

❓ Часто задаваемые вопросы

Как получить chat_id для отправки сообщений?

Начните чат с вашим ботом, отправьте любое сообщение и откройте URL https://api.telegram.org/botYOUR_TOKEN/getUpdates. В ответе найдите поле «chat»:{«id»:123456789} – это и есть ваш chat_id.

Можно ли отправлять сообщения в канал, а не в личный чат?

Да. Добавьте бота в канал как администратора и используйте chat_id канала (начинается с символа @ или с отрицательного числа, если это приватный канал).

Почему webhook не вызывается после установки?

Проверьте, что URL доступен без редиректов, файл не кэшируется Varnish и ваш сервер принимает входящие POST‑запросы от IP‑адресов Telegram.

Как отключить уведомления о комментариях для спам‑комментариев?

В функции tg_notify_new_comment проверяйте статус $comment_approved; если он не равен 1, просто возвращайте без отправки сообщения.