Не так давно появилась необходимость реализовать отправку сообщений с сайта в Telegram Бот. Ранее описывал работу с API VK, где в случае получении капчи отправлялось сообщение на почту. Этот вариант меня не совсем устроил, бывают задержки, по этому решил освоить API Telegram. Всё достаточно просто, необходимо только создать Telegram Bot, получить ключ (он же token) и ID чата. Дальше просто отправляем сообщение по средствам PHP.
API Telegram Bot и PHP — Отправка сообщений
Создаём Telegram Bot.
Для начала нам необходимо создать нашего бота и получить ключ. Для этих целей разработчиками создан бот «@BotFather«. Нам необходимо написать боту в чат несколько сообщений с нужными нам параметрами:
1. Для начала пишем сообщение «/start«. Нам в ответ вернут все возможные команды бота.
2. Отправляем боту команду «/newbot«.
3. Нам предлагают ввести имя нашего бота. Тут как вам будет угодно, я назвал «PechnekTest».
4. Теперь нам необходимо выбрать имя пользователя для бота, главное, что бы название нашего бота заканчивалось на «bot» (например TestBot или Test_bot). В моём случае «PechnekTest_Bot»
5. После всего мы увидим поздравления и наш токен.
6. Теперь добавляем в друзья нашего бота. Можно искать по имени что мы задали ранее.
Получаем Chat ID Telgram Bot -а.
Для того, что бы нам отправлять сообщения, нам необходимо узнать «chat id«, если по-простому, то идентификатор нашего чата. Для этого нам необходимо проделать ряд действий:
1. Написать что-то нашему боту, абсолютно любое сообщение. Нужно это для того, что бы мы могли достать наш chat id. Без этого метод API Telegram вернёт нам пустое значение.
2. В браузере выполняем следующую команду:
1 |
https://api.telegram.org/bot<token>/getUpdates |
<token> — сюда вставляем ранее полученный токен.
3. В результате мы получим ответ в формате json в котором будет наш telegram чат ID.
Отправляем сообщение средствами PHP в Telegram.
Теперь, когда мы получили token и ID чата телеграмм, мы можем проверить отправку сообщений в чат. Для этого необходимо в строку браузера ввести ссылку:
1 |
https://api.telegram.org/bot<token>/sendMessage?chat_id=<ID чата>&text=<text> |
<token> — Тут указываем наш токен.
<ID чата> — Здесь ID чата.
<text> — Тут любой текст.
Моя ссылка будет выглядеть так:
1 |
https://api.telegram.org/bot528023627:AAFbA1zhCTTm4oj-qMXpEpbzxdpOSiVy0Us/sendMessage?chat_id=421261142&text=Печенек много не бывает! |
Вставляем наш запрос в строку браузера, получим примерно следующее:
Заходим в телеграмм и видим наше сообщение.
Значит наш метод работает.
Отправка сообщения по средствам PHP.
Теперь самое вкусное. Реализуем отправку сообщений через PHP.
У меня была задача, необходимо было отлавливать ошибку в текстовом файле, после чего отправлять на почту. Реализовывал данный способ в данной статье: API VK и PHP — Автопостинг сообщений в группах. Решил заменить почту на телеграмм. В итоге написал такой скрипт:
1 2 3 4 5 6 7 8 9 10 11 12 |
<? if (strpos(file_get_contents("/mess.txt"), "error")){ //Проверяем файл mess.txt на наличие текста "error" $token = "528023627:AAFbA1zhCTTm4oj-qMXpEpbzxdpOSiVy0Us"; //наш токен от telegram bot -а $chatid = "421261142"; //ИД чата telegrm $mess = "Ошибка автопостинга. В текстовом файле найдена ошибка, пожалуйста проверьте!"; //сообщение, которое мы удем оправлять $tbot = file_get_contents("https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chatid."&text=".urlencode($mess)); //Если нашли ошибку отправляем сообщение в телеграмм } /* Если не нашли ошибку*/ ELSE{ ECHO "Всё ок!"; //выдаём текст } ?> |
К примеру у меня есть файл mess.txt, в нём ищем текст «error«, если текст найден, то выполняем запрос. В результате отправим сообщение в телеграмм.
По скрипту внёс комментарии, но всё же немного разжую.
mess.txt — тут указываем путь к файлу в котором будем искать.
error — текст который мы ищем в файле, в моём случае «error»
$token — Тут токен telegram bot -а, который мы получали ранее.
$chatid — ID чата телеграмма.
$mess — сообщение, которое мы отправляем в телеграмм
$tbot — тут запрос к API телеграмма, в неё подставляем значения из переменных.
Копируем наш скрипт в файл, с расширением «.php», желательно через Notepad++, и не забывайте менять кодировку на «UTF-8», иначе получите на выходе «кракозябры». Заливаем файл на хостинг. Дальше в браузере переходим по ссылке «Ваш домен/название файла.php», в моём случае будет «pechenek.net/telegram-sender.php». При выполнении скрипта получаю сообщение в телеграмм (я заранее в файл «mess.txt» внёс искомое значение).
Для тех, кто не может отправить из-за блокировки телеграмма, пример обращения к API через прокси:
12345678910111213141516171819202122232425262728293031 <?php// сюда нужно вписать токен вашего ботаdefine('TELEGRAM_TOKEN', '422983124:134235f45mewMQV7tcfdAYaiDvvISeUYfc6Gc');// сюда нужно вписать ваш внутренний айдишникdefine('TELEGRAM_CHATID', '42235651142');message_to_telegram('Привет!');function message_to_telegram($text) {$ch = curl_init();curl_setopt_array($ch,array(CURLOPT_URL => 'https://api.telegram.org/bot' . TELEGRAM_TOKEN . '/sendMessage',CURLOPT_POST => TRUE,CURLOPT_RETURNTRANSFER => TRUE,CURLOPT_TIMEOUT => 10,CURLOPT_POSTFIELDS => array('chat_id' => TELEGRAM_CHATID,'text' => $text,),CURLOPT_PROXY => '46.5.217.247:30485',CURLOPT_PROXYUSERPWD => 'login:password',CURLOPT_PROXYTYPE => CURLPROXY_HTTP,CURLOPT_PROXYAUTH => CURLAUTH_BASIC,));curl_exec($ch);}?>Не забудьте поменять CURLOPT_PROXY => ‘IP:PORT’ , укажите свой прокси (HTTP/SOCKS) с потром.
Ну и напоследок готовый файл скрипта можете скачать тут: Скачать
На этом пожалуй всё, надеюсь статья была вам полезной. Не забывайте пользоваться кнопками «Поделиться в соц. сетях», так же подписываться на наш Канал и группы в ВК, Twitter, Facebook.
Всем удачи и море печенек!
Скрипт почему то не работает. Ссылка с браузера исполняется, а вот с сервера нет.
Возможно не находит искомый текст в файле. Попробуйте указать полный путь. И что выдаёт если открыть PHP файл в браузере?
Подскажите, пожалуйста, как использовать sendMediaGroup, т.е. отправку нескольких фото за раз?
https://api.telegram.org/bot{-Variable.token-}/sendMediaGroup?chat_id={-Variable.user_id-}&media=[{«file_id»:»AgADAgADzagxGyoRaEljuWLsLhzZ3l4PnA4ABFDhLwVBZVGf6aUCAAEC», «file_id»:»AgADAgAD0KgxGyoRaEmAKpJyGvbCIYbBRg4ABDFgc0cwK4XkzkkAAgI»}]
Делаю запрос вот так, не работает(((
Честно говоря, с таким методом не сталкивался, не могу подсказать.
/sendMediaGroup?chat_id=183444444&media=[{«type»:»photo»,»media»:»AgADAgADhKgxG1rCkEk-rX7O8T5quYoYnA4ABNCVsOXH1MjTSMQCAAEC»},{«type»:»photo»,»media»:»AgADAgADhKgxG1rCkEk-rX7O8T5quYoYnA4ABNCVsOXH1MjTSMQCAAEC»}]
Здравствуйте, а как сделать чтобы с одного закрытого канала информация перекидывалась в другой, так сказать копировал и вставлял в другой чат
Добрый день. Теоретически, можно в переменную $mess подставлять нужный текст и рассылать на два чата.
https://api.telegram.org/botмойтокен/getUpdates
не возвращает json , совсем нечего, кроме того token сейчас не такой , как сейчас сделать нормально все?
Добавил код в статью выше, используя прокси можно отправить сообщения. Во всё виноват РКН….
По ссылке отрабатывает и приходят сообщения. А вот пхп не хочет( вариант который в конце статьи только удалил код для прокси. Запускаю с локального сервера, при исполнении файла ничего не происходит(
Никогда не работал с ПХП и тут решился всё же попробовать.
Запустил, приходят заказы интернет магазина на почту и что самое главное, в Телеграм Бот!
Спасибо за статью, всё очень круто!
Здравствуйте, подскажите, а как быть с ошибкой:
Warning: fopen(https://api.telegram.org/bot…
…failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request in…
На почту приходит, а в телеграм — нет.
Добрый день, а как выглядит полный запрос?
Добрый день! А можно как-то средствами PHP получить кол-во подписчиков канала?
Как его модифицировать, чтобы отправлять сообщение на несколько ‘TELEGRAM_CHATID’ ?
Как можно отправить сообщение нескольким ‘TELEGRAM_CHATID’ ?