Как сделать свою первую Программу Лояльности
Введение
В этом разделе мы пошагово создадим работающую программу лояльности для мобильного приложения.
Что мы будем создавать:
Программа лояльности, где клиенты:
- ✅ Повышают свой уровень лояльности, выполняя целевые действия
- ✅ Получают очки опыта за авторизацию, пополнение счета, покупки, отзывы
- ✅ Получают повышенный кэшбек при росте уровня
- ✅ Зарабатывают валюту "Бонусы", которую можно тратить
- ✅ Открывают сундуки за 10 бонусов
- ✅ Выполняют задания для получения дополнительного опыта и бонусов
- ✅ Получают награды за достижение новых уровней
Время настройки: 30-40 минут
Уровень сложности: Начальный
Архитектура программы лояльности
Перед началом создания давайте разберем, из каких компонентов состоит наша программа:
┌─────────────────────────────────────────────────────────────┐
│ ПРОГРАММА ЛОЯЛЬНОСТИ │
└─────────────────────────────────────────────────────────────┘
↓
┌─────────────────────┴─────────────────────┐
↓ ↓
┌───────────────┐ ┌────────────────┐
│ ENVIRONMENT │ │ WALLET │
│ "my_app" │ │ "bonuses" │
└───────────────┘ └────────────────┘
↓ ↓
┌───────────────┐ ┌────────────────┐
│ COUNTERS │ │ ITEMS │
│ "experience" │ │ "chest_item" │
└───────────────┘ └────────────────┘
↓ ↓
┌───────────────┐ ┌────────────────┐
│ LEVELS │ │ TREASURES │
│ Lvl 1,2,3... │←─────[rewards]────────────│ "daily_chest" │
└───────────────┘ └────────────────┘
↓ ↓
┌───────────────┐ ┌────────────────┐
│ TASKS │ │ REWARDS │
│ Задания для │ │ Призы для │
│ клиентов │ │ клиентов │
└───────────────┘ └────────────────┘
↓
┌──────────────────┐
│ FLOW │
│ Бизнес-логика │
└──────────────────┘Компоненты:
| Компонент | Назначение | Зачем нужен в нашем кейсе |
|---|---|---|
| Environment | Контейнер программы | Объединяет все сущности в одну программу |
| Wallet | Кошелек валюты | Хранит бонусы клиента |
| Counters | Счетчик метрик | Отслеживает опыт клиента |
| Levels | Уровни лояльности | Сегментирует клиентов по активности |
| Rewards | Награды | Выдаются за повышение уровня |
| Treasures | Сундуки с призами | Случайные призы за бонусы |
| Items | Покупаемые предметы | Сундук, который можно купить за 10 бонусов |
| Tasks | Задания | Дополнительная мотивация для активности |
| Flow | Бизнес-логика | Обрабатывает события и начисляет награды |
Пошаговая настройка
Шаг 1: Создание окружения (Environment)
Зачем нужен: Environment — это контейнер, который объединяет все компоненты программы лояльности.
Что создаем: Окружение с ID my_app для нашего мобильного приложения.
API запрос:
curl --request POST \
--url /v1/management/environments \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"name": "Моё приложение",
"status": "active",
"stand": "production",
"is_visible": true,
"salt": "my_secure_salt_123",
"title": "Программа лояльности",
"short_description": "Зарабатывайте бонусы и повышайте уровень!",
"categories": ["loyalty", "gamification"]
}
'Результат: ✅ Создано окружение my_app ✅ Все остальные сущности будут создаваться с environment_id: "my_app"
Шаг 2: Создание кошелька валюты (Wallet)
Зачем нужен: Кошелек для хранения бонусов, которые клиенты будут тратить на сундуки.
Что создаем: Валюту "Бонусы" с начальным балансом 0.
API запрос:
curl --request POST \
--url /v1/management/wallets \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"id": "bonuses",
"title": "Бонусы",
"description": "Бонусные баллы программы лояльности",
"is_default": true,
"status": "active",
"balance": 0,
"on_hold": 0
}
'Результат: ✅ Создана валюта "Бонусы" ✅ Новые клиенты начинают с балансом 0 бонусов ✅ Кошелек можно использовать для покупки предметов
Шаг 3: Создание счетчика опыта (Counters)
Зачем нужен: Счетчик для отслеживания опыта клиента, на основе которого будут повышаться уровни.
Что создаем: Счетчик experience_points для подсчета опыта.
API запрос:
curl --request POST \
--url /v1/management/counters \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "experience_points",
"title": "Очки опыта",
"description": "Опыт для повышения уровня",
"is_default": true,
"value": 0,
"min": 0
}
'Результат: ✅ Создан счетчик опыта ✅ Начальное значение: 0 XP ✅ Счетчик будет увеличиваться при выполнении действий
Шаг 4: Создание уровней лояльности (Levels)
Зачем нужны: Уровни сегментируют клиентов и дают разный размер кэшбека.
Что создаем: 5 уровней с прогрессией по опыту и увеличением кэшбека.
Таблица уровней:
| Уровень | Опыт | Кэшбек |
|---|---|---|
| Новичок | 0-99 | 1% |
| Постоянный | 100-299 | 2% |
| VIP | 300-599 | 3% |
| Платина | 600-999 | 4% |
| Легенда | 1000+ | 5% |
API запросы:
# Уровень 1: Новичок
curl --request POST \
--url /v1/management/levels \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "level_1_newbie",
"title": "Новичок",
"description": "Стартовый уровень. Кэшбек 1%",
"priority": 1,
"is_default": true,
"is_specific": true,
"specific_counter": "experience_points",
"from": 0,
"to": 99,
"additional": {
"cashback_percent": 1,
"badge_color": "#C0C0C0"
}
}
'
# Уровень 2: Постоянный
curl --request POST \
--url /v1/management/levels \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "level_2_regular",
"title": "Постоянный",
"description": "Вы постоянный участник! Кэшбек 2%",
"priority": 2,
"is_default": false,
"is_specific": true,
"specific_counter": "experience_points",
"from": 100,
"to": 299,
"additional": {
"cashback_percent": 2,
"badge_color": "#4169E1"
}
}
'
# Уровень 3: VIP
curl --request POST \
--url /v1/management/levels \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "level_3_vip",
"title": "VIP",
"description": "VIP-статус! Кэшбек 3%",
"priority": 3,
"is_default": false,
"is_specific": true,
"specific_counter": "experience_points",
"from": 300,
"to": 599,
"additional": {
"cashback_percent": 3,
"badge_color": "#FFD700"
}
}
'
# Уровень 4: Платина
curl --request POST \
--url /v1/management/levels \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "level_4_platinum",
"title": "Платина",
"description": "Платиновый статус! Кэшбек 4%",
"priority": 4,
"is_default": false,
"is_specific": true,
"specific_counter": "experience_points",
"from": 600,
"to": 999,
"additional": {
"cashback_percent": 4,
"badge_color": "#E5E4E2"
}
}
'
# Уровень 5: Легенда
curl --request POST \
--url /v1/management/levels \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "level_5_legend",
"title": "Легенда",
"description": "Легендарный статус! Максимальный кэшбек 5%",
"priority": 5,
"is_default": false,
"is_specific": true,
"specific_counter": "experience_points",
"from": 1000,
"to": 999999,
"additional": {
"cashback_percent": 5,
"badge_color": "#9400D3"
}
}
'Результат: ✅ Создано 5 уровней лояльности ✅ Уровни автоматически переключаются при росте опыта ✅ Кэшбек увеличивается с каждым уровнем ✅ Новички начинают с уровня 1
Шаг 5: Создание наград за уровни (Rewards)
Зачем нужны: Награды мотивируют клиентов повышать уровень.
Что создаем: Награды в виде бонусов за достижение каждого уровня.
API запросы:
# Награда за уровень 2
curl --request POST \
--url /v1/management/rewards \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "reward_level_2",
"type": "bonus_points",
"status": "active",
"title": "Награда за уровень Постоянный",
"description": "Получите 50 бонусов за достижение 2 уровня",
"issue_type": "once",
"active_from": "2025-01-01",
"active_to": "2026-12-31",
"is_instant": true,
"is_moderated": false,
"is_visible": true,
"additional": {
"bonus_amount": 50,
"currency": "bonuses"
}
}
'
# Награда за уровень 3
curl --request POST \
--url /v1/management/rewards \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "reward_level_3",
"type": "bonus_points",
"status": "active",
"title": "Награда за VIP статус",
"description": "Получите 100 бонусов за достижение VIP",
"issue_type": "once",
"active_from": "2025-01-01",
"active_to": "2026-12-31",
"is_instant": true,
"is_moderated": false,
"is_visible": true,
"additional": {
"bonus_amount": 100,
"currency": "bonuses"
}
}
'
# Награда за уровень 4
curl --request POST \
--url /v1/management/rewards \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "reward_level_4",
"type": "bonus_points",
"status": "active",
"title": "Награда за Платиновый статус",
"description": "Получите 200 бонусов за достижение Платины",
"issue_type": "once",
"active_from": "2025-01-01",
"active_to": "2026-12-31",
"is_instant": true,
"is_moderated": false,
"is_visible": true,
"additional": {
"bonus_amount": 200,
"currency": "bonuses"
}
}
'
# Награда за уровень 5
curl --request POST \
--url /v1/management/rewards \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "reward_level_5",
"type": "bonus_points",
"status": "active",
"title": "Награда за Легендарный статус",
"description": "Получите 500 бонусов за достижение Легенды!",
"issue_type": "once",
"active_from": "2025-01-01",
"active_to": "2026-12-31",
"is_instant": true,
"is_moderated": false,
"is_visible": true,
"additional": {
"bonus_amount": 500,
"currency": "bonuses"
}
}
'Результат: ✅ Созданы награды за уровни 2-5 ✅ Клиенты будут получать бонусы при повышении ✅ Награды выдаются только один раз (issue_type: "once")
Шаг 6: Создание призов для сундука (Rewards для Treasures)
Зачем нужны: Эти награды будут выдаваться случайно при открытии сундука.
Что создаем: 4 награды разной ценности для сундука.
API запросы:
# Приз 1: 5 бонусов (часто)
curl --request POST \
--url /v1/management/rewards \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "chest_reward_5",
"type": "bonus_points",
"status": "active",
"title": "5 бонусов",
"description": "Получите 5 бонусов из сундука",
"issue_type": "unlimited",
"active_from": "2025-01-01",
"active_to": "2026-12-31",
"is_instant": true,
"is_moderated": false,
"is_unique": true,
"additional": {
"bonus_amount": 5,
"currency": "bonuses"
}
}
'
# Приз 2: 10 бонусов (средне)
curl --request POST \
--url /v1/management/rewards \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "chest_reward_10",
"type": "bonus_points",
"status": "active",
"title": "10 бонусов",
"description": "Получите 10 бонусов из сундука",
"issue_type": "unlimited",
"active_from": "2025-01-01",
"active_to": "2026-12-31",
"is_instant": true,
"is_moderated": false,
"is_unique": true,
"additional": {
"bonus_amount": 10,
"currency": "bonuses"
}
}
'
# Приз 3: 20 бонусов (редко)
curl --request POST \
--url /v1/management/rewards \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "chest_reward_20",
"type": "bonus_points",
"status": "active",
"title": "20 бонусов",
"description": "Получите 20 бонусов из сундука",
"issue_type": "unlimited",
"active_from": "2025-01-01",
"active_to": "2026-12-31",
"is_instant": true,
"is_moderated": false,
"is_unique": true,
"additional": {
"bonus_amount": 20,
"currency": "bonuses"
}
}
'
# Приз 4: 50 бонусов (очень редко)
curl --request POST \
--url /v1/management/rewards \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "chest_reward_50",
"type": "bonus_points",
"status": "active",
"title": "ДЖЕКПОТ! 50 бонусов",
"description": "Вы выиграли джекпот! 50 бонусов!",
"issue_type": "unlimited",
"active_from": "2025-01-01",
"active_to": "2026-12-31",
"is_instant": true,
"is_moderated": false,
"is_unique": true,
"additional": {
"bonus_amount": 50,
"currency": "bonuses"
}
}
'Результат: ✅ Созданы 4 приза для сундука ✅ is_unique = true означает, что каждая выдача создает уникальную запись ✅ Призы готовы для добавления в сундук
Шаг 7: Создание сундука (Treasures)
Зачем нужен: Сундук — это механика случайной выдачи призов с заданными вероятностями.
Что создаем: Сундук "Ежедневный" с настроенными вероятностями призов.
Распределение вероятностей:
- 5 бонусов: 50% (диапазон 1 - 50,000,000)
- 10 бонусов: 35% (диапазон 50,000,001 - 85,000,000)
- 20 бонусов: 13% (диапазон 85,000,001 - 98,000,000)
- 50 бонусов: 2% (диапазон 98,000,001 - 100,000,000)
Шаг 7.1: Создание сундука
curl --request POST \
--url /v1/management/treasures \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "daily_chest",
"title": "Ежедневный сундук",
"description": "Откройте и получите случайный приз!",
"type": "daily",
"algorithm_id": "1",
"status": "active"
}
'Шаг 7.2: Наполнение сундука призами
Создайте CSV файл daily_chest#prizes.csv со следующим содержимым:
reward_id,from,to,treasures_id
chest_reward_5,1,50000000,daily_chest
chest_reward_10,50000001,85000000,daily_chest
chest_reward_20,85000001,98000000,daily_chest
chest_reward_50,98000001,100000000,daily_chestЗагрузите файл через API или интерфейс управления.
Результат: ✅ Создан сундук "Ежедневный" ✅ Настроены вероятности призов ✅ 50% шанс получить 5 бонусов ✅ 2% шанс выиграть джекпот 50 бонусов
Шаг 8: Создание предмета-сундука (Items)
Зачем нужен: Item позволяет клиенту купить сундук за бонусы.
Что создаем: Предмет типа "treasure", который стоит 10 бонусов.
API запрос:
curl --request POST \
--url /v1/management/items \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "item_daily_chest",
"item_type": "treasure",
"title": "Ежедневный сундук",
"short_description": "Откройте и получите случайный приз!",
"full_description": "Сундук содержит бонусы от 5 до 50. Попытайте удачу!",
"treasure_id": "daily_chest",
"price": 10,
"currency": "bonuses",
"is_multiple_purchases": true,
"multiple_purchases_count": "999",
"is_unique": true,
"is_locked": false,
"is_default": true,
"valid_from": "2025-01-01",
"expired_at": "2026-12-31"
}
'Результат: ✅ Создан предмет-сундук стоимостью 10 бонусов ✅ Клиенты могут покупать неограниченное количество раз ✅ При покупке автоматически открывается сундук и выдается приз
Шаг 9: Создание заданий (Tasks)
Зачем нужны: Задания дают дополнительную мотивацию для активности и больше опыта.
Что создаем: 3 простых задания для начала.
API запросы:
# Задание 1: Пополните счет
curl --request POST \
--url /v1/management/tasks \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "task_refill_account",
"title": "Пополните счет",
"short_description": "Пополните счет на любую сумму",
"full_description": "Пополните счет мобильного телефона и получите 30 XP + 5 бонусов",
"details": "Награда: 30 XP, 5 бонусов",
"status": "active",
"progress_type": "discrete",
"max": 1,
"position": 1,
"is_default": true
}
'
# Задание 2: Совершите 3 покупки
curl --request POST \
--url /v1/management/tasks \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "task_3_purchases",
"title": "Совершите 3 покупки",
"short_description": "Купите любые 3 товара в приложении",
"full_description": "Совершите 3 покупки и получите 50 XP + 10 бонусов",
"details": "Награда: 50 XP, 10 бонусов",
"status": "active",
"progress_type": "discrete",
"max": 3,
"position": 2,
"is_default": true
}
'
# Задание 3: Оставьте отзыв
curl --request POST \
--url /v1/management/tasks \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "my_app",
"id": "task_leave_review",
"title": "Оставьте отзыв",
"short_description": "Оставьте отзыв о товаре",
"full_description": "Оставьте отзыв и рейтинг о купленном товаре и получите 20 XP + 3 бонуса",
"details": "Награда: 20 XP, 3 бонуса",
"status": "active",
"progress_type": "discrete",
"max": 1,
"position": 3,
"is_default": true
}
'Результат: ✅ Созданы 3 задания для клиентов ✅ Задания дают повышенный опыт и бонусы ✅ Видны всем клиентам (is_default = true)
Шаг 10: Настройка логики во Flow
Зачем нужен: Flow — это модуль бизнес-логики, который обрабатывает события и начисляет опыт/бонусы/награды.
Что настраиваем: Сценарии обработки всех целевых действий и заданий.
Сценарий 1: Авторизация
Событие: login
↓
Начислить 5 XP
→ counter.increment("experience_points", 5)
↓
Начислить 1 бонус
→ wallet.add("bonuses", 1)
↓
Проверить уровень
→ Если уровень изменился → Выдать награду за новый уровеньСценарий 2: Пополнение счета
Событие: account_refill
↓
Начислить 15 XP
→ counter.increment("experience_points", 15)
↓
Начислить 3 бонуса
→ wallet.add("bonuses", 3)
↓
Проверить задание "task_refill_account"
→ Если задание активно → Пометить completed + выдать 30 XP + 5 бонусовСценарий 3: Покупка товара
Событие: purchase
↓
Получить сумму покупки
↓
Начислить XP (10 XP за каждые 100 рублей)
→ xp = Math.floor(purchase.amount / 100) * 10
→ counter.increment("experience_points", xp)
↓
Получить текущий уровень клиента
↓
Рассчитать кэшбек
→ cashback_percent = level.additional.cashback_percent
→ cashback_amount = purchase.amount * (cashback_percent / 100)
→ wallet.add("bonuses", cashback_amount)
↓
Проверить задание "task_3_purchases"
→ Увеличить progress
→ Если progress == 3 → completed + 50 XP + 10 бонусовСценарий 4: Отзыв и рейтинг
Событие: review_submitted
↓
Начислить 10 XP
→ counter.increment("experience_points", 10)
↓
Начислить 2 бонуса
→ wallet.add("bonuses", 2)
↓
Проверить задание "task_leave_review"
→ Если задание активно → completed + 20 XP + 3 бонусаСценарий 5: Повышение уровня
Событие: counter "experience_points" изменен
↓
Получить текущий уровень клиента
↓
Получить новый уровень (на основе XP)
↓
Если уровень изменился:
→ Определить новый level_id
→ Назначить новый уровень клиенту
→ Выдать награду за новый уровень:
IF level == 2 → reward "reward_level_2" (50 бонусов)
IF level == 3 → reward "reward_level_3" (100 бонусов)
IF level == 4 → reward "reward_level_4" (200 бонусов)
IF level == 5 → reward "reward_level_5" (500 бонусов)
→ Отправить уведомление "Поздравляем с новым уровнем!"Псевдокод основного сценария:
// Главный обработчик событий
function handleEvent(event) {
const client_id = event.client_id;
const event_type = event.type;
switch(event_type) {
case 'login':
addExperience(client_id, 5);
addBonuses(client_id, 1);
break;
case 'account_refill':
addExperience(client_id, 15);
addBonuses(client_id, 3);
checkTask(client_id, 'task_refill_account');
break;
case 'purchase':
const xp = Math.floor(event.amount / 100) * 10;
addExperience(client_id, xp);
const level = getClientLevel(client_id);
const cashback = event.amount * (level.cashback_percent / 100);
addBonuses(client_id, cashback);
updateTaskProgress(client_id, 'task_3_purchases', 1);
break;
case 'review_submitted':
addExperience(client_id, 10);
addBonuses(client_id, 2);
checkTask(client_id, 'task_leave_review');
break;
}
// Проверить изменение уровня
checkLevelUp(client_id);
}
function checkLevelUp(client_id) {
const currentLevel = getClientLevel(client_id);
const xp = getCounter(client_id, 'experience_points');
const newLevel = determineLevelByXP(xp);
if (newLevel.priority > currentLevel.priority) {
assignLevel(client_id, newLevel.id);
giveReward(client_id, `reward_level_${newLevel.priority}`);
sendNotification(client_id, `Поздравляем! Вы достигли уровня ${newLevel.title}!`);
}
}Результат: ✅ Настроена автоматическая обработка всех событий ✅ Клиенты получают XP и бонусы за целевые действия ✅ Уровни повышаются автоматически ✅ Награды выдаются при смене уровня ✅ Задания отслеживаются и выполняются
Тестирование программы лояльности
Сценарий тестирования
Создадим тестового клиента и проверим всю цепочку механик.
1. Создание тестового клиента
# Регистрация клиента
client_id = "test_user_001"2. Проверка начального состояния
# Получить текущий уровень
GET /v1/management/levels/clients/test_user_001
# Ожидается: level_1_newbie, XP = 0
# Получить баланс кошелька
GET /v1/management/wallets/clients/test_user_001
# Ожидается: bonuses = 0
# Получить задания
GET /v1/management/tasks/clients/test_user_001
# Ожидается: 3 активных задания3. Тест: Авторизация (5 XP, 1 бонус)
# Эмулировать событие login
POST /flow/events
{
"event": "login",
"client_id": "test_user_001"
}
# Проверить результат
GET /v1/management/counters/clients/test_user_001
# Ожидается: experience_points = 5
GET /v1/management/wallets/clients/test_user_001
# Ожидается: bonuses = 14. Тест: Пополнение счета (15 XP, 3 бонуса + задание)
# Эмулировать событие account_refill
POST /flow/events
{
"event": "account_refill",
"client_id": "test_user_001"
}
# Проверить результат
# XP: 5 + 15 = 20
# Бонусы: 1 + 3 = 4
# Задание completed → +30 XP, +5 бонусов
# Итого: XP = 50, Бонусы = 95. Тест: Покупка на 500₽ (50 XP + кэшбек 1% = 5 бонусов)
# Эмулировать событие purchase
POST /flow/events
{
"event": "purchase",
"client_id": "test_user_001",
"amount": 500
}
# Проверить результат
# XP: 50 + 50 = 100
# Бонусы: 9 + 5 = 14
# Уровень изменился: level_1_newbie → level_2_regular
# Выдана награда: reward_level_2 (+50 бонусов)
# Итого: XP = 100, Бонусы = 64, Уровень = 26. Тест: Покупка сундука за 10 бонусов
# Купить сундук
POST /v1/management/items/purchase
{
"client_id": "test_user_001",
"item_id": "item_daily_chest"
}
# Сундук открывается автоматически
# Выдается случайный приз (например, 10 бонусов)
# Бонусы: 64 - 10 (цена) + 10 (приз) = 647. Итоговая проверка
GET /v1/management/levels/clients/test_user_001
# level_2_regular, XP = 100, кэшбек 2%
GET /v1/management/wallets/clients/test_user_001
# bonuses = 64
GET /v1/management/tasks/clients/test_user_001
# task_refill_account: completed
# task_3_purchases: progress 1/3
# task_leave_review: active
GET /v1/management/rewards/clients/test_user_001
# reward_level_2: получен
# chest_reward_10: полученРезультат тестирования: ✅ Все механики работают корректно ✅ Опыт начисляется правильно ✅ Бонусы начисляются с учетом кэшбека ✅ Уровни повышаются автоматически ✅ Награды выдаются при повышении ✅ Сундуки открываются и дают призы ✅ Задания отслеживаются
Запуск программы лояльности
Чек-лист перед запуском
- Все сущности созданы (Environment, Wallet, Counters, Levels, Rewards, Treasures, Items, Tasks)
- Сценарии во Flow настроены и протестированы
- Проведено тестирование на тестовых клиентах
- API интегрировано с мобильным приложением
- Визуализация уровней, бонусов и заданий реализована на фронтенде
- Уведомления о повышении уровня настроены
- Мониторинг и аналитика подключены
Мониторинг после запуска
Ключевые метрики для отслеживания:
- Активность клиентов:
- Количество ежедневных авторизаций
- Количество пополнений счета
- Количество покупок
- Количество отзывов
- Прогрессия по уровням:
- Распределение клиентов по уровням
- Средний XP на клиента
- Время достижения каждого уровня
- Экономика бонусов:
- Средний баланс бонусов на клиента
- Количество открытых сундуков в день
- Соотношение заработанных/потраченных бонусов
- Выполнение заданий:
- Процент клиентов, выполнивших каждое задание
- Среднее время выполнения заданий
- Конверсия в повторные задания
Рекомендуемые дашборды:
┌──────────────────────────────────────────┐
│ Программа лояльности "Моё приложение" │
├──────────────────────────────────────────┤
│ Всего клиентов: 10,452 │
│ Активных сегодня: 3,248 (31%) │
│ │
│ Распределение по уровням: │
│ Новичок: 7,215 (69%) │
│ Постоянный: 2,104 (20%) │
│ VIP: 854 (8%) │
│ Платина: 234 (2%) │
│ Легенда: 45 (0.4%) │
│ │
│ Средний баланс: 37 бонусов │
│ Открыто сундуков сегодня: 1,523 │
│ Выполнено заданий: 847 │
└──────────────────────────────────────────┘Дальнейшее развитие
Идеи для улучшения программы
После успешного запуска базовой программы можно добавить:
1. Достижения (Achievements)
{
"id": "ach_first_purchase",
"title": "Первая покупка",
"description": "Совершите первую покупку",
"max": 1
}2. Коллекции (Collections)
{
"id": "brands_collection",
"title": "Коллекция брендов",
"size": 10,
"achievement": "brands_master_reward"
}3. Больше сундуков
- Серебряный сундук (20 бонусов)
- Золотой сундук (50 бонусов)
- Легендарный сундук (100 бонусов)
4. Сезонные механики
- Летние задания с увеличенными наградами
- Новогодняя коллекция стикеров
- Тематические сундуки
5. Социальные механики
- Реферальная программа (XP за приглашенного друга)
- Подарки друзьям (можно подарить бонусы)
- Лидерборд по уровням
6. Расширенная система заданий
- Ежедневные задания (обновляются каждый день)
- Еженедельные челленджи
- Цепочки заданий
Заключение
Поздравляем! Вы создали работающую программу лояльности с:
- ✅ 5 уровнями с автоматической прогрессией
- ✅ Системой опыта и бонусов
- ✅ Кэшбеком, растущим с уровнем
- ✅ Сундуками со случайными призами
- ✅ Заданиями для дополнительной мотивации
- ✅ Наградами за достижения
Время на создание: ~30-40 минут
Результат: Полнофункциональная программа лояльности, готовая к интеграции с вашим приложением.
Следующие шаги
- Интеграция: Подключите API к вашему мобильному приложению
- Дизайн: Создайте визуализацию уровней, прогресса и наград
- Тестирование: Проведите beta-тестирование с реальными пользователями
- Запуск: Начните маркетинговую кампанию для привлечения в программу
- Мониторинг: Отслеживайте метрики и оптимизируйте механики
- Развитие: Добавляйте новые фичи на основе обратной связи
Удачи в запуске программы лояльности! 🚀