Интеграция 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. Тут все просто,
- Создать бота в @BotFather.
- Добавить бота в канал как администратора.
- Установить и настроить плагин 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. Комментарии и модерация через бота
Цель: уведомлять редакторов в группу о новых комментариях с быстрыми кнопками «Одобрить/Спам/Удалить».
Для реализации этой задачи необходимо сделать следующее:
- На хук wp_insert_comment повесить функцию, которая будет отправлять в группу сообщение с Inline-кнопками (callback_data).
- По нажатию редактором кнопки в Telegram, бот вызывает защищённый endpoint WP (REST API или admin-ajax с проверкой), который будет менять статус комментария.
Кейс 5. Техподдержка/чат с сайта в Telegram
Сценарий: посетитель сайта пишет в Telegram-бота с сайта (виджет), сообщения приходят в группу поддержки.
Есть плагины, например «Site Chat on Telegram» или аналоги, с помощью которых можно легко реализовать этот сценарий не сильно заморачиваясь.
Если хотите самостоятельно, то план такой: фронтенд-виджет отправляет текст на ваш сервер, сервер пересылает в Telegram через sendMessage (см. код выше).
Обратные ответы от техподдержки отправлять через логику бота и Webhook.