Документация Accelera

Как сделать свою первую Программу Лояльности

Введение

В этом разделе мы пошагово создадим работающую программу лояльности для мобильного приложения.

Что мы будем создавать:

Программа лояльности, где клиенты:

  • ✅ Повышают свой уровень лояльности, выполняя целевые действия
  • ✅ Получают очки опыта за авторизацию, пополнение счета, покупки, отзывы
  • ✅ Получают повышенный кэшбек при росте уровня
  • ✅ Зарабатывают валюту "Бонусы", которую можно тратить
  • ✅ Открывают сундуки за 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-991%
Постоянный100-2992%
VIP300-5993%
Платина600-9994%
Легенда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 = 1
4. Тест: Пополнение счета (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, Бонусы = 9
5. Тест: Покупка на 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, Уровень = 2
6. Тест: Покупка сундука за 10 бонусов
# Купить сундук
POST /v1/management/items/purchase
{
  "client_id": "test_user_001",
  "item_id": "item_daily_chest"
}

# Сундук открывается автоматически
# Выдается случайный приз (например, 10 бонусов)
# Бонусы: 64 - 10 (цена) + 10 (приз) = 64
7. Итоговая проверка
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 интегрировано с мобильным приложением
  • Визуализация уровней, бонусов и заданий реализована на фронтенде
  • Уведомления о повышении уровня настроены
  • Мониторинг и аналитика подключены

Мониторинг после запуска

Ключевые метрики для отслеживания:

  1. Активность клиентов:
    • Количество ежедневных авторизаций
    • Количество пополнений счета
    • Количество покупок
    • Количество отзывов
  2. Прогрессия по уровням:
    • Распределение клиентов по уровням
    • Средний XP на клиента
    • Время достижения каждого уровня
  3. Экономика бонусов:
    • Средний баланс бонусов на клиента
    • Количество открытых сундуков в день
    • Соотношение заработанных/потраченных бонусов
  4. Выполнение заданий:
    • Процент клиентов, выполнивших каждое задание
    • Среднее время выполнения заданий
    • Конверсия в повторные задания

Рекомендуемые дашборды:

┌──────────────────────────────────────────┐
│  Программа лояльности "Моё приложение"   │
├──────────────────────────────────────────┤
│  Всего клиентов: 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 минут

Результат: Полнофункциональная программа лояльности, готовая к интеграции с вашим приложением.

Следующие шаги

  1. Интеграция: Подключите API к вашему мобильному приложению
  2. Дизайн: Создайте визуализацию уровней, прогресса и наград
  3. Тестирование: Проведите beta-тестирование с реальными пользователями
  4. Запуск: Начните маркетинговую кампанию для привлечения в программу
  5. Мониторинг: Отслеживайте метрики и оптимизируйте механики
  6. Развитие: Добавляйте новые фичи на основе обратной связи

Удачи в запуске программы лояльности! 🚀

На этой странице

ВведениеАрхитектура программы лояльностиПошаговая настройкаШаг 1: Создание окружения (Environment)Шаг 2: Создание кошелька валюты (Wallet)Шаг 3: Создание счетчика опыта (Counters)Шаг 4: Создание уровней лояльности (Levels)Шаг 5: Создание наград за уровни (Rewards)Шаг 6: Создание призов для сундука (Rewards для Treasures)Шаг 7: Создание сундука (Treasures)Шаг 8: Создание предмета-сундука (Items)Шаг 9: Создание заданий (Tasks)Шаг 10: Настройка логики во FlowСценарий 1: АвторизацияСценарий 2: Пополнение счетаСценарий 3: Покупка товараСценарий 4: Отзыв и рейтингСценарий 5: Повышение уровняТестирование программы лояльностиСценарий тестирования1. Создание тестового клиента2. Проверка начального состояния3. Тест: Авторизация (5 XP, 1 бонус)4. Тест: Пополнение счета (15 XP, 3 бонуса + задание)5. Тест: Покупка на 500₽ (50 XP + кэшбек 1% = 5 бонусов)6. Тест: Покупка сундука за 10 бонусов7. Итоговая проверкаЗапуск программы лояльностиЧек-лист перед запускомМониторинг после запускаДальнейшее развитиеИдеи для улучшения программы1. Достижения (Achievements)2. Коллекции (Collections)3. Больше сундуков4. Сезонные механики5. Социальные механики6. Расширенная система заданийЗаключениеСледующие шаги