diffhead / laravel-beeline-sms
Light laravel package for sms sending via Beeline API
Requires
- php: >=8.1
- laravel/framework: >=10.0
- nesbot/carbon: ^3.0
This package is auto-updated.
Last update: 2026-03-15 10:47:50 UTC
README
Laravel-пакет для отправки SMS через Beeline A2P SMS API.
Требования
- PHP >= 8.1
- Laravel >= 10.0
Установка
composer require diffhead/laravel-beeline-sms
Пакет поддерживает автообнаружение провайдера Laravel — дополнительная регистрация не требуется.
Публикация конфигурации
php artisan vendor:publish --tag=config
Будет опубликован файл config/beeline-sms.php.
Публикация миграции
Если вы планируете хранить историю отправленных сообщений в БД (реестр), опубликуйте миграцию:
php artisan vendor:publish --tag=migrations php artisan migrate
Настройка
Добавьте переменные в .env:
LARAVEL_BEELINE_API_URL=https://a2p-sms-https.beeline.ru/proto/http/rest LARAVEL_BEELINE_API_LOGIN= LARAVEL_BEELINE_API_PASSWORD= LARAVEL_BEELINE_API_SENDER= LARAVEL_BEELINE_API_GZIP=false LARAVEL_BEELINE_API_COMMENT= LARAVEL_BEELINE_LOG_CHANNEL=daily LARAVEL_BEELINE_REGISTRY_ENABLED=false LARAVEL_BEELINE_REGISTRY_TABLE=beeline_messages LARAVEL_BEELINE_REGISTRY_MODEL=\\SaintSample\\LaravelBeelineSms\\Models\\BeelineMessage
| Переменная | Описание | По умолчанию |
|---|---|---|
LARAVEL_BEELINE_API_URL |
URL эндпоинта Beeline A2P API | — |
LARAVEL_BEELINE_API_LOGIN |
Логин для авторизации в API | — |
LARAVEL_BEELINE_API_PASSWORD |
Пароль для авторизации в API | — |
LARAVEL_BEELINE_API_SENDER |
Имя отправителя (sender ID) | — |
LARAVEL_BEELINE_API_GZIP |
Использовать gzip-сжатие запросов | false |
LARAVEL_BEELINE_API_COMMENT |
Комментарий к отправке | null |
LARAVEL_BEELINE_LOG_CHANNEL |
Канал логирования | daily |
LARAVEL_BEELINE_REGISTRY_ENABLED |
Включить реестр (хранение сообщений в БД) | false |
LARAVEL_BEELINE_REGISTRY_TABLE |
Название таблицы реестра | beeline_messages |
LARAVEL_BEELINE_REGISTRY_MODEL |
Модель для работы с реестром | BeelineMessage |
Использование
Отправка SMS
use SaintSample\LaravelBeelineSms\Facades\BeelineSms; $statuses = BeelineSms::send( targets: ['79991234567', '79997654321'], message: 'Текст сообщения' ); foreach ($statuses as $status) { $status->id(); // ID сообщения в API $status->phone(); // Номер телефона $status->status(); // Статус (accepted) $status->message(); // Текст сообщения $status->sentAt(); // Дата отправки }
Получение статусов
По ID сообщения
use SaintSample\LaravelBeelineSms\Facades\BeelineSms; use SaintSample\LaravelBeelineSms\View\FetchStatuses; $statuses = BeelineSms::statuses( new FetchStatuses(smsId: '851181624766455712') );
По временному интервалу
use SaintSample\LaravelBeelineSms\Facades\BeelineSms; use SaintSample\LaravelBeelineSms\View\FetchStatuses; use SaintSample\LaravelBeelineSms\View\DateInterval; use Carbon\Carbon; $statuses = BeelineSms::statuses( new FetchStatuses( dateInterval: new DateInterval( from: Carbon::yesterday(), until: Carbon::now(), ) ) );
Статусы сообщений
| Статус | Описание |
|---|---|
queued |
Сообщение находится в очереди отправки |
accepted |
Сообщение передано оператору |
delivered |
Сообщение доставлено абоненту |
rejected |
Сообщение отклонено оператором |
undeliverable |
Невозможно доставить (абонент недоступен) |
error |
Ошибка отправки |
expired |
Истекло время ожидания финального статуса |
unknown |
Статус неизвестен |
aborted |
Сообщение отменено пользователем |
Реестр сообщений
При включённом реестре (LARAVEL_BEELINE_REGISTRY_ENABLED=true) пакет автоматически сохраняет отправленные сообщения в базу данных через слушатель события MessagesSent.
Таблица содержит поля: external_message_id, status, target, message, sent_at.
Обновление статусов
Для массового обновления статусов сообщений в реестре используйте artisan-команду:
php artisan beeline-messages:update-statuses
Команда находит все сообщения с незавершёнными статусами и создаёт отдельную очередную задачу (UpdateMessageStatus) для обновления каждого из них.
События
| Событие | Описание |
|---|---|
MessagesSent |
Вызывается после успешной отправки SMS. Содержит коллекцию статусов. |
Вы можете подписаться на событие для реализации собственной логики:
use SaintSample\LaravelBeelineSms\Events\MessagesSent; Event::listen(MessagesSent::class, function (MessagesSent $event) { // $event->getStatuses() — коллекция статусов отправленных сообщений });
Лицензия
MIT
Справочник API
Отправка SMS (POST)
Эндпоинт: https://a2p-sms-https.beeline.ru/proto/http/rest
Request:
{
"action": "post_sms",
"user": "YourUserId",
"pass": "YourApiPassword",
"comment": null,
"message": "YourText",
"target": "79XXXXXXXXX,79XXXXXXXXX",
"sender": "YourSender"
}
Response:
{
"actions": [
{
"id": "851181624766455712",
"phone": "+79XXXXXXXXX",
"message": "YourText",
"action": "post_sms_action",
"sms_type": "SENDSMS",
"sms_res_count": "1",
"sms_group_id": "851182724278083582"
}
],
"agt_id": "1514230",
"date_report": "14.03.2026 20:00:01"
}
Получение статусов (POST)
Эндпоинт: https://a2p-sms-https.beeline.ru/proto/http/rest
Request:
{
"action": "status",
"user": "YourUserId",
"pass": "YourApiPassword",
"sms_id"?: "851181624766455723",
"date_from"?: "d.m.Y H:i:s",
"date_to"?: "d.m.Y H:i:s"
}
Response:
{
"actions": [
{
"sms_group_id": "851182724278083582",
"sms_id": "851181624766455712",
"sms_type": "SENDSMS",
"created": "14.03.2026 20:00:01",
"aul_username": "YourUserId",
"aul_client_addr": "YourClientIP",
"aul_proxy_addr": "YourProxyIP",
"target": "79XXXXXXXXX",
"sender": "YourSender",
"sms_count": "1",
"text": "YourText",
"stc_code": "error",
"sent": "0",
"closed": "1",
"status": "Ошибка отправки",
"action": "status_action",
"close_time": "14.03.26 20:00:01"
}
],
"agt_id": "1514201",
"date_report": "14.03.2026 20:00:01"
}