SaaS-мониторинг Telegram: ядро (модули Cards/Kanban/Pipeline/Tenants/Settings/ Discovery, Api, Infrastructure), сервисы telegram/ai/ml/storage, фронт Vue, контракты и grpc-hosting, деплой-конфиги (dev/prod/observability/CI-раннер), Gitea Actions CI, документация (ТЗ, техдок, api-map, код-стайл, планы, бэклог). Текущее состояние: все этапы роадмапа 0–12 закрыты, сборка 5 sln 0/0, тесты 1340/130/52/38/9 зелёные.
This commit is contained in:
@@ -0,0 +1,271 @@
|
||||
# Дейл (Deal) — Инструкция пользователя
|
||||
|
||||
> Версия: 1.3 (этапы 0–12)
|
||||
> Дата: 2026-09-10
|
||||
> Назначение: как работать с продуктом — от регистрации до ежедневного использования.
|
||||
> Описывает итоговое состояние; dev-особенности помечены отдельно.
|
||||
|
||||
---
|
||||
|
||||
## 1. Регистрация по приглашению
|
||||
|
||||
«Дейл» — сервис с доступом по приглашениям: рабочее пространство (тенант) и пользователей заводит
|
||||
**оператор** (администратор сервиса); самостоятельной регистрации нет.
|
||||
|
||||
1. Оператор создаёт приглашение **на вашу почту** — в новое пространство или в уже существующее.
|
||||
2. Откройте присланную **ссылку приглашения** — откроется страница «Активация приглашения». Введите
|
||||
**email** (обязательно тот же, на который приглашение), имя пространства (необязательно) и
|
||||
**пароль** (минимум 8 символов).
|
||||
3. Нажмите «Активировать аккаунт». Приглашение «на новое пространство» при активации создаёт ваше
|
||||
рабочее пространство — данные изолированы от других клиентов. Приглашение «в существующее» добавляет
|
||||
вас пользователем в него.
|
||||
4. После активации вход — **email + пароль** (система сразу не входит — это отдельный шаг).
|
||||
|
||||
Особенности:
|
||||
- приглашение действует **72 часа**; истекло — оператор пришлёт новое;
|
||||
- email должен быть свободен: «Этот email уже зарегистрирован» → обратитесь к оператору;
|
||||
- пароль — **минимум 8 символов**; код в ссылке можно открыть только целиком (без кода страница
|
||||
сообщит, что ссылка неполная);
|
||||
- **забыли пароль** — самостоятельного восстановления нет, обратитесь к оператору;
|
||||
- вход приостановленного пространства невозможен («Учётная запись приостановлена») — вопросы к оператору.
|
||||
|
||||
> **Dev-окружение** (разработка/показ): регистрация не нужна — bootstrap-пространство `Default` с входом
|
||||
> `admin`/`admin`. Демо-ручки/кнопки (`POST /api/demo/*`, флаг `DEAL_DEMO`) удалены — новые карточки
|
||||
> создаются вручную; в обычной (прод) сборке — штатный контур оператор → инвайт.
|
||||
|
||||
---
|
||||
|
||||
## 2. Вход в систему
|
||||
|
||||
1. Вход — **email + пароль**, созданные при активации приглашения (раздел 1).
|
||||
2. В dev-окружении — `admin`/`admin` (без приглашения).
|
||||
3. Выход/смена пароля завершают текущую сессию.
|
||||
|
||||
> Все данные (каналы, карточки, настройки) принадлежат только вашему пространству и не видны другим
|
||||
> клиентам. Оператор видит только служебное: список пространств и их статусы, аудит входов/выходов и
|
||||
> действий (включая действия пользователей), расход ИИ-бюджета; к содержимому ваших данных и настроек
|
||||
> доступа у оператора нет.
|
||||
|
||||
---
|
||||
|
||||
## 3. Первый запуск: подключение Telegram
|
||||
|
||||
Приложение Telegram работает через **api_id и api_hash**. Их задаёт **оператор сервиса** глобально
|
||||
(раздел «Telegram» в оператор-консоли) — тенант ключи не вводит. Запущенные сервисы (полный стек)
|
||||
поднимает оператор. В dev-окружении без стека раздел показывает неподключённый статус.
|
||||
|
||||
1. Убедитесь, что оператор задал ключи приложения (без них подключение недоступно).
|
||||
2. Перейдите в раздел **«Настройки → Telegram»** и нажмите **«Добавить аккаунт»**.
|
||||
3. Отсканируйте **QR-код** (или введите телефон + код подтверждения).
|
||||
4. Дождитесь статуса «Telegram подключён». Сессия сохраняется — повторный вход не нужен.
|
||||
|
||||
После подключения система загрузит список ваших каналов и групп. Ключи приложения хранятся зашифрованно
|
||||
на стороне сервиса.
|
||||
|
||||
---
|
||||
|
||||
## 4. Каналы и источники
|
||||
|
||||
Раздел **«Каналы»** — список диалогов вашего аккаунта и управление мониторингом.
|
||||
|
||||
- **Включить мониторинг** у нужного канала/группы — система начнёт читать новые сообщения.
|
||||
- **«Перечитать»** — догнать последние ~10 сообщений всех включённых источников (например, после подключения).
|
||||
- **Включить все** — включить мониторинг всех каналов разом.
|
||||
- Новые чаты, которые вы добавили в Telegram, появятся в списке автоматически.
|
||||
Если включена настройка «новый чат → мониторинг», они начнут читаться сами.
|
||||
- Удалённые/покинутые чаты исчезают из списка.
|
||||
- Прочитанные системой сообщения помечаются прочитанными и в вашем Telegram.
|
||||
|
||||
### Поиск новых каналов (Discovery)
|
||||
Во вкладке **«Каналы → Поиск»** можно найти новые источники по вашей теме:
|
||||
|
||||
1. Нажмите **«Новая задача»**, опишите, что ищете (например: «каналы с вакансиями для C#-разработчика»).
|
||||
2. Нажмите **«Сгенерировать ключи»** — ИИ предложит поисковые слова (можно отредактировать).
|
||||
3. Задайте параметры: минимум подписчиков, язык, план вступлений, авто-вступление.
|
||||
4. Запустите задачу. Система найдёт каналы/группы, в которых вы **не состоите**, и оценит их
|
||||
(участники, язык, содержание — «подходит X из N»).
|
||||
5. В списке кандидатов выберите действие:
|
||||
- **«Вступить и мониторить»** — система вступит и начнёт читать;
|
||||
- **«Отклонить»** — источник уйдёт в чёрный список и больше не будет предлагаться.
|
||||
6. Закрытые группы/каналы помечаются — в них система вступить не может, решение за вами.
|
||||
7. **Авто-вступление**: если включено, система вступает сама с паузами и в рамках
|
||||
суточного лимита (настройки квот — в этом же разделе). Общий лимит делится между задачами.
|
||||
|
||||
---
|
||||
|
||||
## 5. Дашборд (карточки)
|
||||
|
||||
**«Дашборд»** — канбан с колонками. Карточка здесь и на экране «Выбранные» — **одна и та же
|
||||
сущность**: сняв её с дашборда «В работу», вы не создаёте копию, а переносите карточку в стадии.
|
||||
|
||||
- **Неразобранное** — сообщения, которые не подошли ни под одну колонку.
|
||||
- **Ваши колонки** — например, «WPF», «Фриланс», «Резюме» — куда система складывает подходящие карточки.
|
||||
- **Архив** и **Корзина** — служебные.
|
||||
|
||||
### Карточка
|
||||
На карточке: тип заявки (вакансия/заказ), время, заголовок, структурированная суть
|
||||
(компания → формат → о задаче → требования → условия), стек, бюджет (в валюте и в пересчёте),
|
||||
контакт и быстрые действия. Свежие карточки — сверху.
|
||||
|
||||
Действия с карточкой:
|
||||
- **«Взять в работу»** — перенести карточку на экран «Выбранные» (в стадию «Запланировано»);
|
||||
это тот же объект, а не копия;
|
||||
- **клик по карточке** — подробный просмотр (справа);
|
||||
- **комментарий** — иконка сообщения;
|
||||
- **в корзину** — иконка корзины;
|
||||
- **перетащить** в другую колонку — система запомнит (ML обучится) и в следующий раз
|
||||
похожие заявки положит туда же;
|
||||
- **контакт** — скопировать или открыть диалог;
|
||||
- **«Открыть исходник»** — перейти к оригинальному сообщению в Telegram.
|
||||
|
||||
В подробном просмотре доступны: полная структура заявки, исходное сообщение (под спойлером),
|
||||
комментарии, история, действия.
|
||||
|
||||
### Колонки
|
||||
- **Создать колонку** — задайте имя, описание и фильтры (ключевые слова, стек, уровень,
|
||||
бюджет, локация и т.д.). Все фильтры опциональны и могут сочетаться.
|
||||
- **Отрицательные фильтры** — что НЕ должно попадать в колонку (например, без английского языка).
|
||||
- ИИ может **предлагать колонки** по вашим карточкам — вы решаете: принять, переименовать или удалить.
|
||||
- В карточке видно, **по каким критериям** она попала в колонку.
|
||||
- Колонки можно сворачивать в виджет-счётчик, двигать, менять ширину, разворачивать на весь экран.
|
||||
|
||||
### Архив и корзина
|
||||
- В **архив** карточки уходят автоматически, если лежат дольше установленного срока
|
||||
(настройка 1–30 дней). Архив очищается через 90 дней.
|
||||
- В **корзину** попадают удалённые карточки; очищается раз в 7 дней.
|
||||
- Из архива/корзины карточку можно **вернуть** на канбан, пока её не очистили.
|
||||
- Полная ручная очистка архива/корзины — кнопка в шапке колонки (безвозвратно).
|
||||
|
||||
---
|
||||
|
||||
## 6. «Выбранные» (работа с заявками)
|
||||
|
||||
Экран **«Выбранные»** — канбан для **тех же карточек**, которые вы взяли в работу (не копии):
|
||||
|
||||
1. Возьмите карточку с дашборда кнопкой **«Взять в работу»** — система перенесёт её в стадию
|
||||
«Запланировано» (или создайте вручную — будет пометка «создано локально»).
|
||||
2. Ведите её по стадиям: *Запланировано → Отклик → Согласование → В работе → Проверка → Готово* (или «Отложено»).
|
||||
3. Перетаскивайте карточки между стадиями; наполняйте модули карточки (сумма, стек, контакты, ссылки,
|
||||
ТЗ, файлы, комментарии).
|
||||
|
||||
В карточке «Выбранных» доступно:
|
||||
- комментарии и **история движения** (статус, дата, время — под спойлером);
|
||||
- изменение суммы, стека, контактов;
|
||||
- прикрепление **ссылок** и **текста ТЗ**;
|
||||
- прикрепление **файлов** (изображения, документы и др. — тип определяется автоматически);
|
||||
на карточке видны значки количества файлов и ссылок.
|
||||
|
||||
Особенности:
|
||||
- карточки «Выбранных» **не попадают** в архив/корзину дашборда; свои состояния — «Отклонено» и «Выполнено»;
|
||||
- **«Отложено»**: при переносе система спросит, через какой срок напомнить и в какое время
|
||||
(можно выбрать дату в календаре). Если напоминания выключены в настройках — окно не появится.
|
||||
|
||||
---
|
||||
|
||||
## 7. Обработка (очередь и отсев)
|
||||
|
||||
Раздел **«Обработка»** — что происходит с сообщениями до карточек.
|
||||
|
||||
- **Очередь** — сырые сообщения, ждущие обработки. Обычно быстро пустеет.
|
||||
- **Отсев** — что система отклонила и **почему**:
|
||||
- «правила» — стоп-фраза (указана), резюме, тип заявки, нет суммы;
|
||||
- «ML» / «ИИ» — модель или ИИ посчитали сообщение спамом/не вашим;
|
||||
- «система» — устарело или повтор (карточка уже есть).
|
||||
- У записи: кнопка **«Открыть исходник»** (в Telegram) и исходное сообщение с форматированием.
|
||||
- **Поиск** по отсеву — полный текст.
|
||||
- **«Вернуть в обработку»**: если система ошиблась — верните сообщение, и оно создаст карточку.
|
||||
Причины отсева для него будут проигнорированы, а система обучится на вашем решении.
|
||||
- Отсев очищается автоматически раз в 3 дня (можно очистить вручную).
|
||||
|
||||
---
|
||||
|
||||
## 8. Настройки
|
||||
|
||||
**Настройки → Telegram:** подключение аккаунта, авто-мониторинг новых чатов.
|
||||
|
||||
**Настройки → ИИ:**
|
||||
- провайдер и модель (можно выбрать один, включая локальные OpenAI-совместимые);
|
||||
- ключ API (хранится зашифрованно);
|
||||
- **промпты**: базовый (не меняется) + свой промпт; библиотека готовых промптов по сферам
|
||||
с поиском и категориями; сохранённые свои промпты («Мои промпты»);
|
||||
- вкл/выкл ИИ и ИИ-фильтр. Если ML уже уверенно обрабатывает поток — система подскажет,
|
||||
что ИИ можно отключить.
|
||||
|
||||
**Настройки → ML:** включение, обучение на ваших действиях, проверка модели на сообщении/канале,
|
||||
сброс обучения, показатели самооценки.
|
||||
|
||||
**Настройки → Обработка:** стоп-фразы, минимальная длина, блокировка резюме, тип заявок,
|
||||
ключевые слова вашей сферы. **Глобальные исключения** — ключевые слова/технологии, локации, тип
|
||||
(вакансия/фриланс/объявление) и диапазон бюджета: такие сообщения отсекаются сразу, ещě до ML и ИИ
|
||||
(токены не расходуются). Отдельно — «не создавать карточку без суммы» (для вакансий и заказов отдельно).
|
||||
|
||||
**Настройки → Валюта и курсы:** валюта отображения, конвертация при получении,
|
||||
пересчёт старых карточек при смене валюты.
|
||||
|
||||
**Настройки → Хранение:** срок до архива (1–30 дней), очистка архива и корзины.
|
||||
|
||||
**Настройки → Уведомления:** общие напоминания и уведомления (в т.ч. об отложенных).
|
||||
|
||||
**Настройки → Внешний вид:** тема оформления — «Тёмная» (по умолчанию), «Светлая» или «Системная».
|
||||
Переключается мгновенно и запоминается.
|
||||
|
||||
---
|
||||
|
||||
## 9. ИИ-бюджет и уведомления
|
||||
|
||||
Обработка сообщений использует ИИ (классификация, ИИ-фильтр, генерация ключевых слов). У каждого
|
||||
пространства — **ИИ-бюджет** (обычно месячный, в токенах), который устанавливает оператор.
|
||||
|
||||
- При расходе **80% бюджета** приходит уведомление «ИИ-бюджет израсходован на 80%».
|
||||
- При **исчерпании** — уведомление «ИИ-бюджет исчерпан — обработка в локальном режиме»: система
|
||||
автоматически переходит на локальную обработку (правила/ML без ИИ); приём и разбор сообщений
|
||||
**не останавливается**, но глубина разбора снижается.
|
||||
- Увеличить бюджет/сменить период может только оператор; после смены предупреждения сбрасываются.
|
||||
- При **приостановке пространства** вход и ИИ-обработка недоступны — обратитесь к оператору.
|
||||
- Системные уведомления (архив/очистки, подключение Telegram, бюджет) приходят значком-колокольчиком
|
||||
в интерфейсе.
|
||||
|
||||
## 10. Советы
|
||||
|
||||
- Начните с подключения аккаунта → включите 2–3 канала → нажмите «Перечитать».
|
||||
- Создайте колонки под ваши типичные заказы и задайте им фильтры.
|
||||
- Переносите карточки руками — система учится и скоро начнёт раскладывать сама.
|
||||
- Заглядывайте в «Отсев»: если там ваши реальные заказы — верните их, система исправится.
|
||||
- Проверяйте вкладку «ИИ»: когда ML станет уверенной, можно отключить ИИ и сэкономить токены.
|
||||
|
||||
---
|
||||
|
||||
## 11. Для оператора сервиса (консоль)
|
||||
|
||||
> Этот раздел — для администратора сервиса «Дейл». Обычным пользователям он не нужен.
|
||||
|
||||
Оператор управляет сервисом из отдельной консоли: она открывается по адресу основного приложения
|
||||
с добавлением **`#/operator`** (например, `https://<адрес-сервиса>/#/operator`). Консоль — отдельный
|
||||
вход со своими учётными данными (логин/пароль выдаёт владелец сервиса).
|
||||
|
||||
Разделы консоли:
|
||||
|
||||
- **Тенанты** — список рабочих пространств с числом пользователей и статусом. Здесь можно создать
|
||||
пространство (при необходимости сразу с владельцем — ему выдаётся одноразовый пароль),
|
||||
**приостановить** и **возобновить** доступ, а также **войти от имени пользователя** пространства
|
||||
(impersonation) — удобно для поддержки; завершается обычным выходом.
|
||||
- **Приглашения** — создание приглашения на email (в новое или существующее пространство), отзыв
|
||||
и копирование **ссылки активации**, которую вы передаёте клиенту.
|
||||
- **Лимиты ИИ** — сводка расхода ИИ-бюджета по пространствам; можно изменить месячный/дневной бюджет
|
||||
и период. После смены предупреждения о расходе сбрасываются.
|
||||
- **Аудит** — лента действий (входы, выходы, приглашения, действия пользователей, изменения по
|
||||
пространствам и лимитам) с фильтрами по типу события, актору, пространству и периоду; есть пагинация.
|
||||
- **Аналитика** — обзор за период (число пространств, расход токенов, входы/выходы/неудачные входы),
|
||||
расход токенов с группировкой по дням/пространствам/провайдерам/моделям и лента действий.
|
||||
- **Состояние системы** — доступность ядра, базы данных и сервисов (Telegram, ИИ, ML).
|
||||
|
||||
> **Dev-окружение:** вход в консоль — `operator`/`operator`. В обычной (прод) сборке учётные
|
||||
> данные оператора задаются владельцем сервиса при развёртывании.
|
||||
|
||||
---
|
||||
|
||||
## 12. Язык интерфейса
|
||||
|
||||
Интерфейс «Дейла» — на русском. Все тексты (кнопки, подписи, подсказки, пустые состояния, уведомления,
|
||||
экраны оператора и страница активации) хранятся в словарях-ресурсах, а не в самих экранах.
|
||||
Переключателя языка нет — интерфейс всегда на русском.
|
||||
Reference in New Issue
Block a user