alexwebprog / laravel-notification-channel-max
MAX Messenger notification channel for Laravel
Package info
github.com/AlexWebProg/laravel-notification-channel-max
pkg:composer/alexwebprog/laravel-notification-channel-max
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.5
- illuminate/http: ^10.0|^11.0|^12.0|^13.0
- illuminate/notifications: ^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0|^11.0
- phpunit/phpunit: ^10.0|^11.0|^12.0|^13.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Канал уведомлений Laravel для мессенджера MAX.
Установка
composer require alexwebprog/laravel-notification-channel-max
Опубликуйте конфиг:
php artisan vendor:publish --tag=max-notification-config
Добавьте токен бота в .env:
MAX_NOTIFICATION_BOT_TOKEN=your-bot-token
Настройка
URL API и сертификат Минцифры
По умолчанию пакет использует https://platform-api2.max.ru и встроенный сертификат удостоверяющего центра Минцифры для проверки SSL. Это работает «из коробки» без дополнительной настройки.
При необходимости вы можете переопределить настройки в .env:
# Базовый URL API (по умолчанию: https://platform-api2.max.ru) MAX_API_BASE_URL=https://platform-api2.max.ru # Путь к пользовательскому CA-сертификату (по умолчанию: встроенный сертификат Минцифры) MAX_CA_CERTIFICATE=/path/to/custom-ca.crt # Отключить проверку SSL (не рекомендуется для продакшена) MAX_VERIFY_SSL=false
Использование
Канал уведомлений
Добавьте метод toMax в ваш класс уведомления:
use NotificationChannels\Max\MaxChannel; use NotificationChannels\Max\MaxMessage; class InvoicePaid extends Notification { public function via($notifiable): array { return [MaxChannel::class]; } public function toMax($notifiable): MaxMessage { return MaxMessage::create('Ваш счёт оплачен!') ->markdown(); } }
В модели User (или другом Notifiable) добавьте метод маршрутизации:
public function routeNotificationForMax(): ?int { return $this->max_user_id; }
On-demand уведомления (Notification::route)
Можно отправлять уведомления без привязки к модели через Notification::route:
use Illuminate\Support\Facades\Notification; // Отправка пользователю по user_id Notification::route('max', $maxUserId) ->notify(new MyNotification($data)); // Отправка в чат/канал по chat_id Notification::route('max', ['chat_id' => $chatId]) ->notify(new MyNotification($data));
Скалярное значение трактуется как user_id. Для отправки в чат передайте массив ['chat_id' => $chatId].
Прямая отправка
Вы можете отправлять сообщения напрямую без уведомлений:
use NotificationChannels\Max\MaxMessage; MaxMessage::create('Привет!') ->to($maxUserId) ->markdown() ->send();
Отправка в канал/чат:
MaxMessage::create('Новый пост в канале') ->toChat($chatId) ->send();
Использование другого токена бота
Вы можете переопределить токен бота для конкретного сообщения. Это полезно, если у вас несколько ботов:
MaxMessage::create('Сообщение от другого бота') ->to($maxUserId) ->token('токен-другого-бота') ->send();
В уведомлении:
public function toMax($notifiable): MaxMessage { return MaxMessage::create('Уведомление от другого бота') ->token('токен-другого-бота'); }
При использовании ->token() все операции (отправка сообщения, загрузка файлов) будут выполняться с указанным токеном.
API
| Метод | Описание |
|---|---|
create(?string $text) |
Создать экземпляр сообщения (статический) |
text(string $text) |
Задать текст сообщения |
to(int $userId) |
Задать ID пользователя-получателя |
toChat(int $chatId) |
Задать ID чата/канала |
token(string $token) |
Использовать другой токен бота |
markdown() |
Формат текста — Markdown |
html() |
Формат текста — HTML |
format(string $format) |
Задать формат текста явно |
disableLinkPreview(bool $disable = true) |
Отключить превью ссылок |
silent(bool $silent = true) |
Отправить без уведомления |
inlineKeyboard(array $buttons) |
Добавить инлайн-клавиатуру |
photo(string $filePath) |
Загрузить и прикрепить изображение |
video(string $filePath) |
Загрузить и прикрепить видео |
audio(string $filePath) |
Загрузить и прикрепить аудио |
file(string $filePath) |
Загрузить и прикрепить файл |
attachment(array $attachment) |
Добавить произвольное вложение |
replyTo(string $messageId) |
Ответить на сообщение |
forward(string $messageId) |
Переслать сообщение |
send() |
Отправить сообщение напрямую |
edit(string $messageId) |
Редактировать отправленное сообщение |
delete(string $messageId, ?string $token) |
Удалить сообщение (статический) |
Медиафайлы
Пакет поддерживает загрузку и отправку медиафайлов:
// Изображение MaxMessage::create('Фото') ->to($userId) ->photo('/path/to/image.jpg') ->send(); // Видео MaxMessage::create('Видео') ->to($userId) ->video('/path/to/video.mp4') ->send(); // Аудио MaxMessage::create('Аудио') ->to($userId) ->audio('/path/to/audio.mp3') ->send(); // Файл MaxMessage::create('Документ') ->to($userId) ->file('/path/to/document.pdf') ->send();
Кнопки
MaxMessage::create('Выберите действие:') ->to($userId) ->inlineKeyboard([ [ ['type' => 'link', 'text' => 'Открыть сайт', 'url' => 'https://example.com'], ], [ ['type' => 'callback', 'text' => 'Нажми меня', 'payload' => 'button_clicked'], ], [ ['type' => 'request_contact', 'text' => 'Отправить контакт'], ], ]) ->send();
Редактирование сообщений
// Редактировать текст сообщения MaxMessage::create('Обновлённый текст') ->markdown() ->edit($messageId); // Редактировать с заменой вложений MaxMessage::create('Новый текст с фото') ->photo('/path/to/new-image.jpg') ->edit($messageId);
Сообщения с инлайн-кнопками можно редактировать без ограничений. Остальные сообщения в личных чатах — только в течение 7 дней. В групповых чатах и каналах ограничений нет. Лимит: не более 2 редактирований в секунду на один чат.
Удаление сообщений
use NotificationChannels\Max\MaxMessage; // Удалить сообщение MaxMessage::delete($messageId); // Удалить с указанием токена другого бота MaxMessage::delete($messageId, 'токен-другого-бота');
Бот может удалять свои сообщения в личных чатах и любые сообщения в групповых чатах/каналах (при наличии прав администратора). Лимит: не более 2 удалений в секунду на один чат.
Тихая отправка
MaxMessage::create('Тихое сообщение') ->to($userId) ->silent() ->send();
Миграция с v1.x
В версии 2.0 изменён URL API по умолчанию с platform-api.max.ru на platform-api2.max.ru и добавлена автоматическая поддержка сертификата Минцифры. Обновите конфигурацию:
php artisan vendor:publish --tag=max-notification-config --force
Лицензия
MIT