Краткий ответ: заявки с WordPress в Telegram можно отправлять через Telegram-бота, chat_id и серверный PHP-запрос к Telegram Bot API. Самый простой вариант — готовый плагин для Contact Form 7, WPForms или WooCommerce. Более надёжный вариант — отдельный мини-плагин WordPress, который сохраняет заявку, отправляет её в Telegram, пишет ошибки в лог и не показывает bot token во фронтенде.
Telegram удобно использовать как быстрый канал уведомлений для менеджера. Но лучше не делать его единственным местом хранения заявок. Правильная схема такая: заявка сохраняется в WordPress или CRM, email остаётся резервным каналом, а Telegram получает короткое уведомление для быстрой реакции.
Обычные заявки с WordPress чаще всего приходят на email. На практике email не всегда удобен: письма могут попадать в спам, задерживаться, теряться в почтовых фильтрах или оставаться незамеченными менеджером.
Telegram решает именно проблему скорости реакции. Менеджер получает уведомление сразу на телефон, видит имя, телефон, услугу, страницу заявки и может быстро связаться с клиентом.
Если заявки вообще не доходят ни в почту, ни в Telegram, сначала проверьте общую цепочку формы: не приходят заявки с сайта WordPress. Если email работает, но нужен быстрый дубликат в мессенджер, тогда уже настраивается отправка в Telegram.
| Способ | Когда подходит | Риск |
|---|---|---|
| Готовый плагин | Contact Form 7, WPForms, Elementor Form, простая форма | Зависимость от обновлений плагина |
| Webhook/no-code сервис | Нужно связать форму, Telegram, CRM, Google Sheets | Зависимость от внешнего сервиса |
| Код в functions.php | Быстрый тест на одном сайте | Легко потерять код при смене темы |
| Отдельный мини-плагин | Постоянная рабочая интеграция | Нужно аккуратно написать и протестировать |
| Кастомная CRM-интеграция | Нужны статусы, логи, UTM, повторные отправки | Больше разработки, но надёжнее |
Если заявки должны не только приходить в Telegram, но и попадать в воронку продаж, лучше сразу продумать интеграцию WordPress с CRM/API. Telegram в таком случае остаётся быстрым уведомлением, а CRM — основным хранилищем лидов.
Для базовой интеграции нужны три вещи: Telegram-бот, bot token и chat_id.
Перед написанием кода нужно проверить, что Telegram-бот действительно может отправлять сообщения в нужный чат. Часто проблема не в WordPress, а в неправильном chat_id, токене или правах бота.
| Симптом | Вероятная причина | Что проверить |
|---|---|---|
| Форма отправилась, Telegram молчит | Не вызвался hook формы или ошибка API | debug.log, hook, ответ Telegram |
| Telegram возвращает 400 | Неверный chat_id или формат сообщения | chat_id, parse_mode, HTML-теги |
| Telegram возвращает 401 | Неверный bot token | Токен из BotFather |
| Telegram возвращает 403 | Бот не имеет доступа к чату | Бот в группе/канале, права, блокировка |
| Сообщение приходит без телефона | Неверное имя поля формы | name поля, mail-tags, posted_data |
| Форма стала долго отправляться | Telegram API или внешний запрос тормозит | timeout, логи, очередь |
| В сообщении видны HTML-теги | Неверный parse_mode или неподдерживаемый HTML | parse_mode, экранирование данных |
| После обновления плагина заявки пропали | Изменился hook или настройки плагина | changelog, настройки, debug.log |
Если не хотите рисковать сайтом и тратить время на эксперименты, можно оставить заявку. Я посмотрю задачу и предложу аккуратное решение.
Надёжная отправка заявок в Telegram строится так: форма принимает данные, WordPress очищает поля, заявка сохраняется или логируется, затем сервер отправляет короткое сообщение в Telegram. Bot token хранится только на сервере.
Важно: код ниже отправляет данные формы во внешний сервис Telegram. Не вставляйте bot token в JavaScript, HTML или публичный файл темы. Перед установкой на рабочий сайт сделайте бэкап и проверьте код на тестовой копии.
Куда вставлять: файл wp-config.php, перед строкой /* That’s all, stop editing! */.
define('SC_TELEGRAM_BOT_TOKEN', 'PASTE_YOUR_BOT_TOKEN_HERE');
define('SC_TELEGRAM_CHAT_ID', 'PASTE_YOUR_CHAT_ID_HERE');
Куда вставлять: лучше в отдельный мини-плагин. Для теста можно временно вставить в functions.php дочерней темы.
<?php
if (!defined('ABSPATH')) {
exit;
}
function sc_telegram_escape_html($text) {
$text = (string) $text;
return str_replace(
array('&', '<', '>'),
array('&', '<', '>'),
$text
);
}
function sc_send_telegram_message($message) {
if (!defined('SC_TELEGRAM_BOT_TOKEN') || !defined('SC_TELEGRAM_CHAT_ID')) {
error_log('SC Telegram error: token or chat_id is missing.');
return false;
}
$bot_token = SC_TELEGRAM_BOT_TOKEN;
$chat_id = SC_TELEGRAM_CHAT_ID;
if (empty($bot_token) || empty($chat_id) || empty($message)) {
return false;
}
$api_url = 'https://api.telegram.org/bot' . $bot_token . '/sendMessage';
$response = wp_remote_post($api_url, array(
'timeout' => 15,
'body' => array(
'chat_id' => $chat_id,
'text' => $message,
'parse_mode' => 'HTML',
'disable_web_page_preview' => true,
),
));
if (is_wp_error($response)) {
error_log('SC Telegram wp_remote_post error: ' . $response->get_error_message());
return false;
}
$response_code = wp_remote_retrieve_response_code($response);
$response_body = wp_remote_retrieve_body($response);
if ($response_code !== 200) {
error_log('SC Telegram response code: ' . $response_code);
error_log('SC Telegram response body: ' . $response_body);
return false;
}
return true;
}
Куда вставлять: в тот же мини-плагин или временно в functions.php дочерней темы. Нужен активный Contact Form 7.
<?php
add_action('wpcf7_mail_sent', 'sc_send_cf7_lead_to_telegram');
function sc_send_cf7_lead_to_telegram($contact_form) {
if (!function_exists('WPCF7_Submission')) {
return;
}
$submission = WPCF7_Submission::get_instance();
if (!$submission) {
return;
}
$posted_data = $submission->get_posted_data();
$name = isset($posted_data['your-name']) ? sanitize_text_field($posted_data['your-name']) : '';
$phone = isset($posted_data['your-phone']) ? sanitize_text_field($posted_data['your-phone']) : '';
$email = isset($posted_data['your-email']) ? sanitize_email($posted_data['your-email']) : '';
$text = isset($posted_data['your-message']) ? sanitize_textarea_field($posted_data['your-message']) : '';
$page_url = isset($_SERVER['HTTP_REFERER']) ? esc_url_raw($_SERVER['HTTP_REFERER']) : '';
$message = '';
$message .= "<b>Новая заявка с сайта</b>n";
$message .= "Форма: " . sc_telegram_escape_html($contact_form->title()) . "n";
$message .= "Имя: " . sc_telegram_escape_html($name) . "n";
$message .= "Телефон: " . sc_telegram_escape_html($phone) . "n";
$message .= "Email: " . sc_telegram_escape_html($email) . "n";
$message .= "Сообщение: " . sc_telegram_escape_html($text) . "n";
$message .= "Страница: " . sc_telegram_escape_html($page_url);
sc_send_telegram_message($message);
}
Важно: AJAX-форма должна использовать nonce. Не отправляйте данные из POST в Telegram без очистки.
HTML формы:
<div class="sc-telegram-form">
<input type="text" id="sc_tg_name" placeholder="Ваше имя">
<input type="text" id="sc_tg_phone" placeholder="Телефон">
<input type="email" id="sc_tg_email" placeholder="Email">
<textarea id="sc_tg_message" placeholder="Сообщение"></textarea>
<input type="hidden" id="sc_tg_nonce" value="<?php echo esc_attr(wp_create_nonce('sc_send_tg_lead_nonce')); ?>">
<button type="button" id="sc_tg_send">Отправить</button>
<div id="sc_tg_result"></div>
</div>
jQuery:
<script>
jQuery(document).ready(function() {
jQuery(document).on('click', '#sc_tg_send', function() {
jQuery('#sc_tg_result').html('Отправка...');
jQuery.ajax({
url: '<?php echo admin_url("admin-ajax.php") ?>',
type: 'POST',
dataType: 'json',
data: {
action: 'sc_send_tg_lead',
nonce: jQuery('#sc_tg_nonce').val(),
name: jQuery('#sc_tg_name').val(),
phone: jQuery('#sc_tg_phone').val(),
email: jQuery('#sc_tg_email').val(),
message: jQuery('#sc_tg_message').val(),
page_url: window.location.href
},
success: function(response) {
if (response.success) {
jQuery('#sc_tg_result').html(response.data.message);
jQuery('#sc_tg_name').val('');
jQuery('#sc_tg_phone').val('');
jQuery('#sc_tg_email').val('');
jQuery('#sc_tg_message').val('');
} else {
jQuery('#sc_tg_result').html(response.data.message);
}
},
error: function() {
jQuery('#sc_tg_result').html('Ошибка отправки. Попробуйте позже.');
}
});
});
});
</script>
PHP обработчик:
<?php
add_action('wp_ajax_sc_send_tg_lead', 'sc_send_tg_lead');
add_action('wp_ajax_nopriv_sc_send_tg_lead', 'sc_send_tg_lead');
function sc_send_tg_lead() {
check_ajax_referer('sc_send_tg_lead_nonce', 'nonce');
$name = isset($_POST['name']) ? sanitize_text_field($_POST['name']) : '';
$phone = isset($_POST['phone']) ? sanitize_text_field($_POST['phone']) : '';
$email = isset($_POST['email']) ? sanitize_email($_POST['email']) : '';
$text = isset($_POST['message']) ? sanitize_textarea_field($_POST['message']) : '';
$page_url = isset($_POST['page_url']) ? esc_url_raw($_POST['page_url']) : '';
if (empty($phone) && empty($email)) {
wp_send_json_error(array(
'message' => 'Укажите телефон или email.'
));
}
$message = '';
$message .= "<b>Новая заявка с сайта</b>n";
$message .= "Имя: " . sc_telegram_escape_html($name) . "n";
$message .= "Телефон: " . sc_telegram_escape_html($phone) . "n";
$message .= "Email: " . sc_telegram_escape_html($email) . "n";
$message .= "Сообщение: " . sc_telegram_escape_html($text) . "n";
$message .= "Страница: " . sc_telegram_escape_html($page_url);
$sent = sc_send_telegram_message($message);
if (!$sent) {
wp_send_json_error(array(
'message' => 'Заявка принята, но Telegram временно недоступен.'
));
}
wp_send_json_success(array(
'message' => 'Заявка отправлена.'
));
}
Важно: если в заявках есть персональные данные, ограничьте доступ к ним в админке и продумайте срок хранения.
<?php
add_action('init', 'sc_register_telegram_lead_post_type');
function sc_register_telegram_lead_post_type() {
register_post_type('sc_tg_lead', array(
'labels' => array(
'name' => 'Telegram заявки',
'singular_name' => 'Telegram заявка',
),
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'supports' => array('title', 'editor'),
'capability_type' => 'post',
));
}
function sc_save_telegram_lead_backup($name, $phone, $email, $text, $page_url) {
$content = '';
$content .= 'Имя: ' . sanitize_text_field($name) . "n";
$content .= 'Телефон: ' . sanitize_text_field($phone) . "n";
$content .= 'Email: ' . sanitize_email($email) . "n";
$content .= 'Сообщение: ' . sanitize_textarea_field($text) . "n";
$content .= 'Страница: ' . esc_url_raw($page_url) . "n";
wp_insert_post(array(
'post_type' => 'sc_tg_lead',
'post_status' => 'private',
'post_title' => 'Заявка от ' . current_time('Y-m-d H:i:s'),
'post_content' => $content,
));
}
Эту функцию можно вызывать перед отправкой в Telegram, чтобы заявка не терялась даже при ошибке Telegram API.
После правильной настройки заявка должна проходить понятный путь: пользователь отправляет форму, WordPress очищает данные, сохраняет резервную копию, отправляет уведомление в Telegram и пишет ошибку в лог, если Telegram недоступен.
Подходит, если на сайте уже используется Contact Form 7 и нужно быстро отправлять заявки в Telegram без кастомного кода.
Плюсы: быстрое подключение, настройки в админке, не нужно писать PHP.
Минусы: зависимость от обновлений плагина, не всегда есть нужная структура сообщения, логи и резервное сохранение.
Подходит, если нужно получать в Telegram не только заявки, но и другие уведомления WordPress: системные письма, WooCommerce, Contact Form 7 и события сайта.
Плюсы: шире покрытие событий WordPress.
Минусы: может быть больше настроек, чем нужно для простой формы.
Подходит, если нужно связать WordPress, Telegram, CRM, Google Sheets и другие сервисы без разработки.
Плюсы: удобно для цепочек автоматизации.
Минусы: внешний сервис, тарифы, задержки, зависимость от webhook.
Подходит, если нужна точная структура сообщения, защита токена, логи, разные чаты для разных форм и резервное сохранение заявок.
Плюсы: полный контроль, можно дорабатывать под бизнес-процесс.
Минусы: нужно тестирование и аккуратная поддержка.
Подходит для отдела продаж. Telegram получает быстрый сигнал, а CRM хранит лид, статус, менеджера, UTM-метки и историю обработки.
Плюсы: меньше риск потерять заявку.
Минусы: нужно настроить логику повторной отправки и обработку ошибок API.
Telegram-интеграция работает с bot token, chat_id и персональными данными клиента. Ошибки в безопасности здесь встречаются часто: токен вставляют в JavaScript, заявку отправляют в публичную группу, а ошибки API показывают пользователю.
Отправка в Telegram — это внешний HTTP-запрос. Если Telegram API, хостинг или сеть отвечают медленно, пользователь может дольше ждать отправку формы.
Это опасно. Любой посетитель может открыть исходный код страницы и увидеть токен. Отправка должна идти только через PHP на сервере.
Личный чат, группа, супергруппа и канал имеют разные идентификаторы. Если chat_id неверный, Telegram вернёт ошибку или сообщение уйдёт не туда.
Если заявки должны идти в группу, бот должен быть участником этой группы. Для канала бот обычно должен быть добавлен как администратор.
Для личного чата пользователь должен сначала открыть бота и нажать Start. Иначе бот не сможет написать первым.
Если используется parse_mode HTML, пользовательские данные нужно экранировать. Символы <, > и & могут сломать сообщение.
Без логов непонятно, что случилось: неверный токен, неправильный chat_id, 403, 400, timeout или блокировка хостинга.
Если Telegram временно недоступен, заявка может потеряться. Лучше сохранять её в WordPress, CRM или базе до отправки.
Telegram быстрый, но email лучше оставить как резервный канал. Особенно если заявки важны для бизнеса.
Нужно создать Telegram-бота, получить bot token, узнать chat_id нужного чата и отправлять данные формы с сервера WordPress через Telegram Bot API методом sendMessage.
Да. Можно использовать готовый плагин или hook wpcf7_mail_sent, получить данные формы через WPCF7_Submission и отправить сообщение через wp_remote_post().
Лучше хранить token в wp-config.php или защищённых настройках плагина. Нельзя вставлять token в JavaScript или HTML страницы.
Частые причины: неправильный token, неверный chat_id, бот не добавлен в группу, пользователь не нажал Start, Telegram вернул ошибку, hook формы не сработал или хостинг блокирует запрос.
Да. Можно написать небольшой PHP-код или отдельный мини-плагин WordPress, который отправляет данные формы через Telegram Bot API.
Плагин быстрее для простой формы. Свой код лучше, если нужны разные чаты, точный формат сообщения, логи, резервное сохранение заявок и защита от потери данных.
Bot token создаётся через BotFather. После создания бота Telegram выдаёт строку токена. Её нужно хранить только на сервере.
Для личного чата нужно написать боту Start и получить chat_id через служебного бота или getUpdates. Для группы нужно добавить бота в группу и получить ID этой группы. Для канала бот должен иметь права на отправку сообщений.
Да. Добавьте бота в группу, получите chat_id группы и используйте его при отправке сообщения.
Да. Бота нужно добавить в канал и дать ему права на публикацию сообщений. Затем использовать chat_id или username канала, если формат подходит для вашей схемы отправки.
Да. Для заказов WooCommerce используются хуки WooCommerce, например при создании заказа или смене статуса. Но такую интеграцию нужно тестировать аккуратно, чтобы не тормозить checkout.
Да. Telegram лучше использовать как быстрый дубликат, а email или CRM оставить как резервный канал и основное хранилище заявки.
Лучше сначала сохранить заявку в WordPress или CRM, а Telegram отправлять после этого. Если Telegram не ответил, ошибка пишется в лог, а заявка не теряется.
Да, если token хранится на сервере, чат закрыт для посторонних, данные очищаются, а в сообщение не отправляются пароли, платёжные данные и лишняя персональная информация.
Отправка заявок с WordPress в Telegram помогает быстрее реагировать на обращения с сайта. Для простой задачи можно использовать готовый плагин. Для стабильной рабочей схемы лучше сделать серверную интеграцию через bot token, chat_id, wp_remote_post(), логи и резервное сохранение заявки.
Главное — не вставлять bot token во фронтенд, не делать Telegram единственным хранилищем заявки и не отправлять лишние персональные данные. Надёжная схема такая: WordPress принимает форму, сохраняет заявку, отправляет уведомление в Telegram, оставляет email или CRM как резерв и записывает ошибки в debug.log.
Об авторе