• Час читання ~1 хв
  • 03.03.2023

Сповіщення Laravel чудово підходять, коли вам потрібно надсилати сповіщення через різноманітні канали. На основі документації оригінальним випадком використання для них є надсилання швидких інформаційних повідомлень, які сповіщають користувачів про щось, що сталося у вашій заявці. Наприклад, якщо ви пишете платіжну заявку, ви можете надіслати сповіщення "Оплачено рахунок-фактуру" своїм користувачам електронною поштою та SMS-каналами.

Однак їх не потрібно обмежувати лише такими типами сповіщень. Наприклад, на цьому сайті кожен раз, коли публікується новий пост, я хочу, щоб він виходив на всі різні соціальні канали, а спільнота створила безліч драйверів для різних сервісів.

Одна нова область, яку я створив кілька місяців тому, - це лише для читання Laravel News Telegram-група, і в минулому я вручну додавав до неї нові дописи дня. Як ви можете собі уявити, одного разу я забув це зробити, потім наступного і так далі. Я знав, що мені потрібно автоматизувати надсилання нових повідомлень, і саме тут з'являється пакет Telegram Notice, давайте подивимося, як отримати це налаштування та автоматично надсилати сповіщення у вашу кімнату 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 через ремісник:

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 кімнату зі змістом заголовка поста і посиланням на пост.Додати

ознаку, що сповіщається

Повідомлення можна відправляти одним з двох способів. Або через фасад Повідомлення, або шляхом додавання ознаки, що підлягає реєстрації, до моделі. Фасад рекомендується, коли вам потрібно надіслати сповіщення кільком організаціям, про які можна повідомити, таким як колекція користувачів.

У цьому прикладі він виходить лише на основі одного елемента, тому я додав рису до своєї моделі 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