Уведомления Laravel отлично подходят, когда вам нужно отправлять уведомления по различным каналам. На основе документации первоначальным вариантом их использования является отправка быстрых информационных сообщений, которые уведомляют пользователей о том, что произошло в вашем приложении. Например, если вы пишете заявку на выставление счетов, вы можете отправить уведомление «Счет оплачен» своим пользователям по электронной почте и SMS-каналам.
Тем не менее, они не должны быть ограничены только этими типами уведомлений. Например, на этом сайте каждый раз, когда публикуется новый пост, я хочу, чтобы он выходил на все различные социальные каналы, и сообщество создало множество драйверов для различных сервисов.
Одной из новых областей, которую я создал несколько месяцев назад, является группа Telegram только для чтения Laravel News, и в прошлом я вручную добавлял в нее новые сообщения дня. Как вы можете себе представить, однажды я забыл сделать это, затем на следующий и так далее. Я знал, что мне нужно автоматизировать отправку новых сообщений, и именно здесь появляется пакет уведомлений Telegram, давайте посмотрим, как получить эту настройку и автоматическую отправку уведомлений в вашу комнату Telegram.
Создание Telegram-бота
Прежде чем вы сможете отправлять сообщения в комнату, вы должны создать бота. Для начала отправьте новое сообщение на @BotFather, и оно выглядит следующим образом:
You: /newbot
BotFather: Alright, a new bot. How are we going to call it? Please choose a name for your bot.
You: MyTestBot
BotFather: Good. Now let's choose a username for your bot. It must end in bot. Like this, for example: TetrisBot or tetris_bot.
You: MyNewBot
BotFather: Done! Congratulations on your new bot. ... Use this token: xxxxxx
Теперь вам понадобится этот маркер позже, чтобы добавить его в файл .env, поэтому просто держите его под рукой на данный момент.
Добавьте бота в свою комнату
Откройте свою комнату Telegram и перейдите в настройки -> администраторов и добавьте только что созданного бота в канал. Это дает ему доступ к публикации новых сообщений в комнате.
Установка уведомлений Telegram
Типична для любого пакета Laravel. Сначала требуйте пакет:
composer require laravel-notification-channels/telegram
Добавьте его к поставщикам в приложении.php:
'providers' => [
...
NotificationChannels\Telegram\TelegramServiceProvider::class,
],
Добавьте массив конфигурации:
// config/services.php
...
'telegram-bot-api' => [
'token' => env('TELEGRAM_BOT_TOKEN', 'YOUR BOT TOKEN HERE')
],
Наконец, откройте .env и добавьте свой токен:
TELEGRAM_BOT_TOKEN=1234:232jkl42l4j23kl
Создайте новый класс уведомлений
Для моего варианта использования я собираюсь отправить уведомление при публикации нового сообщения, поэтому я создаю новый класс уведомлений PostPublished через artisan:
php artisan make:notification PostPublished
Теперь откройте файл и настройте метод via
, чтобы сказать ему использовать TelegramChannel:
public function via($notifiable)
{
return [TelegramChannel::class];
}
Затем создайте метод toTelegram
, который будет содержать сведения, которые вы хотите отправить:
public function toTelegram($post)
{
return TelegramMessage::create()
->to('@laravelnews')
->content($post->title.' https://laravel-news.com/'. $post->uri);
}
В этом случае это отправка в комнату @laravelnews с содержимым заголовка сообщения и ссылкой на
сообщение.Добавьте подлежащий уведомлению признак
Уведомления могут быть отправлены одним из двух способов. Либо через фасад уведомления, либо путем добавления признака Notifiable в модель. Фасад рекомендуется, когда необходимо отправить уведомление нескольким уведомляемым объектам, таким как коллекция пользователей.
В этом примере он выходит только на основе одного элемента, поэтому я добавил эту черту в свою модель Post.
use Illuminate\Notifications\Notifiable;
class Post extends Model
{
use Notifiable;
Отправка вашего первого уведомления
Теперь, когда все настроено и готово, все, что осталось сделать, это отправить наше первое уведомление. Извлеките один элемент из модели, а затем запустите уведомление:
$post = \App\Post::find(1);
$post->notify(new \App\Notifications\PostPublished());
Если все правильно, вы мгновенно увидите его в своем Telegram-канале.