====== Модуль рассылки Sender ======
Модуль рассылки Sender - логическая тарнсформация скрипта рассылки от ForBill, который долгие годы успешно использовался и используется нашими клиентами. Данный модуль включил в себя многие пожелания и идеии клиентов которые были собраны за время эксплуатации скрипта. Одно из главных новшеств это то что модуль получил гибкий интерфейс настроек рассылки из админки.
Основные новшества:
* Рассылка по событиям (пополнение счета, крон, смена тарифа, и т.д)
* Возможность составлять свои шаблоны текстовых сообщений
* "Правильная" рассылка за n-дней до отключения с учетом всей бизнесс логики биллинга
* Возможность составлять сложные шаблоны рассылки с помощью конструктора. К примеру "на балансе < 10" + "активна услуга смс рассылка"
===== Терминология =====
* **шаблоны** - справочник загаотовленных текстовых шаблонов используемых для рассылки сообщений. Подерживаются переменные которые можно использовать в тексте.
* **условия** - конструктор условий согласно которым будет происходить рассылка
* **событие** - событие в жизни абонента которое служит тригером для проверки условия на рассылку.
* **задание** - подготовленные к рассылке записи в базе данных с успешно сработанными "условиями"
* **обработчик рассылки** - консольная команда которая запускает обработчик "заданий".
* **обработчик создания условий** - консольная команда которая запускает создание "заданий" и обработку "условий" с типом событие "Без события. CRON". Используется к примеру для рассылки за "n-дней"
===== Консольные команды =====
* **sender_create_jobs** - обработчик создания заданий с типом событие "Без события. CRON". Данная команда добавит задания на рассылку для команды sender_run_jobs
* **sender_run_jobs** - обработчик который запускает рассылку сообщений по ранее подготовленным заданиям. Фактически она будет рассылать подготовленные тексты смс сообщения из заданий
**sender_run_jobs** - данную команду можно ставить в 5-ти минутный CRON.
\\ **sender_create_jobs** - данную команду можно ставить в CRON на 9:00 -10:00 утра когда вы планируете выполнить рассылку по абонентам, к примеру за "n-дней".
===== Логика работы =====
Рассылка в модуле происходит следующим образом: команда **sender_run_jobs** запускает в работу подготовленные ранее задания.
Задания могут быть созданы двумя способами:
* **В ручную** - запуском команды sender_create_jobs которая обработает условия конструктора с типом события "Без События.CRON"
* **Автоматически** - срабатыванием события у абонента с последующей проверкой на соответствие условий конструктора по конкретному абоненту. К примеру: Абонент пополнил счет. Срабатывает событие "Пополнение счета", модуль ищет все шаблоны с данным типом условия, проверяет условия, если условия удовлетворяются создается запись в задание на рассылку.
===== Поддерживаемые события =====
{{:billing:preferences:apps:событие.png?400|}}
\\
* **Без события. CRON** - данный тип события обрабатывается запуском в ручную команды sender_create_jobs
* **Пополнение счета** - пополнение счета абонента
* **Подключение подписки** - подключения подписки (услуги)
* **Подключение Real IP** - подключение услуги "Реальный IP"
* **Смена тарифа** - смена тарифного плана у абонента
* **Смена тарифа. С большей абонплатой"** - смена тарифного плана абонента с большей абонплатой
* **Смена тарифа. С меньшей абонплатой"** - смена тарифного плана абонента с большей абонплатой
===== Справочник "Sender Шаблоны" =====
{{:billing:preferences:apps:шаблоны_условий.png?300|}}
\\
{{:billing:preferences:apps:шаблон_1.png?500|}}
\\
Данный справочник создан для шаблонов текстовых сообщений.
\\
\\
**Пример шаблона**:
Уважаемый абонент, услуга Интернет будет отключена через %left_day%-дня. На вашем счете %deposit% %currency%. Пополните свой счет.
**Поддерживаемые переменные:**
* **%service_name%** - Название подписки. Значение передается только для события "Подключение подписки"
* **%new_packet%** - Название нового тарифа. Значение передается только для события "Смена тарифа"
* **%old_packet%** - Названине старого тарифа. Значение передается только для события "Смена тарифа"
* **%left_day%** - кол-во дней дней до отключения интернета
* **%pay_amount%** - сумма пополнения счета. Значение передается только для события "Пополнение счета"
* **%rec_summa%** - рекомендованная сумма пополнения
* **%uid%** - UID абонента
* **%fio%** - ФИО абонента
* **%deposit%** - значение текущего баланса абонента
* **%credit%** - значение текущего кредита абонента
* **%login%** - логин абонента
* **%dogovor%** - номер договора абонента
* **%currency%** - валюта (из настроек биллинга)
===== Справочник "Sender Условия" =====
{{:billing:preferences:apps:условия.png?400|}}
\\
Данный справочник предназнчен для создания условий на рассылку.
{{:billing:preferences:apps:условие_карточка.png?400|}}
\\
* **Активировать** - опция отвечающая за то, что будет или нет обработчик модуля обрабатывать данное условие
* **Название** - название условия
* **Событие** - событие по которому данное условие будет срабатывать
* **Период** - период за который будет производится проверка кол-во раз выполнения условия для абонента
* **Кол-во раз за период** - кол-во раз выполнения данного условия у абонента. Полезна когда есть необходимость к примеру ограничить кол-во рассылок определенного типа в день/месяц/неделю/год. Для того чтобы отключить проверку на "кол-во раз за период" необходимо указать значение равное = 0
* **Шаблон** - текстовый шаблон рассылки из справочника "Sender Шаблоны"
* **Условия** - дополнительные условия
\\
По мимо срабатывания самого события, модуль имея гибкую логику, позволяя добавить еще дополнительные условия, которым должен удовлетворять абонент в данный момент.
{{:billing:preferences:apps:условие.png?400|}}
\\
Сущности:
* **Дата договора (прошло дней)** - кол-во дней прощедшие со дня заключения договора
* **Сумма пополнения** - сумма пополнения счета. Данный параметр передается только при событии "Пополнение счета", во всех других случаях значение равно 0
* **ID тарифа. Текущий** - ID текущего тарифа абонента, из справочника Тарифов
* **ID тарифа. Старый** - ID тарифа который был до смены тарифа. Данный параметр передается только при событии "Смена тарифа", во всех других случаях значение равно 0
* **ID подключаемой подписки** - ID подключаемой подписки. Данный параметр передается только при событии "Подключение подписки", во всех других случаях значение равно 0
* **ID активной подписки из ...** - ID активной(оплаченной) подписки абонента. В данной сущности будут работать только операторы сравнения IN(...) и NOT IN(...)
* **Баланс пользователя** - значение текущего баланса абонента
* **Интернет включен (1/0)** - текущее состояние галочки "Интернет" в карточке абонента
* **Дата. Текущее число месяца** - текущее число месяца
* **Кол-во дней предоплаты** - кол-во дней предоплаты абонентом при пополнениии счета. Данный параметр зависит от суммы пополнения счета и передается только при событии "Пополнение счета", во всех других случаях значение равно 0
* **Состояние договора (0,1,2,3)** - текущее состояние договора в карточке абонента: 0- нет данных, 1- действует, 2- приостановлен, 3- закрыт
* **Статус абонента** - статус абонента. Возможные значения: 1-обычный, 2-замороженный, 3-отключенный, 4-удаленный
* **Интернет отключится через (дней)** - кол-во дней через которые отключится интернет. Значение берется из карточки абонента
* **UID абонента** - UID абонента
* **ID субпровайдера** - ID субпровайдера, если абонент не принадлежит субпровайдеру значение равно 0
* **Оплачен полный месяц тарифа** - абонент полностью оплатил месячный тариф (рассчитан для Каждый месяц, тип 4), 1 - оплатил, 0 - не оплатил
\\
Операторы сравнения:
* **>** - больше
* **>=** - больше или равно
* **=** - равно
* **!=** - не равно
* ** <=** - меньше или равно
* **<** - меньше
* **IN(...)** - значение входит в список. Значения перечисляются через запятую
* **NOT IN(...)** - значения не входят в список. Значения перечисляются через запятую
===== Примеры =====
==== Кейс #1. Пополнение счета. Платная услуга смс-информирования ====
**Задание:** Выполнять смс оповещение о пополнение счета при активной подписке "Пополнение счета"
**Решение:** Создаем условие на рассылку где ID подписки "Смс информирование" равно = 123.
**Итог:** При пополнении счета и наличии активной подписки с ID=123, абоненту будет создавать задание на рассылку с текстом из указанного шаблона.
{{:billing:preferences:apps:sender_payment.png?400|}}
==== Кейс #2. Рассылка за n-дней ====
**Задание:** Выполнять смс оповещение об отключении абонета за 3 дня
**Решение:** Создаем условие на рассылку где значение "Кол-во дней до отключения" равно = 3 и событие "Нет события. CRON"
**Итог:** При запуске обработчика условий без события командой sender_create_jobs будет создано задание на рассылку всем абонентам у которых кол-во дней до отключения соответствует 3 дням.
{{:billing:preferences:apps:case_2.png?400|}}