Отправка сообщений в 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 / 111347
https://messeng.ru/kak-napisat-novomu-cheloveku-v-telegramme/
В статье описан алгоритм отправки послания новому знакомому, приведены инструкции по отправке личных сообщений и пересылке месседжей Telegram.
Можно получить месяц бесплатно по промокоду semen21, напишите его в чат техподдержки на сайте
Не где не могу найти материал, как это можно реализовать?
Я думаю эта тема была бы топ если реализовать такое ))
Просто есть sendPhoto — для фото и есть sendDocument — для документов, вопрос такой есть ли общий переменная может как то объединить?
Мой снипет
Доки вообще старые.
Как вставлять документы?
Если скините форум как он работает и подключается было бы супер.
$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);
}
Очень помогла данная статья, создал и подключил бота, всё работает!
Но не пойму как добавить (подружить) этого бота с телеграмом менеджера. Т.е. мне сообщения приходят, а ему нет. /start боту на другом телеграмм акке сделали, но сообщения не приходят, только мне.
А подскажите, как быть с ошибкой:
Warning: fopen(https://api.telegram.org/bot…
…: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in…
На почту приходит, а в телеграм — нет.
В поиске нашел бота, добавил его, нажал Старт.
Отправляю заявку с сайта — приходит только на мой телефон. На телефоны менеджеров нет.
Как настроить, чтоб всем приходило?
если кому интересно
пишите на почту sms-ya@live.ru
если кому интересно
пишите на почту sms-ya@live.ru
Дело в том что этот знак почему-то теряется и в сообщении он заменяется пробелом, т.е. отправляем +7916... а приходит 7916...
Почему в учебнике есть описание этой функции а почему ставится точка перед этой функцией?
Простите новичка)
В следствии чего, с телефона можно сразу позвонить… :)
А так все отлично, шикарно работает, спасибо!
Просто добавьте хук email после telegram
Изображения не приходят в телеграм.
Делал ли кто-нибудь отправку изображений в Телеграм на сайте на MODx?
Напишите любой текст вашему боту, укажите bot token и нажмите получить Chat ID.
cms3.ru/kak-poluchit-chat-id-telegram/
Я умею узнавать его только таким образом. К примеру добавляю бота в конференцию, и пишу там. Или пишу ему сам. Что бы узнать, что и кто писал боту достаточно выполнить простой запрос
api.telegram.org/bot[ТОКЕН]/getUpdates
собственно в телеграм можно отправлять любую инфу. Например Gmail -> Telegram или RSS -> Telegram Возможности автоматизации безграничны