Как отправлять заявки с сайта в Telegram
Когда я только начинал делать сайты, вся эта история с заявками была ну почти автоматической: кнопка на сайте, скромный php mail(), письмо летит на почту. И долгое время казалось, что это работает “и так хорошо”. Но однажды, три года назад, всё это «и так хорошо» превратилось для меня в очень конкретную потерю — клиент со сделкой на 150 тысяч рублей попросту исчез из-за того, что его заявка утонула в спаме. Почта решила, что лид — реклама, и никто об этом даже не узнал вовремя.
С того момента я сделал вывод: никакой романтики с e-mail больше быть не должно. Все новые проекты — только Telegram для передачи заявок. Решение оказалось эффективнее любой “классики”, к которой мы привыкли раньше.
Почему электронная почта уже не спасёт вас от потерь
По-хорошему, когда запускаешь новый сайт или лендинг под рекламу, хочется, чтобы всё было надёжно — ведь каждая заявка может стать деньгами. Но e-mail за последние годы стал напоминать старую квартиру с дырявой дверью: где-то постоянно “продувает”.
Почтовые сервисы требуют настроек вроде SPF и DKIM (это про то, чтобы письма считались своими, не поддельными), а если их чуть-чуть недонастроить — например, забыть добавить одну запись на хостинге — письма улетают в спам или теряются вовсе. Плюс даже если письмо дошло (победа!), оно может “запинаться” где-нибудь в очереди и пастись там 5–15 минут до появления у получателя.
И давайте честно: как часто ваш отдел продаж проверяет ящик? Я знаю случаи, когда менеджеры заглядывали туда раз в полдня…
C Telegram всё иначе: телефон всегда при них (у кого сейчас Telegram не закреплён на “быстрый доступ”?), уведомления всплывают мгновенно — и вот вы уже видите новую заявку. Я видел эту разницу сам: средняя скорость ответа по лидам у клиентов упала с 40 минут до каких-то 3–5.
В чём Telegram выигрывает у почты
За несколько лет работы с этим способом я вывел для себя несколько однозначных плюсов:
Молниеносная доставка. Push-уведомление за буквально секунду прилетает прямо на экран телефона — будь ты хоть в офисе, хоть в пробке.
Работа командой. Хочется устраивать бойцовский клуб за каждого клиента? Просто отправляйте заявки сразу в групповой чат отдела продаж. Кто первый увидел — тот и взял в обработку.
Минус фильтры и потери. Всё пришло – всё твое. Спам-фильтры здесь ни при чем, важную заявку Telegram никуда не денет.
Не надо тратить часы на интеграцию. Создать бота и написать пару десятков строк кода достаточно даже тому, кто вчера прочёл первый урок по PHP или Python.
Запасной вариант всегда рядом. На всякий случай рекомендую параллельно сохранять информацию о заявках ещё и в базу данных — мало ли что случится c Telegram API или самим ботом.
Здесь нет волшебства — просто чуть меньше поводов для паники из-за потерь лидов и больше уверенности: все горячие заявки всегда подсвечены уведомлением у нужного человека «под носом». Буквально пару раз видел ситуацию: писал клиенту через минуту после заявки — человек удивлялся скорости.
И самое забавное: иногда из такого подхода цепочка контактов получается живее и чище любой сложной CRM-интеграции.
А теперь к делу: создаём бота
Первый шаг — регистрация бота через официальный аккаунт @BotFather в Telegram. Отправляете команду /newbot, задаёте имя и получаете токен вида 123456789:ABcDefGHijklMNOpqrsTuVwxYz. Этот токен — ключ к вашему боту, храните его в надёжном месте, никогда не публикуйте в открытом коде где-либо.
Далее получаем chat_id — идентификатор чата, куда будут приходить сообщения. Для этого пишете что угодно вашему боту, а затем открываете в браузере адрес:
https://api.telegram.org/bot<ВАШ_ТОКЕН>/getUpdates
В ответе JSON находите поле «chat»:{«id»: и это число копируете — это ваш chat_id.
Пишем обработчик формы
Вот рабочий скрипт, который я использую в своих проектах. Он принимает данные из формы, отправляет их в Telegram и параллельно сохраняет в файл как резервную копию:
<?php
// Настройки бота
$botToken = 'ВАШ_ТОКЕН_БОТА';
$chatId = 'ВАШ_CHAT_ID';
// Получаем данные из формы
$name = htmlspecialchars(trim($_POST['name'] ?? ''));
$phone = htmlspecialchars(trim($_POST['phone'] ?? ''));
$email = htmlspecialchars(trim($_POST['email'] ?? ''));
$message = htmlspecialchars(trim($_POST['message'] ?? ''));
// Проверка на пустые обязательные поля
if (empty($name) || empty($phone)) {
die(json_encode(['status' => 'error', 'text' => 'Заполните обязательные поля!']));
}
// Формируем текст сообщения
$text = "Новая заявка с сайта!\n\n";
$text .= "Имя: $name\n";
$text .= "Телефон: $phone\n";
if (!empty($email)) {
$text .= "Email: $email\n";
}
if (!empty($message)) {
$text .= "Сообщение: $message\n";
}
$text .= "Время: " . date('d.m.Y H:i:s');
// Резервное сохранение в файл — на случай сбоя Telegram
$logEntry = date('Y-m-d H:i:s') . " | $name | $phone | $email | $message\n";
file_put_contents('orders_backup.txt', $logEntry, FILE_APPEND | LOCK_EX);
// Отправка в Telegram
$url = "https://api.telegram.org/bot$botToken/sendMessage";
$data = [
'chat_id' => $chatId,
'text' => $text,
'parse_mode' => 'HTML'
];
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$response = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
// Проверяем успешность отправки
if ($httpCode == 200) {
echo json_encode(['status' => 'success', 'text' => 'Заявка отправлена.']);
} else {
echo json_encode(['status' => 'partial', 'text' => 'Заявка сохранена, но не доставлена в Telegram!']);
}
?>
Пример HTML-формы, можно добавлять свои поля какие угодно, главное не забыть добавить их так же в обработчик формы:
<form id="orderForm" method="POST" action="send_telegram.php">
<input type="text" name="name" placeholder="Ваше имя" required>
<input type="tel" name="phone" placeholder="Телефон" required>
<input type="email" name="email" placeholder="E-mail">
<textarea name="message" placeholder="Сообщение"></textarea>
<button type="submit">Отправить заявку</button>
</form>
Как я борюсь с утерей данных
Если говорить честно, самая частая ловушка для всех новичков (да и опытных разработчиков) — представить себе, что Telegram API будет всегда стабильно работать, а токен бота никуда не денется. Но реальность любит удивлять: в один момент сервер Telegram может стать недоступен или ваш токен внезапно протухнет. Именно поэтому я обязательно заставляю код писать каждую заявку в отдельный файл — назову его orders_backup.txt. Это простой текстовый файл, но он лежит в стороне от всех внешних сервисов и собирает заявки на всякий пожарный случай — даже если Telegram «уходит в отпуск».
Конечно, если проект серьёзнее лендинга на три формы, рекомендую не полагаться на файлы. Тут выручает старая добрая база данных — MySQL отрабатывает на ура. Завёл минималистичную таблицу orders, где каждая заявка получает свои поля: id, имя, телефон, почта, сообщение, время создания и статус обработки. Казалось бы — мелочь, но если что-то падает (да хоть весь мессенджер), вы через базу поднимете любой лида за пару минут, не вспоминая слёзы маркетолога.
Ещё одна вещь из моего «чёрного ящика»: проверять данные нужно не только на клиенте с помощью красивого JavaScript (все мы любим валидировать инпуты), а обязательно продублировать фильтрацию и на сервере. Ведь тот пользователь из соседнего подъезда—который умеет открывать DevTools—без труда обойдёт ваши клиентские проверки и отправит прямое сообщение спам-боту или чего похуже.
Пара слов напоследок
Давайте по-честному: интеграция Telegram-уведомлений — это вообще не про очередную IT-моду (хотя тренд тоже есть), а про конкретный прирост конверсии. Вы практически мгновенно узнаёте о клиентском запросе, никакой потерянной почты и растерянных лидов при сбоях mail-сервисов. Главное правило личного спокойствия — всегда держать свой собственный бэкап: или файл с заказами под рукой, или стабильную базу. Тогда ни одно внешнее падение сервиса уже ничем вас не напугает — все обращения будут сохранены до последнего пользователя.