Отправка сообщений в 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 и вуаля, наше первое сообщение от нашего бота! Круто!! 

Отправка тестового сообщения боту Telegram

Как вы заметили, текст сообщения мы прописали после метода 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 и проверяем. В итоге получим следующее сообщение:

 Отправка сообщения с формы в Telegram

Чтобы название формы было нормальным, то необходимо в вызове Formit необходимо указать параметр &formName=`Название формы`

Вот и всё, также можно настроить отправку сообщений и себе в ВК!

Если у Вы отправляете форму с помощью PHP, то на блоге smartlanding.biz есть грамотная инструкция, где всё подробно расписано с применением Ajax.

Надеюсь статья понравилась и очень полезная :)

Пишите в комментариях, чтобы вы ещё хотели реализовать с помощью ботов для телеграмма!

Лучший способ выразить благодарность автору - поделиться с друзьями!

Спасибо, что поделились :)

Понравилась статья? Не хотите пропустить новые материалы от частного вебмастера?

Подписывайтесь на обновления блога

05.01.2017 / 26171

No avatar

Комментарии (22)

  1. Комментарий был удален.
    1. Комментарий был удален.
    2. Геннадий 09 марта 2018, 06:21 # 0
      Настроил у себя на сайте форму обратной связи с отправкой сообщений в телеграмм. Очень много спама, как от него избавиться?
      1. Дмитрий 10 февраля 2018, 00:18 # 0
        Подскажите как можно экранировать или правильно передать "+" плюс?
        Дело в том что этот знак почему-то теряется и в сообщении он заменяется пробелом, т.е. отправляем +7916... а приходит 7916...
        1. Игорь 10 февраля 2018, 01:12 # 0
          Здравствуйте. Скорее всего
          %2b
          Наверное нужно воспользоваться функцией urlencode() в PHP
          1. Дмитрий 10 февраля 2018, 02:05 # 0
            Вот так? — text=".urlencode($testmessage);
            Почему в учебнике есть описание этой функции а почему ставится точка перед этой функцией?
            Простите новичка)
            1. Дмитрий 10 февраля 2018, 03:30 # 0
              Спасибо большое, после череды проб и ошибок я написал приемлемый код, который выводит +7916
              В следствии чего, с телефона можно сразу позвонить… :)
              $arr = array(
                'Name: ' => $name,
                'Tel: ' => $phone
              );
              
              foreach($arr as $key => $value) {
                $txt .= "<b>".$key."</b> ".$value."\n";
              };
              
              //$sendToTelegram = fopen("https://api.telegram.org/bot{$token}/sendMessage?chat_id={$chat_id}&parse_mode=html&text={urlencode($txt)}","r");
              $sendToTelegram = file_get_contents('https://api.telegram.org/bot'.$token.'/sendMessage?chat_id='.$chat_id.'&parse_mode=html&text='.urlencode($txt));
              
              if ($sendToTelegram) {
              //   echo $new;
              //   echo"<p>Сообщение отправлено успешно!</p>";
                 header("refresh:1;url=$file");
              } else {
                 echo"<p>Сообщение не отправлено!</p>";
                 header("refresh:1;url=$file");
                 exit ("Ошибка");
              }
              1. Игорь 10 февраля 2018, 11:07 # 0
                Рад, что разобрались :)
              2. Егор 23 января 2018, 14:16 # 0
                Добрый день, возможно отправить сразу и на почту и в телеграм?)
                А так все отлично, шикарно работает, спасибо!
                1. Игорь 23 января 2018, 14:21 # 0
                  Добрый день. Да, конечно.
                  Просто добавьте хук email после telegram
                  1. Егор 23 января 2018, 14:31 # 0
                    Все просто огонь!, спасибо еще раз)
                  2. AndreyS 30 октября 2017, 12:56 # 0
                    Помогите плиз. Получилось настроить отправку данных с формы, но не отправляются изображения которые загружают посетители сайта через форму заявки.
                    Изображения не приходят в телеграм.
                    Делал ли кто-нибудь отправку изображений в Телеграм на сайте на MODx?
                    1. Мущщина 10 декабря 2017, 16:58 # 0
                      а изображеие ты из пхп в тел как шлешь? очевидно ему заголовк надо дать и это точно не plaintext
                    2. Alex_kuimov 16 октября 2017, 22:34(Комментарий был изменён) # 0
                      Написал небольшой сервис для того что бы узнать chat id
                      Напишите любой текст вашему боту, укажите bot token и нажмите получить Chat ID.
                      cms3.ru/kak-poluchit-chat-id-telegram/
                      1. Данил 31 октября 2017, 13:38 # 0
                        А как на форме убрать надпись smartland.biz???
                      2. Александр 24 июня 2017, 17:45 # 0
                        Самое сложное для меня здесь было узнать этот злополучный chat_id.

                        Я умею узнавать его только таким образом. К примеру добавляю бота в конференцию, и пишу там. Или пишу ему сам. Что бы узнать, что и кто писал боту достаточно выполнить простой запрос

                        api.telegram.org/bot[ТОКЕН]/getUpdates
                        1. Alex 03 февраля 2017, 22:45 # 0
                          Очень интересно. А можно мануал для wp и контакт форм7?
                          1. Игорь 03 февраля 2017, 23:26 # 0
                            К сожалению еще не разбирался в WordPress (
                            1. Alex 05 февраля 2017, 19:30 # 0
                              понял… ну в принципе решилось… IFTTT подключил телеграм… потестил- все работает…
                              1. Игорь 06 февраля 2017, 00:44 # 0
                                Здорово! Рад, что разобрались)
                                1. mido 07 июня 2017, 18:11 # 0
                                  поделитесь решением, если не трудно)
                                  1. Alex 08 июня 2017, 20:15(Комментарий был изменён) # 0
                                    подключаетесь через сервис автоматизации ifttt.com там есть канал Телеграмм.
                                    собственно в телеграм можно отправлять любую инфу. Например Gmail -> Telegram или RSS -> Telegram Возможности автоматизации безграничны