Автоматизация и шаблоны
Платформа работает, даже когда в кабинете никого нет
Встроенный планировщик сжигает баллы, отправляет рассылки по расписанию, пересчитывает сегменты, ведёт сценарии, делает резервные копии и следит за собственным здоровьем. Каждая задача — консольная команда, которую можно запустить и вручную.
- задач по расписанию
- 24
- консольных команд
- 54
- событий уведомлений
- 33
Планировщик
Задачи, которые выполняются сами
Планировщик работает отдельным сервисом. Ежедневные задачи привязаны к времени на часах, поэтому перезапуск не выполнит их дважды. У каждой задачи есть блокировка, и две копии планировщика не столкнутся.

| Запуск | Что делает |
|---|---|
| каждый час | Сжигает баллы с истёкшим сроком |
| каждый час | Выполняет плановое процентное сгорание бонусов |
| каждые 5 минут | Зачисляет бонусы, у которых наступила дата активации |
| каждую минуту | Снимает просроченные резервы бонусов и возвращает баланс |
| каждую минуту | Снимает неподтверждённые блокировки списания |
| каждый час | Выключает правила с закончившимся сроком действия |
| каждый час | Обрабатывает событийные правила, перенесённые из PremiumBonus |
| каждые 5 минут | Отправляет рассылки, время которых наступило |
| каждый час | Пересчитывает состав динамических сегментов |
| каждую минуту | Продолжает сценарии, у которых закончилась пауза |
| каждый час | Запускает сценарии дня рождения и неактивности |
| каждый час | Сохраняет RFM-срез на конец месяца и отправляет его администраторам |
| ежедневно в 02:50 | Удаляет логотипы, которые не использует ни одна анкета |
| каждые 15 минут | Забирает каталоги из учётной системы и сайта |
| каждые 5 минут | Удаляет просроченные коды заказов маркетплейсов |
| ежедневно в 02:30 | Удаляет журналы вебхуков старше 30 дней |
| каждые 5 минут | Запускает резервную копию, когда наступает её время |
| каждую минуту | Проверяет здоровье платформы, пишет историю и поднимает алерты |
| ежедневно в 02:40 | Удаляет закрытые алерты старше срока хранения |
| каждые 15 минут | Перерегистрирует вебхук бота алертов при сбое |
| ежедневно в 01:00 | Создаёт секции следующих месяцев для заказов, движений баллов и журналов |
| ежедневно в 02:15 | Обновляет статистику планировщика по нагруженным таблицам |
| каждую минуту | Переносит накопленное в Redis использование ключей в базу |
| каждые 6 часов | Удаляет просроченные токены сброса пароля |
Шаблоны уведомлений
Готовые сообщения на каждое событие
Каждая новая компания сразу получает полный набор шаблонов по умолчанию во всех каналах. Компания правит текст и оформление, включает и выключает события, а рассылки используют те же каналы.
| Событие | Каналы |
|---|---|
| Вход и безопасность | |
| Код регистрации | E-mail MAX Push SMS Telegram |
| Код входа в кабинет | E-mail MAX Push SMS Telegram |
| Код подтверждения | E-mail MAX Push SMS Telegram |
| Подтверждение e-mail | |
| Сброс пароля | E-mail SMS |
| Пароль изменён | |
| Код смены телефона | SMS |
| Телефон изменён | SMS |
| Баллы и уровни | |
| Начислены баллы | E-mail MAX Push SMS Telegram |
| Списаны баллы | E-mail MAX Push SMS Telegram |
| Код списания | E-mail MAX Push SMS Telegram |
| Баллы скоро сгорят | E-mail MAX Push SMS Telegram |
| Баллы сгорели | E-mail Push SMS Telegram |
| Повышение уровня | E-mail MAX Push SMS Telegram |
| Понижение уровня | E-mail Push SMS Telegram |
| Выдан бонусный пакет | |
| Получен персональный бонус | |
| Открыта награда | E-mail MAX Push Telegram |
| Награда получена | E-mail SMS |
| Вовлечение и маркетинг | |
| Приветствие | E-mail SMS Telegram |
| День рождения | E-mail Push SMS Telegram |
| Годовщина в программе | E-mail Push Telegram |
| Давно не заходили | E-mail SMS Telegram |
| Сообщение рассылки | E-mail Push SMS Telegram |
| Специальное предложение | E-mail Push SMS Telegram |
| Покупки и сотрудники | |
| Чек покупки | |
| Возврат | E-mail SMS |
| Заказ отменён | E-mail SMS Telegram |
| Ежемесячный RFM-отчёт администраторам | |
| Приветствие новой компании | |
| Сброс пароля сотрудника | |
| Пароль сотрудника изменён | |
| Профиль изменён сотрудником | |
Telegram
Два бота: для покупателей и для эксплуатации
Бот компании привязывает чат Telegram к участнику в одно касание: просит поделиться номером телефона, находит участника в программе и дальше присылает коды, баланс и сообщения рассылок.
Бот алертов платформы присылает инциденты в чат дежурных и отвечает на команды.
- /status — текущее состояние каждого компонента
- /problems — только открытые алерты
- /help — список команд
Консоль
Все команды и что они делают
Команды без расписания — инструменты оператора: импорт, перенос из PremiumBonus и 1С, смена ключей, восстановление и очистка.
| Команда | Что делает | Запуск |
|---|---|---|
| Баллы и вознаграждения | ||
| app:points:expire | Сжигает баллы с истёкшим сроком | каждый час |
| app:bonus:burn | Выполняет плановое процентное сгорание бонусов | каждый час |
| app:bonus:activate-grants | Зачисляет бонусы, у которых наступила дата активации | каждые 5 минут |
| app:bonus-reserves:expire | Снимает просроченные резервы бонусов и возвращает баланс | каждую минуту |
| app:redemption:expire-holds | Снимает неподтверждённые блокировки списания | каждую минуту |
| app:rules:deactivate-expired | Выключает правила с закончившимся сроком действия | каждый час |
| app:pb:process-triggers | Обрабатывает событийные правила, перенесённые из PremiumBonus | каждый час |
| app:orders:backfill-applied-rules | Фиксирует на старых заказах правила, которые дали баллы, с проверкой пересчёта | вручную |
| Маркетинг и аналитика | ||
| app:campaigns:execute-scheduled | Отправляет рассылки, время которых наступило | каждые 5 минут |
| app:segments:rebuild | Пересчитывает состав динамических сегментов | каждый час |
| app:segments:reassign-tiers | Переназначает уровни, привязанные к сегменту | вручную |
| app:scenarios:process-delays | Продолжает сценарии, у которых закончилась пауза | каждую минуту |
| app:scenarios:process-scheduled-triggers | Запускает сценарии дня рождения и неактивности | каждый час |
| app:analytics:rfm:monthly | Сохраняет RFM-срез на конец месяца и отправляет его администраторам | каждый час |
| app:analytics:backfill-tier-history | Заполняет историю уровней для участников с уже назначенным уровнем | вручную |
| Участники, компании и импорт | ||
| app:members:regenerate-cards | Перевыпускает номера карт по шаблону компании | вручную |
| app:members:backfill-registration-source | Уточняет источник регистрации по каналу ключа интеграции | вручную |
| app:import:premium-bonus | Переносит участников, балансы и историю из PremiumBonus | вручную |
| app:import:resume-stalled | Возобновляет импорт, остановившийся на середине | вручную |
| app:pb:import-rules | Переносит правила начисления из PremiumBonus | вручную |
| app:pb:resync-member | Повторно синхронизирует одного участника из PremiumBonus | вручную |
| app:onec:import | Загружает данные, выгруженные из 1С | вручную |
| app:onec:check-duplicates | Находит дубли участников, пришедших из 1С | вручную |
| app:tenant:purge-members | Удаляет участников и историю компании, сохраняя настройки | вручную |
| app:tenant:purge-catalog | Удаляет каталог компании для повторной загрузки | вручную |
| app:tenant:delete | Удаляет компанию со всеми данными | вручную |
| app:registration-forms:import-logos | Переносит логотипы анкет в базу данных | вручную |
| app:registration-forms:prune-logos | Удаляет логотипы, которые не использует ни одна анкета | ежедневно в 02:50 |
| Каталог, магазины и вебхуки | ||
| app:catalog:sync | Забирает каталоги из учётной системы и сайта | каждые 15 минут |
| app:mp-order-codes:expire | Удаляет просроченные коды заказов маркетплейсов | каждые 5 минут |
| app:webhooks:emit-samples | Отправляет по одному образцу каждого события вебхука | вручную |
| app:webhooks:cleanup-logs | Удаляет журналы вебхуков старше 30 дней | ежедневно в 02:30 |
| Резервные копии | ||
| app:backup:dispatch | Запускает резервную копию, когда наступает её время | каждые 5 минут |
| app:backup:database | Делает дамп базы, ротирует копии и выгружает в S3 | вручную |
| app:backup:restore | Восстанавливает платформу из резервной копии | вручную |
| app:backup:tenant | Делает копию данных одной компании | вручную |
| app:backup:restore-tenant | Восстанавливает одну компанию из её копии | вручную |
| Эксплуатация платформы | ||
| app:health:tick | Проверяет здоровье платформы, пишет историю и поднимает алерты | каждую минуту |
| app:health:cleanup-alerts | Удаляет закрытые алерты старше срока хранения | ежедневно в 02:40 |
| app:health:telegram-webhook-ensure | Перерегистрирует вебхук бота алертов при сбое | каждые 15 минут |
| app:health:telegram-webhook | Регистрирует вебхук бота алертов | вручную |
| app:health:telegram-poll | Запускает бота алертов без вебхука | вручную |
| app:telegram:poll | Запускает ботов компаний без вебхука | вручную |
| app:outbox:relay | Публикует сообщения транзакционного outbox в брокер | вручную |
| app:partitions:create | Создаёт секции следующих месяцев для заказов, движений баллов и журналов | ежедневно в 01:00 |
| app:db:analyze | Обновляет статистику планировщика по нагруженным таблицам | ежедневно в 02:15 |
| app:pos-keys:flush-last-used | Переносит накопленное в Redis использование ключей в базу | каждую минуту |
| app:tokens:cleanup | Удаляет просроченные токены сброса пароля | каждые 6 часов |
| app:secrets:rekey | Перешифровывает хранимые секреты новым ключом | вручную |
| app:notifications:sandbox | Управляет белым списком получателей на тестовых стендах | вручную |
| app:translations:import | Загружает переводы интерфейса | вручную |
| app:geo:import | Загружает справочник городов | вручную |
| app:seed | Наполняет стенд разработки демо-данными | вручную |
| app:load-test:seed | Создаёт большой набор данных для нагрузочных тестов | вручную |