Конфигурация шаблонов пользователей
Управление шаблонами, применение полей, массовое создание пользователей и документация API
Документация по шаблонам пользователей
Этот документ объясняет, как работают шаблоны пользователей в PasarGuard. Шаблоны — это предварительно настроенные настройки пользователей, которые можно использовать для быстрого создания пользователей с согласованными конфигурациями. Он разработан, чтобы помочь новичкам понять управление шаблонами, применение полей и массовое создание пользователей.
Содержание
- Обзор
- Основы конфигурации шаблона
- Объяснение полей шаблона
- Как работают шаблоны
- Обработка имени пользователя
- Дополнительные настройки
- Статус и истечение срока
- Лимит данных и стратегия сброса
- Создание пользователей из шаблонов
- Изменение пользователей с помощью шаблонов
- Массовое создание пользователей
- Правила валидации и ограничения
- API Endpoints
- Распространенные сценарии
Обзор
Шаблоны пользователей в PasarGuard — это предварительно настроенные настройки пользователей, которые:
- Стандартизируют создание пользователей - Применяют согласованные настройки к нескольким пользователям
- Ускоряют управление пользователями - Быстро создают пользователей без настройки каждого поля
- Поддерживают массовые операции - Создают много пользователей одновременно с автоматической генерацией имен пользователей
- Включают автоматизацию - Шаблоны можно использовать в автоматизированных рабочих процессах
Поток шаблона
Template → User Creation → Applied SettingsКак это работает:
- Администратор создает шаблон с желаемыми настройками пользователя
- При создании пользователя администратор выбирает шаблон
- Поля шаблона автоматически применяются к новому пользователю
- Администратору нужно только указать имя пользователя (и при необходимости примечание)
- Пользователь создается со всеми настройками шаблона
Шаблоны — это чертежи для создания пользователей. Они сами не создают пользователей - они предоставляют значения по умолчанию при создании пользователей.
Основы конфигурации шаблона
Обязательные поля
Каждый шаблон должен иметь:
| Field | Type | Constraints | Description |
|---|---|---|---|
name | string | Не может быть пустым, макс. 64 символа, должно быть уникальным | Идентификатор/имя шаблона |
group_ids | list[integer] | Требуется хотя бы одна группа (при создании) | Группы для назначения пользователям, созданным из этого шаблона |
Необязательные поля
| Field | Type | Default | Description |
|---|---|---|---|
data_limit | integer | 0 (неограниченно) | Лимит данных в байтах (0 = неограниченно) |
expire_duration | integer | 0 (неограниченно) | Продолжительность истечения срока в секундах (0 = неограниченно) |
username_prefix | string | null | Префикс, добавляемый к именам пользователей (макс. 20 символов) |
username_suffix | string | null | Суффикс, добавляемый к именам пользователей (макс. 20 символов) |
extra_settings | ExtraSettings | null | Настройки, специфичные для протокола (flow, method) |
status | UserStatusCreate | active | Начальный статус пользователя (active или on_hold) |
reset_usages | boolean | false | Сброс использования данных при применении шаблона к существующему пользователю |
on_hold_timeout | integer | null | Таймаут в секундах для статуса on_hold |
data_limit_reset_strategy | DataLimitResetStrategy | no_reset | Как сбрасывается лимит данных |
is_disabled | boolean | false | Отключить шаблон (предотвращает использование) |
Поля ответа шаблона
При получении шаблонов вы также получаете:
| Field | Type | Description |
|---|---|---|
id | integer | Уникальный идентификатор (автоматически генерируется) |
Объяснение полей шаблона
Базовые поля
name (String, Обязательно)
- Назначение: Идентификатор шаблона
- Ограничения: Макс. 64 символа
- Пример:
"Premium Plan","Basic User","Trial Account"
group_ids (List[Integer], Обязательно при создании)
- Назначение: Группы для назначения пользователям, созданным из этого шаблона
- Поведение: Пользователи автоматически присоединяются к этим группам при создании
- Валидация: Все ID групп должны существовать
- Пример:
[1, 2, 3]- Пользователь присоединяется к группам 1, 2 и 3
data_limit (Integer, Необязательно)
- Назначение: Максимальное использование данных в байтах
- По умолчанию:
0(неограниченно) - Формат: Байты (например,
1073741824= 1 GB) - Пример:
1073741824= лимит 1 GB
expire_duration (Integer, Необязательно)
- Назначение: Продолжительность истечения срока аккаунта в секундах
- По умолчанию:
0(неограниченно) - Расчет: При создании пользователя истечение = сейчас + expire_duration
- Пример:
2592000= 30 дней (30 * 24 * 60 * 60)
Поля имени пользователя
username_prefix (String, Необязательно)
- Назначение: Префикс, добавляемый перед именем пользователя при создании пользователей
- Ограничения: Макс. 20 символов
- Поведение: Добавляется к указанному имени пользователя
- Пример: Префикс
"premium_"+ имя пользователя"john"="premium_john"
username_suffix (String, Необязательно)
- Назначение: Суффикс, добавляемый после имени пользователя при создании пользователей
- Ограничения: Макс. 20 символов
- Поведение: Добавляется к указанному имени пользователя
- Пример: Имя пользователя
"john"+ суффикс"_vip"="john_vip"
Комбинированный пример:
prefix: "premium_"
username: "john"
suffix: "_vip"
Result: "premium_john_vip"Поля статуса
status (UserStatusCreate, Необязательно)
- Назначение: Начальный статус пользователя
- Опции:
active- Пользователь активен (по умолчанию)on_hold- Пользователь на удержании
- По умолчанию:
active - Поведение: Влияет на расчет истечения срока (см. раздел Статус и истечение срока)
on_hold_timeout (Integer, Необязательно)
- Назначение: Когда статус
on_holdдолжен начаться/закончиться - Формат: Секунды от времени создания
- Требуется: Когда
statusравенon_holdиexpire_durationустановлен - Пример:
3600= Пользователь становится активным через 1 час
Поля управления данными
data_limit_reset_strategy (DataLimitResetStrategy, Необязательно)
- Назначение: Как сбрасывается лимит данных
- Опции:
no_reset- Никогда не сбрасывается (по умолчанию)day- Сбрасывается ежедневноweek- Сбрасывается еженедельноmonth- Сбрасывается ежемесячноyear- Сбрасывается ежегодно
- По умолчанию:
no_reset - Примечание: Применяется только если установлен
data_limit
reset_usages (Boolean, Необязательно)
- Назначение: Сброс использования данных при применении шаблона к существующему пользователю
- По умолчанию:
false - Поведение: Используется только при изменении существующих пользователей с помощью шаблонов
- Эффект: Очищает историю использования данных пользователя
Продвинутые поля
extra_settings (ExtraSettings, Необязательно)
- Назначение: Настройки, специфичные для протокола
- Поля:
flow- Управление потоком VLESS (enum XTLSFlows)method- Метод шифрования Shadowsocks (enum ShadowsocksMethods)
- По умолчанию:
null - Пример:
{"flow": "xtls-rprx-vision", "method": "chacha20-poly1305"}
is_disabled (Boolean, Необязательно)
- Назначение: Отключить шаблон, чтобы предотвратить использование
- По умолчанию:
false - Поведение: Отключенные шаблоны нельзя использовать для создания или изменения пользователей
- Случай использования: Временно отключить шаблоны без их удаления
Как работают шаблоны
Процесс применения шаблона
При создании пользователя из шаблона:
- Валидация шаблона - Шаблон должен существовать и не быть отключенным
- Загрузка полей - Базовые поля загружаются из шаблона
- Построение имени пользователя - Префикс + имя пользователя + суффикс
- Применение настроек - Применяются дополнительные настройки (flow, method)
- Создание пользователя - Пользователь создается со всеми значениями шаблона
Порядок применения полей
Template Fields → User Creation → Final UserЧто применяется:
- ✅
data_limit→ Лимит данных пользователя - ✅
expire_duration→ Истечение срока пользователя (рассчитывается от сейчас) - ✅
group_ids→ Группы пользователя - ✅
status→ Начальный статус пользователя - ✅
data_limit_reset_strategy→ Стратегия сброса пользователя - ✅
username_prefix+username+username_suffix→ Финальное имя пользователя - ✅
extra_settings.flow→ Настройка потока VLESS - ✅
extra_settings.method→ Настройка метода Shadowsocks - ✅
on_hold_timeout→ Таймаут on_hold пользователя (если статус on_hold)
Что не применяется:
- ❌
name- Имя шаблона не копируется в пользователя - ❌
is_disabled- Состояние шаблона не влияет на созданных пользователей - ❌
reset_usages- Используется только при изменении существующих пользователей
Обработка имени пользователя
Построение имени пользователя
При создании пользователя из шаблона финальное имя пользователя строится как:
Final Username = prefix + provided_username + suffixПравила:
- Если префикс
nullили пустой, он не добавляется - Если суффикс
nullили пустой, он не добавляется - Указанное имя пользователя должно быть валидным (3-128 символов, буквенно-цифровые + специальные символы)
- Финальное имя пользователя должно быть уникальным
Template: prefix = "premium_", suffix = null
Provided: username = "john"
Result: "premium_john"Template: prefix = null, suffix = "_vip"
Provided: username = "john"
Result: "john_vip"Template: prefix = "premium_", suffix = "_vip"
Provided: username = "john"
Result: "premium_john_vip"Template: prefix = null, suffix = null
Provided: username = "john"
Result: "john"Валидация имени пользователя
Финальное имя пользователя (после префикса/суффикса) должно:
- Быть длиной 3-128 символов
- Содержать только: a-z, A-Z, 0-9,
-,_,@,. - Не иметь последовательных специальных символов
- Быть уникальным (не существовать уже)
Валидация происходит на финальном имени пользователя, а не на указанном имени пользователя.
Дополнительные настройки
Flow (VLESS)
Управляет настройкой управления потоком VLESS.
Опции:
none- Нет потока (по умолчанию)xtls-rprx-vision- XTLS Reality Proxy Vision
Применяется к: Настройкам прокси VLESS пользователя
Пример:
{
"extra_settings": {
"flow": "xtls-rprx-vision"
}
}Method (Shadowsocks)
Управляет методом шифрования Shadowsocks.
Опции:
chacha20-ietf-poly1305- ChaCha20-ietf-Poly1305 (по умолчанию)xchacha20-poly1305- XChaCha20-Poly1305aes-128-gcm- AES-128-GCMaes-256-gcm- AES-256-GCM- И другие методы Shadowsocks
Применяется к: Настройкам прокси Shadowsocks пользователя
Пример:
{
"extra_settings": {
"method": "aes-256-gcm"
}
}Комбинированные дополнительные настройки
Вы можете установить и flow, и method:
{
"extra_settings": {
"flow": "xtls-rprx-vision",
"method": "aes-256-gcm"
}
}Статус и истечение срока
Активный статус
Когда status равен active:
- Расчет истечения срока:
- Если
expire_duration > 0:expire = now + expire_duration - Если
expire_duration = 0:expire = 0(неограниченно)
- Если
Пример:
Template: status = "active", expire_duration = 2592000 (30 дней)
User created: 2024-01-01 00:00:00
Result: expire = 2024-01-31 00:00:00Статус On Hold
Когда status равен on_hold:
- Истечение срока: Всегда устанавливается в
0(неограниченно) - Продолжительность истечения On Hold: Использует
expire_durationкакon_hold_expire_duration - Таймаут On Hold:
- Если
on_hold_timeoutустановлен:on_hold_timeout = now + on_hold_timeout - Если
on_hold_timeoutне установлен:on_hold_timeout = null
- Если
Пример:
Template:
status = "on_hold"
expire_duration = 2592000 (30 дней)
on_hold_timeout = 3600 (1 час)
User created: 2024-01-01 00:00:00
Result:
expire = 0 (неограниченно)
on_hold_expire_duration = 2592000
on_hold_timeout = 2024-01-01 01:00:00 (становится активным через 1 час)Валидация: Если status равен on_hold и expire_duration > 0, то on_hold_timeout должен быть установлен.
Лимит данных и стратегия сброса
Лимит данных
- Формат: Байты (целое число)
- По умолчанию:
0(неограниченно) - Применяется к: Полю
data_limitпользователя
Примеры:
1073741824= 1 GB5368709120= 5 GB0= Неограниченно
Стратегия сброса
Управляет тем, как сбрасывается лимит данных (применяется только если data_limit > 0):
| Strategy | Description | Reset Interval |
|---|---|---|
no_reset | Никогда не сбрасывается | Никогда |
day | Сбрасывается ежедневно | Каждые 24 часа |
week | Сбрасывается еженедельно | Каждые 7 дней |
month | Сбрасывается ежемесячно | Каждые 30 дней |
year | Сбрасывается ежегодно | Каждые 365 дней |
Поведение:
- При сбросе
used_trafficпользователя сбрасывается до 0 - Время сброса рассчитывается от времени создания пользователя
- Логи сброса поддерживаются в
UserUsageResetLogs
Пример:
Template:
data_limit = 1073741824 (1 GB)
data_limit_reset_strategy = "month"
User created: 2024-01-01
Result:
- Пользователь имеет лимит 1 GB
- Лимит сбрасывается 2024-01-31, 2024-03-01 и т.д.Создание пользователей из шаблонов
Создание одного пользователя
Endpoint: POST /api/user/from_template
Request:
{
"user_template_id": 1,
"username": "john",
"note": "Premium customer"
}Процесс:
- Шаблон валидируется (существует, не отключен)
- Базовые поля загружаются из шаблона
- Имя пользователя строится:
prefix + "john" + suffix - Применяются дополнительные настройки
- Пользователь создается со всеми значениями шаблона
Response: Объект пользователя со всеми примененными настройками
Что применяется
Все поля шаблона применяются к новому пользователю:
- ✅ Группы из
group_ids - ✅ Лимит данных из
data_limit - ✅ Истечение срока из
expire_duration(рассчитано) - ✅ Статус из
status - ✅ Стратегия сброса лимита данных
- ✅ Поток VLESS (если установлен в extra_settings)
- ✅ Метод Shadowsocks (если установлен в extra_settings)
- ✅ Таймаут on hold (если статус on_hold)
Изменение пользователей с помощью шаблонов
Применение шаблона к существующему пользователю
Endpoint: PUT /api/user/{username}/from_template
Request:
{
"user_template_id": 2,
"note": "Updated to premium plan"
}Процесс:
- Шаблон валидируется (существует, не отключен)
- Базовые поля загружаются из шаблона
- Существующие
proxy_settingsпользователя сохраняются - Поля шаблона применяются (переопределяют текущие значения пользователя)
- Если
reset_usagesравенtrue, использование данных пользователя сбрасывается - Пользователь обновляется
Что применяется
При изменении пользователя с помощью шаблона:
- ✅ Группы из
group_ids(заменяет группы пользователя) - ✅ Лимит данных из
data_limit - ✅ Истечение срока из
expire_duration(пересчитывается) - ✅ Статус из
status - ✅ Стратегия сброса лимита данных
- ✅ Поток VLESS (если установлен в extra_settings)
- ✅ Метод Shadowsocks (если установлен в extra_settings)
- ✅ Таймаут on hold (если статус on_hold)
- ✅ Сброс использования данных (если
reset_usagesравенtrue)
Что не меняется:
- ❌ Имя пользователя (не может быть изменено)
- ❌ Структура настроек прокси (обновляются только flow/method)
- ❌ Дата создания пользователя
- ❌ Администратор пользователя (кто их создал)
Флаг Reset Usages
Когда reset_usages равен true в шаблоне:
used_trafficпользователя сбрасывается до 0- История использования очищается
- Создается запись лога сброса
Случай использования: При обновлении пользователя до нового плана вы можете захотеть сбросить их использование.
Массовое создание пользователей
Обзор
Массовое создание пользователей позволяет создавать несколько пользователей из шаблона одновременно с автоматической генерацией имен пользователей.
Endpoint: POST /api/users/bulk/from_template
Возможности:
- Создание до 500 пользователей одновременно
- Автоматическая генерация имен пользователей
- Две стратегии генерации имен пользователей
- URL подписок возвращаются для всех созданных пользователей
Стратегии генерации имен пользователей
Strategy: random
Поведение:
- Генерирует случайные имена пользователей
- Формат: 5 случайных буквенно-цифровых символов (A-Z, 0-9)
- Пример:
"A3K9M","X7P2Q"
Request:
{
"user_template_id": 1,
"count": 10,
"strategy": "random",
"username": null,
"note": "Bulk created users"
}Ограничения:
usernameдолжен бытьnullили пустымstart_numberне должен быть предоставлен
Strategy: sequence
Поведение:
- Генерирует последовательные имена пользователей
- Формат:
base_username + number - Пример:
"user1","user2","user3"
Request:
{
"user_template_id": 1,
"count": 10,
"strategy": "sequence",
"username": "user",
"start_number": 1,
"note": "Sequential users"
}Ограничения:
usernameобязателенstart_numberнеобязателен (по умолчанию 1)- Если базовое имя пользователя заканчивается цифрами, они игнорируются
Примеры:
Base: "user", start: 1 → "user1", "user2", "user3"
Base: "user10", start: 1 → "user11", "user12", "user13" (10 игнорируется)
Base: "test", start: 100 → "test100", "test101", "test102"Префикс/суффикс имени пользователя при массовом создании
username_prefix и username_suffix шаблона применяются к всем сгенерированным именам пользователей:
Пример:
Template: prefix = "premium_", suffix = "_vip"
Strategy: sequence, base = "user", start = 1
Generated usernames:
"premium_user1_vip"
"premium_user2_vip"
"premium_user3_vip"Процесс массового создания
- Валидация шаблона - Шаблон существует и не отключен
- Валидация стратегии - Проверяются правила стратегии имени пользователя
- Генерация имен пользователей - Имена пользователей генерируются на основе стратегии
- Фильтрация дубликатов - Существующие имена пользователей фильтруются
- Создание пользователей - Все пользователи создаются с настройками шаблона
- URL подписок - URL генерируются для всех созданных пользователей
Response
{
"subscription_urls": [
"https://example.com/sub/user1?token=...",
"https://example.com/sub/user2?token=..."
],
"created": 10
}Примечание: Количество created может быть меньше count, если некоторые имена пользователей уже существовали.
Ограничения
- Максимальное количество: 500 пользователей на запрос
- Минимальное количество: 1 пользователь
- Уникальность имени пользователя: Дублирующиеся имена пользователей автоматически пропускаются
- Валидация шаблона: Шаблон должен существовать и не быть отключенным
Правила валидации и ограничения
Валидация имени
| Rule | Constraint | Error Message |
|---|---|---|
| Required | Не может быть пустым | "name can't be empty" |
| Length | Макс. 64 символа | Name too long |
| Uniqueness | Должно быть уникальным | "Template by this name already exists" |
Валидация Group IDs
| Rule | Constraint | Error Message |
|---|---|---|
| Creation | Требуется хотя бы один | "you must select at least one group" |
| Existence | Все ID должны существовать | Group not found |
| Modification | Может быть пустым/null | Разрешено при изменении |
Валидация префикса/суффикса имени пользователя
| Rule | Constraint | Error Message |
|---|---|---|
| Length | Макс. 20 символов | Prefix/suffix too long |
| Characters | Те же правила, что и для имени пользователя | Invalid characters |
Валидация статуса
| Rule | Constraint | Error Message |
|---|---|---|
| On Hold | Если on_hold и expire_duration > 0, требуется on_hold_timeout | "User cannot be on hold without a valid on_hold_expire_duration" |
| On Hold | Не может иметь expire когда on_hold | "User cannot be on hold with specified expire" |
Валидация лимита данных
| Rule | Constraint | Error Message |
|---|---|---|
| Minimum | Должно быть >= 0 | Data limit must be 0 or greater |
Валидация продолжительности истечения срока
| Rule | Constraint | Error Message |
|---|---|---|
| Minimum | Должно быть >= 0 | Expire duration must be 0 or greater |
| Format | Секунды (целое число) | Must be integer |
Валидация отключенного шаблона
- Отключенные шаблоны нельзя использовать для создания пользователей
- Отключенные шаблоны нельзя использовать для изменения пользователей
- Ошибка: "this template is disabled"
API Endpoints
Создать шаблон
Endpoint: POST /api/user_template
Authentication: Требуется sudo администратор
Request Body:
{
"name": "Premium Plan",
"data_limit": 1073741824,
"expire_duration": 2592000,
"username_prefix": "premium_",
"username_suffix": "_vip",
"group_ids": [1, 2],
"status": "active",
"data_limit_reset_strategy": "month",
"extra_settings": {
"flow": "xtls-rprx-vision",
"method": "aes-256-gcm"
},
"is_disabled": false
}Response:
{
"id": 1,
"name": "Premium Plan",
"data_limit": 1073741824,
"expire_duration": 2592000,
"username_prefix": "premium_",
"username_suffix": "_vip",
"group_ids": [1, 2],
"status": "active",
"data_limit_reset_strategy": "month",
"extra_settings": {
"flow": "xtls-rprx-vision",
"method": "aes-256-gcm"
},
"is_disabled": false
}Получить все шаблоны
Endpoint: GET /api/user_templates
Authentication: Требуется администратор
Query Parameters:
offset(необязательно): Смещение пагинацииlimit(необязательно): Лимит пагинации
Response:
[
{
"id": 1,
"name": "Premium Plan",
"group_ids": [1, 2],
...
}
]Получить шаблон по ID
Endpoint: GET /api/user_template/{template_id}
Authentication: Требуется администратор
Response: То же, что и ответ создания шаблона
Изменить шаблон
Endpoint: PUT /api/user_template/{template_id}
Authentication: Требуется sudo администратор
Request Body: Те же поля, что и при создании (все необязательны)
Response: Обновленный шаблон
Удалить шаблон
Endpoint: DELETE /api/user_template/{template_id}
Authentication: Требуется sudo администратор
Response: 204 No Content
Создать пользователя из шаблона
Endpoint: POST /api/user/from_template
Authentication: Требуется администратор
Request Body:
{
"user_template_id": 1,
"username": "john",
"note": "Premium customer"
}Response: Объект пользователя
Изменить пользователя с помощью шаблона
Endpoint: PUT /api/user/{username}/from_template
Authentication: Требуется администратор
Request Body:
{
"user_template_id": 2,
"note": "Upgraded to premium"
}Response: Обновленный объект пользователя
Массовое создание пользователей из шаблона
Endpoint: POST /api/users/bulk/from_template
Authentication: Требуется администратор
Request Body:
{
"user_template_id": 1,
"count": 10,
"strategy": "random",
"username": null,
"note": "Bulk created"
}Response:
{
"subscription_urls": ["..."],
"created": 10
}Распространенные сценарии
Проблема: Вы хотите шаблон для пользователей премиум с лимитом 1 GB и истечением срока 30 дней.
Решение:
POST /api/user_template
{
"name": "Premium Plan",
"data_limit": 1073741824,
"expire_duration": 2592000,
"group_ids": [1],
"status": "active"
}Проблема: Вы хотите, чтобы все пользователи из шаблона имели префикс "premium_".
Решение:
{
"name": "Premium Plan",
"username_prefix": "premium_",
"group_ids": [1]
}При создании пользователя с именем пользователя "john" финальное имя пользователя будет "premium_john".
Проблема: Вы хотите, чтобы шаблон устанавливал поток VLESS и метод Shadowsocks.
Решение:
{
"name": "Advanced Plan",
"group_ids": [1],
"extra_settings": {
"flow": "xtls-rprx-vision",
"method": "aes-256-gcm"
}
}Проблема: Вы хотите шаблон, который создает пользователей на удержании на 1 час, затем активных на 30 дней.
Решение:
{
"name": "Trial Plan",
"status": "on_hold",
"expire_duration": 2592000,
"on_hold_timeout": 3600,
"group_ids": [1]
}Пользователь начинает на удержании, становится активным через 1 час, истекает через 30 дней всего.
Проблема: Вы хотите шаблон с лимитом 5 GB, который сбрасывается ежемесячно.
Решение:
{
"name": "Monthly Plan",
"data_limit": 5368709120,
"data_limit_reset_strategy": "month",
"group_ids": [1]
}Проблема: Вы хотите быстро создать пользователя, используя шаблон.
Решение:
POST /api/user/from_template
{
"user_template_id": 1,
"username": "john",
"note": "New customer"
}Пользователь создается со всеми настройками шаблона, автоматически примененными.
Проблема: Вы хотите создать 50 пользователей со случайными именами пользователей.
Решение:
POST /api/users/bulk/from_template
{
"user_template_id": 1,
"count": 50,
"strategy": "random",
"username": null
}50 пользователей созданы со случайными 5-символьными именами пользователей.
Проблема: Вы хотите создать 100 пользователей с именами "user1", "user2" и т.д.
Решение:
POST /api/users/bulk/from_template
{
"user_template_id": 1,
"count": 100,
"strategy": "sequence",
"username": "user",
"start_number": 1
}Проблема: Вы хотите обновить существующего пользователя до плана премиум, используя шаблон.
Решение:
PUT /api/user/john/from_template
{
"user_template_id": 2,
"note": "Upgraded to premium"
}Пользователь "john" получает все настройки из шаблона 2, сохраняя структуру их настроек прокси.
Проблема: При обновлении пользователя вы хотите сбросить их использование данных.
Решение:
// Сначала обновите шаблон, чтобы включить reset_usages
PUT /api/user_template/2
{
"reset_usages": true
}
// Затем примените шаблон к пользователю
PUT /api/user/john/from_template
{
"user_template_id": 2
}Использование данных пользователя сбрасывается до 0.
Проблема: Вы хотите временно предотвратить использование шаблона.
Решение:
PUT /api/user_template/1
{
"is_disabled": true
}Шаблон нельзя использовать до повторного включения.
Проблема: Вы хотите шаблон, который назначает пользователей в несколько групп.
Решение:
{
"name": "Multi-Group Plan",
"group_ids": [1, 2, 3],
"data_limit": 1073741824
}Пользователи, созданные из этого шаблона, присоединяются ко всем трем группам.
Проблема: Вы хотите шаблон с неограниченными данными и без истечения срока.
Решение:
{
"name": "Unlimited Plan",
"data_limit": 0,
"expire_duration": 0,
"group_ids": [1]
}Проблема: Вы хотите имена пользователей, такие как "premium_john_vip".
Решение:
{
"name": "VIP Plan",
"username_prefix": "premium_",
"username_suffix": "_vip",
"group_ids": [1]
}При создании пользователя "john" финальное имя пользователя будет "premium_john_vip".
Резюме
- ✅ Шаблоны — это чертежи - Они предоставляют значения по умолчанию для создания пользователей
- ✅ Все поля применяются - Настройки шаблона переопределяют значения по умолчанию при создании пользователей
- ✅ Префикс/суффикс имени пользователя - Автоматически добавляются к именам пользователей
- ✅ Дополнительные настройки - Применяют настройки, специфичные для протокола (flow, method)
- ✅ Назначение группы - Пользователи автоматически присоединяются к группам шаблона
- ✅ Обработка статуса - Поддерживает active и on_hold с таймаутом
- ✅ Расчет истечения срока - Автоматически рассчитывается из expire_duration
- ✅ Сброс лимита данных - Настраиваемые стратегии сброса
- ✅ Массовое создание - Создание до 500 пользователей с автоматической генерацией имен пользователей
- ✅ Отключенные шаблоны - Нельзя использовать до повторного включения
- ✅ Изменение пользователя - Применение шаблонов к существующим пользователям
- ✅ Сброс использования - Опция сброса использования данных при изменении пользователей
Для получения дополнительной информации о:
- Группах: См. groups.mdx
- Хостах: См. hosts.mdx
- Конфигурации XRay: См. xray.mdx