48 lines
5.1 KiB
Markdown
48 lines
5.1 KiB
Markdown
---
|
||
добавлено: 2026-10-13
|
||
---
|
||
# Спецификация. Вики для CRM
|
||
|
||
База знаний для людей и агентов, отдельный сайт, встраивается в CRM через боковую панель. Задача владельца в CRM: «Додати в CRM вікі-сторінки зі структурою папок» (`mv2pby2qbv9vdj`, проект Tvorymo shotam). Как встраивать: [[Встраивание страниц в CRM]].
|
||
|
||
## Стек
|
||
|
||
- Бэкенд на C# (ASP.NET Core): REST API, чтобы к вики было легко обращаться из скиллов и других сервисов.
|
||
- Данные в SQLite, нагрузка небольшая. Файл базы на постоянном томе Coolify, иначе пропадёт при пересборке.
|
||
- Хостинг: наш сервер, Coolify storage, код в `gitea.tes.gd`. Агента (`crm-wiki`) создаёт админ.
|
||
- Домен: `https://wiki-crm.tes.gd`.
|
||
- Картинки хранятся на диске, на том же постоянном томе, что и SQLite. Отдаются только после проверки токена и доступа к workspace страницы.
|
||
|
||
## Авторизация
|
||
|
||
- Токен пользователя CRM приходит через `postMessage` (`crm:ready` → `crm:auth`), как на тестовой странице `https://test-crm.tes.gd`.
|
||
- Токен нужен только для входа: сервер вики проверяет его через Supabase (`GET /auth/v1/user` с publishable-ключом, `exp`, `aud = "authenticated"`). Данные вики в Supabase не хранятся.
|
||
- Агенты получают такой же доступ, как люди. Отдельный скилл для работы с вики сделаем позже, сейчас на агентах не фокусируемся.
|
||
|
||
## Workspace
|
||
|
||
- Сейчас CRM workspace во встроенную страницу не передаёт: в `crm:auth` только `access_token`, `expires_at`, `user { id, email, name }` (проверено по `js/pagebridge.js` 2026-10-13). Выбранный workspace CRM держит в `localStorage`.
|
||
- Нужна доработка протокола от Олега (задача в CRM): поле `workspace: { id, kind, title }` в `crm:auth` и новое сообщение при переключении workspace.
|
||
- Сервер вики id из сообщения не доверяет, а сверяет доступ: `personal:<uid>` только для владельца, `shared` для всех, `custom` проверяется запросом к таблице `workspaces` Supabase с токеном пользователя (RLS).
|
||
- Доступ для акаунтів (CRM, 2026-10): владелец открывает другому акаунту свой личный воркспейс (`access_grants`: `projects` none/selected/all, `level` read/full, `plan`, `shared`). Личную вики открывает `projects = all`, права — `level`; через `shared = all` открываются и спільні воркспейсы владельца с правами `level`. `level = read` — вики только для чтения.
|
||
- У каждой папки и страницы поле `workspace_id`, дерево показывает только текущий workspace.
|
||
|
||
## Первая версия
|
||
|
||
1. Страницы: название и текст в визуальном редакторе как в Notion (заголовки, списки, жирный, ссылки, таблицы, картинки). Хранить текст в Markdown или в JSON редактора с экспортом в Markdown — решает агент, но API должен отдавать Markdown.
|
||
2. Папки с любой вложенностью, дерево сбоку (раскрыть, свернуть), хлебные крошки сверху.
|
||
3. Действия: создать, переименовать, переместить, удалить с подтверждением.
|
||
4. Ссылки между страницами по id: не ломаются при переименовании и переносе.
|
||
5. Поиск по названиям и тексту (SQLite FTS5).
|
||
6. Стили CRM: `tvorymo-ui.css` и `crm.css` ссылками, `body.side-off`.
|
||
7. Защита от одновременной правки: проверка версии страницы при сохранении.
|
||
|
||
## Потом
|
||
|
||
- История изменений и откат версий.
|
||
- Скилл для агентов.
|
||
|
||
## Зависимости
|
||
|
||
- Фильтр по workspace зависит от задачи Олега `mv6p5b92slw1an` (она блокирует задачу вики в CRM). До её выкатки делать всё остальное; workspace брать из сообщения, если поле есть, иначе временно работать в общем workspace (`shared`).
|