Blog. Just Blog

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

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Отправка сообщений в 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 - текст сообщения. Пример вызова будет таким:
  1. // Токен бота и идентификатор чата
  2. $token='629705209:AAFhFqFbhR3VHHrOgOM7R4OnQT-usqJwTBk';
  3. $chat_id='698237240';
  4.  
  5. // Текст сообщения
  6. $text='Привет, мир!';
  7.  
  8. // Отправить сообщение
  9. $ch=curl_init();
  10. curl_setopt($chCURLOPT_URL,
  11.        'https://api.telegram.org/bot'.$token.'/sendMessage');
  12. curl_setopt($chCURLOPT_RETURNTRANSFERtrue);
  13. curl_setopt($chCURLOPT_HEADERfalse);
  14. curl_setopt($chCURLOPT_SSL_VERIFYPEERfalse);
  15. curl_setopt($chCURLOPT_POSTtrue);
  16. curl_setopt($chCURLOPT_POSTFIELDS,
  17.        'chat_id='.$chat_id.'&text='.urlencode($text));
  18. curl_setopt($chCURLOPT_CONNECTTIMEOUT10);
  19.  
  20. // Настройки прокси, если это необходимо
  21. $proxy='111.222.222.111:8080';
  22. $auth='login:password';
  23. curl_setopt($chCURLOPT_HTTPPROXYTUNNEL1);
  24. curl_setopt($chCURLOPT_PROXY$proxy);
  25. curl_setopt($chCURLOPT_PROXYUSERPWD$auth);
  26.  
  27. // Отправить сообщение
  28. $result=curl_exec($ch);
  29. curl_close($ch);
Поскольку объем текста сообщения может быть значительным, я использую отправку через POST. Опять же по причине блокировок может получиться так, что ваш хостинг-провайдер или один из промежуточных узлов раздвинул булки перед Роскомнадзором и не пропускает прямые запросы к API Telergam. В этом случае придется воспользоваться каким-нибудь забугорным прокси-сервером. Лично я для своих нужд прикупил за малую денежку один прокси. В качестве проверенного сервиса могу порекомендовать Proxy.Market.

Если вы вдруг закрыли чат с информационным ботом, то идентификатор чата придется получать заново. И, соответственно, прописать его в настройках. Это же касается и токена, при его изменении надо будет внести изменения и в скрипты.

Как видите, ничего сложного. Конечно, возможности API Telegram не ограничиваются только информированием, вы можете сделать, например, обратную связь и управлять функциями сайта прямо с телефона. Для моих задач это пока не нужно, но в будущем что-нибудь подобное я наверняка реализую.

Поделиться ссылкой ВКонтакте
Просмотров: 17171 | Комментариев: 5

Метки: PHP
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

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

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0061 сек.) / Память: 4.5 Mb
Наверх