Отправка сообщений в Telegram

Здравствуйте, дорогие друзья!
Сейчас мессенджеры играют важную роль в нашей жизни. Ведь все мы любим общаться :)
И вот одним из популярных мессенджеров является Telegram. На мой взгляд преимуществ у него много. И наверное каждый пользователь хотел бы получать сообщения с формы прямо в телеграмм! Ведь это круто, на дворе то уже 2017 год))
И как раз в данной статье я хочу показать Вам, как я настроил отправку сообщений с формы обратной связи в Telegram. Конечно всё это я реализовал для MODX, это не сложно реализовать и на каком-нибудь PHPMailer.
Схема использования очень проста, и выглядит так:

Предусовие: Настроена отправка сообщений через AjaxForm
Первым делом необходимо создать бота в Telegram с помощью этой инструкции
Дальше, после того как Вы создали бота, то у вас есть так называемый токен, который как раз нам и пригодится!
Отправка запросов
Все запросы к Telegram Bot API должны осуществляться через HTTPS в следующем виде:
https://api.telegram.org/bot<token>/НАЗВАНИЕ_МЕТОДА.
Все методы доступны в Telegram Bot API
Узнать id чата Telegram
Дальше необходимо узнать id чата, чтобы бот присылал сообщения с формы именно Вам!
Для этого необходимо что-нибудь написать своему боту и воспользоваться методом getUpdates.
После того как Вы написали своему боту, прописываем следующий адрес в браузере:
https://api.telegram.org/bot<token>/getUpdates
Вместо <token> необходимо прописать свой токен!
Если всё сделали правильно, то Вы получите ответ в виде массива. Для корректный работы нам необходимо id чата, он как-раз такие есть в этом массиве после "chat":{"id":<chat_id>"}
Так, id чата успешно получен, теперь попробуем отправить тестовое сообщение своему боту с браузера!
Отправка тестового сообщения
Чтобы отправить сообщение себе через бота, необходимо воспользоваться методом sendMessage. Для этого прописываем следующий адрес в браузере, вместо <token> и <chat_id> необходимо прописать свои данные!
https://api.telegram.org/bot<token>/sendMessage?chat_id=<chat_id>&text=Hello, world!
Нажимаем enter и вуаля, наше первое сообщение от нашего бота! Круто!!

Как вы заметили, текст сообщения мы прописали после метода text с типом string.
Отправка сообщений с формы
Ура мы всё настроили, теперь осталось самая главная часть, отправка сообщений с формы
Как я писал выше, предусловием является то, что Вы настроили отправку сообщений и они отправляются к Вам на почту. Неважно через AjaxForm или без него, главное что вы используете Formit.
А отправлять сообщения мы как раз будем с помощью Formit, а именно мы создадим так называемый хук.
Хук – это скрипт, который запускаются после того, как форма прошла валидацию. Каждый хук должен обязательно возвращать true в случае успеха и false в случае ошибки!
Итак, заходим в административную панель и переходим по вкладке элементы и там создаем сниппет FormitTelegram, который содержит следующий код:
<?php
$token = "<ВАШ ТОКЕН>";
$chat_id = "<ВАШ ID чата>";
$values = $hook->getValues();
#Получаем название формы
$formName = $modx->getOption('formName', $formit->config, 'form-'.$modx->resource->get('id'));
#Получаем ip адрес отправителя
$ip = $modx->getOption('REMOTE_ADDR', $_SERVER, '');
#Данные с формы
$name = $values['name-zv'];
$phone = $values['phone-zv'];
#Создаем массив
$arr = array(
"Имя" => $name,
"Телефон" => $phone,
"Название формы" => $formName,
"Айпи" => $ip);
/*Цикл по массиву (собираем сообщение) */
foreach($arr as $key => $value) {
$txt .= "<b>".$key."</b>: ".$value."%0A";
}
#Отправляем сообщение
$fp=fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={$txt}","r");
#Возвращаем true
return true;
Указываем токен и id чата!
Наименование полей с формы у вас могут быть другими, я использовал название полей со статьи, где мы настраивали отправку сообщений с модального окна!
К тому-же данные с формы можно получить сразу с помощью метода $hook->getValues(); но для наглядности я решил расписать всё подробнее))
Кстати строки в телеграмме я переношу с помощью %0A. Почему-то \n и <br/> не работали(
И так, теперь там где вызывается Formit, прописываем наш хук FormitTelegram в &hooks и проверяем. В итоге получим следующее сообщение:

Чтобы название формы было нормальным, то необходимо в вызове Formit необходимо указать параметр &formName=`Название формы`
Вот и всё, также можно настроить отправку сообщений и себе в ВК!
Если у Вы отправляете форму с помощью PHP, то на блоге smartlanding.biz есть грамотная инструкция, где всё подробно расписано с применением Ajax.
Надеюсь статья понравилась и очень полезная :)
Пишите в комментариях, чтобы вы ещё хотели реализовать с помощью ботов для телеграмма!
UPD
Воспользуйтесь методами компонента https://modstore.pro/packages/alerts-mailing/modtelegram
Очень удобно, особенно при отправке изображений :)
05.01.2017 / 154171