Отправка сообщений в 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.

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

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

UPD

Воспользуйтесь методами компонента https://modstore.pro/packages/alerts-mailing/modtelegram 
Очень удобно, особенно при отправке изображений :)

05.01.2017 / 146914

No avatar

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

  1. Гильванова Сюмбель Раифовна 11 ноября 2025, 15:19 # 0
    ИЗ формы
    1. Владимир 07 апреля 2025, 08:55 # 0
      В нынешнем 2025 году телега не обломала ничего, всё так же настраивается и работает? Кто в курсе?
      1. Игорь 07 апреля 2025, 12:19 # 0
        Приветствую, все также настраивается
      2. Марина Ковалева 07 октября 2023, 20:41 # 0
        Функционал мессенджера Telegram предусматривает возможность отсылки месседжей на телефонные номера, отсутствующие внутри списка контактов. Не ошибиться при выполнении данной операции пользователю поможет инструкция, предложенная ниже:
        https://messeng.ru/kak-napisat-novomu-cheloveku-v-telegramme/
        В статье описан алгоритм отправки послания новому знакомому, приведены инструкции по отправке личных сообщений и пересылке месседжей Telegram.
        1. Алексей 25 июля 2022, 15:32 # 0
          Здравствуйте! А как сделать чтобы приходили данные с чекбоксов формы? Данный скрипт их не выводит
          1. Ильвар 11 января 2023, 15:10 # 0
            никак увы
            1. Кирилл 20 января 2025, 10:50 # 0
              Легко могу исходник кинуть пиши в ТГ @Pmcwaqnerr
            2. Яна 23 мая 2022, 18:38 # 0
              Кто захочет подцепить бота в группу, добавьте также в группу бота Get My ID, он выдаст Current chat ID начинающийся с минуса, его и нужно использовать в сниппете
              1. Shahzod 11 января 2022, 13:50 # 0
                Всем привет. Готовы ли вы к этому проекту? По какой-то причине я не мог использовать то, что я сделал. По возможности скиньте .zip
                1. Сергей 27 ноября 2021, 20:58 # 0
                  Я перевел своих клиентов на webjack, делает все то же самое, минимальный тариф дешевле.
                  Можно получить месяц бесплатно по промокоду semen21, напишите его в чат техподдержки на сайте
                  1. Jstart 08 ноября 2021, 15:09(Комментарий был изменён) # 0
                    Как возможно прикрепить файлы например фотографии и документы и отправить?
                    Не где не могу найти материал, как это можно реализовать?
                    Я думаю эта тема была бы топ если реализовать такое ))
                    Просто есть sendPhoto — для фото и есть sendDocument — для документов, вопрос такой есть ли общий переменная может как то объединить?
                    Мой снипет
                    <?php
                    $token = "0000000";
                    $chat_id = "0000000000";
                    
                    $values = $hook->getValues();
                    
                    // Получаем название формы
                    $formName = $modx->getOption('formName', $formit->config, 'form-'.$modx->resource->get('id'));
                    
                    // Получаем ip адрес отправителя
                    $ip = $modx->getOption('REMOTE_ADDR', $_SERVER, '');
                    
                    
                    // Берем данные с формы
                    $name= $values[name];
                    $phone= $values['phone'];
                    $email= $values['email'];
                    $length= $values['length'];
                    $width= $values['width'];
                    $height= $values['height'];
                    $circulation= $values['circulation'];
                    
                    
                    $arr = array(
                    "IP" => $ip,
                    "Длина" => $length,
                    "Ширина" => $width,
                    "Высота" => $height,
                    "Количество" => $circulation,
                    "Имя" => $name,
                    "Телефон" => $phone,
                    "Email" => $email);
                    if($length){
                    	$arr["Длина"] = $length;
                    }
                    if($width){
                    	$arr["Ширина"] = $width;
                    }
                    if($height){
                    	$arr["Высота"] = $height;
                    }
                    if($circulation){
                    	$arr["Количество"] = $circulation;
                    }
                    if($email){
                    	$arr["Email"] = $email;
                    }
                    if($phone){
                    	$arr["Телефон"] = $phone;
                    }
                    
                    if($email){
                    	$arr["Email"] = $email;
                    }
                    
                    
                    
                    $txt = '<b>Заполнена форма - '.$formName."</b>\n";
                    // Цикл по массиву (собираем сообщение)
                    foreach($arr as $key => $value) { 
                         $txt .= "<b>".$key."</b>: ".$value." \n"; 
                      }
                    
                    // Отправляем сообщение посредством cURL
                    $website="https://api.telegram.org/bot".$token;
                    $params=[
                        'chat_id' => $chat_id,
                        'text' => $txt,
                    'parse_mode' => 'html'
                    ];
                    
                    $ch = curl_init($website . '/sendMessage');
                    curl_setopt($ch, CURLOPT_HEADER, false);
                    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                    curl_setopt($ch, CURLOPT_POST, 1);
                    curl_setopt($ch, CURLOPT_POSTFIELDS, ($params));
                    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                    $result = curl_exec($ch);
                    $modx->log(MODX_LOG_LEVEL_ERROR, $result);
                    curl_close($ch);
                    
                    //Возвращаем true – это особенность написания хуков для FormIt.
                    return true;
                    
                    1. Игорь 09 ноября 2021, 21:59 # 0
                      Воспользуйтесь данным компонентом modstore.pro/packages/alerts-mailing/modtelegram
                      1. jstart 10 ноября 2021, 00:40 # 0
                        Оно не понятное, и смысла не вижу от него, как с формой работать, как подключать, нету не какой информации.
                        Доки вообще старые.
                        Как вставлять документы?
                        Если скините форум как он работает и подключается было бы супер.
                        1. jstart 10 ноября 2021, 00:44(Комментарий был изменён) # 0
                          Это же чат и всё, смысла нет, нужна именно форма для отправки заявки, спасибо конечно, но это не подходит уже смотрел.
                        2. Сергей 15 апреля 2021, 13:29 # 0
                          Как указать два или более $chat_id = "<ВАШ ID чата>";?
                          1. Игорь 15 апреля 2021, 13:33 # 0
                            Создайте цикл foreach и отправляйте
                            1. Сергей 15 апреля 2021, 15:16 # 0
                              Вроде работает

                              $recipients = array(
                              '1111111','222222','3333333'
                              );

                              $website=«api.telegram.org/bot».$token;
                              foreach($recipients as $id) {
                              $params=[
                              'chat_id' => $id,
                              'text' => $txt,
                              'parse_mode' => 'html'
                              ];
                              $ch = curl_init($website. '/sendMessage');
                              curl_setopt($ch, CURLOPT_HEADER, false);
                              curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
                              curl_setopt($ch, CURLOPT_POST, 1);
                              curl_setopt($ch, CURLOPT_POSTFIELDS, ($params));
                              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
                              $result = curl_exec($ch);
                              $modx->log(MODX_LOG_LEVEL_ERROR, $result);
                              curl_close($ch);

                              }
                            2. Евгений 25 марта 2021, 16:28 # 0
                              Добрый день.
                              Очень помогла данная статья, создал и подключил бота, всё работает!

                              Но не пойму как добавить (подружить) этого бота с телеграмом менеджера. Т.е. мне сообщения приходят, а ему нет. /start боту на другом телеграмм акке сделали, но сообщения не приходят, только мне.
                              1. Доминик 30 ноября 2020, 18:06 # 0
                                Здравствуйте. Сообщение научился отправлять, а вот как отправить файлы не получается?
                                1. Игорь 30 ноября 2020, 18:11 # 0
                                  Вам необходимо отправлять изображения или именно файлы?
                                2. iluha 26 декабря 2019, 10:36 # 0
                                  Здравствуйте.
                                  А подскажите, как быть с ошибкой:

                                  Warning: fopen(https://api.telegram.org/bot…
                                  …: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in…


                                  На почту приходит, а в телеграм — нет.
                                  1. Игорь 26 декабря 2019, 15:22 # 0
                                    Попробуйте компонент modstore.pro/packages/alerts-mailing/modtelegram
                                    $modtelegram = $modx->getService('modtelegram');
                                    $modtelegram->telegramSendMessage(array(
                                     'chat_id'   => '1111111111',
                                     'text'        => 'текст сообщения',
                                    ));
                                  2. Игорь 02 октября 2019, 14:56 # 0
                                    Добрый день. Как данный хук переделать под FormLister для ModX Evo?
                                    1. Евгений 16 февраля 2019, 12:27 # 0
                                      Не приходят сообщения на другие телефоны.
                                      В поиске нашел бота, добавил его, нажал Старт.
                                      Отправляю заявку с сайта — приходит только на мой телефон. На телефоны менеджеров нет.
                                      Как настроить, чтоб всем приходило?
                                      1. Игорь 16 февраля 2019, 12:55 # 0
                                        Нужно либо отправлять в цикле каждому, либо создать групповой чат и отправлять туда
                                        1. Евгений 16 февраля 2019, 13:08 # 0
                                          С групповым чатом как сделать? Добавить туда бота?
                                          1. Игорь 16 февраля 2019, 14:03 # 0
                                            Да, верно. Там id чата будет начинаться с минуса
                                            1. Евгений 16 февраля 2019, 14:12 # 0
                                              Спасибо. Сработало.
                                            2. ilya 03 сентября 2018, 00:54 # 0
                                              Могу помочь с этим,
                                              если кому интересно
                                              пишите на почту sms-ya@live.ru
                                              1. Петр 27 августа 2018, 18:41 # 0
                                                как вариант можно https://formfor.site/ использовать
                                                1. ilya 26 мая 2018, 02:04 # 0
                                                  Могу помочь с этим,
                                                  если кому интересно
                                                  пишите на почту sms-ya@live.ru
                                                  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
                                                                Рад, что разобрались :)
                                                                1. Сергей 30 января 2021, 14:39 # 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 Возможности автоматизации безграничны