Environments
Назначение Environments
Окружение (Environment) используется для создания справочников компонентов, из которых строится программа лояльности.
Ключевые особенности:
- Все сущности, созданные в рамках одного окружения, связаны между собой и относятся к одной программе лояльности
- Каждое окружение имеет уникальный
environment_id, который используется для связывания сущностей - При создании окружения в базе данных автоматически создается схема с именем
environment_id, в которой хранятся все сущности этого окружения
Когда создавать несколько окружений?
Важно: Необходимость создания нескольких окружений возникает, когда в системе требуется реализовать несколько независимых программ лояльности.
Примеры использования:
- Разные сервисы – сервис вызова такси и сервис аренды самоката, каждый со своей программой лояльности
- Разные аудитории – программа лояльности для клиентов и отдельная программа для сотрудников компании
- Тестирование – окружения для production, staging и development с одинаковыми настройками, но изолированными данными
Жизненный цикл Environment
Статусы окружения:
active– окружение активно и доступно для использованияinactive– окружение неактивно, но данные сохранены
Удаление окружения:
- Окружение можно удалить из системы
- Сущности, созданные в рамках этого окружения, остаются в базе данных
- При попытке обращения к API с удаленным
environment_idсистема вернет ошибку
Ограничения:
environment_idнельзя изменить после создания – это уникальный ключ- Все остальные параметры окружения можно редактировать в любое время
Изоляция данных
Как работает изоляция:
- Один клиент может существовать в нескольких окружениях одновременно
- В каждом окружении у клиента будут независимые данные (разные задания, награды, балансы и т.д.)
- Прямого переноса сущностей между окружениями в системе не предусмотрено
Пример: Пользователь Иван участвует в программе лояльности для клиентов (environment_id: customers) и в программе для VIP-участников (environment_id: vip). В первой программе у него 500 баллов и 3 задания, во второй – 1000 баллов и другой набор заданий.
Описание полей
Обязательные поля
| Параметр | Тип данных | Описание |
|---|---|---|
| environment_id | Varchar(50) | ID окружения (игры). Уникальный идентификатор, допускается использование латиницы и _. Нельзя изменить после создания |
| status | String | Статус окружения. Возможные значения: active, inactive |
| stand | String | Стенд окружения. Возможные значения: production, staging, development. Используется для разделения окружений на разных стендах с одинаковыми настройками, но изолированными данными |
| is_visible | Boolean | Флаг доступности окружения для отображения |
| salt | String | Соль для авторизационных процессов хэширования ID клиента (свободный текст, может быть изменен) |
Поля с описанием
| Параметр | Тип данных | Описание |
|---|---|---|
| name | Varchar(100) | Название окружения |
| categories | Array(String) | Категории окружения. Используются для группировки и фильтрации окружений по типам (например: "loyalty", "cashback", "gamification") |
| groups | Array(String) | Группы окружения. Используются для объединения окружений в логические группы (например: "retail", "finance", "telecom") |
| title | Varchar(100) | Заголовок окружения |
| short_description | Varchar(250) | Краткое описание окружения |
| full_description | String | Полное описание окружения |
| disclaimer | String | Дисклеймер |
Медиа и ссылки
| Параметр | Тип данных | Описание |
|---|---|---|
| image | Varchar(50) | ID загруженного файла |
| image_url | String | Адрес картинки |
| thumbnail | Varchar(50) | ID загруженного файла |
| thumbnail_url | String | Адрес картинки |
| homepage | String | Ссылка на лендинг окружения |
| rules | Varchar(50) | ID загруженного файла правил |
| rules_url | String | Ссылка на правила акции |
| policy | Varchar(50) | ID загруженного файла политики |
| policy_url | String | Ссылка на политику конфиденциальности |
| faq | Varchar(50) | ID загруженного файла вопросов |
| faq_url | String | Ссылка на вопросы/ответы |
Флаги и доступы
| Параметр | Тип данных | Описание |
|---|---|---|
| whitelist_id | String | ID белого списка для доступа к окружению. Ссылается на файл со списком разрешенных пользователей, загруженный в отдельном разделе. Если поле пустое – ограничения отсутствуют |
| blacklist_id | String | ID черного списка. Ссылается на файл со списком заблокированных пользователей. Пользователи из черного списка не имеют доступа к окружению |
| is_multiplayer | Boolean | Флаг признака сетевой игры (используется для игровых механик) |
| multiplayer_node | String | Нода мультиплеер сервера |
| multiplayer_key | String | Ключ авторизации сетевого нода |
Примечание: Белые и черные списки хранятся как отдельные файлы с уникальными идентификаторами, которые загружаются в специальном разделе системы.
Дополнительные поля
| Параметр | Тип данных | Описание |
|---|---|---|
| private | JSON | Дополнительные приватные параметры и ключи (для внутреннего использования системой) |
| additional | JSON | Дополнительные опциональные параметры. Используется для задания кастомных параметров, которых нет в стандартной структуре данных. Позволяет расширять функционал без изменения схемы базы данных |
Пример заполнения Environment
environment_id: accelera
status: active
stand: production
is_visible: true
salt: salt123
name: Accelera Loyalty
categories: ["loyalty", "cashback"]
groups: ["accelera_loyalty"]
title: Лояльность Accelera
short_description: Лояльность в сфере B2B
full_description: Полное описание окружения
disclaimer: Дисклеймер
whitelist_id: ID белого списка
blacklist_id: ID черного списка
is_multiplayer: false
private: {}
additional: {}Примеры API-запросов
Создание нового окружения
curl --request POST \
--url /v1/management/environments \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"environment_id": "accelera",
"status": "active",
"stand": "production",
"is_visible": true,
"salt": "salt123",
"name": "Accelera Loyalty",
"title": "Лояльность Accelera",
"categories": ["loyalty", "cashback"],
"groups": ["accelera_loyalty"]
}
'Получение данных об окружении
curl --request GET \
--url /v1/management/environments/{{environment_id}} \
--header 'accept: application/json'Список всех окружений
curl --request GET \
--url /v1/management/environments \
--header 'accept: application/json'Обновление данных об окружении
curl --request PUT \
--url /v1/management/environments/{{environment_id}} \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"status": "inactive",
"stand": "development",
"name": "Updated Name"
}
'Примечание: При обновлении можно передавать только те поля, которые нужно изменить. Поле environment_id изменить нельзя.
Удаление окружения
curl --request DELETE \
--url /v1/management/environments/{{environment_id}} \
--header 'accept: application/json'Важно: При удалении окружения сущности остаются в базе данных, но становятся недоступными через API с удаленным environment_id.
Интеграция с модулем Flow
Как Environment взаимодействует с Flow:
Сценарии в модуле Flow могут вызывать API-методы для создания, изменения или удаления сущностей лояльности при выполнении определенных условий поведения клиентов.
Принцип работы:
- В сценарии Flow настраивается логика обработки событий (например, "при покупке начислить баллы")
- При вызове API-метода в URL запроса подставляется
environment_id - Система обращается к соответствующей схеме базы данных и выполняет операцию с сущностями этого окружения
- События из разных окружений обрабатываются изолированно друг от друга
Это позволяет одним сценарием в Flow обслуживать несколько программ лояльности, просто подставляя нужный environment_id в запросы.