🔥 Горящие вакансии
Все статьи

Создание своего триггера закрытых событий в Битрикс

Бывает, что надо сделать рассылку клиентам, например, когда снизится цена товара из избранного. В Bitrix есть модуль для массовой рассылки, но иногда не хватает его базовых триггеров. В этом случае можно создать свой триггер событий для Битрикс. Рассказываю как.

Что делают триггеры

Триггеры – это обработчики событий. Когда срабатывает какое-то событие, оно вызывает триггер и почта отправляется.

Триггеры закрытых событий работают в определённое время (запускаются с агентом), например, запускаются один раз в день в 2 часа дня.

Покажу на примере триггера закрытых событий.

Настройка сервера

Первым и самым важным действием нужно настроить почтовый сервер.

Я использовал MSMTP — https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=37&LESSON_ID=9325&LESSON_PATH=3908.6488.5501.9325

Регистрация события

После этого нужно зарегистрировать событие.

$eventManager->addEventHandler("sender", "OnTriggerList", array("MyClass", "onTriggerList"));

В классе должен быть статический метод

public static function onTriggerList(Event $event): Event
{
    TriggerClass::addTriggerInList($event);
    return $event;
}

В этой функции триггеров может быть несколько, поэтому я разделил на классы (у каждого триггера свой класс). Он обращается к классу триггера и его методу, который зарегистрирует триггер в модуле sender.

public static function addTriggerInList(Event &$event): Event
{
    $event->addResult(new EventResult(EventResult::SUCCESS, [
        'TRIGGER' => [
            'TriggerClass' 
        ]
    ],
    'myModule',
    ));
    return $event;
}

Так выглядит пустой триггер-класс

<?php

namespace …;

Loader::includeModule('sender');

class SenderProductsInFavorite extends \Bitrix\Sender\Trigger\TriggerConnectorClosed
{
    public function getName(): string
    {
        return "";
    }

    public function getCode()
    {
        return "";
    }

    public static function canBeTarget(): bool
    {
        return false;
    }

    public function filter(): bool
    {
        return false;
    }

    public static function getPersonalizeList(): array
    {
        return [];
    }

    public function getForm(): string
    {
        return '';
    }

    public function getRecipient()
    {
        return $this->recipient;
    }

}

Триггер закрытых событий наследуется от  \Bitrix\Sender\Trigger\TriggerConnectorClosed

👉 Если триггер работает с закрытыми событиями, будет вызываться агент в определённое время

👉 Если в коде будет использоваться ORM, для запросов к таблицам, то стоит перед этим подключить модуль

getName() – возвращает название триггера, который отобразиться в админке.

getCode() – Должен быть уникальным (лучше всего использовать префикс модуля).

canBeTarget() – может ли триггер использоваться как цель, а не только для запуска (у любой рассылки есть цель. Например, пользователь увидел письмо, а целью письма является покупка на сайте. Статистика отобразиться в админке).

filter() – должен вернуть true или false. Это будет говорить о том запускать ли рассылку.

Это важный метод, в нём и пишется вся логика рассылки.

Доступно свойство $this->recipient от родителя. В этом свойстве хранятся адресаты, кому послать письмо (должен быть массив).

Если адресатов несколько, тогда нужен массив массивов.

Необходимые ключи в массиве: [‘USER_ID’, ‘EMAIL’ ‘NAME’]

Примерно такой массив:

Создание своего триггера закрытых событий в Битрикс

Пример кода:

if(count($mail > 0)) {

    $this->recipient = $mails;

    return true;

} else {

    return false;

}

Это же картинкой, чтобы перепроверить, что я правильно скопировал:

Создание своего триггера закрытых событий в Битрикс

getPersonalizeList() – в этом методе определяются переменные, которые будут доступны внутри шаблона письма (например #PRODUCT_ID#)

В переменных нельзя хранить html, он отобразиться в письме как текст.

public static function getPersonalizeList(): array
{
    return array(
        array(
            'CODE' => 'PRODUCT_ID',
            'NAME' => 'ID продуктов',
            'DESC' => '',
        ),
    );
}

getForm() – вернёт дополнительную форму настройки триггера

public function getRecipient()
{
    return $this->recipient;
}

getRecipient() – вернёт список адресатов кому отправить письмо

Как дебажить?

Можно тремя способами:

  1. Запускать агент в командной строке php. А в коде указывать print_r(); die;
  2. Xdebug
  3. Можно на отдельной странице сайта сформировать массив из кода который будет использоваться в filter()

Настройка триггера в админке

Чтобы триггер заработал, нужно создать рассылку в самом модуле с созданным триггером.

Перейти по пути «Маркетинг → Триггерные рассылки»

Добавить триггер вручную:

Создание своего триггера закрытых событий в Битрикс

Триггер отобразится в списке:

Создание своего триггера закрытых событий в Битрикс

Триггер не наступивших событий работает под агентом или кроном, то есть выполняется в определённое время.

Создание своего триггера закрытых событий в Битрикс

После добавления триггера он отобразиться в списке. Стоит добавить письмо, чтобы триггер появился в агентах.

Создание своего триггера закрытых событий в Битрикс

Создание своего триггера закрытых событий в Битрикс

Выбирается нужный шаблон рассылки.

После добавления письма, нужно настроить отправку письма после события (оптимальное решение ставить «после 1 минуты после события»), если нужно чтобы триггер сработал быстро.

Создание своего триггера закрытых событий в Битрикс

И запустить рассылку.

Создание своего триггера закрытых событий в Битрикс

Чтобы проверить работу рассылки можно использовать вызов из командной строки агента. Перейти в админке в «Агенты».

Создание своего триггера закрытых событий в Битрикс

Первая функция вызывает рассылку, вторая – запускает.

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

Очень поможет это при тестировании рассылки. Иногда после вызова второй функции не сразу отправляется письмо, нужно вызвать её заново

\Bitrix\Sender\TriggerManager::fireClosedEventAgent(«sender»,»neti.favorite_neti_favorite_trigger_low_price»,»22″); — где 22 id письма рассылки

\Bitrix\Sender\MailingManager::checkPeriod($id) – в эту переменную передаётся id

Чтобы узнать какой Id у рассылки можно её останавливать и запускать проверяя таблицу агентов. Триггер должен пропадать при остановке рассылки.

Как правильно удалять триггер

Когда нужно удалить триггерную рассылку, сначала её надо остановить, чтобы из базы удалились агенты

Создание своего триггера закрытых событий в Битрикс

Статистика

Вся статистика отправленных/неотправленных писем отобразится в  получателях:

Создание своего триггера закрытых событий в Битрикс

Создание своего триггера закрытых событий в Битрикс

Все отправленные письма сохраняются в таблице b_sender_posting_recipient.

Создание своего триггера закрытых событий в Битрикс

Статусы:

“N” – отправлено

“E” – С ошибками

“Y” – ещё не отправлялось

Так же эти статусы можно увидеть в получателях.

Оставить коментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Отправить резюме

    Я согласен на обработку персональных данных в соответствии
    со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

    Отправить резюме

      Я согласен на обработку персональных данных в соответствии
      со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

      Pекомендовать друга

        Выбрать вакансию
        • Программист 1С
        • Консультант-аналитик 1С
        • Разработчик Android
        • Разработчик iOS
        • Разработчик React JS (middle)
        • Разработчик React Native (middle)
        • UX/UI дизайнер
        • Аналитик
        • QA engineer (тестировщик)
        • Разработчик PHP (senior)
        • Разработчик React JS
        • Разработчик Flutter
        • Разработчик React Native
        • Проекты для команды специалистов 1С
        • Проекты для специалистов 1С
        • Стажер-программист 1С
        • Ведущий консультант Microsoft Dynamics 365 Sales
        • Консультант по финансам Microsoft Dynamics AX
        • Руководитель проектов Microsoft Dynamics 365 FO и AX 2012
        • Консультант Microsoft Dynamics AX на зарубежные проекты
        • Ведущий консультант Microsoft Dynamics 365 Finance and Operation
        • Разработчик Microsoft Dynamics 365 for Finance and Operations
        • Разработчик Microsoft Dynamics Axapta
        • Разработчик PHP (фреймворк Yii2 или Laravel)
        • Разработчик Bitrix
        • Ведущий разработчик Microsoft Dynamics AX на зарубежные проекты
        • Разработчик PHP
        Я согласен на обработку персональных данных в соответствии
        со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

        Pекомендовать друга

          Выбрать вакансию
          • Программист 1С
          • Консультант-аналитик 1С
          • Разработчик Android
          • Разработчик iOS
          • Разработчик React JS (middle)
          • Разработчик React Native (middle)
          • UX/UI дизайнер
          • Аналитик
          • QA engineer (тестировщик)
          • Разработчик PHP (senior)
          • Разработчик React JS
          • Разработчик Flutter
          • Разработчик React Native
          • Проекты для команды специалистов 1С
          • Проекты для специалистов 1С
          • Стажер-программист 1С
          • Ведущий консультант Microsoft Dynamics 365 Sales
          • Консультант по финансам Microsoft Dynamics AX
          • Руководитель проектов Microsoft Dynamics 365 FO и AX 2012
          • Консультант Microsoft Dynamics AX на зарубежные проекты
          • Ведущий консультант Microsoft Dynamics 365 Finance and Operation
          • Разработчик Microsoft Dynamics 365 for Finance and Operations
          • Разработчик Microsoft Dynamics Axapta
          • Разработчик PHP (фреймворк Yii2 или Laravel)
          • Разработчик Bitrix
          • Ведущий разработчик Microsoft Dynamics AX на зарубежные проекты
          • Разработчик PHP
          Я согласен на обработку персональных данных в соответствии
          со ст. 9 ФЗ № 152-ФЗ «О персональных данных»

          Спасибо!

          Мы получили ваше резюме. Менеджер свяжется с вами в течение трех дней

          Горящие вакансии