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

23.06.2021 в 20:08
643
+8

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

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

/newbot

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

После этого он попросит прислать username для бота - это адрес, используемый в телеге для поиска пользователей. Username бота должен заканчиваться словом bot. Я выбрал в качестве юзернейма webshakenotifier_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 WebShake\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
643
+8
Логические задачи с собеседований