Achievements
Achievements
Назначение Achievements
Achievements (Достижения) — это механика геймификации, представляющая собой классические бейджи и ачивки в программе лояльности.
Основные возможности:
- Создание коллекционных достижений для мотивации клиентов
- Отслеживание прогресса выполнения достижений
- Награды за получение достижений через интеграцию с Flow
- Группировка достижений по категориям и коллекциям
- Визуальное отображение открытых и закрытых достижений
- Постоянное хранение достижений в профиле клиента
- Персонализация достижений для разных сегментов
Как работают достижения
Достижения работают как классические игровые ачивки — это виртуальные награды за выполнение определенных условий.
Основные характеристики:
- Не дают прямых преимуществ — достижения носят коллекционный характер
- Отслеживание прогресса — можно видеть, насколько близко клиент к получению достижения
- Выдача наград — при получении достижения можно выдать reward через Flow
- Постоянное хранение — достижения остаются у клиента навсегда и видны другим пользователям
- Мотивация активности — стимулируют клиентов выполнять целевые действия
Примеры достижений:
- «Первая покупка» — совершите первую покупку в приложении
- «Коллекционер» — купите товары из всех категорий
- «Марафонец» — войдите в приложение 30 дней подряд
- «Социальный лидер» — пригласите 10 друзей
- «Охотник за сокровищами» — откройте 100 сундуков
- «Мастер своего дела» — выполните 50 заданий
Отличие от Tasks (Заданий)
Хотя Achievements и Tasks имеют схожую структуру (progress, max, progress_type, sql), между ними есть ключевые различия:
| Характеристика | Tasks (Задания) | Achievements (Достижения) |
|---|---|---|
| Назначение | Мотивация выполнить конкретное действие | Награда за достижение цели |
| Длительность | Временные, после выполнения могут быть удалены | Постоянные, остаются у клиента навсегда |
| Видимость | Видны только самому клиенту | Могут быть видны другим пользователям |
| Повторяемость | Могут повторяться (ежедневные задания) | Обычно однократные (коллекционные) |
| Фокус | Процесс выполнения | Факт достижения результата |
| Удаление | Удаляются после выполнения или истечения | Хранятся постоянно |
Пример взаимосвязи:
Task: "Совершите 10 покупок в этом месяце"
↓ (выполнено и удалено)
Achievement: "Активный покупатель" (остается навсегда)Совет: Task можно использовать для мотивации выполнения действий, а Achievement — для награждения и демонстрации достигнутых результатов.
Примеры использования
Пример 1: Достижения за активность
"Новичок" — совершите первую покупку
"Постоянный клиент" — совершите 10 покупок
"Завсегдатай" — совершите 50 покупок
"Легенда магазина" — совершите 100 покупокПример 2: Временные достижения
"Лучший покупатель месяца" — потратьте больше всех в январе (обновляется каждый месяц)
"Летний марафон" — выполните все летние задания
"Черная пятница 2025" — совершите покупку в акционный деньПример 3: Коллекционные достижения
"Знаток электроники" — купите товары из 5 подкатегорий электроники
"Коллекционер" — купите товары из всех категорий магазина
"Покоритель брендов" — купите товары 20 разных брендовПример 4: Социальные достижения
"Друг привел друга" — пригласите 1 друга
"Социальный лидер" — пригласите 10 друзей
"Амбассадор бренда" — пригласите 50 друзейПример 5: Игровые достижения
"Удачливый" — откройте первый сундук
"Охотник за сокровищами" — откройте 100 сундуков
"Мастер заданий" — выполните 50 заданий
"Покоритель уровней" — достигните 10 уровняСтатусы достижений
Достижение может находиться в одном из следующих статусов:
| Статус | Описание |
|---|---|
active | Достижение активно и доступно для выполнения |
in_progress | Достижение в процессе выполнения (клиент начал, но не завершил) |
completed | Достижение успешно получено |
Примечание: В отличие от Tasks, у достижений отсутствуют статусы
expiredиarchived, так как достижения обычно не имеют срока истечения.
Примечание: В отличие от Tasks, у достижений отсутствуют статусы expired и archived, так как достижения обычно не имеют срока истечения.
Управление статусами
- Статус меняется при выполнении определенных условий
- Изменение статуса выполняется либо сценариями в Flow, либо через API
- Вручную изменить статус можно через API-методы
- Достижение может вернуться из
completedвin_progress, но на практике это редко требуется
Пример логики изменения статуса в Flow:
Событие: purchase
↓
Увеличить счетчик purchases_count
↓
IF (purchases_count == 10) THEN
Изменить статус достижения "10_purchases" на completed
Выдать reward "achievement_badge_10_purchases"Прогресс выполнения достижений
Типы прогресса (progress_type)
Аналогично Tasks, достижения поддерживают два типа прогресса:
| Тип | Описание | Пример |
|---|---|---|
discrete | Дискретный прогресс (целые числа, шаги) | Совершите 10 покупок: 0/10, 1/10, 2/10... 10/10 |
continuous | Непрерывный прогресс (проценты, дробные значения) | Потратьте 10000 рублей: 0%, 35.5%, 100% |
Поле max
- Поле
maxопределяет целевое значение прогресса, при достижении которого достижение считается полученным - Проверка выполнения обычно производится сценарием в Flow
Пример: Если max=100 и progress=75, значит выполнено 75 из 100 необходимых действий.
Как обновляется прогресс
Прогресс достижений обновляется двумя способами:
1. Через события в Flow:
Событие: item_purchased
↓
Увеличить progress достижения "collector"
↓
IF (progress >= max) THEN
Статус = completed
Выдать reward2. Через API:
curl --request POST \
--url /v1/internal/achievements/clients \
--header 'content-type: application/json' \
--data '
{
"client_id": "12345",
"achievement_id": "first_purchase",
"progress": 1,
"status": "completed"
}
'Важно: Для автоматического отслеживания прогресса достижений рекомендуется использовать сценарии в Flow, которые обрабатывают события в реальном времени.
Уникальность достижений (is_unique)
Поле is_unique определяет, как создаются записи полученных достижений:
is_unique = true (Уникальные достижения):
- При каждом получении формируется уникальный ID достижения
- Каждое получение создает отдельную запись в базе данных
- Позволяет хранить историю получения одного и того же достижения
Пример: Клиент получил достижение "Лучший покупатель месяца" дважды:
Запись 1: id = "best_buyer_jan2025_abc123", дата = "2025-01-31"
Запись 2: id = "best_buyer_feb2025_def456", дата = "2025-02-28"is_unique = false (Обычные достижения):
- Используется один и тот же ID достижения
- При повторном получении существующая запись перезаписывается
- Хранится только последнее получение
Пример: Клиент получил достижение дважды:
Запись: id = "best_buyer_month", дата = "2025-02-28" (предыдущая запись перезаписана)Рекомендация: Используйте is_unique = true для достижений, которые могут получаться несколько раз и важна история (например, "Лучший покупатель месяца"). Используйте is_unique = false для однократных достижений (например, "Первая покупка").
Многоуровневые достижения
Система поддерживает создание многоуровневых достижений двумя способами:
Способ 1: Через персонализацию
Одно достижение с динамическими параметрами для разных клиентов:
{
"id": "purchases_milestone",
"title": "Мастер покупок {{level}}",
"description": "Совершите {{target}} покупок",
"max": 10,
"personalization": {
"context": {
"level": "I",
"target": "10"
}
}
}Для клиента с продвинутым уровнем:
{
"personalization": {
"context": {
"level": "III",
"target": "100"
}
},
"max": 100
}Способ 2: Цепочка достижений
Несколько связанных достижений, открывающихся друг за другом:
// Уровень 1
{
"id": "purchases_bronze",
"title": "Бронзовый покупатель",
"description": "Совершите 10 покупок",
"max": 10
}
// Уровень 2 (открывается после Уровня 1)
{
"id": "purchases_silver",
"title": "Серебряный покупатель",
"description": "Совершите 50 покупок",
"max": 50
}
// Уровень 3 (открывается после Уровня 2)
{
"id": "purchases_gold",
"title": "Золотой покупатель",
"description": "Совершите 100 покупок",
"max": 100
}Логика в Flow:
IF (достижение "purchases_bronze" completed) THEN
Открыть достижение "purchases_silver" для клиентаСовет: Цепочка достижений лучше подходит для явной прогрессии с разными наградами на каждом этапе. Персонализация удобна, когда нужно адаптировать одно достижение под разные сегменты клиентов.
SQL и персонализация
SQL-запросы для фильтрации достижений
Поле sql используется для динамической фильтрации достижений по клиентам:
Как это работает:
- В поле
sqlуказывается запрос с параметризацией, например:{{client_id}} - Запрос содержит условия
WHEREдля проверки соответствия критериям - При вызове API "Получить достижения по клиенту" выполняется SQL-запрос
- Если запрос возвращает строку — достижение передается клиенту
- Если запрос не возвращает результатов — достижение скрыто от клиента
Пример SQL-запроса:
SELECT * FROM purchases
WHERE client_id = {{client_id}}
AND category = 'electronics'
HAVING COUNT(DISTINCT subcategory) >= 5Этот запрос проверяет, купил ли клиент товары из 5 разных подкатегорий электроники.
Важно: Не рекомендуется использовать SQL для автоматической проверки выполнения условий достижения. SQL лучше использовать только для фильтрации доступности достижений по клиентам или сегментам.
Персонализация данных
- Используйте объект
personalizationдля замены статичных параметров на динамические - Позволяет создавать уникальные условия для каждого клиента или сегмента
Совет: Подробнее о персонализации см. в разделе "Персонализация данных сущностей".
Дефолтные достижения
Назначение дефолтных достижений
is_default = trueозначает, что достижение доступно всем клиентам по умолчанию- Дефолтные достижения видны всем клиентам окружения
- При необходимости можно создать персональную версию достижения для конкретного клиента
Пример:
{
"id": "first_purchase",
"title": "Первая покупка",
"description": "Совершите свою первую покупку",
"is_default": true,
"status": "active",
"progress": 0,
"max": 1
}Это достижение увидят все клиенты, но прогресс и статус будут индивидуальными.
Сегментация через SQL
Можно создавать достижения, доступные только определенным сегментам:
{
"id": "vip_exclusive",
"title": "VIP Эксклюзив",
"description": "Эксклюзивное достижение для VIP-клиентов",
"is_default": true,
"sql": "SELECT * FROM clients WHERE client_id = {{client_id}} AND level_priority >= 3"
}Это достижение увидят только клиенты с уровнем VIP или выше.
Награды за достижения
При получении достижения можно автоматически выдавать награды (rewards) через Flow.
Выдача наград через Flow
Сценарий:
Событие: Достижение получено
↓
Проверить: achievement_id
↓
IF (achievement_id == "first_purchase") THEN
Выдать reward "welcome_bonus"
ELSE IF (achievement_id == "purchases_100") THEN
Выдать reward "legendary_badge"Хранение reward_id в additional
Для упрощения логики можно хранить ID награды прямо в достижении:
{
"id": "social_leader",
"title": "Социальный лидер",
"description": "Пригласите 10 друзей",
"max": 10,
"additional": {
"reward_on_complete": "social_leader_bonus",
"reward_type": "promocode"
}
}Сценарий в Flow:
IF (achievement.status == "completed") THEN
reward_id = achievement.additional.reward_on_complete
Выдать reward(reward_id)Связь с другими сущностями
Логика взаимодействия достижений с другими сущностями строится во Flow:
Примеры интеграции:
- Levels — при достижении 10 уровня выдать специальное достижение
- Items — при покупке всех items коллекции выдать достижение "Коллекционер"
- Tasks — при выполнении 50 заданий выдать достижение "Трудяга"
- Counters — отслеживать прогресс достижений через счетчики
- Treasures — при открытии 100 сундуков выдать достижение "Охотник за сокровищами"
Группировка и категоризация
Достижения можно группировать в коллекции и категории через поле additional.
Пример группировки из реального проекта:
{
"additional": {
"group_id": 6,
"achievement_group": "Новые тематики и любимая категория",
"order_in_group": 4,
"is_banner": false,
"achievement_image_closed": "https://cdn.example.com/badges/closed.png",
"achievement_image_opened": "https://cdn.example.com/badges/opened.png"
}
}Параметры группировки:
group_id— числовой идентификатор группыachievement_group— название категории/коллекцииorder_in_group— порядок отображения внутри группыis_banner— флаг баннерного достижения (большое, яркое)
Примеры категорий:
Категория: "Покупки"
├── Первая покупка
├── 10 покупок
├── 50 покупок
└── 100 покупок
Категория: "Социальные"
├── Первый друг
├── 5 друзей
└── 10 друзей
Категория: "Сезонные события"
├── Летний марафон 2025
├── Черная пятница 2025
└── Новогодняя акция 2026Визуализация достижений
Визуализация достижений реализуется на стороне клиента (фронтенд, мобильное приложение) с использованием API системы лояльности.
Открытые и закрытые достижения
В additional можно хранить разные изображения для разных состояний:
{
"additional": {
"achievement_image_closed": "https://cdn.example.com/badges/closed.png",
"achievement_image_opened": "https://cdn.example.com/badges/opened.png",
"badge_color_locked": "#808080",
"badge_color_unlocked": "#FFD700"
}
}Состояния визуализации:
| Статус | Изображение | Описание |
|---|---|---|
active | closed (серое, заблокированное) | Достижение доступно, но не получено |
in_progress | closed с прогресс-баром | Достижение в процессе выполнения |
completed | opened (цветное, открытое) | Достижение получено |
Дополнительные параметры визуализации
{
"additional": {
"rarity": "legendary",
"rarity_color": "#9400D3",
"icon_url": "https://cdn.example.com/icons/trophy.png",
"completion_percentage": 5.2,
"display_order": 1,
"shine_effect": true,
"unlock_date": "2025-06-15"
}
}Возможные параметры:
rarity— редкость достижения (common, rare, epic, legendary)rarity_color— цвет редкости для визуального обозначенияcompletion_percentage— процент игроков, получивших это достижениеshine_effect— эффект сияния для особо редких достиженийunlock_date— дата получения достижения
Описание полей
Обязательные поля
| Параметр | Тип данных | Описание |
|---|---|---|
| environment_id | Varchar(50) | ID окружения, к которому относится достижение |
| id | Varchar(50) | Уникальный идентификатор достижения |
Поля с описанием
| Параметр | Тип данных | Описание |
|---|---|---|
| title | Varchar(50) | Название достижения |
| description | Varchar(250) | Описание условий получения достижения |
| details | Varchar(250) | Дополнительные детали достижения (может использоваться свободно) |
Прогресс и выполнение
| Параметр | Тип данных | Описание |
|---|---|---|
| max | Integer | Целевое значение прогресса, при достижении которого достижение считается полученным |
| progress_type | Varchar(50) | Тип прогресса: discrete (дискретный, целые числа) или continuous (непрерывный, дробные значения) |
| progress | Integer | Текущий прогресс выполнения достижения по умолчанию (для дефолтных достижений) |
Флаги
| Параметр | Тип данных | Описание |
|---|---|---|
| is_unique | Boolean | Флаг уникальности. При is_unique = true каждое получение достижения создает запись с уникальным ID |
| is_default | Boolean | Флаг дефолтного достижения. is_default = true означает, что достижение доступно всем клиентам по умолчанию |
Дефолтные значения
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Varchar(50) | Статус достижения: active, in_progress, completed |
| personalization | JSON | Объект персонализации для замены статичных параметров на динамические |
| sql | Text | SQL-запрос для фильтрации достижений по клиентам (с параметризацией типа {{client_id}}). Если запрос возвращает строку — достижение показывается клиенту |
Дополнительные поля
| Параметр | Тип данных | Описание |
|---|---|---|
| additional | JSON | Дополнительные параметры достижения (группировка, иконки, редкость, визуализация и т.д.) |
| creator | Varchar(250) | Создатель достижения (имя пользователя) |
Примеры заполнения Achievements
Пример 1: Простое достижение за первую покупку
{
"environment_id": "accelera",
"id": "first_purchase",
"title": "Первая покупка",
"description": "Совершите свою первую покупку в приложении",
"is_unique": false,
"max": 1,
"progress_type": "discrete",
"is_default": true,
"status": "active",
"progress": 0,
"additional": {
"achievement_group": "Покупки",
"group_id": 1,
"order_in_group": 1,
"rarity": "common",
"achievement_image_closed": "https://cdn.example.com/achievements/first_purchase_locked.png",
"achievement_image_opened": "https://cdn.example.com/achievements/first_purchase_unlocked.png",
"reward_on_complete": "welcome_bonus"
}
}Пример 2: Многоуровневое достижение с прогрессом
{
"environment_id": "accelera",
"id": "purchases_milestone",
"title": "Мастер покупок",
"description": "Совершите 100 покупок в приложении",
"is_unique": false,
"max": 100,
"progress_type": "discrete",
"is_default": true,
"status": "active",
"progress": 0,
"additional": {
"achievement_group": "Покупки",
"group_id": 1,
"order_in_group": 4,
"rarity": "legendary",
"rarity_color": "#9400D3",
"achievement_image_closed": "https://cdn.example.com/achievements/100_purchases_locked.png",
"achievement_image_opened": "https://cdn.example.com/achievements/100_purchases_unlocked.png",
"shine_effect": true,
"reward_on_complete": "legendary_badge_reward"
}
}Пример 3: Временное достижение (повторяющееся)
{
"environment_id": "accelera",
"id": "best_buyer_month",
"title": "Лучший покупатель месяца",
"description": "Станьте лучшим покупателем текущего месяца",
"is_unique": true,
"max": 1,
"progress_type": "discrete",
"is_default": true,
"status": "active",
"progress": 0,
"additional": {
"achievement_group": "Специальные",
"group_id": 5,
"order_in_group": 1,
"rarity": "epic",
"is_banner": true,
"achievement_image_closed": "https://cdn.example.com/achievements/best_month_locked.png",
"achievement_image_opened": "https://cdn.example.com/achievements/best_month_unlocked.png",
"reward_on_complete": "monthly_champion_reward"
}
}Пример 4: Коллекционное достижение
{
"environment_id": "accelera",
"id": "category_collector",
"title": "Коллекционер категорий",
"description": "Купите товары из всех категорий магазина",
"details": "Всего категорий: 15",
"is_unique": false,
"max": 15,
"progress_type": "discrete",
"is_default": true,
"status": "active",
"progress": 0,
"additional": {
"achievement_group": "Коллекции",
"group_id": 3,
"order_in_group": 1,
"rarity": "rare",
"achievement_image_closed": "https://cdn.example.com/achievements/collector_locked.png",
"achievement_image_opened": "https://cdn.example.com/achievements/collector_unlocked.png",
"completion_percentage": 12.5,
"reward_on_complete": "collector_trophy"
}
}Пример 5: Сегментированное достижение (только VIP)
{
"environment_id": "accelera",
"id": "vip_exclusive_achievement",
"title": "VIP Элита",
"description": "Эксклюзивное достижение для VIP-клиентов",
"is_unique": false,
"max": 1,
"progress_type": "discrete",
"is_default": true,
"status": "active",
"progress": 0,
"sql": "SELECT * FROM clients WHERE client_id = {{client_id}} AND level_priority >= 3",
"additional": {
"achievement_group": "VIP",
"group_id": 10,
"order_in_group": 1,
"rarity": "legendary",
"achievement_image_closed": "https://cdn.example.com/achievements/vip_locked.png",
"achievement_image_opened": "https://cdn.example.com/achievements/vip_unlocked.png",
"badge_color_unlocked": "#FFD700",
"reward_on_complete": "vip_exclusive_reward"
}
}Пример 6: С персонализацией
{
"environment_id": "accelera",
"id": "spend_milestone",
"title": "Большой покупатель",
"description": "Потратьте {{target_amount}} рублей в магазине",
"is_unique": false,
"max": 10000,
"progress_type": "continuous",
"is_default": true,
"status": "active",
"progress": 0,
"personalization": {
"context": {
"target_amount": "10000"
},
"dictionary": {}
},
"additional": {
"achievement_group": "Покупки",
"group_id": 1,
"order_in_group": 5,
"rarity": "epic",
"achievement_image_closed": "https://cdn.example.com/achievements/big_spender_locked.png",
"achievement_image_opened": "https://cdn.example.com/achievements/big_spender_unlocked.png"
}
}Примеры API-запросов
Создание/Обновление достижения у клиента
curl --request POST \
--url /v1/internal/achievements/clients \
--header 'content-type: application/json' \
--data '
{
"client_id": "12345",
"achievement_id": "first_purchase",
"progress": 1,
"status": "completed"
}
'Удаление достижения клиента
curl --request DELETE \
--url /v1/internal/achievements/clients/{{client_id}}/{{environment_id}}/achievement_id \
--header 'accept: application/json'Важно: При удалении достижения необходимо убедиться, что это не нарушит логику программы лояльности.
Получение достижений клиента
curl --request GET \
--url /v1/internal/achievements/clients/{{client_id}}/{{environment_id}} \
--header 'accept: application/json'Пример ответа:
{
"achievements": [
{
"achievement_id": "first_purchase",
"title": "Первая покупка",
"status": "completed",
"progress": 1,
"max": 1,
"completion_date": "2025-06-15",
"achievement_image_opened": "https://cdn.example.com/achievements/first_purchase_unlocked.png"
},
{
"achievement_id": "purchases_milestone",
"title": "Мастер покупок",
"status": "in_progress",
"progress": 45,
"max": 100,
"achievement_image_closed": "https://cdn.example.com/achievements/100_purchases_locked.png"
}
]
}Интеграция с другими сущностями
Achievements интегрируются с другими механиками системы лояльности через сценарии Flow:
1. Counters (Счетчики)
- Отслеживание прогресса — счетчики могут использоваться для подсчета действий, ведущих к достижению
Пример:
Счетчик: purchases_count
Достижение: "Мастер покупок" (100 покупок)
Flow: При каждой покупке → увеличить purchases_count → проверить достижение2. Rewards (Награды)
- Награды за достижения — при получении достижения выдается reward
- ID награды в additional — упрощает автоматическую выдачу
Пример:
Достижение completed → Выдать reward из achievement.additional.reward_on_complete3. Tasks (Задания)
- Связь Task → Achievement — выполнение задания может давать достижение
- Достижения за задания — специальные достижения за определенное количество выполненных заданий
Пример:
Task "Ежедневный вход" выполнен 30 раз подряд → Achievement "Марафонец"4. Levels (Уровни)
- Достижения за уровни — получение достижения при достижении определенного уровня
- Разблокировка достижений — некоторые достижения доступны только с определенного уровня
Пример:
Клиент достиг 10 уровня → Achievement "Покоритель высот"5. Items (Предметы)
- Коллекционные достижения — получение достижения за сбор всех items коллекции
- Достижения за покупки — специальные достижения за покупку определенных items
Пример:
Куплены все items категории "Летние скины" → Achievement "Летний коллекционер"6. Treasures (Сундуки)
- Достижения за сундуки — получение достижения за открытие определенного количества сундуков
Пример:
Открыто 100 сундуков → Achievement "Охотник за сокровищами"7. Flow (Сценарии)
- Автоматическое отслеживание — Flow отслеживает события и обновляет прогресс достижений
- Выдача наград — Flow автоматически выдает rewards при получении достижений
Пример сценария:
Событие: purchase
↓
Увеличить progress достижения "purchases_milestone"
↓
IF (progress >= max) THEN
Статус = completed
Выдать reward из achievement.additional.reward_on_complete
Отправить уведомление "Достижение получено!"Практические сценарии
Сценарий 1: Простая система достижений за покупки
Задача: Создать 4 достижения за разное количество покупок.
Реализация:
- Создать счетчик
purchases_count - Создать 4 достижения:
// 1 покупка
{
"id": "first_purchase",
"title": "Первая покупка",
"max": 1,
"additional": {"reward_on_complete": "bonus_100"}
}
// 10 покупок
{
"id": "purchases_10",
"title": "Постоянный клиент",
"max": 10,
"additional": {"reward_on_complete": "bonus_500"}
}
// 50 покупок
{
"id": "purchases_50",
"title": "Завсегдатай",
"max": 50,
"additional": {"reward_on_complete": "bonus_2000"}
}
// 100 покупок
{
"id": "purchases_100",
"title": "Легенда магазина",
"max": 100,
"additional": {"reward_on_complete": "legendary_bonus"}
}- В Flow настроить:
Событие: purchase
↓
counter.increment("purchases_count", 1)
↓
Проверить все достижения покупок
↓
Если какое-то достижение достигнуто → completed + выдать rewardРезультат: Автоматическая система мотивации через достижения.
Сценарий 2: Коллекционные достижения
Задача: Выдать достижение за покупку товаров из всех категорий.
Реализация:
- Создать достижение:
{
"id": "category_collector",
"title": "Коллекционер категорий",
"description": "Купите товары из всех 15 категорий",
"max": 15,
"progress_type": "discrete"
}- В Flow отслеживать:
Событие: purchase
↓
Получить category покупки
↓
Проверить: клиент уже покупал из этой категории?
↓
Если нет → увеличить progress достижения
↓
Если progress == 15 → completed + rewardРезультат: Клиенты мотивированы исследовать все категории магазина.
Сценарий 3: Временные достижения (ежемесячные)
Задача: Создать достижение "Лучший покупатель месяца" с обновлением каждый месяц.
Реализация:
- Создать достижение с
is_unique = true:
{
"id": "best_buyer_month",
"title": "Лучший покупатель месяца",
"description": "Потратьте больше всех в этом месяце",
"max": 1,
"is_unique": true
}- В конце каждого месяца через scheduled job:
Найти топ-10 клиентов по сумме покупок за месяц
↓
Для каждого из топ-10:
Выдать достижение "best_buyer_month" (создастся уникальная запись)
Выдать reward "monthly_champion"- В начале нового месяца сбросить счетчики
Результат: Ежемесячная мотивация к активным покупкам.
Сценарий 4: Социальные достижения
Задача: Выдать достижения за приглашение друзей.
Реализация:
- Создать 3 достижения:
// 1 друг
{
"id": "social_starter",
"title": "Социальный старт",
"max": 1
}
// 5 друзей
{
"id": "social_activist",
"title": "Социальный активист",
"max": 5
}
// 10 друзей
{
"id": "social_leader",
"title": "Социальный лидер",
"max": 10,
"additional": {"reward_on_complete": "referral_master_bonus"}
}- В Flow:
Событие: friend_invited
↓
Увеличить progress всех социальных достижений
↓
Проверить выполнение
↓
При completed → выдать rewardРезультат: Мотивация приглашать друзей через реферальную программу.
Сценарий 5: Игровые достижения (сундуки)
Задача: Выдать достижения за открытие сундуков.
Реализация:
- Создать достижения:
{
"id": "chest_hunter_10",
"title": "Искатель",
"description": "Откройте 10 сундуков",
"max": 10
}
{
"id": "chest_hunter_100",
"title": "Охотник за сокровищами",
"description": "Откройте 100 сундуков",
"max": 100,
"additional": {
"rarity": "legendary",
"reward_on_complete": "treasure_master_badge"
}
}- В Flow:
Событие: treasure_opened
↓
Увеличить progress достижений за сундуки
↓
При completed → выдать легендарное достижениеРезультат: Мотивация открывать больше сундуков.
Сценарий 6: Достижения за прогрессию уровней
Задача: Выдать достижения за достижение определенных уровней.
Реализация:
- Создать достижения для ключевых уровней:
{
"id": "level_5_milestone",
"title": "Растущая звезда",
"description": "Достигните 5 уровня",
"max": 1
}
{
"id": "level_10_milestone",
"title": "Покоритель высот",
"description": "Достигните 10 уровня",
"max": 1,
"additional": {"reward_on_complete": "level_10_reward"}
}- В Flow отслеживать события смены уровня:
IF (client.level.priority >= 5 AND achievement "level_5_milestone" not completed) THEN
Выдать достижение "level_5_milestone"
IF (client.level.priority >= 10 AND achievement "level_10_milestone" not completed) THEN
Выдать достижение "level_10_milestone"
Выдать reward "level_10_reward"Результат: Дополнительная мотивация для прогрессии через уровни.
Ограничения текущей версии
Отсутствие автоматических событий
В текущей версии отсутствуют автоматические события при изменении статуса достижения.
Планируется в следующих версиях:
- Событие
achievement_unlocked— когда достижение становится доступным клиенту - Событие
achievement_progress— при обновлении прогресса достижения - Событие
achievement_completed— когда достижение получено
Текущее решение: Логику изменения достижений необходимо отслеживать в сценариях Flow вручную, проверяя статус и прогресс.
Примечание: Несмотря на отсутствие автоматических событий, система полностью функциональна. События можно эмулировать в сценариях Flow при обновлении достижений.
Рекомендации по использованию
- Баланс сложности — создавайте достижения разной сложности (простые, средние, сложные) для разных типов игроков
- Четкие условия — описывайте условия получения достижения максимально понятно в поле
description - Визуальная привлекательность — используйте качественные изображения для открытых и закрытых состояний
- Группировка — объединяйте похожие достижения в категории через
additional.achievement_group - Награды — выдавайте ценные rewards за сложные и редкие достижения
- Персонализация — адаптируйте достижения под разные сегменты клиентов
- Мониторинг прогресса — отслеживайте, какие достижения получают чаще всего, а какие слишком сложны
- Коммуникация — информируйте клиентов о получении достижений через уведомления
- Уникальность — используйте
is_unique = trueдля достижений, которые могут получаться несколько раз - Редкость — показывайте процент игроков, получивших достижение, для создания престижности
Работа с Achievements
Для работы с достижениями используйте методы API, описанные выше. Достижения могут создаваться и управляться через интерфейс ЛК менеджера или программно через API.
Интеграция с Flow позволяет:
- Автоматически отслеживать прогресс достижений
- Выдавать достижения при выполнении условий
- Начислять rewards за получение достижений
- Отправлять уведомления о новых достижениях
- Создавать сложные цепочки достижений
Типичный workflow:
- Создание структуры достижений в системе
- Группировка достижений по категориям
- Настройка счетчиков для отслеживания прогресса
- Создание сценариев в Flow для автоматического обновления
- Настройка наград за получение достижений
- Тестирование и запуск программы лояльности
- Мониторинг и добавление новых достижений