Tasks
Tasks
Назначение Tasks
Задания (Tasks) — это механика заданий и геймификации, которая:
- Мотивирует пользователей выполнять целевые действия (покупки, регистрации, просмотры и т.д.)
- Позволяет настраивать многоуровневые задания с прогрессом выполнения
- Автоматически начисляет вознаграждение после завершения через интеграцию с модулем Flow
Примеры заданий
- «Совершите 3 покупки в июне — получите 500 баллов»
- «Заполните профиль — откройте новый уровень»
- «Приведите друга — получите 10% кэшбэка»
- «Заходите в приложение каждый день и получайте купон со скидкой»
Статусы заданий
Задание может находиться в одном из следующих статусов:
| Статус | Описание |
|---|---|
active | Задание активно и доступно для выполнения |
in_progress | Задание в процессе выполнения (клиент начал, но не завершил) |
completed | Задание успешно выполнено |
expired | Срок выполнения задания истек |
Примечание: Список статусов может быть расширен в зависимости от бизнес-требований.
Управление статусами
- Статус меняется при выполнении определенных условий
- Изменение статуса выполняется либо бэкенд-системой клиента, либо сценариями в Flow
- Вручную изменить статус нельзя — только через API-методы
- При достижении
expired_atзадание автоматически переходит в статусexpired
Пример логики изменения статуса в Flow:
- Сценарий отслеживает пользовательское поведение
- При выполнении условий задания сценарий меняет статус на
completed - Параллельно создается сущность
Rewardкак награда за выполнение
Прогресс выполнения заданий
Типы прогресса (progress_type)
| Тип | Описание | Пример |
|---|---|---|
discrete | Дискретный прогресс (целые числа, шаги) | Совершите 3 покупки: 0/3, 1/3, 2/3, 3/3 |
continuous | Непрерывный прогресс (проценты, дробные значения) | Накопите 1000 баллов: 0%, 35.5%, 100% |
Поле max
- Поле
maxопределяет целевое значение прогресса, при достижении которого задание считается выполненным - Проверка выполнения обычно производится decision engine или сценарием в Flow
Пример: Если max=3 и progress=2, значит выполнено 2 из 3 необходимых действий.
Как работает проверка прогресса
Важно: Задания выполняются по заранее настроенному сценарию в Accelera, где система проверяет выполнение условий.
Процесс проверки:
- Агрегация данных – система собирает информацию о действиях клиента
- Проверка прогресса – через API передаются персонализированные параметры выполнения задания
- Начисление награды – если пользователь выполнил условия, награда автоматически начисляется через Flow
Истечение срока задания
- Поле
expired_atопределяет дату и время окончания задания - При наступлении этой даты задание автоматически переходит в статус
expired - Продлить задание напрямую нельзя, но можно изменить значение
expired_atчерез API - Важно: При изменении
expired_atнеобходимо вручную обновить статус у всех клиентов, у которых есть это задание
Многоуровневые задания
Система поддерживает гибкую настройку многоуровневых заданий. Реализация зависит от бизнес-логики:
Вариант 1: Этапы внутри одного задания
- Одно задание с несколькими ключевыми точками
- При достижении каждого этапа выдается промежуточная награда
- Логика прописывается в Flow
Вариант 2: Цепочка заданий
- При выполнении одного задания оно переходит в статус
completed - Автоматически активируется следующее задание в цепочке
- Логика последовательности настраивается в Flow
Связь с наградами
Награды за выполнение заданий настраиваются и выдаются через модуль Flow:
- При выполнении условий сценарий создает сущность
Rewardдля клиента - Награды могут быть разными для разных пользователей
- Можно настроить выдачу нескольких наград за одно задание
- Поддерживается случайная выдача наград с использованием Treasures (Сундуков) — механики вероятностного получения призов
Совет: Подробнее о механике Treasures см. в разделе "Treasures (Сундуки с вероятностями)".
SQL и персонализация
SQL-запросы для персонализации заданий
Поле sql используется для динамической персонализации заданий по клиентам:
Как это работает:
- В поле
sqlуказывается запрос с параметризацией, например:{{client_id}} - Запрос содержит условия
WHEREдля проверки выполнения критериев - При вызове API "Получить задания по клиенту" выполняется SQL-запрос
- Если запрос возвращает строку — задание передается клиенту
- Если запрос не возвращает результатов — задание не показывается
Пример SQL-запроса:
SELECT * FROM purchases
WHERE client_id = {{client_id}}
AND purchase_date >= '2025-06-01'
AND purchase_date < '2025-07-01'
HAVING COUNT(*) >= 3Этот запрос проверяет, совершил ли клиент 3 или более покупок в июне.
Персонализация данных
- Используйте объект
personalizationдля замены статичных параметров на динамические - Позволяет создавать уникальные условия для каждого клиента или сегмента
Совет: Подробнее о персонализации см. в разделе "Персонализация данных сущностей".
:::
Описание полей
Обязательные поля
| Параметр | Тип данных | Описание |
|---|---|---|
| environment_id | String | ID окружения, к которому относится задание |
| id | Varchar(50) | Уникальный идентификатор задания |
Поля с описанием
| Параметр | Тип данных | Описание |
|---|---|---|
| title | Varchar(50) | Название задания |
| short_description | Varchar(250) | Короткое описание задания |
| full_description | String | Полная инструкция по выполнению задания |
| details | String | Дополнительные детали (например, описание награды за выполнение) |
Флаги и лимиты
| Параметр | Тип данных | Описание |
|---|---|---|
| max | Integer | Целевое значение прогресса, при достижении которого задание считается выполненным |
| progress_type | String | Тип прогресса: discrete (дискретный, целые числа) или continuous (непрерывный, дробные значения) |
| position | Integer | Позиция задания для сортировки в интерфейсе |
| expired_at | Timestamp | Дата и время истечения задания. При наступлении этой даты задание автоматически переходит в статус expired |
| is_default | Boolean | Флаг дефолтной сущности |
Дефолтные значения
| Параметр | Тип данных | Описание |
|---|---|---|
| status | Varchar(50) | Статус задания: active, in_progress, completed, expired |
| progress | Integer/JSON | Текущий прогресс выполнения задания |
| personalization | JSON | Объект персонализации для замены статичных параметров на динамические |
| sql | String | SQL-запрос для динамической фильтрации заданий по клиентам (с параметризацией типа {{client_id}}) |
Дополнительные поля
| Параметр | Тип данных | Описание |
|---|---|---|
| reference_environment_id | String | Ссылка на другое окружение (опционально) |
| reference_title | String | Ссылочный заголовок (опционально) |
| notes | String | Внутренние заметки администратора |
| additional | JSON | Дополнительные кастомные параметры |
Примеры API-запросов
Создание нового задания в системе
curl --request POST \
--url /v1/management/tasks/ \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "accelera",
"id": "june_purchases",
"title": "Июньские покупки",
"short_description": "Совершите 3 покупки в июне",
"full_description": "Совершите 3 покупки в течение июня и получите 500 бонусных баллов",
"details": "Награда: 500 баллов",
"status": "active",
"progress_type": "discrete",
"max": 3,
"position": 1,
"expired_at": "2025-06-30T23:59:59Z"
}
'Обновление задания в системе
curl --request PUT \
--url /v1/management/tasks/ \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "accelera",
"id": "june_purchases",
"status": "completed"
}
'Удаление задания в системе
curl --request DELETE \
--url /v1/management/tasks/{{environment_id}}/{{id}} \
--header 'accept: application/json'Получение заданий по клиенту
curl --request GET \
--url /v1/internal/tasks/clients/{{client_id}}/{{environment_id}} \
--header 'accept: application/json'Примечание: Этот запрос возвращает все задания, доступные клиенту, с учетом SQL-фильтрации и персонализации.
Создание задания по клиенту
curl --request PUT \
--url /v1/internal/tasks/clients \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"client_id": "12345",
"environment_id": "accelera",
"id": "june_purchases",
"status": "in_progress",
"progress": 1
}
'Удаление задания по клиенту
curl --request DELETE \
--url /v1/internal/tasks/clients/{{client_id}}/{{environment_id}}/{{id}} \
--header 'accept: application/json'Интеграция с модулем Flow
Как Flow отслеживает выполнение заданий
Flow отслеживает выполнение заданий через систему событий (триггеров):
- Получение событий – в Flow приходят системные события с определенными названиями
- Машина состояний – Flow ведет клиента по машине состояний до нужного этапа
- Проверка условий – сценарий проверяет выполнение условий задания
- Изменение статуса – при выполнении условий статус задания меняется на
completed - Выдача награды – параллельно создается сущность Reward
Триггеры событий
- События могут быть любыми системными, которые приходят через Event Adapter
- Примеры событий:
purchase,login,profile_update,referral,item_purchase - Каждое событие содержит данные о клиенте и контексте действия
Практический пример: Задание "Ежедневный вход"
Условие задания: "Заходите в приложение каждый день и получайте купон со скидкой"
Логика работы сценария в Flow:
- Получение события – приходит событие
loginс данными клиента - Проверка даты – сценарий сравнивает дату последней авторизации с текущей датой
- Условие выполнено:
- Если это новый день → задание засчитывается
- Прогресс увеличивается на 1
- Создается награда (купон со скидкой)
- Статус задания переходит в
completed
- Условие не выполнено:
- Если это тот же день → ничего не происходит
- Сброс статуса – в 00:00 статус задания снова переходит в
active, и клиент может выполнить задание снова
Визуализация сценария:
[Событие Login]
↓
[Проверка: Новый день?]
↓ Да
[Увеличить progress]
↓
[Создать Reward (купон)]
↓
[Статус = completed]
↓
[В 00:00 → Статус = active]