kosmosafive/kosmos.linemessage

Kosmos: Мультиканальный транспорт для отправки оповещений

2.0.1 2024-08-17 13:16 UTC

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, если канал обработан

Каналы связи

Email

Конструктор

  • eventName – название события
  • immediately – (опционально) немедленная отправка

Контекст

  • EMAIL – email получателя
  • LID – (опционально) идентификатор сайта

Добавление собственного канала связи

Необходимо реализовать интерфейс Kosmos\LineMessage\Line\LineInterface. Можно наследовать базовый класс Kosmos\LineMessage\Line\Line.