ci / build-test (push) Canceled after 0s
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 зелёные.
272 lines
24 KiB
Markdown
272 lines
24 KiB
Markdown
# Дейл (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. Язык интерфейса
|
||
|
||
Интерфейс «Дейла» — на русском. Все тексты (кнопки, подписи, подсказки, пустые состояния, уведомления,
|
||
экраны оператора и страница активации) хранятся в словарях-ресурсах, а не в самих экранах.
|
||
Переключателя языка нет — интерфейс всегда на русском.
|