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

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
  Выдать reward

2. Через 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 используется для динамической фильтрации достижений по клиентам:

Как это работает:

  1. В поле sql указывается запрос с параметризацией, например: {{client_id}}
  2. Запрос содержит условия WHERE для проверки соответствия критериям
  3. При вызове API "Получить достижения по клиенту" выполняется SQL-запрос
  4. Если запрос возвращает строку — достижение передается клиенту
  5. Если запрос не возвращает результатов — достижение скрыто от клиента

Пример 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"
  }
}

Состояния визуализации:

СтатусИзображениеОписание
activeclosed (серое, заблокированное)Достижение доступно, но не получено
in_progressclosed с прогресс-баромДостижение в процессе выполнения
completedopened (цветное, открытое)Достижение получено

Дополнительные параметры визуализации

{
  "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_idVarchar(50)ID окружения, к которому относится достижение
idVarchar(50)Уникальный идентификатор достижения

Поля с описанием

ПараметрТип данныхОписание
titleVarchar(50)Название достижения
descriptionVarchar(250)Описание условий получения достижения
detailsVarchar(250)Дополнительные детали достижения (может использоваться свободно)

Прогресс и выполнение

ПараметрТип данныхОписание
maxIntegerЦелевое значение прогресса, при достижении которого достижение считается полученным
progress_typeVarchar(50)Тип прогресса: discrete (дискретный, целые числа) или continuous (непрерывный, дробные значения)
progressIntegerТекущий прогресс выполнения достижения по умолчанию (для дефолтных достижений)

Флаги

ПараметрТип данныхОписание
is_uniqueBooleanФлаг уникальности. При is_unique = true каждое получение достижения создает запись с уникальным ID
is_defaultBooleanФлаг дефолтного достижения. is_default = true означает, что достижение доступно всем клиентам по умолчанию

Дефолтные значения

ПараметрТип данныхОписание
statusVarchar(50)Статус достижения: active, in_progress, completed
personalizationJSONОбъект персонализации для замены статичных параметров на динамические
sqlTextSQL-запрос для фильтрации достижений по клиентам (с параметризацией типа {{client_id}}). Если запрос возвращает строку — достижение показывается клиенту

Дополнительные поля

ПараметрТип данныхОписание
additionalJSONДополнительные параметры достижения (группировка, иконки, редкость, визуализация и т.д.)
creatorVarchar(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_complete

3. 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 достижения за разное количество покупок.

Реализация:

  1. Создать счетчик purchases_count
  2. Создать 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"}
}
  1. В Flow настроить:
Событие: purchase

counter.increment("purchases_count", 1)

Проверить все достижения покупок

Если какое-то достижение достигнуто → completed + выдать reward

Результат: Автоматическая система мотивации через достижения.

Сценарий 2: Коллекционные достижения

Задача: Выдать достижение за покупку товаров из всех категорий.

Реализация:

  1. Создать достижение:
{
  "id": "category_collector",
  "title": "Коллекционер категорий",
  "description": "Купите товары из всех 15 категорий",
  "max": 15,
  "progress_type": "discrete"
}
  1. В Flow отслеживать:
Событие: purchase

Получить category покупки

Проверить: клиент уже покупал из этой категории?

Если нет → увеличить progress достижения

Если progress == 15 → completed + reward

Результат: Клиенты мотивированы исследовать все категории магазина.

Сценарий 3: Временные достижения (ежемесячные)

Задача: Создать достижение "Лучший покупатель месяца" с обновлением каждый месяц.

Реализация:

  1. Создать достижение с is_unique = true:
{
  "id": "best_buyer_month",
  "title": "Лучший покупатель месяца",
  "description": "Потратьте больше всех в этом месяце",
  "max": 1,
  "is_unique": true
}
  1. В конце каждого месяца через scheduled job:
Найти топ-10 клиентов по сумме покупок за месяц

Для каждого из топ-10:
  Выдать достижение "best_buyer_month" (создастся уникальная запись)
  Выдать reward "monthly_champion"
  1. В начале нового месяца сбросить счетчики

Результат: Ежемесячная мотивация к активным покупкам.

Сценарий 4: Социальные достижения

Задача: Выдать достижения за приглашение друзей.

Реализация:

  1. Создать 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"}
}
  1. В Flow:
Событие: friend_invited

Увеличить progress всех социальных достижений

Проверить выполнение

При completed → выдать reward

Результат: Мотивация приглашать друзей через реферальную программу.

Сценарий 5: Игровые достижения (сундуки)

Задача: Выдать достижения за открытие сундуков.

Реализация:

  1. Создать достижения:
{
  "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"
  }
}
  1. В Flow:
Событие: treasure_opened

Увеличить progress достижений за сундуки

При completed → выдать легендарное достижение

Результат: Мотивация открывать больше сундуков.

Сценарий 6: Достижения за прогрессию уровней

Задача: Выдать достижения за достижение определенных уровней.

Реализация:

  1. Создать достижения для ключевых уровней:
{
  "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"}
}
  1. В 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 при обновлении достижений.

Рекомендации по использованию

  1. Баланс сложности — создавайте достижения разной сложности (простые, средние, сложные) для разных типов игроков
  2. Четкие условия — описывайте условия получения достижения максимально понятно в поле description
  3. Визуальная привлекательность — используйте качественные изображения для открытых и закрытых состояний
  4. Группировка — объединяйте похожие достижения в категории через additional.achievement_group
  5. Награды — выдавайте ценные rewards за сложные и редкие достижения
  6. Персонализация — адаптируйте достижения под разные сегменты клиентов
  7. Мониторинг прогресса — отслеживайте, какие достижения получают чаще всего, а какие слишком сложны
  8. Коммуникация — информируйте клиентов о получении достижений через уведомления
  9. Уникальность — используйте is_unique = true для достижений, которые могут получаться несколько раз
  10. Редкость — показывайте процент игроков, получивших достижение, для создания престижности

Работа с Achievements

Для работы с достижениями используйте методы API, описанные выше. Достижения могут создаваться и управляться через интерфейс ЛК менеджера или программно через API.

Интеграция с Flow позволяет:

  • Автоматически отслеживать прогресс достижений
  • Выдавать достижения при выполнении условий
  • Начислять rewards за получение достижений
  • Отправлять уведомления о новых достижениях
  • Создавать сложные цепочки достижений

Типичный workflow:

  1. Создание структуры достижений в системе
  2. Группировка достижений по категориям
  3. Настройка счетчиков для отслеживания прогресса
  4. Создание сценариев в Flow для автоматического обновления
  5. Настройка наград за получение достижений
  6. Тестирование и запуск программы лояльности
  7. Мониторинг и добавление новых достижений

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

AchievementsНазначение AchievementsКак работают достиженияОтличие от Tasks (Заданий)Примеры использованияПример 1: Достижения за активностьПример 2: Временные достиженияПример 3: Коллекционные достиженияПример 4: Социальные достиженияПример 5: Игровые достиженияСтатусы достиженийУправление статусамиПрогресс выполнения достиженийТипы прогресса (progress_type)Поле maxКак обновляется прогрессУникальность достижений (is_unique)Многоуровневые достиженияСпособ 1: Через персонализациюСпособ 2: Цепочка достиженийSQL и персонализацияSQL-запросы для фильтрации достиженийПерсонализация данныхДефолтные достиженияНазначение дефолтных достиженийСегментация через SQLНаграды за достиженияВыдача наград через FlowХранение reward_id в additionalСвязь с другими сущностямиГруппировка и категоризацияВизуализация достиженийОткрытые и закрытые достиженияДополнительные параметры визуализацииОписание полейОбязательные поляПоля с описаниемПрогресс и выполнениеФлагиДефолтные значенияДополнительные поляПримеры заполнения AchievementsПример 1: Простое достижение за первую покупкуПример 2: Многоуровневое достижение с прогрессомПример 3: Временное достижение (повторяющееся)Пример 4: Коллекционное достижениеПример 5: Сегментированное достижение (только VIP)Пример 6: С персонализациейПримеры API-запросовСоздание/Обновление достижения у клиентаУдаление достижения клиентаПолучение достижений клиентаИнтеграция с другими сущностями1. Counters (Счетчики)2. Rewards (Награды)3. Tasks (Задания)4. Levels (Уровни)5. Items (Предметы)6. Treasures (Сундуки)7. Flow (Сценарии)Практические сценарииСценарий 1: Простая система достижений за покупкиСценарий 2: Коллекционные достиженияСценарий 3: Временные достижения (ежемесячные)Сценарий 4: Социальные достиженияСценарий 5: Игровые достижения (сундуки)Сценарий 6: Достижения за прогрессию уровнейОграничения текущей версииОтсутствие автоматических событийРекомендации по использованиюРабота с Achievements