Photo by Dima Solomin
Уведомления в Telegram

Интеграция Telegram-ботов с WordPress: кейсы и открытый код

13.08.25

Интеграция Telegram с WordPress решает три ключевые задачи: отправка уведомлений о событиях сайта, публикация контента в каналы/чаты, и двусторонние сценарии, когда пользователи взаимодействуют с сайтом через бота (например, оставляют комментарии, создают заявки или получают контент по запросу). Для реализации доступны два подхода: готовые плагины WordPress и собственный код на PHP с использованием Telegram Bot API/Webhook, а также связка с WP REST API для доступа к данным сайта.

Давайте рассмотрим разные подходы.

Базовые принципы интеграции

Скорее всего вы знаете, но все же, Telegram-бот создаётся через @BotFather, после чего выдается токен, а взаимодействие выполняется через HTTP-методы Telegram Bot API (например, sendMessage).

WordPress предоставляет REST API, через который можно читать и изменять контент: /wp-json/wp/v2/posts, /users и т.д., с аутентификацией для защищённых операций.

Варианты реализации:

  • Плагины «из коробки» для авто-постинга и уведомлений (напр., WP Telegram).
  • Собственный код PHP + библиотека php-telegram-bot/core или аналоги для создания webhook и обработки команд.

Кейс 1. Автоматическая рассылка новых постов в Telegram-канал

Первый подход для тех кто хочет быстро — плагин WP Telegram

Плагин умеет отправлять посты в каналы/группы и присылать уведомления, требуя лишь указать токен бота и chat_id. Тут все просто,

  1. Создать бота в @BotFather.
  2. Добавить бота в канал как администратора.
  3. Установить и настроить плагин WP Telegram (или Telegram Bot & Channel), указать токен и chat_id канала, включить модуль авто-постинга.

Второй подход для тех кто по каким-то причинам не хочет использовать сторонние плагины. Тогда пишем собственный код.

В WordPress есть хук на публикацию поста publish_post который и будет вызывать Telegram API sendMessage.
Код вызова Telegram API может быть следующий:

<?php
add_action('publish_post', function ($post_id) {
$post = get_post($post_id);
$title = get_the_title($post);
$post_url = get_permalink($post);
$text = "Новая публикация: {$title}\n{$post_url}";

$botToken = 'BOT_API_TOKEN';
$chatId = 'CHANNEL_ID'; // может быть @channelusername или числовой ID

$query = http_build_query([
    'chat_id' => $chatId,
    'text'   => $text,
    'disable_web_page_preview' => true,
]);

$url = "https://api.telegram.org/bot{$botToken}/sendMessage?{$query}";
$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'GET',
]);
curl_exec($ch);
curl_close($ch);

});

Не забудьте вместо BOT_API_TOKEN и CHANNEL_ID указать ваши значения. Лучше, на мой взгляд, завести их как константы в wp-config.php через define. Если нужно отправлять ещё и картинку поста в Телеграм, то можно приложить media через sendPhoto/sendMediaGroup или встроить ссылку-превью. Если у вас какой-то новостной портал и публикаций очень много, то для стабильности лучше использовать webhook и очередь.

Кейс 2. Админ-уведомления в личку/группу (лайвы, комментарии, ошибки)

Хорошая идея уведомлять редакторов (администраторов) в Telegram о важных событиях сайта (новый комментарий, ошибка, вход в админку, заказ) чтобы быстрее чесались. Тут так же можно воспользоваться вышеупомянутым плагином. Он поддерживает уведомления и отправку системных сообщений команде, потребуется User Chat ID/Group ID.

Если не хотите использовать плагин, то можете применить собственный подход, слегка изменив код, который я привёл выше. На нужные хуки WordPress (например, wp_insert_comment) подвесьте функцию из примера выше и отправляйте текст в Telegram по этому событию.

Кейс 3. Командный бот с ответами из WordPress (поиск, последние записи, рубрики)

Цель: пользователь пишет боту «/last» — бот возвращает последние посты; «/search ключ» — бот ищет по сайту, например, какой-то товар.

Что тут понадобится для реализации:

  • Бот с webhook, написанный на php-telegram-bot/core или аналог
  • WordPress REST API для получения контента: /wp-json/wp/v2/posts?search=…&per_page=….

Пример минимального webhook-обработчика на PHP (без фреймворка), использующего REST API WordPress:

<?php
/**
* telegram_webhook.php
* Требуется HTTPS и настройка webhook через:
* https://api.telegram.org/bot{BOT_API_TOKEN}/setWebhook?url=https://yourdomain.com/telegram_webhook.php
**/

$botToken = 'BOT_API_TOKEN';
$update = json_decode(file_get_contents('php://input'), true);

if (!isset($update['message'])) exit;
$chatId = $update['message']['chat']['id'];
$text   = trim($update['message']['text'] ?? '');

function tg_send($chatId, $text, $botToken) {
    $url = "https://api.telegram.org/bot{$botToken}/sendMessage";
    $payload = [
        'chat_id' => $chatId,
        'text'    => $text,
        'parse_mode' => 'HTML',
        'disable_web_page_preview' => true,
    ];
    $ch = curl_init($url);
    curl_setopt_array($ch, [
        CURLOPT_POST => true,
        CURLOPT_POSTFIELDS => $payload,
        CURLOPT_RETURNTRANSFER => true,
    ]);
    curl_exec($ch);
    curl_close($ch);
}

if (strpos($text, '/start') === 0) {
    tg_send($chatId, "Привет! Доступные команды:\n/last — последние посты\n/search ключевое слово — поиск по сайту", $botToken);
    exit;
}

if (strpos($text, '/last') === 0) {
    // Забираем 3 последних поста через WP REST API:
    $wpApi = 'https://example.com/wp-json/wp/v2/posts?per_page=3&_fields=title,link';
    $resp = json_decode(file_get_contents($wpApi), true);
    if (is_array($resp)) {
        $lines = [];
        foreach ($resp as $p) {
            $lines[] = "• " . $p['title']['rendered'] . "\n" . $p['link'];
        }
        tg_send($chatId, implode("\n\n", $lines) ?: 'Постов не найдено', $botToken);
    } else {
        tg_send($chatId, 'Ошибка запроса к сайту', $botToken);
    }
    exit;
}

if (strpos($text, '/search') === 0) {
    $q = trim(substr($text, strlen('/search')));
    if ($q === '') {
        tg_send($chatId, 'Использование: /search ключевое_слово', $botToken);
        exit;
    }
    $wpApi = 'https://example.com/wp-json/wp/v2/posts?search=' . urlencode($q) . '&per_page=5&_fields=title,link';
    $resp = json_decode(file_get_contents($wpApi), true);
    if (is_array($resp) && count($resp)) {
        $lines = [];
        foreach ($resp as $p) {
            $lines[] = "• " . $p['title']['rendered'] . "\n" . $p['link'];
        }
        tg_send($chatId, implode("\n\n", $lines), $botToken);
    } else {
        tg_send($chatId, 'Ничего не найдено', $botToken);
    }
    exit;
}

Кейс 4. Комментарии и модерация через бота

Цель: уведомлять редакторов в группу о новых комментариях с быстрыми кнопками «Одобрить/Спам/Удалить».

Для реализации этой задачи необходимо сделать следующее:

  1. На хук wp_insert_comment повесить функцию, которая будет отправлять в группу сообщение с Inline-кнопками (callback_data).
  2. По нажатию редактором кнопки в Telegram, бот вызывает защищённый endpoint WP (REST API или admin-ajax с проверкой), который будет менять статус комментария.

Кейс 5. Техподдержка/чат с сайта в Telegram

Сценарий: посетитель сайта пишет в Telegram-бота с сайта (виджет), сообщения приходят в группу поддержки.

Есть плагины, например «Site Chat on Telegram» или аналоги, с помощью которых можно легко реализовать этот сценарий не сильно заморачиваясь.

Если хотите самостоятельно, то план такой: фронтенд-виджет отправляет текст на ваш сервер, сервер пересылает в Telegram через sendMessage (см. код выше).
Обратные ответы от техподдержки отправлять через логику бота и Webhook.