Гость

Нажмите для авторизации/регистрации

  • Назад
  • Меню
  • Статьи
    • Все
    • Интернет и технологии
    • Laravel и WebDev
    • Linux, Windows, Docker, Etc
    • Новости
    • Прочее
    • Геймдев
    • Смотри как я умею
  • Информация
    • Оферта на дополнительные функции
    • Политика конфиденциальности
    • Тарифы
    • Пользовательское соглашение

Создадим Нотификацию В Laravel, Отправляющую Сообщение В Телеграмм

  1. Главная
  2. Статьи
  3. Laravel и WebDev
  4. Создадим Нотификацию В Laravel, Отправляющую Сообщение В Телеграмм
Создадим Нотификацию В Laravel, Отправляющую Сообщение В Телеграмм
  • 11/12/2021
  • Chebukin Pavel
  • 917 просмотров
  • 0 комментариев

Создадим Нотификацию В Laravel, Отправляющую Сообщение В Телеграмм

Это продолжение материала по созданию канала и бота в телеграмм, для нотификаций. В этом материале мы лишь создадим саму нотификацию 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, а делаете уже только сами нотификации.

На этом все.

Отзывы

Пока нет комментариев


Для того чтобы оставить комментарий, авторизуйтесь.
Понравился материал? Поделись!
Laravel: CKEditor 4 + Сниппет кода
Ноя24
Laravel: CKEditor 4 + Сниппет кода

Символично на сайтах по ларавел начать наверное с какой-нибудь темы аля "сделать блог". Возможно в дальнейшем и я напишу такой материал. Но в этом я хочу показать как сделать интеграцию визуального редактора CKEditor со сниппетом кода. Саму установку CKEditor и интеграцию загрузки картинок опишу отдельным материалом. Здесь же, условимся что используется...

  • Chebukin Pavel
  • 0
  • 24.11.2021 21:24
LaraDock или Homestead для разработки под Laravel?
Ноя25
LaraDock или Homestead для разработки под Laravel?

В этом материале не будет подробностей по установке Laradock или Homestead. В нем я опишу лишь то, что по моему мнению стоит ставить. Если будет спрос, опишу установку отдельным материалом. Те кто изучают ларавел, вполне могут испугаться еще и докера, да и хомстеда. Мол, я еще это не выучил, а еще и...

  • Chebukin Pavel
  • 0
  • 25.11.2021 20:28
PHPStorm vs InteliJ Ultimate для разработки под Laravel и PHP
Июл23
PHPStorm vs InteliJ Ultimate для разработки под Laravel и PHP

Это сравнение двух известных IDE компании JetBrains. Возможно в чем-то зацеплю и краем WebStorm. Это мое личное мнение и оно может отличаться. Сразу уточню, цену на IDE сравниваю с текущей своей скидкой - 40%. С меньшей скидкой разница в стоимости между продуктами значительно растет. Уточняю так же что в InteliJ...

  • Chebukin Pavel
  • 0
  • 23.07.2022 12:47
Редактирование кода страницы из админ панели с помощью редактора Ace9
Авг13
Редактирование кода страницы из админ панели с помощью редактора Ace9

Есть иногда задачи, такие как сделать код некоторых страниц редактируемым из админ панели. Вот и мне второй или третий раз за практику пришлось такое делать. Так как в админке никто левый не шариться и редактирование я делаю только конкретных страниц, а не всех, то больших методов ограничений доступа и анализа...

  • Chebukin Pavel
  • 0
  • 13.08.2022 12:12
Добавляем на сайт комментарии Facebook для Laravel и не только
Дек02
Добавляем на сайт комментарии Facebook для Laravel и не только

Добавить комментарии можно на любой сайт. Но так как многих сайтов это означает добавление кода, работу с базой данных, модерацию и т.п. В этом ключе выгодно отличается установка комментариев от соц. сети Facebook. Аналогичные можно установить от VK, Disqus и других платформ. В этот раз рассмотрим именно подключение фейсбука. В...

  • Chebukin Pavel
  • 0
  • 02.12.2021 21:12
CKEditor 4 + Загрузка картинок в Laravel
Ноя28
CKEditor 4 + Загрузка картинок в Laravel

В прошлом материале, я уже писал о подключении к CKEditor 4 плагина подсветки синтаксиса. Но так же писал что опишу загрузку картинок через визуальный редактор. Все делается достаточно просто. Вступление  Оговорюсь сразу, что не использую сторонние библиотеки для большего контроля над самим подключением и редактором, так и для того чтобы...

  • Chebukin Pavel
  • 0
  • 28.11.2021 22:38

Copyright 2023 © All rights reserved.

Мы в: