Как сделать уведомления в телеграм на PHP

23.06.2021 в 20:08
2358
+9

Привет! Сегодня поговорим о том, как можно отправить себе сообщение в телеграмме с помощью PHP. Это удобно использовать, когда нужно получить уведомление о каком-то событии, произошедшем на бэкенде. Например, я таким образом получаю уведомления о новых комментариях к урокам.

Первое, что нам нужно сделать - это зарегать в телеге нового бота. Это делается при помощи другого бота, которого зовут @BotFather. Пишем ему команду:


/newbot

В ответ он попросит написать ему имя бота. Я назвал своего PhpZoneNotifier. Пишем, отправляем.

После этого он попросит прислать username для бота - это адрес, используемый в телеге для поиска пользователей. Username бота должен заканчиваться словом bot. Я выбрал в качестве юзернейма phpzonenotifier_bot. Отправляем.

токен бота

В ответ получаем токен вида 123:ABCDEF. С помощью этого токена мы можем авторизоваться в телеге от имени этого бота.

Теперь нужно узнать наш собственный id в телеграме. По нему бот будет отправлять нам сообщения. Чтобы узнать этот айдишник, нужно написать боту @userinfobot команду /start.

user id в телеге

После того, как мы получили 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 из кода и добавить корректную обработку исключений.

loader
23.06.2021 в 20:08
2358
+9
Логические задачи с собеседований