Отправка сообщений в Telegram из PHP-скриптов
Отправка сообщений в Telegram из PHP-скриптов
Достаточно долгое время у меня были настроены уведомления с сайта на ICQ, это было очень удобно. Потом что-то изменилось в протоколе авторизации мессенджера, уведомления перестали приходить, разбираться с этим мне было лениво, в результате последние пару лет я жил без оперативного информирования. Решив исправить эту ситуацию, я начал искать альтернативы из числа мессенджеров, которыми постоянно пользуюсь. Viber отпал из-за сложностей регистрации бот-аккаунтов, остался Telegram. Вот на нем я и сделал своего информационного бота для сайта.
Первым делом надо зарегистрировать бота. Для этого надо зайти в приложение Telegram и открыть чат с @BotFather. Откроется список команд, где надо выбрать /newbot. Затем система попросит выбрать название бота и его имя, по которому бот будет доступен для поиска. Если к названию особых требований нет, то имя должно обязательно быть уникальным и заканчиваться на "bot".
Регистрируем бота
Там же можно настроить описание и выбрать аватарку, но, на мой взгляд, для информационного бота это уже лишнее.
Получаем токен
Когда все основные параметры будут введены, система выдаст вам персональный токен, с помощью которого можно будет работать с ботом через HTTP-запросы. Никому не передавайте этот токен, чтобы никто посторонний не получил к нему доступ. Если все же произошла утечка данных, то через @BotFather можно сгенерировать новый токен для вашего бота.
Если в настройках бота включен режим приватности (а он включен по умолчанию), то все сообщения, отправляемые ботом конкретному пользователю, не будут видны остальным подписчикам этого бота. Именно это нам и надо, ведь мы же не хотим, чтобы кто-то, случайно подписавшись на нашего бота, перехватывал все наши уведомления. Чтобы бот отправлял сообщения только нам, надо узнать идентификатор нашего чата.
Отправляем сообщение боту
Для этого подпишитесь на своего бота и отправьте ему любое сообщение. После этого в браузере надо сформировать ссылку следующего вида:
https://api.telegram.org/bot[token]/getUpdates
где [token] - это токен, полученный при регистрации бота. Например, для нашего бота ссылка будет вот такой:
https://api.telegram.org/bot629705209:AAFhFqFbhR3VHHrOgOM7R4OnQT-usqJwTBk/getUpdates
Если все сделано правильно, то в браузере откроется что-то подобное:
{"ok":true,"result":[
{
"update_id":434540657,
"message":{
"message_id":3,
"from":{
"id":698237240,
"is_bot":false,
"first_name":"Dmitry",
"language_code":"ru"
},
"chat":{
"id":698237240,
"first_name":"Dmitry",
"type":"private"
},
"date":1536053889,
"text":"Hello"
}
}
]}
Красным цветом выделен нужный нам идентификатор чата. Если ответ пустой, то напишите боту еще парочку сообщений в чат и сразу же обновите страницу в браузере. В связи с недавними событиями по неудачной блокировке Telegram недоумками из Роскомнадзора, сайт api.telegram.org у некоторых провайдеров может оказаться недоступен. В этом случае придется воспользоваться Tor Browser или каким-нибудь другим инструментом для обхода блокировок.
Теперь переходим к самому интересному - отправке сообщений из скрипта в наш чат. Для этого в API Telegram есть метод sendMessage. Он принимает как GET, так и POST запросы. Обязательными параметрами являются chat_id - идентификатор чата и text - текст сообщения. Пример вызова будет таким:
Code (PHP) : Убрать нумерацию
- // Токен бота и идентификатор чата
- $token='629705209:AAFhFqFbhR3VHHrOgOM7R4OnQT-usqJwTBk';
- $chat_id='698237240';
- // Текст сообщения
- $text='Привет, мир!';
- // Отправить сообщение
- $ch=curl_init();
- curl_setopt($ch, CURLOPT_URL,
- 'https://api.telegram.org/bot'.$token.'/sendMessage');
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_HEADER, false);
- curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
- curl_setopt($ch, CURLOPT_POST, true);
- curl_setopt($ch, CURLOPT_POSTFIELDS,
- 'chat_id='.$chat_id.'&text='.urlencode($text));
- curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
- // Настройки прокси, если это необходимо
- $proxy='111.222.222.111:8080';
- $auth='login:password';
- curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
- curl_setopt($ch, CURLOPT_PROXY, $proxy);
- curl_setopt($ch, CURLOPT_PROXYUSERPWD, $auth);
- // Отправить сообщение
- $result=curl_exec($ch);
- curl_close($ch);
Если вы вдруг закрыли чат с информационным ботом, то идентификатор чата придется получать заново. И, соответственно, прописать его в настройках. Это же касается и токена, при его изменении надо будет внести изменения и в скрипты.
Как видите, ничего сложного. Конечно, возможности API Telegram не ограничиваются только информированием, вы можете сделать, например, обратную связь и управлять функциями сайта прямо с телефона. Для моих задач это пока не нужно, но в будущем что-нибудь подобное я наверняка реализую.
Просмотров: 17544 | Комментариев: 5
Внимание! Статья опубликована больше года назад, информация могла устареть!
Комментарии
Отзывы посетителей сайта о статье
ManHunter
(05.05.2020 в 18:55):
Ты бы хоть язык подучил прежде чем выделываться
Donte
(04.05.2020 в 02:12):
Hay Gaus
Ellephant
(09.09.2018 в 20:31):
Теперь понятно, а я на моем HTML-сайте пошел другим путем, прикрутил кнопку\чат связанный с моим телеграмом.
з.ы. на своем портале прикрутил и твою кнопку ;)
з.ы. на своем портале прикрутил и твою кнопку ;)
ManHunter
(09.09.2018 в 20:26):
Ellephant, в телеграмм попадает любой каммент сразу после добавления, все сообщения из чата, а также всякие служебные моменты, типа попыток взлома.
Чат активен только с главной страницы, потому что реально задолбали писать туда камменты к статьям. Пришлось везде, кроме главной страницы, его вообще блокировать.
Как-то так.
Чат активен только с главной страницы, потому что реально задолбали писать туда камменты к статьям. Пришлось везде, кроме главной страницы, его вообще блокировать.
Как-то так.
Ellephant
(09.09.2018 в 19:42):
А где у тебя на сайте писать сообщения, что бы они попали в твой телеграм? Встроенный чат у меня не работает, окно для ввода текста не активно.
Добавить комментарий
Заполните форму для добавления комментария