Идеальная замена обычных уведомлений на почту — это telegram. Заявка сразу прилетает в месенджер, не нужно постоянно проверять почту. Кроме того, избавляемся от проблем исходящей почты на сервере.
Часто на хостинге отключена возможность рассылки почты. Также, из-за спама могут закрыть порты на сервере. Поэтому будем использовать уведомления в телеграм!
Как настроить отправку уведомлений с сайта в телеграм на php
Создаем бота в телеграм
Для начала нам понадобится бот. Создаем его через botfather, сохраняем токен. Сложностей возникнуть не должно, инструкций много. Далее идем на сайт.
Форма обратной связи — пример
Возьмем для примера простую форму обратной связи:
1 2 3 4 5 6 7 | <form action="" method="POST"> Введите Ваше имя: <br><input type="text" placeholder="Ваше имя" name="call_user"><br><br> Контакт для обратной связи <br>(<i>это может быть эмейл или телеграм-аккаунт</i>): <br><input type="text" placeholder="*Email или телеграм" name="us_contact" required><br><br> Сообщение: <br><textarea name="mymes" cols="40" rows="10" placeholder="*Напишите здесь текст" required></textarea><br> <button class="btn-fill-primary" type="submit">Отправить</button> </form> * - обязательные поля. |
Поля: имя (необязательно), контакт (обязательно, эмейл или телеграм) и сам текст сообщения (обязательный). Дальше нужен обработчик формы.
Напишем обработчик на php
Выкладываю код обработчика с комментариями:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | <?php $userId = '264121246'; // Id телеграм аккаунта, куда отправлять сообщения $token = '101543549:AAJDsandkWEuhsd434Sd23G8'; // Token бота, если что - он ненастоящий :) $user_name = ' ('.$_POST["call_user"].')'; // Скобки для красоты, мне так удобнее $user_contact = $_POST["us_contact"]; // Данные с поля "контакт пользователя" $user_text = $_POST["mymes"]; // Текст сообщения if (!empty($user_contact) and !empty($user_text)) { // Если поля "контакт" и "текст" не пусты. Дополнительная проверка при обработке формы (если будут боты слать запросы) $msg = '*Заявка с сайта bdseo.ru* '; // Делаем первую строку "жирной". Переводы строки для удобства в телеграме. $msg .= $user_contact.$user_name; // Добавляем в текст поле "контакт" и имя $msg .= ' пишет: '.$user_text; // Добавляем текст сообщения. Перевод строки опять же для удобства file_get_contents('https://api.telegram.org/bot'. $token .'/sendMessage?chat_id='. $userId .'&text=' . urlencode($msg) . '&parse_mode=markdown'); // Отправляем запрос. Разметка - markdown echo "<strong>Спасибо, мы получили Ваше сообщение.</strong><hr>"; // Выводим сообщение что заявка ушла } ?> |
Самое главное тут file_get_contents, через него и делаем отсылку заявку на телеграм. Если нужны дополнительные данные (ошибка или вывод «ответа» от сервера телеграм), поместите file_get_contents в переменную и выводите ее или сохраняйте в логи.
Куда это все разместить
Смотря где у Вас форма и где обработчик (куда уходят данные, action). У меня все на одной странице.
Как отправить заявку нескольким аккаунтам
Способов много. Создайте еще один file_get_contents, или массив с id аккаунтов и используйте цикл (например, foreach).
Не приходят уведомления с формы — что делать
В самом начале нужно со своего аккаунта написать боту. Можно нажать стандартный /start, чтобы аккаунт стал «доверенным» и бот мог слать ему сообщения. Дальше главное правильно прописать id. Как узнать свой телеграм ID — напишите боту @my_id_bot.
Если это не помогло, нужно смотреть ответ после запроса.
Как заменить отправку на эмейл отправкой в телеграм
Уберите mail() с его данными и используйте file_get_contents. Адаптируйте поле с сообщением ($msg), добавьте туда все данные с формы.
Результат отправки заявки в телеграм с сайта
Вот как это примерно выглядит в телеграме:
Форма простая, обработчик тоже; «почтовые» порты на хостинге или сервере не нужны. И заявки моментально прилетают в телеграм. Удобно.
підкажіть будь ласка, а як робите редірект на головну?
Загалом все працює, але після відправки повідомленна залишається сторінка /*.php
Добрий день,
будь-яким зручним способом (яваскрипт або рнр), наприклад:
header(“Location: http://site.ru/”);
exit();
Якщо вам не потрібна аякс-відповідь, то після file_get_contents вставляємо код і все.