13 декабря 2016.
Новостная рассылка
Присоединяйтесь к нашему новостному бюллетеню и не пропускайте новости из мира Laravel, анонсы полезных пакетов и советы опытных разработчиков.

Отправка сообщений в Telegram при помощи каналов уведомлений (Notification Channels)

Автор статьи  Eric L. Barnes Eric L. Barnes | Auto Publishing to Telegram using Notification Channels | Виталий Николенко

Уведомления Laravel незаменимы, когда надо отправить сообщение по разным каналам. Согласно документации, первичное предназначение для них - отправка небольших информационных уведомлений пользователям о каких-либо событиях в приложении. Например, если вы разрабатываете биллинг, вам возможно понадобится отправить сообщение “Счет оплачен” посредством канала электронной почты или SMS.

Однако, эти сообщения не ограничиваются только таким вариантом применения. Например, при публикации поста на сайте, неплохо бы распространить по всем возможным социальным каналам, и сообщество уже разработало драйвера для этого.

Несколько месяцев назад я открыл группу в Telegram под названием Laravel News. Раньше уведомления в ней о новых статьях я постил бы вручную. Это довольно ненадежно, как вы можете догадаться, легко можно забыть и т. п. Я решил это дело автоматизировать и мне на помощь пришел пакет Telegram Notification Давайте рассмотрим как это работает.

Создаем бота для Telegram

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

Вы: /newbot
BotFather: Alright, a new bot. How are we going to call it? Please choose a name for your bot.

Вы: 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.

Вы: MyNewBot
BotFather: Done! Congratulations on your new bot. ... Use this token: xxxxxx 

Скопируйте полученный токен, позже пропишем его в .env

Добавим бота себе в комнату

Откройте свой чат, перейдите в settings -> administrators и добавьте бота, которого только что создали, в группу. Это даст боту возможность постить в общий чат.

Установка канала уведомлений Telegram

Установка мало чем отличается от установки обычного Laravel пакета. Для начала, подключим пакет :

composer require laravel-notification-channels/telegram

Пропишем провайдер в app.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

Уведомления могут отправляться следующими способами: через фасад Notification или при помощи трейта Notifiable. Фасад рекомендуется использовать, если вам необходимо отправить уведомление нескольким уведомляемым сущностям, например коллекции пользователей.

В данном примере мы оперируем одной сущностью, поэтому я добавил трейт к модели Post .

use Illuminate\Notifications\Notifiable;
class Post extends Model
{
    use Notifiable;

Отправляем первое уведомление

Теперь, когда все настроено, самое время отправить первое уведомление. Создайте один экземпляр класса и запустите уведомление :

$post = \App\Post::find(1);
$post->notify(new \App\Notifications\PostPublished());

И если все верно, увидите в своем канале Telegram отправленное сообщение.




Автоматическое создание Твитов при помощи уведомлений Laravel

Одна из самых замечательных функций, появившихся в Laravel 5.3 – уведомления (Notifications), которые позволяют отправить небольшие сообщения через широкий ряд сервисов. В том числе и Твиттер

Система регистрации пользователей по приглашениям на Laravel

Регистрация пользователей по приглашениям - довольно распространенная задача. Рассмотрим как ее решить.