> For the complete documentation index, see [llms.txt](https://docs.tumbler.app/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tumbler.app/ru/funkcii/advanced-connection-control.md).

# \[PAID] Расширенное управление соединениями

Спецификация платной функции, которую можно реализовать 1:1. Без активации ACC backend ведёт себя как в бесплатной версии (см. совместимость ниже).

## Что разблокирует ACC

* `connection-limit >= 2` — без ACC лимит принудительно ограничивается до `1`.
* Область применения (scoping): `subscription` / `config` / `group`.
* Применение политик: `hard` (deny) или `soft` (allow + отметка о превышении).
* Callbacks для отчётов о превышениях — см. [ACC callbacks](/ru/funkcii/acc-callbacks.md).
* Приоритеты устройств (по `device_type`) для выбора кандидатов в soft-отчётах и аналитике.

## Активация и capability

* Требуется capability `advanced_connection_control` в `meta.capabilities`.
* Метаданные ACC работают только при `acc-enabled: true`. Если capability отсутствует в массиве `capabilities` или не разрешена тарифом (не оплачена), либо `acc-enabled=false`, все ACC-поля игнорируются.
* При отсутствии ACC любой `connection-limit >= 2` автоматически зажимается до `1` (базовое бесплатное поведение).

## Конфигурация (metadata contract)

Уровень — метаданные подписки/ноды. Ключи стабильны:

* `acc-enabled: true` — включает ACC для этой подписки/конфига.
* `acc-connection-limit: <int>` — обязательный предел соединений в выбранной области.
* `acc-enforcement: hard|soft` — как применять лимит; по умолчанию `hard`.
* `acc-scope: subscription|config|group` — область счётчика; по умолчанию `subscription`.
* `acc-device-priority: ios=100,ipados=90,macos=80` — опциональная строка с приоритетами по `device_type`. Неуказанные типы получают базовый приоритет `0`.
  * Формат: пары `device_type=int`, разделённые запятыми; пробелы вокруг пар допускаются и обрезаются.
  * Порядок пар не важен; некорректные или неизвестные `device_type` игнорируются (приоритет = `0`).

### Идентификаторы группы и конфига

* **VLESS ссылки**: query `group=<string>` → `node.meta.group`; `cid=<string>` → стабильный идентификатор конфига `node.meta.cid`.
* **JSON конфиги**: `meta: { "group": "...", "cid": "..." }`.

### Семантика применения

* **Hard**: при достижении лимита новая попытка подключиться получает deny для выбранной области (`subscription`/`config`/`group`).
* **Soft**:
  * соединение разрешено, но помечено как over-limit;
  * событие попадает в аналитику/отчёты (callback);
  * приоритеты устройств используются для выбора кандидата, если нужно указать «кого бы вытеснили/маркировали»;
  * логика вытеснения может быть расширена без изменения формата приоритетов.

### Области подсчёта

* `subscription` — лимит на всю подписку (по умолчанию).
* `config` — отдельный лимит для каждого уникального `cid` (независимо от группы).
* `group` — отдельный лимит для каждой группы (`group` из meta/query).

## Примеры конфигураций

### 1) Per-subscription, limit=3, hard

```json
{
  "meta": {
    "capabilities": ["advanced_connection_control"],
    "acc-enabled": true,
    "acc-connection-limit": 3,
    "acc-enforcement": "hard",
    "acc-scope": "subscription"
  }
}
```

### 2) Per-group, limit=2, soft; группы `eu`, `us`

```json
{
  "meta": {
    "capabilities": ["advanced_connection_control"],
    "acc-enabled": true,
    "acc-connection-limit": 2,
    "acc-enforcement": "soft",
    "acc-scope": "group"
  },
  "nodes": [
    { "link": "vless://...#EU?group=eu" },
    { "link": "vless://...#US?group=us" }
  ]
}
```

### 3) Per-config, limit=2, hard; `cid` задан

```json
{
  "meta": {
    "capabilities": ["advanced_connection_control"],
    "acc-enabled": true,
    "acc-connection-limit": 2,
    "acc-enforcement": "hard",
    "acc-scope": "config"
  },
  "nodes": [
    { "link": "vless://...#NodeA?cid=stable-config-id" }
  ]
}
```

## Обратная совместимость

* Если ACC не активирован у провайдера (нет `meta.capabilities` со значением `advanced_connection_control` или `acc-enabled=false`), все `acc-*` игнорируются; остаются базовые лимиты.
* При `connection-limit >= 2` без права на ACC backend принудительно снижает значение до `1`, чтобы не блокировать доступ.
* Любые новые поля ACC должны добавляться без изменения существующих ключей; изменения фиксируются в changelog.

## См. также

* [ACC callbacks](/ru/funkcii/acc-callbacks.md)
* [features/overview.md](/ru/funkcii/overview.md)
* [features/basic-limits.md](/ru/funkcii/basic-limits.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.tumbler.app/ru/funkcii/advanced-connection-control.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
