Категория: 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 код-обоснованы. Ранг = продуктовый приоритет.
Категория: 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.gointernal/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.sqlinternal/handlers/web/static/(поле Telegram ID)Продуктовый ресёрч: изучены аналоги (Marzban/Marzneshin, 3x-ui, Remnawave, Hiddify, sub-store + клиентские стандарты импорта). Паритет и subgen-gap код-обоснованы. Ранг = продуктовый приоритет.