Гость

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

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

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

  1. Главная
  2. Статьи
  3. Laravel и WebDev
  4. Создадим Нотификацию В Laravel, Отправляющую Сообщение В Телеграмм
Создадим Нотификацию В Laravel, Отправляющую Сообщение В Телеграмм
  • 11/12/2021
  • Chebukin Pavel
  • 622 просмотров
  • 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, а делаете уже только сами нотификации.

На этом все.

Отзывы

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


Для того чтобы оставить комментарий, авторизуйтесь.
Понравился материал? Поделись!
Онлайн-песочницы для кода
Дек18
Онлайн-песочницы для кода

Когда возникает потребность проверить какой-то простенький алгоритм или набросать элемент, использовать для этого файлы рабочего проекта или создавать новый не лучшая идея. Именно по этой причине сейчас существуют всякого рода песочницы. Один позволяют скомпилировать код системных языков и вывести результат, другие набросать HTML+CSS+JS схемку и отладить ее. В любом случае,...

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

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

  • Chebukin Pavel
  • 0
  • 28.11.2021 22:38
Фотостоки и банки картинок с бесплатными тарифами
Ноя28
Фотостоки и банки картинок с бесплатными тарифами

Разрабатывая проект себе, или небольшому заказчику, сложно позволить себе значимые суммы денег в затратах. До выхода проекта в плюс, часто идет очень не мало временных и интеллектуальных, а так же финансовых затрат. Позволить себе оплату на таких сервисах как Envato Elements сложно. Хотя некоторое время я использовал их подписку и...

  • Chebukin Pavel
  • 0
  • 28.11.2021 21:27
Laravel: CKEditor 4 + Сниппет кода
Ноя24
Laravel: CKEditor 4 + Сниппет кода

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

  • Chebukin Pavel
  • 0
  • 24.11.2021 21:24
Проблема с просмотром больших XML/YML файлов?
Ноя28
Проблема с просмотром больших XML/YML файлов?

Вы, как и я, столкнулись со сложностью того, что сайт через API отдает большой XML файл? Хорошо когда есть документация, но часто ее нет, или она не полная, или вообще не актуальная. Нужно посмотреть что внутри файла. И вот тут сталкиваемся со сложностью, большая часть редакторов кода и текстовых редакторов...

  • Chebukin Pavel
  • 0
  • 28.11.2021 23:24
Сайтмап для сайта на Laravel - sitemap.xml
Ноя25
Сайтмап для сайта на Laravel - sitemap.xml

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

  • Chebukin Pavel
  • 0
  • 25.11.2021 22:05

Copyright 2023 © All rights reserved.

Мы в: