Это продолжение материала по созданию канала и бота в телеграмм, для нотификаций. В этом материале мы лишь создадим саму нотификацию Laravel и будем отправлять ее в очередь, при возникновении события.
Создадим канал telegram, для нотификации через него
php artisan make:channel telegram
Это то, куда доставляется сообщение. Сам файл: app/Broadcasting/telegram.php. В нем нам нужно добавить реализацию функции send:
<?php
namespace App\Broadcasting;
use App\Models\User;
use Illuminate\Notifications\Notification;
class telegram
{
/**
* Create a new channel instance.
*
* @return void
*/
public function __construct()
{
//
}
/**
* Authenticate the user's access to the channel.
*
* @param \App\Models\User $user
* @return array|bool
*/
public function join(User $user)
{
//
}
/**
* Send the given notification.
*
* @param mixed $notifiable
* @param \Illuminate\Notifications\Notification $notification
* @return void
*/
public function send($notifiable, Notification $notification)
{
$message = $notification->toTelegram($notifiable);
}
}
Создадим саму нотификацию через artisan:
php artisan make:notification newContactUsMessage
Полученный в результате файл открываем в app/Notifications/newContactUsMessage и меняем содержимое, добавив нашу функцию:
//добавим возможность создавать сообщение через очередь, подключив ShouldQueue
// было class newContactUsMessage extends Notification
//стало
class newContactUsMessage extends Notification implements ShouldQueue
//добавляем функцию отправки через телеграмм
public function toTelegram($notifiable){
//ID канала куда отправляем
$idChannel = '-100111111111';
//токен бота которым отправляем сообщение
$botToken = 'nnnnnnnnn:MMMMMMMMMM';
//наше импровизированное сообщение
$message = "Пришло новое сообщение на сайт, от: ".$notifiable->email;
//кодируем его, чтобы сохранить переносы строк
$message = urlencode($message);
//после этого отправляем
try {
file_get_contents("https://api.telegram.org/bot$botToken/sendMessage?chat_id=$idChannel&text=".$message);
}
catch (\Exception $e){
}
}
//а в методе отправки через указываем телеграм, убрав mail
public function via($notifiable)
{
return [telegram::class];
}
Основное содержимое тоже что и раньше. В нем мы просто создаем сообщение. $notifialbe это объект который мы передадим внутрь. А сам вызов происходит следующим образом. Допустим у нас есть класс, модель, Models/ContactUsMessage.php:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class ContactUsMessage extends Model
{
protected $table = 'contact_us';
protected $fillable = ['name','subject','message','email'];
}
чтобы он был нотифицируемым, нам нужно подключить к нему трейт Illuminate\Notifications\Notifiable
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Notifications\Notifiable;
class ContactUsMessage extends Model
{
//добавили наш трейт классу
use Notifiable;
protected $table = 'contact_us';
protected $fillable = ['name','subject','message','email'];
}
Теперь, чтобы создать объект нотификации в очереди на отправку достаточно следующего кода:
//получаем объект нашей модели ContactUsMessage
$message = ContactUsMessage::find($id_message);
//отправляем на очередь нотификацию
$message->notify(new \App\Notifications\newContactUsMessage($message));
Все, после такого сообщение будет добавлено в очередь и отправлено в телеграм.
Для других вариантов отправки нотификации через телеграм, вам не понадобиться снова создавать канал через php artisan make:channel telegram, а делаете уже только сами нотификации.
На этом все.
Отзывы
Пока нет комментариев
Для того чтобы оставить комментарий, авторизуйтесь.