# Настройки Link-Bot [← README](../README.md) · [Платежи](payment-providers.md) · [Обслуживание](maintenance.md) Тарифы, платёжные ключи, промокоды, награды за отзывы и оформление задаются в **Админке Mini App**. Параметры сервера — в `.env`; после их изменения выполните `bash ./update.sh` из `/opt/Link-Bot`. В **Тарифы → Способы оплаты → карандаш** можно менять подписи, методы и логотип каждой платёжки, включая её копии. Логотип загружается файлом PNG, JPG или WebP до 2 МБ либо задаётся HTTPS-ссылкой на изображение. «Проверить ссылку» показывает предпросмотр, корзина скрывает логотип, «Стандартный» возвращает исходный. Нажмите «Готово», затем сохраните изменения тарифов. Настройки копий независимы; отмена редактора сохраняет прежний логотип. Загруженные файлы хранятся в постоянном томе uploads и сохраняются при обновлении бота. Сообщения пробного периода редактируются в **Контент → Telegram → Пробный период**: отдельно до активации и после неё. Можно менять текст Telegram HTML, баннеры, подписи, premium emoji и цвета кнопок. Пустое поле баннера отключает изображение. «Отправить тест» показывает текущий черновик администратору, не активируя пробную подписку; для пользователей изменения применяются после сохранения. Кнопка «Назад» общая с остальными меню Telegram. Кнопка **«Уведомления»** включается в **Контент → Telegram → Главное меню**. У неё две формы: **«вкл.»** (по умолчанию зелёная) и **«выкл.»** (красная); подпись, premium emoji и цвет каждой настраиваются отдельно. Нажатие сразу переключает рассылки и обновляет только кнопку в существующем сообщении `/start`. По умолчанию рассылки включены, а видимость кнопки задаёт администратор. Отписка сохраняется в базе и действует только на Telegram-рассылки, включая `/allcom` и ещё не доставленные сообщения текущей рассылки. Email, оплата, сообщения о подписке и поддержка не отключаются. Предпросмотр оформления не меняет настройку отписки. В разделе **Рассылки → Telegram → Кому отправлять** переключатель **«Игнорировать отписку от рассылки»** включает отписавшихся пользователей в выбранную аудиторию. Остальные фильтры и блокировки продолжают действовать; личная настройка пользователя не меняется. После изменения переключателя нужно заново посчитать аудиторию; режим также виден при подтверждении отправки. На email этот переключатель не распространяется. ## Telegram и вход в кабинет 1. Отправьте боту `/start` и откройте Mini App с аккаунта из `ADMIN_TELEGRAM_ID`. 2. В [@BotFather](https://t.me/BotFather?startapp) выберите бота и задайте адрес **Main App**: `https://bot.example.com/mini-app/`. 3. В **Login Widget → Allowed URLs** добавьте `https://bot.example.com` и `https://bot.example.com/mini-app/`. Если кабинет на поддомене `my`, также добавьте `https://my.bot.example.com` и `https://my.bot.example.com/mini-app/`: вход со всех страниц кабинета использует этот постоянный адрес возврата. 4. В **Login Widget → Advanced** оставьте алгоритм `RS256`. Замените домен своим. Для входа через Google задайте `GOOGLE_CLIENT_ID` веб-клиента и в **Google Cloud → Google Auth Platform → Clients → ваш клиент → Authorized JavaScript origins** разрешите адрес кабинета, например `https://my.bot.example.com` (без пути и завершающего `/`). После изменения `.env` выполните `bash ./update.sh`. Выключенный в управлении функциями Google скрывается на экране входа и в способах входа; без Client ID кнопка входа также не показывается. Для входа по почте настройте SMTP ниже. ## Домены и HTTPS | Параметр | Пример | | :--- | :--- | | `PUBLIC_HOST` | `bot.example.com` — без протокола | | `PUBLIC_BASE_URL` | `https://bot.example.com` — полный HTTPS-адрес | | `CABINET_SUBDOMAIN` | `my` — кабинет на `my.bot.example.com`; пусто — основной домен | Для поддомена создайте `A`-запись на тот же IP и разрешите его в Telegram Login Widget и Google OAuth. Лендинг остаётся на основном домене; кнопка **Кабинет** открывает авторизацию. Встроенный Caddy запускается профилем `standalone`. С внешним HTTPS-прокси запускайте `docker compose up -d --build bot`; прокси должен иметь доступ к `bot:8080` в Docker-сети. ## Подключение Remnawave Для обычной панели достаточно `REMNAWAVE_URL`, `REMNAWAVE_TOKEN` и `REMNAWAVE_MODE=remote`. Если панель защищена дополнительной авторизацией: | Защита | Параметр `.env` | | :--- | :--- | | Caddy Security / MFA | `CADDY_AUTH_API_TOKEN=ключ_API` | | eGames TinyAuth | `CADDY_AUTH_API_TOKEN=Basic base64(логин:пароль)` | | eGames Nginx cookie | `EGAMES_COOKIE=ИМЯ=ЗНАЧЕНИЕ` | | Дополнительные заголовки | `REMNAWAVE_HEADERS=Header-One:value;Header-Two:value` | Cookie возьмите из `map $http_cookie $auth_cookie` в `/opt/remnawave/nginx.conf`: только пару `ИМЯ=ЗНАЧЕНИЕ`, без URL, `Cookie:` или `Path=/`. При подключении к той же Docker-сети можно использовать `REMNAWAVE_URL=http://remnawave:3000` и `REMNAWAVE_MODE=local` без cookie. ### Уведомления о входе в панель В `.env` Link-Bot задайте `REMNAWAVE_WEBHOOK_SECRET` длиной от 32 символов. В `.env` Remnawave: ```dotenv WEBHOOK_ENABLED=true WEBHOOK_URL=https://bot.example.com/api/remnawave/webhook WEBHOOK_SECRET_HEADER=тот_же_секрет ``` Включите события `service.login_attempt_failed` и `service.login_attempt_success` в настройках уведомлений панели и перезапустите оба приложения. ### Алерты торрент-блокера Используется тот же URL `/api/remnawave/webhook` и `REMNAWAVE_WEBHOOK_SECRET`. В Remnawave 2.7.0+ включите плагин Torrent Blocker на нужных нодах и доставку события `torrent_blocker.report` в webhook-канал настроек уведомлений панели. Плагин определяет торрент-трафик и управляет блокировкой IP на ноде. В **Админка → Торренты** находятся общая лента отчётов, сводка, поиск по пользователю/IP/ноде и фильтры активных, завершившихся и неприменённых блокировок. В карточке показаны пользователь панели, нода, IP, срок и время снятия блокировки. Для связанного аккаунта есть переход к пользователю. Владелец может выдать администраторам отдельное право **Торренты**; переход к аккаунту также требует права **Просмотр пользователей**. В разделе **Уведомления** находятся два независимых редактора с переключателями, Telegram HTML и предпросмотром. Изменения сохраняются автоматически после ввода или переключения; под редакторами отображается результат сохранения или ошибка проверки HTML. Пользователь получает ноду и срок действующей блокировки, владелец (`ADMIN_TELEGRAM_ID`) — также пользователя и IP. Доступные переменные: `{node}`, `{duration}`, `{unblock_at}`, `{time}`, `{username}`, `{status}`. Для администратора дополнительно доступны `{ip}` и `{user_uuid}`. Нажатие на переменную вставляет её в текст. Сохранённые шаблоны применяются к следующим уведомлениям. Получатели определяются по привязке подписки к UUID панели. Пользователям без Telegram-аккаунта уведомление в Telegram не отправляется. Отчёт с `blocked=false` сохраняется в ленте и отправляется администратору; пользователь не получает ложного предупреждения о блокировке. Правила и время блокировки полностью задаются в плагине Remnawave. Для подписок, привязанных к пользователю панели, отчёт также появляется в **Админка → Пользователи → История действий → Торренты**. Новые отчёты непривязанных пользователей видны в общей ленте и Telegram-алерте владельцу. Миграция 72 переносит ранее сохранённые события из истории пользователей в общую ленту. Старые алерты без привязанного аккаунта восстановить нельзя: их содержимое не сохранялось в предыдущей сборке. Повторные отчёты распознаются после перезапуска. Доставка пользователю и владельцу учитывается отдельно: временная ошибка одного получателя возвращает `503` для повтора панели без дублирования успешно доставленного сообщения другому. Одновременные отправки защищены арендой доставки в базе. Вебхуки проверяются по HMAC-SHA256, времени события и совпадению заголовка времени с телом. Сохраняются только поля отчёта, показанные в истории; ключи, ссылки подписок и полный объект пользователя/ноды не записываются. Протокол: [вебхуки Remnawave](https://docs.rw/features/webhooks/). ## Почта Укажите данные SMTP-провайдера в `.env`: ```dotenv SMTP_HOST=smtp.example.com SMTP_PORT=587 SMTP_USER=mail@example.com SMTP_PASSWORD=пароль_приложения SMTP_FROM=mail@example.com ``` Порт `587` использует STARTTLS, `465` — TLS. Если хостинг блокирует SMTP, задайте `SMTP_PROXY_URL`: HTTP(S)-прокси должен разрешать CONNECT к SMTP-хосту и порту. ## ИИ в поддержке В **Админка → ИИ**: 1. Укажите URL OpenAI-совместимого API и ключ своего провайдера. 2. Нажмите **Проверить и загрузить модели**, выберите модель. 3. Настройте промпт, сохраните и включите переключатель сверху. К URL без пути добавляется `/v1`. API должен поддерживать `GET /models` и `POST /chat/completions`. При смене URL введите ключ заново. Помощник учитывает подписки и историю пользователя, FAQ и обезличенные решения похожих тикетов. Отвечает только в поддержке; по просьбе об операторе или при затруднении зовёт администратора. Баланс и подписки сам не изменяет. Имя и стиль ответов задаются промптом; ключ хранится зашифрованным. ## Аналитика ### Google Analytics 4 1. Создайте ресурс GA4 и веб-поток. Укажите в `.env` `GA4_MEASUREMENT_ID=G-...` и числовой `GA4_PROPERTY_ID`. 2. В Google Cloud включите Google Analytics Data API, создайте сервисный аккаунт и его JSON-ключ. Добавьте email аккаунта к ресурсу GA4 с ролью **Читатель**. 3. Сохраните JSON на сервере в `/opt/Link-Bot/secrets/ga4-service-account.json`: ```bash chown 1000:1000 /opt/Link-Bot/secrets/ga4-service-account.json chmod 600 /opt/Link-Bot/secrets/ga4-service-account.json ``` В `.env` оставьте `GA4_SERVICE_ACCOUNT_FILE=/app/secrets/ga4-service-account.json`. `GOOGLE_CLIENT_ID` для входа не заменяет данные GA4. ### Яндекс Метрика 1. Создайте счётчик для своего домена и задайте `YANDEX_METRIKA_COUNTER_ID` в `.env`. 2. Получите OAuth-токен с разрешением `metrika:read` от пользователя с доступом к счётчику и задайте `YANDEX_METRIKA_OAUTH_TOKEN`. ID включает сбор посещений; OAuth-токен нужен для отчётов в **Админка → Аналитика**. GA4 и Метрика подключаются независимо. Выручка и история оплат находятся в **Финансах**. ## Оформление | Что изменить | Где | | :--- | :--- | | Логотип | **Админка → Контент → Главное меню**: PNG, JPG или WebP до 2 МБ | | Баннер Mini App | **Конструктор UI → Добавить элемент → Баннер**: PNG, GIF или MP4 до 50 МБ | | Свои фоны | **Админка → Оформление → Свой фон**: файл или прямая HTTP/HTTPS-ссылка, до 50 МБ | | Баннеры Telegram | [Папки и пути](../assets/telegram/README.md) | | Язык и шрифт | **Админка → Язык и шрифт** | Загрузите медиа через интерфейс и сохраните изменения. Логотип, баннеры и свои фоны сохраняются в постоянном Docker-томе. Фон по ссылке копируется на сервер. Можно сохранить до **20 фонов**: PNG, JPG, GIF, WebP, AVIF, BMP, SVG; видео MP4, WebM, MOV, OGV. Видео должно поддерживаться браузером; для совместимости используйте MP4 с H.264 или WebM. Для GIF действует ограничение на сложность анимации: до 4 мегапикселей, 1000 кадров и 150 миллионов пикселей суммарно по кадрам. Для длинных анимаций лучше использовать видео. Для каждого фона отдельно сохраняются **масштаб 50–300%**, положение, режим «Заполнить экран / Показать целиком», **затемнение 0–90%** и **скорость GIF/видео 10–200%**. Двигайте фон в предпросмотре пальцем или мышью; точное положение доступно под ползунками. Нажмите галочку сохранения, чтобы применить оформление всем пользователям. Добавление фонов доступно администраторам с правом **«Оформление»**.