Интеграция формы обратной связи на сайте с Telegram — удобный способ получать сообщения от пользователей напрямую в мессенджер, минуя почту. Многие ищут, как сделать это без использования плагинов, чтобы минимизировать нагрузку на сайт и повысить безопасность. В этой статье рассмотрим, как реализовать отправку данных формы WordPress на Telegram с помощью простого кода и Telegram Bot API.
Создание Telegram-бота и получение токена
Первым шагом нужно создать Telegram-бота. Для этого:
- Откройте Telegram и найдите бота
@BotFather. - Отправьте команду
/newbotи следуйте инструкциям: задайте имя и уникальное имя пользователя бота. - После создания вы получите токен — длинную строку, которая используется для отправки сообщений через API.
Запишите токен — он понадобится в коде.
Получение chat_id для отправки сообщений
Чтобы бот мог отправлять сообщения в ваш чат, нужно узнать chat_id. Для этого:
- Отправьте любое сообщение вашему боту в Telegram.
- Перейдите по адресу в браузере, подставив свой токен:
https://api.telegram.org/botТОКЕН/getUpdates - В ответе найдите параметр
chat->id— это и естьchat_id.
Можно использовать chat_id и для групповых чатов, если добавить туда бота и выдать права.
Создание HTML-формы для отправки данных
Добавим на страницу WordPress простую форму обратной связи. Пример HTML-кода:
<form method="post" action="" id="wptest-telegram-form">
<label for="name">Имя:</label>
<input type="text" name="name" id="name" required />
<br />
<label for="message">Сообщение:</label>
<textarea name="message" id="message" required></textarea>
<br />
<input type="submit" name="wptest_send" value="Отправить" />
</form>
Форма простая и понятная, собирает имя и сообщение пользователя.
Обработка формы и отправка сообщения в Telegram через PHP
Далее добавим код обработки формы в файл functions.php вашей темы или в отдельный плагин. В коде реализуем функцию wptest_send_form_to_telegram, которая проверит отправку формы, сформирует сообщение и отправит его через API.
function wptest_send_form_to_telegram() {
if (isset($_POST['wptest_send'])) {
$name = sanitize_text_field($_POST['name']);
$message = sanitize_textarea_field($_POST['message']);
$bot_token = 'ВАШ_ТОКЕН_БОТА';
$chat_id = 'ВАШ_CHAT_ID';
$text = "Новое сообщение с сайта:\n";
$text .= "Имя: " . $name . "\n";
$text .= "Сообщение: " . $message;
$send_text = urlencode($text);
$url = "https://api.telegram.org/bot" . $bot_token . "/sendMessage?chat_id=" . $chat_id . "&text=" . $send_text;
$response = wp_remote_get($url);
if (is_wp_error($response)) {
echo '<div style="color:red;">Ошибка при отправке сообщения в Telegram.</div>';
} else {
echo '<div style="color:green;">Сообщение успешно отправлено.</div>';
}
}
}
add_action('wp_head', 'wptest_send_form_to_telegram');
Объяснение кода:
- Проверяем, отправлена ли форма с помощью
isset($_POST['wptest_send']). - Очищаем входные данные с помощью функций WordPress
sanitize_text_fieldиsanitize_textarea_field. - Формируем текст сообщения и кодируем его для URL.
- Делаем GET-запрос к Telegram API для отправки сообщения.
- Проверяем ответ и выводим сообщение об успехе или ошибке.
Как улучшить безопасность и UX формы
Для безопасности и удобства пользователей стоит добавить несколько улучшений:
1. Проверка nonce для защиты от CSRF
Добавьте nonce-поле в форму:
<?php wp_nonce_field('wptest_telegram_form_action', 'wptest_telegram_form_nonce'); ?>
И проверяйте его в обработчике:
if (!isset($_POST['wptest_telegram_form_nonce']) || !wp_verify_nonce($_POST['wptest_telegram_form_nonce'], 'wptest_telegram_form_action')) {
wp_die('Ошибка безопасности.');
}
2. Использование AJAX для отправки без перезагрузки
Чтобы улучшить пользовательский опыт, можно отправлять форму через AJAX. Пример минимальной реализации:
jQuery(document).ready(function($) {
$('#wptest-telegram-form').submit(function(e) {
e.preventDefault();
$.post(ajaxurl, $(this).serialize(), function(response) {
alert(response.data.message);
});
});
});
В PHP тогда нужно добавить обработчик AJAX-запроса.
3. Валидация данных на клиенте и сервере
Для предотвращения ошибок и спама проводите валидацию не только на клиенте (JavaScript), но и на сервере.
Пример расширенного кода с AJAX и nonce
Ниже пример функции для обработки AJAX-запроса и отправки сообщения в Telegram:
function wptest_ajax_send_to_telegram() {
check_ajax_referer('wptest_telegram_form_action', 'nonce');
$name = sanitize_text_field($_POST['name']);
$message = sanitize_textarea_field($_POST['message']);
if (empty($name) || empty($message)) {
wp_send_json_error(['message' => 'Пожалуйста, заполните все поля']);
}
$bot_token = 'ВАШ_ТОКЕН_БОТА';
$chat_id = 'ВАШ_CHAT_ID';
$text = "Новое сообщение с сайта:\nИмя: " . $name . "\nСообщение: " . $message;
$send_text = urlencode($text);
$url = "https://api.telegram.org/bot" . $bot_token . "/sendMessage?chat_id=" . $chat_id . "&text=" . $send_text;
$response = wp_remote_get($url);
if (is_wp_error($response)) {
wp_send_json_error(['message' => 'Ошибка при отправке сообщения в Telegram']);
} else {
wp_send_json_success(['message' => 'Сообщение успешно отправлено']);
}
}
add_action('wp_ajax_wptest_send_to_telegram', 'wptest_ajax_send_to_telegram');
add_action('wp_ajax_nopriv_wptest_send_to_telegram', 'wptest_ajax_send_to_telegram');
Не забудьте подключить скрипт с AJAX-обработчиком и передать параметр ajaxurl, а также nonce.
Полезные плагины для интеграции Telegram с WordPress
Если вы хотите готовое решение с расширенными возможностями, посмотрите плагины на WPSHOP.ru:
- WP Telegram — популярный плагин для отправки уведомлений и сообщений.
- My Popup — можно связать с Telegram для уведомлений о подписках.
Но если нужна легкая и кастомная интеграция — лучше пользоваться кодом, описанным выше.