Заявку с сайта проще получать не на почту, а сразу в Telegram, в чат, который я и так открываю каждые пять минут. Интеграция с телеграм для приёма заявок с WordPress не требует стороннего плагина: хватает бота, токена и десятка строк кода в functions.php или в обработчике формы. Ниже рабочая схема, которую ставлю клиентам на связках с Contact Form 7, WooCommerce и обычной HTML-формой без фреймворков.
Как работает интеграция с телеграм без плагинов
Форма на сайте отправляет POST-запрос, PHP-хук перехватывает данные, собирает текст сообщения и через wp_remote_post уходит запрос к Telegram Bot API методом sendMessage. Никакого постоянного соединения или опроса сервера не нужно: сообщение долетает за секунду, как обычный HTTP-запрос к внешнему API.
Отдельная история, если бот должен не просто присылать заявки, а отвечать клиенту сам, задавать вопросы, вести диалог. Тогда речь уже про полноценного бота на aiogram с вебхуком, а не про одностороннюю отправку из формы, и это другая по сложности задача.
Создаю бота и узнаю chat_id для отправки сообщений
Бота регистрирую через @BotFather: команда /newbot, имя, юзернейм с окончанием bot, в ответ прилетает токен вида 123456789:AAExxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx. Дальше нужен chat_id, куда слать заявки.
Если принимаю заявки лично, пишу боту любое сообщение и запрашиваю getUpdates, там будет мой id. Если заявки должны видеть несколько человек в отделе продаж, создаю группу, добавляю туда бота администратором, пишу в группу что угодно и снова смотрю getUpdates, у групп id отрицательный.
curl -s "https://api.telegram.org/bot<TOKEN>/getUpdates"
curl -s -X POST "https://api.telegram.org/bot<TOKEN>/sendMessage" \
-d "chat_id=<CHAT_ID>" \
-d "text=Проверка связи"
Если второй curl вернул ok:true и сообщение прилетело в чат, токен и chat_id рабочие, можно переходить к коду на сайте.
Подключаю форму WordPress к Telegram через functions.php
Для самописной формы без плагинов делаю обработчик через admin-post.php: форма отправляется на wp-admin/admin-post.php с action, WordPress сам роутит запрос на нужную функцию.
add_action( 'admin_post_send_to_telegram', 'kd_send_to_telegram' );
add_action( 'admin_post_nopriv_send_to_telegram', 'kd_send_to_telegram' );
function kd_send_to_telegram() {
if ( ! isset( $_POST['kd_nonce'] ) || ! wp_verify_nonce( $_POST['kd_nonce'], 'kd_form' ) ) {
wp_die( 'Проверка не пройдена' );
}
$name = sanitize_text_field( $_POST['name'] ?? '' );
$phone = sanitize_text_field( $_POST['phone'] ?? '' );
$token = 'ВАШ_ТОКЕН';
$chat_id = 'ВАШ_CHAT_ID';
wp_remote_post( "https://api.telegram.org/bot{$token}/sendMessage", array(
'body' => array(
'chat_id' => $chat_id,
'text' => "Новая заявка с сайта\nИмя: {$name}\nТелефон: {$phone}",
),
) );
wp_redirect( home_url( '/spasibo/' ) );
exit;
}
В форме на странице добавляю скрытое поле action со значением send_to_telegram и nonce-поле через wp_nonce_field, метод POST, действие на admin-post.php. Токен и chat_id храню в wp-config.php через define, а не прямо в коде темы, чтобы не светить их при обновлении файлов.
Бесплатный материал
🎁 Полезный скрипт в подарок
Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.
Без спама. Отписка в 1 клик.
Что делать с Contact Form 7 и WooCommerce без установки моста
У Contact Form 7 есть хук wpcf7_mail_sent, который срабатывает после успешной отправки письма, и в нём можно достать все поля формы без единого дополнительного плагина.
add_action( 'wpcf7_mail_sent', 'kd_cf7_to_telegram' );
function kd_cf7_to_telegram( $contact_form ) {
$submission = WPCF7_Submission::get_instance();
if ( ! $submission ) {
return;
}
$data = $submission->get_posted_data();
$token = 'ВАШ_ТОКЕН';
$chat_id = 'ВАШ_CHAT_ID';
$text = "Заявка с формы: {$contact_form->title()}\n";
foreach ( $data as $key => $value ) {
if ( is_string( $value ) && $value !== '' ) {
$text .= "{$key}: {$value}\n";
}
}
wp_remote_post( "https://api.telegram.org/bot{$token}/sendMessage", array(
'body' => array(
'chat_id' => $chat_id,
'text' => $text,
),
) );
}
Для WooCommerce беру хук woocommerce_thankyou или woocommerce_new_order и собираю в сообщение состав заказа, сумму и способ оплаты. Если магазин принимает платежи через T‑Bank, полезно сразу писать в тексте статус оплаты, чтобы менеджер видел не просто заказ, а уже оплаченный заказ и брал его в работу без проверки в личном кабинете эквайринга.
Если задача шире, чем один хук, например нужно одновременно писать заявку в Telegram, создавать сделку в CRM и резервировать товар на складе, такую разработку интеграций между сайтом и внешними сервисами обычно веду отдельным проектом, а не одной функцией в теме.
Учитываю лимиты и безопасность отправки
У Telegram Bot API есть ограничение около 30 сообщений в секунду на бота и около 20 в минуту в один групповой чат. Для формы обратной связи это не проблема, а вот для магазина с потоком заказов в пиковые часы стоит закладывать очередь через cron или через отдельный сервис, а не слать напрямую из хука на каждый заказ.
Входящие данные из формы всегда экранирую перед отправкой: если в тексте есть символы разметки Markdown или HTML и в sendMessage указан parse_mode, чужой ввод может сломать форматирование сообщения. Проще не указывать parse_mode вообще и отправлять обычный текст, тогда экранировать почти нечего.
Персональные данные из заявок (имя, телефон, почта) храню только на сервере в РФ, где стоит сам WordPress, и не дублирую в сторонние облачные таблицы за рубежом. Сам чат в Telegram для внутренней команды это одно, а вот выгрузка контактов клиентов в зарубежный сервис для аналитики уже требует отдельной проверки по 152-ФЗ.
Сравниваю способы: код на functions.php, n8n и готовый плагин
| Способ | Что настраивается | Гибкость |
|---|---|---|
| Код в functions.php или отдельном обработчике | Хук на отправку формы, запрос к Bot API | Полная, меняю текст, кнопки и условия под задачу |
| Сценарий в n8n | Webhook-нода на сайте, HTTP-запрос к Telegram, без правки кода темы | Высокая, легко добавить ветку в CRM или таблицу без нового кода |
| Готовый плагин-интегратор | Установка и настройка в админке | Ограничена возможностями конкретного плагина |
Если сайт уже у меня на поддержке (от 15 000 ₽ в месяц), такую доработку добавляю в текущую работу. Если это разовая задача на сайте, который я вижу впервые, оцениваю стоимость после того, как посмотрю, сколько форм на сайте и куда заявки должны попадать кроме Telegram.
Когда клиент просит собрать всё через no-code без изменения кода WordPress, обычно предлагаю n8n: одна нода принимает вебхук с формы, другая пишет в Telegram, третья параллельно создаёт карточку в CRM. Такой сценарий с несколькими системами беру от 25 000 ₽. Двусторонний бот с командами и ответами клиенту на aiogram, а не просто пересылка заявок, оцениваю от 30 000 ₽, потому что там добавляется логика диалога и хранение состояния.
Если у клиента сайт на Tilda, а не на WordPress, принцип тот же, но код вставляется через встроенный редактор скриптов страницы, такую разовую доработку обычно веду от 3 000 ₽.
Частые вопросы
Нужен ли особый хостинг, чтобы WordPress мог отправлять запросы в Telegram
Нужен хостинг, с которого разрешены исходящие HTTPS-запросы к api.telegram.org. На практике это почти любой обычный хостинг, но встречаются провайдеры, которые режут исходящие соединения по расписанию или блокируют определённые IP-диапазоны Telegram. Если wp_remote_post возвращает ошибку соединения, а curl с того же сервера тоже не проходит, дело в сетевых ограничениях хостинга, а не в коде.
Как защититься от спама ботов, которые долбят форму на сайте
Добавляю honeypot-поле, скрытое от человека через CSS, но видимое ботам, и проверку nonce на стороне PHP. Если honeypot заполнен или nonce не совпадает, запрос в Telegram вообще не уходит. Капчу ставлю только если спам продолжается после этого, потому что она снижает конверсию формы для реальных посетителей.
Можно ли получать заявки одновременно в Telegram и на почту
Да, это просто два независимых действия в одном обработчике: сначала отправляю письмо через wp_mail как обычно, следом делаю запрос wp_remote_post к Telegram. Одно не мешает другому, а если Telegram по какой-то причине недоступен, письмо всё равно уйдёт, потому что вызовы не связаны между собой.
Что делать, если часть посетителей сайта не пользуется Telegram
Для клиента интеграция с телеграм касается только внутреннего уведомления команды, а не способа связи с посетителем сайта. Форма на сайте остаётся обычной, посетитель просто заполняет поля и жмёт отправить, а куда уходит уведомление, будь то почта, Telegram или оба канала сразу, для него никак не проявляется.