• Время чтения ~1 мин
  • 03.03.2023

Уведомления 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-канале.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297