Битрикс24: E-Mail Маркетинг

Дата: 10.07.2017

2017-04-23_085653.png
исполнитель: «WEB for ALL»-Доступные Технологии.

подготовил: руководитель проекта «WEB for ALL»

автор:  Баязи А.

Задача

1. Автоматизация периодической отправки поздравления "С Днем Рождения" сотрудников компании через Email-рассылку.

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

3. Сбор статистических данных по отправленным письмам.

Что мы имеем в начале:

Страховая компания «Группа ERGO Россия» - российский сегмент одной из крупнейших страховых групп в Европе и второй по величине страховых групп в Германии. Компания имеет более 1 000 сотрудников, распределенных по все РФ. 

Какие инструменты Битрикс24 выбрать для Email-рассылки?

Рассмотрев поставленные задачи и особенности бизнес-процессов компании, внешние сервисы, такие как UniSender были отброшены. Решение должно базироваться на инструментах Битрикс24. Мы решили использовать инструмент Битрикс24- "Email-рассылка" 

2017-07-05_032232.png

АЛГОРИТМ для отправки рассылки по динамически изменяемому списку адресатов

На примере поздравительной рассылки с днем рождения сотрудников компании.

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

Как сделать рассылку-поздравление С Днем Рождения

Для Пользователя создающего рассылку.

1. создать Выпуск Рассылки.

2017-07-05_032926.png

2. Задаем расписание рассылке.

В нашем случае ежедневная рассылка в 5:00.

2017-07-05_033021.png

2. создаем группу адресов: «Пользователи-день рождения»

2017-07-05_033135.png

При таких настройках рассылки, ежедневно будет формироваться рассылка по списку пользователей, у которых в день рассылки День Рождения.

Как мы видим, в штатном функционале Битрикс24, выбор группы "Пользователи-день рождения" отсутствует. Ниже мы вам расскажем как технически реализовать данный функционал.

Техническая реализация рассылки "С Днем Рождения"

Итак, как же сделать группу пользователей, которая динамически изменяла свой список получателей, чтобы рассылка отправлялась пользователям у которых День Рождения в день рассылки?

Для этого необходимо расширить возможности модуля Email-маркетинг. Благо разработчики позаботились об этом.

1. Общая схема работы модуля Email-маркетинг

  • Одна рассылка может содержать множество выпусков.
  • Для рассылки задается список групп адресов.
  • Группа получателей содержит набор коннекторов к источникам адресов
  • Выпуск имеет шаблон и расписание. 

Определения:

Рассылка (список рассылок) – группировка выпусков рассылок объединенных общим списком получателей.

Выпуск – это создание и отправка в заданное время или вручную письма для выбранной группы получателей.

Выпуск - содержит основные параметры рассылки: html-код сообщения, расписание отправки. Несколько выпусков могут быть объединены в общую рассылку, как правило, характеризующуюся общим списком получателей.

Цитата:

«Выставляйте дату и время для создания единоразового выпуска или настройте автоматическое генерирование писем в определенный день месяца и день недели. Например, в дни обновления продукции.»

Постинг – непосредственно сама рассылка(отправка письма), которую формирует система исходя из параметров рассылки. Содержит данные непосредственно рассылки: дата/время отправки, статус, дата когда была отправлена и др. статданные. Список адресатов привязывается именно к Постингу

Коннектор – программно-реализованный функционал создающий список получателей рассылки по установленным источникам.

  Для каждого выпуска при создании создается свой набор адресов получателей- группа адресов, по которым будет выполнена отправка рассылки. 
Этот набор получается из всех коннекторов, которые перечислены в группах адресов. 

Если выпуск периодический, то перед отправкой набор адресов получателей обновляется. Таким образом, если раз в неделю выполняется отправка новостей оформившим заказ на сайте, то новые покупатели с момента последней отправки также попадут в получатели. 

Если выпуск отправляется разово, в определенное время, то список получателей также обновится перед отправкой.   

2. Источники адресов, коннекторы

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

Для этого используется коннектор к источнику. Пользователи сайта, инфоблоки, веб-формы, файл или сторонний сайт - это источники адресов. Но модуль не знает в каком инфоблоке и в каком поле инфоблока хранится адрес. 
Для этого используется коннектор, который реализует общий интерфейс для доступа к адресам из источника. 

Теперь, разберем как делать свой коннектор к источнику адресов.


Для начала нам нужен коннектор, который будет выбирать пользователей сайта с заполненными датами рождения. 

Создадим файл: my_sender_connector.php
в папке: bitrix/php_interface
В него добавим класс: SenderConnectorUserBirthday - который расширяет базовый класс: \Bitrix\Sender\Connector 

<_?php

class SenderConnectorUserBirthday extends \Bitrix\Sender\Connector
{
    public function getName()
    {
     return 'Пользователи - день рождения';
    }

    public function getCode()
    {
     return "my_user_birthday";
    }

    /** @return \CDBResult */
    public function getData()
    {
     $currentDate = new \Bitrix\Main\Type\Date();
     $filter = array(
      "PERSONAL_BIRTHDAY_DATE" => $currentDate->format("m-d"),
     );
     $resultDb = CUser::GetList(($by="ID"), ($order="asc"), $filter);

     return $resultDb;
    }

    public function getForm()
    {
     return "Все пользователи, у которых день рождения на момент рассылки";
    }
} 

Как видим, в классе 4 обязательных функции: 

  • getName - название источника адресов. Оно будет выводиться в админке.
  • getCode - служебная функция, нужно указывать уникальный код.
  • getData - функция, возвращающая адреса. Как видим, в ней выбираются пользователи, у которых день рождения на текущую дату. Должна возвращать объект CDBResult
  • getForm - возвращает форму настройки коннектора. Форма выводится при создании группы адресов в админке. 

Теперь, подключим наш коннектор к модулю "Email-marketing". 

Для этого в файле bitrix/php_interface/init.php добавим такой код: 


 AddEventHandler("sender", "OnConnectorList", array("MyEventHandler","senderConnectorHandler"));
class MyEventHandler
{
    public static function senderConnectorHandler($arData)
    {
     $arAutoLoadClasses = array(
      'SenderConnectorUserBirthday' => '/bitrix/php_interface/my_sender_connector.php'
     );
     \Bitrix\Main\Loader::registerAutoLoadClasses(null, $arAutoLoadClasses);

     $arData['CONNECTOR'] = 'SenderConnectorUserBirthday';

     return $arData;
    }
} 

При инициализации ядра, мы "вешаем" обработчик на событие OnConnectorList модуля sender

В этом обработчике события возвращается поступивший параметр с указанием названия класса коннектора: 


$arData['CONNECTOR'] = 'SenderConnectorUserBirthday'; 

Готово, теперь наш коннектор можно использовать.

Идем в админку, на страницу "Рабочий стол -> Сервисы -> Email-маркетинг -> Группы адресов

Переходим к созданию/редактированию группы. 

В списке появился наш коннектор "Пользователи - день рождения": 

2017-07-09_161709.png

Добавив в группу адресов данный коннектор, мы можем использовать эту группу адресов в рассылках. 

Затем создадим выпуск, которому укажем периодическую отправку каждый день. 

Готово. Раз в день будет выполняться выпуск рассылки, выбирая все адреса пользователей, у которых день рождения на день запуска. 

3. Заглянем под капот Битрикс24: Email-маркетинг. 

Теперь предлагаю рассмотреть функционал Битрикс24: Email-маркетинг, со стороны ядра системы. Как же работает данный модуль?

Отслеживание в системе периода отправки рассылки производится системным агентом \Bitrix\Sender\MailingManager::checkPeriod();

b24_agent.png

после того как сработает системный Агент \Bitrix\Sender\MailingManager::checkPeriod();  

создастся системный Агент запуска рассылки \Bitrix\Sender\MailingManager::chainSend(1);  , аргументом которого является ID-выпуска:

b24_agent_2.png

Такое происходит, как правило, в 00:00:00 дня рассылки. В нашем случае это в 12 часов ночи каждого дня.

В Базе Данных таб. `b_sender_mailing_chain`

значение поля `STATUS` перейдет из ‘W’ -> ‘S’

Это означает, что рассылка перешла из статуса "Ожидает даты рассылки" в статус "В процессе отправки.. "

2017-07-09_170321.png

2017-07-09_165057.png

И будет сформирована запись поста в таблице: `b_sender_posting` - таблица постов рассылки.

с параметрами:

`ID`  - auto increment

`MAILING_CHAIN_ID` – ID выпуска рассылки

`STATUS` =N  - NEW

`DATE_SENT` = NULL

2017-07-09_165416.png

Одновременно с этим происходит запись в таб. `b_sender_posting_recipient` 

адресаты рассылки сформированные коннектором,с параметрами:

`ID`  - auto increment

`DATE_SENT` = NULL (после отправки будет записана Дата/Время отправки)

`STATUS` =Y  - NEW (после отправки будет записана N)

`NAME` = Имя, которое в шаблоне используется в качестве переменной #NAME#

`EMAIL` = email получателя.

2017-07-09_170554.png

На этом ВСЕ!!! Ваша рассылка подготовлена к отправке и ждем време"Ч".