# Расширенный функционал

**Расширенный функционал** включает два направления:

* Управление почти всеми настройками приложения
* Уникальные функции для обхода блокировок

{% hint style="info" %}
Чтобы включить любой параметр, передайте значение `true` или `1` ; чтобы отключить — любое другое непустое значение (например, `0`).
{% endhint %}

### Уникальные функции <a href="#id-rasshirennyifunkcional-opisanieparametrov" id="id-rasshirennyifunkcional-opisanieparametrov"></a>

<details>

<summary>Смена URL подписки</summary>

Если домен заблокирован вашим провайдером, а пользователи могут подключаться к серверам и обновлять подписку только через VPN, этот параметр именно для вас. Задав новое доменное имя в значении данного параметра, вы обеспечите его автоматическую замену у всех пользователей подписки.

**Пример настройки данного параметра:**

```
new-url: [url]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
new-url: https://mynew-domain.com/3J3jrb4jfc
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#new-url https://mynew-domain.com/3J3jrb4jfc
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Смена домена подписки</summary>

Изменение домена сайта без смены полного URL, сохраняя остальную часть адреса.

**Пример настройки данного параметра:**

```
new-domain: [domain]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
new-domain: mynew-domain.com
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#new-domain mynew-domain.com
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Описание сервера в подписке</summary>

Доступно только при наличии премиум `ProviderID`. Позволяет задать дополнительную подпись, которая отображается под названием сервера вместо стандартного текста (например, "VMess", "VLESS", "Trojan").

* Максимальная длина — 30 символов.
* Если не помещается на экран, будет сокращена с троеточием.
* Задаётся после `title` через разделитель `?`.

**Примеры:**

{% code title="VLESS" %}

```
vless://1fb46fdc-e3e4-35d1-bd46-605d773b5762@5.5.8.9:443?encryption=none&node_id=482&headerType=none&type=tcp&security=reality&sni=booking.com&fp=chrome&pbk=YqHW8a4iAc1SZYpTrFVoOQg1F3yAdX1tWXuROZUCsEU&sid=6ba85179e30d4fc2&flow=xtls-rprx-vision&xtls=2#title?serverDescription=SGFwcCB0aGUgYmVzdA==
```

{% endcode %}

{% code title="VMESS" %}

```
vmess://eyJob3N0IjoiZWxhaG9tZWtpdGNoZW4uY29tIiwicGF0aCI6IiIsInRscyI6IiIsImFkZCI6ImVsYWhvbWVraXRjaGVuLmNvbSIsInBvcnQiOjUwMDAsImFpZCI6MCwibmV0IjoidGNwIiwidHlwZSI6Im5vbmUiLCJ2IjoiMiIsInBzIjoi4piB77iPIDogNTMuM0dCIiwiaWQiOiI4N2ZhN2VmMC1jM2ZjLTNiOTAtYTJkOC01OGZjYjhkZmZmMjYiLCJzZXJ2ZXJEZXNjcmlwdGlvbiI6IkhhcHAgdGhlIGJlc3QifQ==
```

{% endcode %}

{% code title="Trojan" %}

```
trojan://8GXLP3dEzm7T8wP5Jx0Ufg@199.107.164.105:443?security=tls&insecure=1&fragment=3,1,tlshello&type=ws&headerType=&path=%2F&host=quictest.burncommunity.ru&sni=quictest.burncommunity.ru&fp=chrome&alpn=http%2F1.1#title?serverDescription=SGFwcCB0aGUgYmVzdA==
```

{% endcode %}

{% code title="Socks5" %}

```
socks://pkg-private2-country-us-city-new_york_city:w0e20i55uuq6pxqg@quality.proxywing.com:1080#title?serverDescription=SGFwcCB0aGUgYmVzdA==
```

{% endcode %}

{% code title="Shadowsocks" %}

```
ss://YWVzLTI1Ni1jZmI6UzdLd1V1N3lCeTU4UzNHYQ==@80.92.204.106:9042#title?serverDescription=SGFwcCB0aGUgYmVzdA==
```

{% endcode %}

{% code title="Wireguard" %}

```
wireguard://password2key@123.123.123.2:10803?publickey=asd33d223d33&address=dom.ru&allowinsecure=1&mtu=1500&reserved=1,22,33#title?serverDescription=SGFwcCB0aGUgYmVzdA==
```

{% endcode %}

{% code title="JSON" %}

```
{
  "dns": {
  ...
  },
  "inbounds": [
  ...
  ],
  "outbounds": [
  ...
  ],
  "remarks": "🇭🇰 Hong Kong",
  "meta": {
    "serverDescription": "Happ the best"
  }
}
```

{% endcode %}

</details>

<details>

<summary>Фрагментация и фронтинг подписки</summary>

Некоторые CDN поддерживают фронтинг доменов. Это позволяет подключаться к своему сайту через сторонний домен.

Например, указав адрес подключения `visa.com`, а в заголовке Host — `my-domain.com`, провайдер увидит только запрос к `visa.com`.

Также вы можете обращаться к своему домену за списком серверов, используя фрагментацию пакетов в SNI TLSHello.

По умолчанию фрагментация включена для всех подписок. Пользователь может добавить подписку только один раз; при повторной попытке, если аккаунт не премиумный, обновление не будет разрешено.

#### &#x20;Схема URL c параметрами

```
[link]#title?[fragment]&[resolve-address]&[host]&[insecure]

Fronting:
visa.com/123#MyVPN?resolve-address=visa.com&host=mydomain.com

Frgmentation:
mydomain.com/123#MyVPN?fragment=80-250,10-100,tlshello
```

Фрагментация содержит три параметра: `[length]`, `[interval]` и `[packets]`.

При использовании фронтинга необходимо сначала указать URL с доменом, через который будет осуществляться соединение. Также требуется задать `resolve-address` — это может быть домен или IP-адрес — и `host`, соответствующий вашему хосту в сети выбранного провайдера.

</details>

<details>

<summary>Advanced fragmentation</summary>

Данная функция пока что проходит закрытое тестирование и скоро будет доступна...

</details>

<details>

<summary>Неотключаемый HWID</summary>

По умолчанию HWID включен на всех приложениях Happ. Но если вы хотите, чтобы пользователь не мог отключить пересылку этого параметра отключив его в настройках приложения, то вы можете отправить вместе с подпиской специальный параметр.

**Пример настройки данного параметра:**

```
subscription-always-hwid-enable: [true / 1]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
subscription-always-hwid-enable: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#subscription-always-hwid-enable: 1
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Уведомление об окончании подписки</summary>

Вы можете включить функцию автоматических уведомлений о завершении подписки.\
Пользователь будет получать напоминания за 3 дня до окончания подписки: приложение отправит по одному уведомлению в день в течение трёх дней. Это поможет пользователю не забыть продлить подписку вовремя.

Текст уведомления:

```
 У вашей подписки [name] скоро истечёт срок действия, не забудьте продлить её.
```

**Пример настройки данного параметра:**

```
notification-subs-expire: [true / 1]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
notification-subs-expire: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#notification-subs-expire: 1
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Скрыть настройки серверов в подписке</summary>

Отключите возможность просмотра и редактирования конфигураций серверов для пользователей вашей подписки. Настройка применяется как к уже добавленным подпискам, так и к тем, что будут добавлены в будущем.

**Пример настройки данного параметра:**

```
hide-settings: [true / 1]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
hide-settings: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#hide-settings: 1
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Резолвинг доменов</summary>

Приложение может выполнять предварительное резолвинг доменов серверов ещё до установления подключения.\
Вы можете указать любой DoH-сервер, и при соединении с сервером Xray доменное имя будет заменено на полученный IP-адрес.

Если для домена возвращается несколько IP-адресов, приложение автоматически выберет тот, у которого минимальное время отклика (ping).\
Однако стоит учитывать: при большом количестве IP-адресов подключение может занять больше времени, так как все варианты будут протестированы заранее.

**Пример настройки данного параметра:**

```
server-address-resolve-enable: [true / 1]
server-address-resolve-dns-domain: [url]
server-address-resolve-dns-ip: [ip]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
server-address-resolve-enable: 1
server-address-resolve-dns-domain: https://common.dot.dns.yandex.net/dns-query
server-address-resolve-dns-ip: 77.88.8.8
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#server-address-resolve-enable: 1
#server-address-resolve-dns-domain: https://common.dot.dns.yandex.net/dns-query
#server-address-resolve-dns-ip: 77.88.8.8
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

### Управление настройками приложения

<details>

<summary>Автоподключение</summary>

Позволяет автоматически подключать пользователя к серверам при запуске приложения. Дополнительно, с помощью параметра **subscription-autoconnect** можно указать критерий для подключения к определенному серверу.

**Пример настройки данного параметра:**

```
subscription-autoconnect: [true / 1]
subscription-autoconnect-type: [“lastused“/”lowestdelay”]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
subscription-autoconnect: 1
subscription-autoconnect-type: lowestdelay
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#subscription-autoconnect: 1
#subscription-autoconnect-type: lastused
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Автопинг</summary>

Запускайте автоматическое тестирование списка серверов при открытии приложения если это необходимо.

**Пример настройки данного параметра:**

```
subscription-ping-onopen-enabled: [true / 1]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
subscription-ping-onopen-enabled: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#subscription-ping-onopen-enabled: 1
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Автообновление подписок</summary>

В приложении можно включать или отключать автообновление сразу для всех подписок — эта настройка применяется ко всем подпискам одновременно. Если же нужно задать автообновление только для конкретной подписки, воспользуйтесь бесплатным функционалом и инструкциями в общей документации. При отключении глобальной настройки каждая подписка самостоятельно определяет своё время обновления.

**Пример настройки данного параметра:**

```
subscription-auto-update-enable: [true / 1] 
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
subscription-auto-update-enable: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#new-url: https:/mynew-domain.com/3J3jrb4jfc
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Фрагментация</summary>

Это глобальный параметр управления фрагментацией для всех подписок. Если же нужно назначить фрагментацию только для конкретной подписки или серверу, воспользуйтесь бесплатным функционалом и инструкциями общей документации к приложению. При отключении глобальной настройки каждая подписка самостоятельно определяет настройки фрагментации.

**Пример настройки данного параметра:**

```
fragmentation-enable: [true / 1]
fragmentation-packets: [tlshello,1-2,1-3,1-5]
fragmentation-length: [50-100]
fragmentation-interval: [10-20]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
fragmentation-enable: 1
fragmentation-packets: tlshello
fragmentation-length: 50-100
fragmentation-interval: 5
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#fragmentation-enable: 1
#fragmentation-packets: tlshello
#fragmentation-length: 50-100
#fragmentation-interval: 5
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Пинг</summary>

Эта функция позволяет выбрать способ выполнения пинга в приложении. Доступны три варианта: «via Proxy», «TCP» и «ICMP». Для режима «via Proxy» можно дополнительно указать URL для проверки пинга.

**Пример настройки данного параметра:**

```
ping-type: ["proxy","tcp","icmp"]
check-url-via-proxy: [url]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
ping-type: proxy
check-url-via-proxy: https://cp.cloudflare.com/generate_204
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#ping-type proxy
#check-url-via-proxy: https://cp.cloudflare.com/generate_204
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>User-Agent</summary>

Эта функция позволяет изменить User-Agent, используемый в заголовках при получении подписки. Полезно в случаях, когда провайдер блокирует запросы с нестандартными или неподходящими заголовками.

**Пример настройки данного параметра:**

```
change-user-agent: [String] 
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
change-user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#change-user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Автозапуск приложения</summary>

Эта функция позволяет автоматически запускать приложение при включении устройства. В настоящее время доступна только на Android.&#x20;

**Пример настройки данного параметра:**

```
app-auto-start: [String] 
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
app-auto-start: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#app-auto-start: 1
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Обновление подписки при запуске приложения</summary>

Эта функция автоматически обновляет все подписки в приложении при каждом открытии приложения.

**Пример настройки данного параметра:**

```
subscription-auto-update-open-enable: [String] 
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
subscription-auto-update-open-enable: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#subscription-auto-update-open-enable: 1
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Прокси для выбранных приложений (Android)</summary>

В этом параметре можно указать список приложений, которые должны использовать VPN или, наоборот, обходить его. Если приложение ещё не установлено на устройстве, но указано в списке, оно будет автоматически учтено при первом подключении к VPN после установки.

**Пример настройки данного параметра:**

```
per-app-proxy-mode: [off/on/bypass] \\Укажите один из трех параметров
per-app-proxy-list: [com.google.chrome,com.meta.instagram] \\список appID через ','
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
per-app-proxy-mode: on
per-app-proxy-list: com.google.chrome,com.meta.instagram
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#per-app-proxy-mode: on
#per-app-proxy-list: com.google.chrome,com.meta.instagram
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Анализ пакетов (Sniffing)</summary>

В **xray-core** sniffing нужен, чтобы анализировать первые пакеты соединения и автоматически определять **протокол** (HTTP, TLS, BitTorrent и т.д.) и **домен** (SNI/Host).\
Может влиять на загрузку медиа в приложении WeChat. По умолчанию включен.<br>

**Пример настройки данного параметра:**

```
sniffing-enable: [String] 
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
sniffing-enable: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#sniffing-enable: 1
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Запрет сворачивания подписок</summary>

Эта функция отключает возможность сворачивать подписку: список серверов всегда отображается полностью, в развёрнутом виде.<br>

**Пример настройки данного параметра:**

```
subscriptions-collapse: [String] 
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
subscriptions-collapse: 1
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#subscriptions-collapse: 1
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Режим отображения пинга</summary>

Позволяет отобразить иконки вместо временных значений<br>

**Пример настройки данного параметра:**

```
ping-result: [time,icon]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
ping-result: icon
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#ping-result: icon
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>Mux</summary>

Mux в xray-core — это функция мультиплексирования (multiplexing), которая позволяет передавать данные нескольких виртуальных TCP-соединений через одно физическое TCP-соединение. Она предназначена для снижения задержек от TCP-handshake, но не для повышения пропускной способности (может даже замедлить большие загрузки). Настраивается в outbound-конфигурации с параметрами вроде enabled и concurrency (min -1 max 1024).

**Пример настройки данного параметра:**

```
mux-enable: [true / 1]
mux-tcp-connections: [String]
mux-xudp-connections: [String]
mux-quic: [String]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
mux-enable: 1
mux-tcp-connections: 100
mux-xudp-connections: 200
mux-quic: skip
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#mux-enable: 1
#mux-tcp-connections: 100
#mux-xudp-connections: 200
#mux-quic: skip
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>

<details>

<summary>E<strong>xclude routes</strong> </summary>

Определяет перечень подсетей и IP-адресов, трафик которых не должен проходить через туннель.\
Адреса указываются в одной строке, разделяя их пробелами и запятыми.

**Пример настройки данного параметра:**

```
exclude-routes: [String]
```

**Способы передачи:**

{% code title="Через HTTP Headers:" %}

```
HTTP/2 200 
date: Wed, 24 Nov 2024 10:00:52 GMT
content-type: application/json
content-length: 3798
content-disposition: attachment; filename="213"
exclude-routes: 192.169.1.0/24, 10.0.0.0/8
```

{% endcode %}

{% code title="Через тело подписки:" %}

```
#exclude-routes: 192.169.1.0/24, 10.0.0.0/8
vless://70cc48c5‑b2f4…
vmess://zkIAU1JitkI…
```

{% endcode %}

</details>
