kosmosafive / kosmos.linemessage
Kosmos: Мультиканальный транспорт для отправки оповещений
Installs: 6
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
Type:bitrix-d7-module
Requires
- php: >=8.3
- ext-json: *
- composer/installers: ^2
Requires (Dev)
- roave/security-advisories: dev-latest
This package is auto-updated.
Last update: 2025-03-17 14:28:25 UTC
README
Введение
Отправка сообщений получателю предполагает возможность поставки через один или несколько каналов связи. Механизм поставки при этом должен быть скрыт.
Идея решения состоит в том, чтобы, опираясь на некоторую конфигурацию и бизнес-логику, сформировать коллекцию каналов связи, по которым потенциально можно отправить сообщение. Также формируется максимально возможный контекст – массив данных, который включает как обязательные поля для обработки канала связи (например, email получателя для отправки email), так и используемые в возможных шаблонах.
Полученные данные принимает отправитель и возвращает коллекцию результатов, из которой можно получить как общий результат, так и точечный по каждому каналу связи.
Потенциальное логирование модулем не предусмотрено. Предполагается логирование в вызывающей конструкции и\или на инфраструктурном слое.
Установка
- Установить модуль
Установка через composer
В composer.json (пример для директории local) проекта добавьте
{ "require": { "wikimedia/composer-merge-plugin": "dev-master" }, "config": { "allow-plugins": { "wikimedia/composer-merge-plugin": true } }, "extra": { "merge-plugin": { "require": [ "../bitrix/composer-bx.json", "modules/*/composer.json" ], "recurse": true, "replace": true, "ignore-duplicates": false, "merge-dev": true, "merge-extra": false, "merge-extra-deep": false, "merge-scripts": false }, "installer-paths": { "modules/{$name}/": [ "type:bitrix-d7-module" ] } } }
Использование
Отправка сообщений по каналам связи
use Bitrix\Main\Loader; use Kosmos\LineMessage\Line; use Kosmos\LineMessage\Sender; Loader::requireModule('kosmos.linemessage'); $someTemplateLine = new Line\Email('SOME_TEMPLATE'); $anotherTemplateLine = new Line\Email('ANOTHER_TEMPLATE'); $lineCollection = new Line\Collection( $someTemplateLine, $anotherTemplateLine ); $oneMoreTemplateLine = new Line\Email('ONE_MORE_TEMPLATE', true); $lineCollection->add($oneMoreTemplateLine); $context = ['EMAIL' => 'test@email.com']; $lineResultCollection = (new Sender($lines, $context))->send();
Работа с LineResultCollection
$lineResultCollection->isSuccess(); // true, если все сообщения были отправлены $lineResultCollection->isHandled(); // true, если все каналы обработаны $lineResultCollection->getSuccessCollection(); // коллекция отправленных $lineResultCollection->getFailureCollection(); // коллекция неотправленных $lineResultCollection->getHandledCollection(); // коллекция обработанных $lineResultCollection->getUnhandledCollection(); // коллекция необработанных
Получить результат для конкретного Line
$someTemplateLineResult = $lineResultCollection->findByLine($someTemplateLine);
Работа с LineResult
$someTemplateLineResult->isSuccess(); // true, если сообщение было отправлено $someTemplateLineResult->isHandled(); // true, если канал обработан
Каналы связи
Конструктор
- eventName – название события
- immediately – (опционально) немедленная отправка
Контекст
- EMAIL – email получателя
- LID – (опционально) идентификатор сайта
Добавление собственного канала связи
Необходимо реализовать интерфейс Kosmos\LineMessage\Line\LineInterface. Можно наследовать базовый класс Kosmos\LineMessage\Line\Line.