Как сделать уведомления в телеграм на PHP
Привет! Сегодня поговорим о том, как можно отправить себе сообщение в телеграмме с помощью PHP. Это удобно использовать, когда нужно получить уведомление о каком-то событии, произошедшем на бэкенде. Например, я таким образом получаю уведомления о новых комментариях к урокам.
Первое, что нам нужно сделать - это зарегать в телеге нового бота. Это делается при помощи другого бота, которого зовут @BotFather. Пишем ему команду:
/newbot
В ответ он попросит написать ему имя бота. Я назвал своего PhpZoneNotifier. Пишем, отправляем.
После этого он попросит прислать username для бота - это адрес, используемый в телеге для поиска пользователей. Username бота должен заканчиваться словом bot. Я выбрал в качестве юзернейма phpzonenotifier_bot. Отправляем.
В ответ получаем токен вида 123:ABCDEF. С помощью этого токена мы можем авторизоваться в телеге от имени этого бота.
Теперь нужно узнать наш собственный id в телеграме. По нему бот будет отправлять нам сообщения. Чтобы узнать этот айдишник, нужно написать боту @userinfobot команду /start.
После того, как мы получили auth token бота и наш id, можно приступать к написанию кода для отправки. Телеграм предоставляет довольно простой API для этого дела. Всё что нужно - это отправить POST-запрос на адрес:
https://api.telegram.org/bot{BOT_AUTH_TOKEN}/sendMessage
Где вместо {BOT_AUTH_TOKEN} подставить токен бота, полученный выше.
В теле запроса нужно передать 2 параметра:
-
chat_id - сюда передаём наш id пользователя
- text - сюда передаём текст сообщения
Для отправки запроса я использовал Guzzle.
<?php
namespace PhpZone\Services;
use GuzzleHttp\Client;
use GuzzleHttp\RequestOptions;
class TelegramNotifier
{
public static function notify($text)
{
$client = new Client();
try {
$client->post('https://api.telegram.org/bot1869549332:AAGhlRm5*************/sendMessage', [
RequestOptions::JSON => [
'chat_id' => 298160970,
'text' => $text,
]
]);
} catch (\Exception $e) {
var_dump($e->getMessage());
}
}
}
После чего пытаемся отправить сообщение, вызвав:
TelegramNotifier::notify('lol kek cheburek');
И видим, что произошло исключение. var_dump вывел следующее:
{"ok":false,"error_code":400,"description":"Bad Request: chat not found"}
Так происходит потому что у бота нет чата с вами. Это защита телеги от рассылки спама - чтобы боту было позволено вам писать, вы сначала должны сами написать боту. Так что просто пишем нашему новому боту /start и снова пробуем запустить наш PHP-скриптик.
Получаем наше заветное уведомление.
Изи. Не забываем убрать отладочный var_dump из кода и добавить корректную обработку исключений.
Комментарии