Skip to content

Telegram-бот: алёрты оператору, самопроверка трафика клиентом и бэкап БД #105

Description

@Postlog

Категория: feature · Приоритет: high · Размер: XL · Ранг: 3/10

Что построить

Секция «Telegram-бот» в настройках (env: токен бота, список admin chat IDs); опциональное поле «Telegram ID» в форме пользователя; бот шлёт оператору алёрты (истекающие/исчерпанные клиенты, ошибки провижининга), отвечает клиенту на /usage его остатком трафика/срока и по команде /backup шлёт дамп db/ файлом.

Паритет с конкурентами

3x-ui (бот: алёрты логина/CPU/исчерпания, /usage по email, бэкап БД документом), Hiddify (бот: создание юзеров, статус, рассылка), Marzban/Marzneshin (Telegram-интеграции). Бот — стандартная фича у всех.

Чего не хватает сейчас (код)

В subgen нет никакой Telegram-интеграции (ни в config.go, ни в сервисах, ни в cmd/). Нет воркера-демона помимо HTTP-сервера, нет диспетчера команд, нет экспортёра бэкапа SQLite. У пользователя нет поля Telegram ID (add_client.go шлёт tgId:0).

Зачем

Операторы ведут headless VPN-бизнес с телефона: алёрты, проверки и бэкапы без открытия панели; клиенты сами проверяют квоту, не дёргая поддержку. Net-new поверхность и одна из самых востребованных фич у целевой аудитории. Пара к бэкапу из #84.

Предлагаемая реализация

Горутина-воркер в cmd/service (или cmd/bot): long-poll Telegram Bot API через тонкий клиент internal/clients/telegram (один метод — один файл: SendMessage, SendDocument, GetUpdates; HTTP мокается). Конфиг SUBGEN_TG_BOT_TOKEN + SUBGEN_TG_ADMIN_IDS в config.go (только статика, прокидывается полями в main). Диспетчер команд + алёрты в internal/service/notify. ClientSpec.TgID для привязки клиента. Бэкап — стрим файла db/ как Telegram document. Бот — отдельный связный демон, не трогает ogen-сервер.

Затронутые файлы

  • internal/clients/telegram/ (send_message.go, send_document.go, get_updates.go, client.go, contract.go) + тесты
  • internal/service/notify/ (новый) + contract.go
  • internal/config/{config.go,load.go}, cmd/service/main.go (или cmd/bot/main.go)
  • internal/entity/panel.go (ClientSpec.TgID), internal/entity/user.go, migrations/NNNN-user-tgid.sql
  • internal/handlers/web/static/ (поле Telegram ID)

Продуктовый ресёрч: изучены аналоги (Marzban/Marzneshin, 3x-ui, Remnawave, Hiddify, sub-store + клиентские стандарты импорта). Паритет и subgen-gap код-обоснованы. Ранг = продуктовый приоритет.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions