# Добро пожаловать в GOD CRM GOD CRM -- это гибкая система управления данными, которая позволяет организовать информацию так, как удобно именно вам. Создавайте таблицы, настраивайте представления и автоматизируйте рутинные задачи. ### Ключевые возможности - **Таблицы** -- Храните любые данные в структурированных таблицах с кастомными полями - **Представления** -- Смотрите на данные по-разному: таблица, канбан, календарь, галерея - **Виджеты** -- Создавайте дашборды с визуализацией данных из разных таблиц - **Автоматизации** -- Автоматизируйте действия при изменении данных ## Быстрый старт 1. **Создайте пространство** -- Пространство -- это контейнер для ваших проектов и таблиц. Например: "Работа", "Личное", "Стартап". 2. **Добавьте таблицу** -- Таблица хранит ваши данные. Каждая запись -- это строка с набором полей (колонок). 3. **Настройте представление** -- Выберите как отображать данные: таблица для детального просмотра, канбан для задач, календарь для событий. 4. **Добавьте виджеты на дашборд** -- Выведите ключевые метрики и данные на дашборд пространства. --- # Пространства Пространства -- это верхний уровень организации в GOD CRM. Используйте их для разделения разных областей работы или жизни. ## Что такое пространство? - **Проекты** -- пространство содержит проекты, каждый со своим набором таблиц и настроек - **Дашборд** -- у каждого пространства есть дашборд с виджетами для быстрого обзора - **Кастомизация** -- название, иконка и цвет для быстрой визуальной идентификации ## Примеры использования ### Работа - CRM клиентов - Трекер задач - База знаний ### Личное - Финансы - Привычки - Цели на год ### Стартап - Roadmap - Инвесторы - Метрики ### Обучение - Курсы - Книги - Заметки --- # Таблицы Таблицы -- основа GOD CRM. Каждая запись в таблице -- это объект с набором свойств, которые вы определяете сами. ## Создание таблицы 1. Перейдите в проект и нажмите `+ Создать таблицу` 2. Укажите название, иконку и описание таблицы 3. Добавьте колонки (поля) -- они определяют структуру данных 4. Начните добавлять записи через кнопку `+ Добавить` ## Операции с записями - **Добавить** -- Создайте новую запись в таблице - **Редактировать** -- Двойной клик открывает карточку записи - **Импорт** -- Загрузите данные из CSV файла - **Экспорт** -- Выгрузите данные в CSV или Excel ## Выделение и массовые операции ### Построчное выделение - Чекбокс слева от каждой строки для выделения - Чекбокс в заголовке -- выделить/снять все видимые строки - Выделенные строки подсвечиваются цветом - Горячие клавиши: Shift+Click для диапазона, Ctrl+A для всех ### Контейнер выделенных Badge справа от кнопки "Фильтры" показывает количество выделенных строк. Клик открывает меню с действиями: - По умолчанию -- без сортировки - Выделенные сверху -- показать выделенные первыми - Выделенные снизу -- показать выделенные последними - Снять выделение -- очистить все - Выбрать все отфильтрованные -- выделить результаты фильтров ### Массовая замена (Find & Replace) Кнопка "Замена" справа от контейнера открывает модалку для массового изменения данных. **Применить к:** - Выделенным строкам -- только отмеченные чекбоксами - Отфильтрованным строкам -- результаты текущих фильтров - Всем строкам -- вся таблица без ограничений **Типы операций:** - `Заменить значение` -- Draft -> Active - `Добавить (prefix/suffix)` -- Hello -> Hello World - `Очистить значение` -- Text -> (пусто) - `Применить формулу` -- {name} - {code} **Дополнительно:** - Поддержка регулярных выражений (regex) - Учет регистра (case sensitive) - Предпросмотр изменений перед применением - Отображение количества затронутых строк Пример: найти "Draft" и заменить на "Active" в колонке Status для 5 выделенных строк. --- # Представления Одни и те же данные можно отображать по-разному. Представления позволяют выбрать наиболее удобный формат для текущей задачи. ## Типы представлений ### Таблица Классический табличный вид со всеми колонками. Идеален для детального просмотра и редактирования данных. Применение: CRM с контактами, Инвентарь, База данных ### Канбан Карточки, сгруппированные по колонкам статуса. Перетаскивайте карточки между колонками. Применение: Трекер задач, Процесс продаж, Найм сотрудников ### Календарь Записи отображаются на календаре по датам. Поддерживает события с длительностью. Применение: Встречи, Дедлайны, Контент-план ### Таймлайн Gantt-диаграмма с датами начала и окончания. Видна длительность и пересечения. Применение: Проекты, Roadmap, Планирование ### Галерея Карточки с превью изображений. Отлично для визуального контента. Применение: Портфолио, Каталог товаров, Мудборды ### Чек-лист Список задач с чекбоксами. Отмечайте выполненное, следите за прогрессом. Применение: To-do листы, Чек-листы, Привычки ### График Визуализация данных в виде графиков: столбчатые, линейные, круговые. Применение: Аналитика, Отчеты, Метрики --- # Типы колонок Колонки определяют какие данные можно хранить в таблице. Выбирайте правильный тип для валидации и удобного редактирования. ## Доступные типы ### `text` -- Текст Любой текст, заметки, описания. **Возможности:** - Шаблон отображения с переменными: {{name}} ({{code}}) - Префикс и суффикс для форматирования - Поддержка формул в значении по умолчанию - Перенос текста: одна строка, авто-перенос, ограниченный **Настройки:** - `formula` -- Шаблон с переменными из других колонок - `prefix` -- Текст перед значением - `suffix` -- Текст после значения - `defaultValue` -- Значение по умолчанию для новых строк Пример: Шаблон: {{first_name}} {{last_name}} -> Иван Иванов ### `number` -- Число Числа, суммы, количество. **Возможности:** - Форматы: обычное число, валюта, процент (%) - Минимальное и максимальное значение - Шаг для кнопок +/- в ячейке - Количество знаков после запятой **Настройки:** - `format` -- number | currency | percent - `min / max` -- Ограничения значений - `step` -- Шаг изменения (по умолчанию 1) - `decimals` -- Знаков после запятой (0-10) Пример: Формат: currency, decimals: 2 -> 1 234,50 руб. ### `select` -- Выбор (Select) Одно значение из списка опций с цветами. **Возможности:** - Список опций с цветовой кодировкой - Импорт опций из CSV или другой таблицы - Автоматический сбор опций из существующих данных - Поддержка relation для подгрузки из связанной таблицы **Настройки:** - `options` -- Массив { id, label, color } - `relation.tableId` -- Таблица-источник опций - `relation.valueColumn` -- Колонка со значениями - `relation.labelColumn` -- Колонка с лейблами Пример: Статус: Новый | В работе | Готово ### `multi-select` -- Мульти-выбор (Multi-Select) Несколько значений из списка (теги, категории). **Возможности:** - Выбор нескольких значений из списка - Режим relation -- подгрузка опций из связанной таблицы - 4 формата отображения: badges, list, count, first - 4 формата хранения: json, comma, semicolon, newline **Настройки:** - `relation.tableId` -- Таблица с опциями - `relation.valueColumn` -- Колонка со значениями (id) - `relation.labelColumn` -- Колонка с лейблами - `relation.colorColumn` -- Колонка с цветами (опционально) - `relation.displayMode` -- badges | list | count | first - `relation.storageFormat` -- json | comma | semicolon | newline Пример: Теги: [React] [TypeScript] [Node.js] или "3 тега" ### `datetime` -- Дата и время Конкретная дата и время. **Возможности:** - 3 формата хранения: ISO 8601, Unix (сек), Unix (мс) - Выбор часового пояса: UTC или браузерный - 11 форматов отображения - Поддержка NOW() для текущей даты **Настройки:** - `storageFormat` -- ISO8601 | unix | unix_ms - `timezone` -- UTC | browser - `displayFormat` -- 25.12.2024 10:30, 25 декабря 2024, и др. Пример: Хранение: 2024-12-25T10:30:00Z -> Показ: 25 декабря 2024, 13:30 ### `time` -- Время (Cron) Расписание для cron-задач (HH:MM, день месяца). **Возможности:** - Ввод времени в формате HH:MM - Выбор дня месяца для периодических задач - Интеграция с автоматизациями - Визуальный редактор расписания **Настройки:** - `format` -- HH:MM | cron expression - `dayOfMonth` -- День месяца (1-31) - `repeatType` -- daily | weekly | monthly Пример: 09:00 каждый день или 15:30 каждое 1-е число месяца ### `checkbox` -- Чекбокс Да/Нет, включено/выключено. **Возможности:** - Настраиваемые значения для Да/Нет - 3 стиля: галочка, переключатель, да/нет - Значение по умолчанию **Настройки:** - `trueValue` -- Значение для "Да" (1, true, yes...) - `falseValue` -- Значение для "Нет" (0, false, no...) - `style` -- checkbox | toggle | yesno Пример: Стиль toggle: ВКЛ / ВЫКЛ ### `url` -- URL (ссылка) Ссылки на сайты и ресурсы. **Возможности:** - Шаблон URL с переменными из других колонок - Настраиваемый текст ссылки - Открытие в новой вкладке - Превью ссылки **Настройки:** - `template` -- Шаблон: https://site.com/{{id}} - `linkText` -- Текст вместо URL Пример: Шаблон: https://shop.com/products/{{slug}} -> Открыть товар ### `email` -- Email Электронная почта. **Возможности:** - 4 формата отображения - Кнопка "Написать письмо" - Копирование по клику - Маскирование для конфиденциальности **Настройки:** - `displayFormat` -- full | link | masked | domain Пример: Masked: u***@e***.com, Domain: @example.com ### `phone` -- Телефон Номера телефонов. **Возможности:** - 4 формата отображения - Автоформатирование по стране - Кнопки: позвонить, WhatsApp, Telegram - Маскирование для конфиденциальности **Настройки:** - `format` -- full | national | international | masked - `country` -- ru | us | uk | de Пример: +79001234567 -> 8 (900) 123-45-67 (RU) или +7 *** ***-**-67 ### `file` -- Файл Загрузка файлов. **Возможности:** - Загрузка одного или нескольких файлов - Формула для вычисляемого пути - Префикс (домен) и суффикс (параметры) - Форматы: полный URL, имя файла, путь **Настройки:** - `formula` -- Шаблон: {{folder}}/{{filename}} - `prefix` -- Например: https://cdn.site.com/ - `suffix` -- Например: ?v=2 Пример: prefix + formula -> https://cdn.site.com/docs/report.pdf ### `image` -- Изображение Загрузка и отображение изображений. **Возможности:** - 4 режима галереи: стек, карусель, сетка, одно фото - Настраиваемая высота (32-200px) - Форма: квадрат, скругленный, круг - Лайтбокс при клике **Настройки:** - `galleryMode` -- stack | carousel | grid | single - `height` -- Высота в пикселях (32-200) - `shape` -- square | rounded | circle - `fit` -- cover | contain | fill Пример: Режим stack: [фото][фото][фото] +3 фото ### `person` -- Пользователь Ссылка на пользователя системы. **Возможности:** - 3 источника: системные пользователи, из таблицы, ручной ввод - 5 форматов отображения - Аватар и имя **Настройки:** - `source` -- system | table | manual - `displayFormat` -- name | avatar | avatar_name | email | card Пример: Иван Иванов или ivan@company.com ### `relation` -- Связь (Relation) Ссылка на запись из другой таблицы. **Возможности:** - Выбор связанной таблицы - Настраиваемая колонка для отображения - Переход к связанной записи по клику - Множественная связь (многие-ко-многим) **Настройки:** - `linkedTableId` -- ID связанной таблицы - `displayColumn` -- Колонка для отображения Пример: Клиент: -> Иванов Иван (клик открывает карточку) ### `table` -- Встроенная таблица Отображает записи из другой таблицы, отфильтрованные по текущей строке. **Возможности:** - Показывает связанные записи прямо в ячейке - Фильтрация по ключу текущей строки - Выбор колонок для отображения - Пагинация при большом количестве **Настройки:** - `sourceTableId` -- Таблица-источник - `filterColumn` -- Колонка для фильтрации - `displayColumns` -- Колонки для отображения Пример: Товар -> [Подтовары: Размер S | Размер M | Размер L] ### `rollup` -- Сводка (Rollup) Агрегация данных из связанной таблицы. **Возможности:** - 10 функций агрегации - 4 формата вывода: число, валюта, процент, компактный - Автоматический пересчет при изменении данных **Настройки:** - `function` -- sum | count | avg | min | max | percent | range | countAll | countValues | countUnique - `format` -- number | currency | percent | compact Пример: Сумма заказов: 125 400 руб. или Кол-во: 47 шт. ### `vector` -- Вектор (AI поиск) Векторные эмбеддинги для семантического поиска. **Возможности:** - AI-эмбеддинги для поиска по смыслу - Формула для составления текста - Интеграция с OpenAI text-embedding-ada-002 - Хранение в PostgreSQL + pgvector **Настройки:** - `formula` -- Шаблон: {{title}} {{description}} - `prefix` -- Контекст перед текстом - `suffix` -- Контекст после текста Пример: Запрос: "синие джинсы" -> Найдено: "Брюки деним navy" (95%) ### `button` -- Кнопка Кнопка для действий. **Возможности:** - 3 типа действий: открыть URL, webhook, автоматизация - Поддержка переменных в URL - 3 стиля: primary, secondary, danger **Настройки:** - `action` -- url | webhook | automation - `url` -- URL с переменными: /edit/{{id}} - `style` -- primary | secondary | danger Пример: [Редактировать] -> /admin/edit/{{id}} ### `audio` -- Аудио Аудио плеер для воспроизведения звуков. **Возможности:** - Встроенный аудио плеер в ячейке - Поддержка URL на аудио файлы - Формула для вычисления пути - Префикс (домен CDN) **Настройки:** - `formula` -- Шаблон: audio/{{filename}}.mp3 - `prefix` -- URL CDN: https://cdn.site.com/ Пример: [0:00 / 3:45] -> воспроизведение из CDN ### `password` -- Пароль Зашифрованный текст. **Возможности:** - Скрытое отображение: -------- - Безопасное хранение - Кнопка показать/скрыть - Копирование в буфер **Настройки:** - `showButton` -- Показывать кнопку "глазик" Пример: Поле ввода: [--------] ### `formula` -- Формула Вычисляемое поле. **Возможности:** - JavaScript выражения - Доступ к данным других колонок - Автопересчет при изменении - Форматирование результата **Настройки:** - `expression` -- JS выражение: price * qty - `format` -- number | currency | percent Пример: Итого: price * qty * (1 - discount/100) -> 8 500 руб. ### `dialog` -- AI Диалог AI диалог / переписка. **Возможности:** - История переписки с AI - Контекст из текущей строки - Интеграция с AI агентами - Сохранение диалога в строке **Настройки:** - `agentId` -- ID AI агента для диалога - `contextColumns` -- Колонки для контекста Пример: Диалог с AI по карточке клиента ### `chat` -- AI Чат AI чат-разговор. **Возможности:** - Полноценный чат с AI - История сообщений - Стриминг ответов - Поддержка разных моделей **Настройки:** - `model` -- Модель: gpt-4, claude-3, etc. - `systemPrompt` -- Системный промпт Пример: Чат с ИИ-ассистентом в ячейке ## Векторная колонка (AI поиск) ### Что такое векторная колонка? Векторная колонка автоматически создает AI-эмбеддинги (векторные представления) из текстовых данных, что позволяет искать записи по смыслу, а не по точному совпадению слов. **Применение:** - Поиск похожих товаров - Семантический поиск документов - Рекомендации контента - Дублирование записей **Технология:** - OpenAI text-embedding-ada-002 - Хранение в PostgreSQL + pgvector - Косинусное сходство для поиска - Автоматическая векторизация ### Настройки векторной колонки **`formula`** (необязательно) -- Формула для создания текста, который будет векторизован. Поддерживает переменные из других колонок. ``` {{title}} {{articul}} {{description}} Категория: {{category_id}} Бренд: {{brand_id}} ``` **`prefix`** (необязательно) -- Текст, добавляемый перед формулой. Используется для контекста. Например: "Товар: " **`suffix`** (необязательно) -- Текст, добавляемый после формулы. Например: " (в наличии)" ### Пример: Поиск товаров Пользователь ищет "синие джинсы мужские". Система найдет товары с похожим смыслом, даже если слова отличаются: "Брюки деним navy для мужчин". Запрос: `синие джинсы мужские` -> Результат: `Брюки деним navy (95% сходство)` ## Действия с колонками ### Создание колонки 1. Клик по кнопке `+ Добавить колонку` в заголовке таблицы 2. Выберите тип колонки из списка (text, number, select и т.д.) 3. Укажите название и системное имя (автоматически генерируется из названия) 4. Настройте параметры в зависимости от типа 5. Нажмите `Сохранить` ### Редактирование Клик по иконке шестеренки в заголовке колонки или правая кнопка мыши -> Настройки ### Удаление Настройки колонки -> внизу кнопка "Удалить колонку". Данные будут потеряны! ### Перемещение Перетащите заголовок колонки влево/вправо для изменения порядка отображения ### Скрытие/Показ Правая кнопка на заголовке -> Скрыть колонку. Восстановить через меню "Скрытые колонки" ### Дублирование Настройки колонки -> Дублировать. Создает копию со всеми настройками ### Изменение ширины Перетащите границу между заголовками колонок или укажите точное значение в пикселях ## Настройки отображения ### Ширина колонки Размер в пикселях (80-800px). Значения: Авто, 150px (по умолчанию), 200px, 300px... ### Выравнивание текста Горизонтальное выравнивание содержимого: Слева, По центру, Справа ### Перенос текста Поведение при переполнении ячейки: - **nowrap** -- Одна строка с обрезкой ... - **wrap** -- Автоматический перенос, высота по содержимому - **ellipsis** -- Ограниченный перенос (2-3 строки) + ... ### Типографика Размер шрифта (10-24px), **жирный**, *курсив*, `моноширинный` ### Цвета Цвет текста и цвет фона ячейки ## Формулы и переменные ### Что такое формулы? Формулы позволяют автоматически вычислять значения на основе других колонок. Используйте переменные в фигурных скобках `{{column_name}}` для подстановки значений. Пример: ``` {{first_name}} {{last_name}} ({{email}}) ``` Результат: Иван Петров (ivan@example.com) ### Синтаксис переменных **`{{column_name}}`** -- Базовая подстановка значения из колонки ``` {{title}} - {{price}} руб. ``` **`{{value}}`** -- Текущее значение ячейки (для формул типа файл, вектор) ``` Префикс: https://cdn.example.com/ Формула: {{folder}}/{{value}} Результат: https://cdn.example.com/images/photo.jpg ``` **`NOW()`** -- Специальная функция для текущей даты и времени ``` Значение по умолчанию: NOW() Результат: 2025-12-13T23:45:00 ``` ### Где можно использовать формулы - **Текстовые колонки** -- Шаблон отображения, префикс, суффикс - **Файлы и изображения** -- Формула пути, префикс URL - **URL колонки** -- Шаблон ссылки, текст ссылки - **Векторные колонки** -- Формула векторизации текста - **Кнопки** -- URL для перехода, webhook endpoint - **Значения по умолчанию** -- Для любого типа колонки ### Практические примеры формул - **Полное имя:** `{{first_name}} {{middle_name}} {{last_name}}` - **URL товара:** `https://shop.com/products/{{id}}/{{slug}}` - **Путь к файлу:** `{{year}}/{{month}}/{{category}}/{{filename}}` - **Описание для поиска:** `{{brand}} {{model}} {{color}} {{size}}` ### Важные замечания - Если колонка не существует, `{{unknown}}` будет выделена красным - Существующие колонки подсвечиваются `{{name}}` зеленым - Формулы пересчитываются автоматически при изменении исходных данных - В формулах учитывается регистр: `{{Name}}` != `{{name}}` ## Настройки колонок - **Название** -- Отображаемое имя колонки - **Тип** -- Определяет формат данных - **Обязательность** -- Требовать заполнение - **Значение по умолчанию** -- Автоматически подставляется - **Ширина** -- Размер колонки в таблице - **Видимость** -- Скрыть/показать колонку --- # Фильтры и поиск Фильтры помогают найти нужные записи в большом объеме данных. Комбинируйте условия для точного результата. ## Поиск Быстрый поиск по всем текстовым полям: - Введите текст в поле поиска -- результаты обновятся мгновенно - Поиск работает по названию и текстовым колонкам - Можно выбрать конкретные колонки для поиска ## Типы фильтров ### Фильтр по выбору Показать записи с определенными значениями в колонке типа Select/Multiselect. Пример: `Статус = 'В работе' ИЛИ 'На проверке'` ### Фильтр по дате Показать записи в определенном диапазоне дат. Пример: `Дедлайн: с 1 декабря по 31 декабря` ### Комбинированные фильтры Несколько фильтров применяются одновременно (условие И). Пример: `Статус = 'В работе' И Исполнитель = 'Иван'` ## Сортировка Упорядочивание записей: - Клик по заголовку колонки -- сортировка по возрастанию - Повторный клик -- сортировка по убыванию - Работает для текста, чисел и дат --- # Виджеты и дашборды Виджеты позволяют вынести данные из таблиц на дашборд в удобном формате. Создавайте обзорные панели для быстрого мониторинга. ## Создание виджета 1. Перейдите на дашборд пространства и нажмите `+ Добавить виджет` 2. Выберите тип представления (канбан, календарь, график и т.д.) 3. Укажите таблицу-источник данных 4. Настройте маппинг полей и фильтры в настройках виджета ## Типы виджетов - Таблица - Канбан - Календарь - Таймлайн - График - Чек-лист ## Управление дашбордом - **Изменение размера** -- перетащите угол виджета - **Перемещение** -- перетащите виджет за заголовок - **Настройки** -- нажмите шестеренку в углу виджета - **Удаление** -- через меню настроек виджета --- # Автоматизации Автоматизируйте рутинные действия. Когда происходит определенное событие -- система выполняет заданные действия автоматически. ## Триггеры (когда запускать) - **Создание записи** -- Когда в таблицу добавляется новая запись - **Обновление записи** -- Когда изменяется любое поле записи - **Изменение поля** -- Когда изменяется конкретное поле (например, статус) - **Удаление записи** -- Когда запись удаляется из таблицы ## Действия (что делать) - **Отправить уведомление** -- Email или push-уведомление пользователю - **Обновить запись** -- Автоматически изменить поля записи - **Создать запись** -- Добавить новую запись в эту или другую таблицу - **Вызвать Webhook** -- Отправить HTTP-запрос на внешний сервис ## Примеры автоматизаций - **КОГДА** Статус задачи -> 'Готово' **ТОГДА** Отправить уведомление автору задачи - **КОГДА** Создана новая заявка **ТОГДА** Назначить ответственного менеджера - **КОГДА** Дедлайн через 1 день **ТОГДА** Напомнить исполнителю ## Webhooks Интеграция с внешними сервисами. Webhooks позволяют отправлять данные из CRM во внешние системы при определенных событиях. - Интеграция с Telegram ботами - Синхронизация с внешними CRM - Отправка данных в аналитические системы - Запуск процессов в n8n, Zapier, Make --- # REST API GOD CRM предоставляет полнофункциональный REST API для интеграции с внешними системами. Все эндпоинты возвращают JSON и требуют аутентификации. ## Аутентификация API поддерживает два способа аутентификации: JWT токены и API ключи. ### API Ключи (рекомендуется для интеграций) Создайте API ключ в Настройках -> API Ключи. Ключ начинается с `sk-` Использование через заголовок X-API-Key: ``` X-API-Key: sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` Или через Authorization: ``` Authorization: Bearer sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ``` ### JWT Токены (для веб-приложений) Получите токен через `POST /api/v3/auth/login` ``` Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... ``` ### Базовый URL ``` https://crm.hltrn.cc/api/v3 ``` ## Управление API ключами **GET** `/api-keys` -- Получить список ваших API ключей **POST** `/api-keys` -- Создать новый API ключ Request Body: ```json { "name": "string", "scopes": ["*"], "expires_in_days": "number" } ``` **DELETE** `/api-keys/:id` -- Удалить (отозвать) API ключ ### Доступные права (scopes) - `*` -- полный доступ - `tables:read` - `tables:write` - `rows:read` - `rows:write` - `widgets:read` - `widgets:write` ## Таблицы API **GET** `/tables` -- Получить список всех таблиц **POST** `/tables` -- Создать новую таблицу Request Body: ```json { "name": "string", "space_id": "number", "emoji": "string" } ``` **GET** `/tables/:id` -- Получить информацию о таблице **PATCH** `/tables/:id` -- Обновить таблицу Request Body: ```json { "name": "string", "emoji": "string" } ``` **DELETE** `/tables/:id` -- Удалить таблицу ## Колонки API **GET** `/tables/:tableId/columns` -- Получить колонки таблицы **POST** `/tables/:tableId/columns` -- Создать колонку Request Body: ```json { "name": "string", "type": "text|number|select|datetime|...", "options": "object" } ``` **PATCH** `/columns/:id` -- Обновить колонку **DELETE** `/columns/:id` -- Удалить колонку ### Типы колонок text, number, select, multi_select, datetime, time, checkbox, url, email, phone, rating, file, image, relation, lookup, formula, rollup, json, vector ## Записи API **GET** `/tables/:tableId/rows` -- Получить записи таблицы Query: `?limit=50&offset=0&sort=column_id&order=asc` **POST** `/tables/:tableId/rows` -- Создать запись Request Body: ```json { "values": { "column_id": "value" } } ``` **GET** `/rows/:id` -- Получить запись по ID **PATCH** `/rows/:id` -- Обновить запись Request Body: ```json { "values": { "column_id": "new_value" } } ``` **DELETE** `/rows/:id` -- Удалить запись **POST** `/tables/:tableId/rows/batch` -- Массовое создание записей Request Body: ```json { "rows": [ { "values": {} }, { "values": {} } ] } ``` ## Представления API **GET** `/tables/:tableId/views` -- Получить представления таблицы **POST** `/tables/:tableId/views` -- Создать представление Request Body: ```json { "name": "string", "type": "table|kanban|calendar|gallery", "config": "object" } ``` **PATCH** `/views/:id` -- Обновить представление **DELETE** `/views/:id` -- Удалить представление ## Виджеты API **GET** `/dashboards/:dashboardId/widgets` -- Получить виджеты дашборда **POST** `/dashboards/:dashboardId/widgets` -- Создать виджет Request Body: ```json { "type": "chart|stat|kanban|calendar|...", "config": "object", "position": { "x": 0, "y": 0, "w": 2, "h": 2 } } ``` **PATCH** `/widgets/:id` -- Обновить виджет **DELETE** `/widgets/:id` -- Удалить виджет ### Типы виджетов - chart -- графики - stat -- статистика - kanban -- канбан-доска - calendar -- календарь - task_list -- список задач - table -- мини-таблица ## Вебхуки API **GET** `/tables/:tableId/webhooks` -- Получить вебхуки таблицы **POST** `/tables/:tableId/webhooks` -- Создать вебхук Request Body: ```json { "url": "string", "events": ["row.created", "row.updated", "row.deleted"], "secret": "string" } ``` **DELETE** `/webhooks/:id` -- Удалить вебхук ### События вебхуков - `row.created` -- создание записи - `row.updated` -- обновление записи - `row.deleted` -- удаление записи ## Внешние источники API **GET** `/data-sources` -- Получить список источников данных **POST** `/data-sources` -- Создать внешний источник Request Body: ```json { "name": "string", "type": "postgres|mysql|api", "connection": "object" } ``` **POST** `/data-sources/:id/sync` -- Синхронизировать данные **DELETE** `/data-sources/:id` -- Удалить источник ## Vector API (Семантический поиск) ### Что это? Vector API позволяет создавать векторные эмбеддинги текста и искать похожие записи по смыслу, а не по точному совпадению слов. Использует OpenAI embeddings и PostgreSQL с расширением pgvector. | Параметр | Значение | |----------|----------| | Модель | text-embedding-ada-002 | | Размерность | 1536 dimensions | | Сходство | Cosine similarity | **POST** `/api/v3/ai/vector/embed` -- Создать и сохранить эмбеддинг для текста Request Body: ```json { "workspaceId": "number", "tableId": "number", "rowId": "number", "text": "string", "metadata": "object" } ``` Пример запроса /embed: ```json { "workspaceId": 1, "tableId": 5, "rowId": 123, "text": "Смартфон Apple iPhone 15 Pro 256GB Blue Titanium", "metadata": { "category": "electronics", "price": 99999 } } ``` **POST** `/api/v3/ai/vector/search` -- Поиск похожих записей по тексту запроса Request Body: ```json { "workspaceId": "number", "queryText": "string", "tableId": "number", "limit": "number (default: 10)", "metadataFilters": "object" } ``` Пример запроса /search: ```json { "workspaceId": 1, "queryText": "телефон айфон синий", "tableId": 5, "limit": 5, "metadataFilters": { "category": "electronics" } } ``` Пример ответа: ```json { "success": true, "results": [ { "rowId": 123, "similarity": 0.94, "metadata": { "category": "electronics", "text_content": "Смартфон Apple iPhone 15 Pro 256GB Blue Titanium" } }, { "rowId": 124, "similarity": 0.89, "metadata": { "text_content": "iPhone 15 Blue 128GB" } } ], "count": 2 } ``` **POST** `/api/v3/ai/vector/batch` -- Массовое создание эмбеддингов Request Body: ```json { "workspaceId": "number", "items": [ { "tableId": "number", "rowId": "number", "text": "string", "metadata": "object" } ] } ``` **POST** `/api/v3/ai/vector/generate-cell` -- Создать эмбеддинг для векторной колонки с учетом формулы Request Body: ```json { "tableId": "number", "rowId": "number", "columnId": "number" } ``` ### Как работает /generate-cell Этот эндпоинт читает настройки векторной колонки (formula, prefix, suffix), подставляет значения из других колонок строки, формирует итоговый текст и создает эмбеддинг. 1. Формула колонки: Префикс: "Товар: " + Formula: {{title}} {{category}} + Суффикс: " в наличии" 2. Данные строки: title: "iPhone 15", category: "Смартфоны" 3. Итоговый текст: "Товар: iPhone 15 Смартфоны в наличии" 4. Создание эмбеддинга через OpenAI API **GET** `/api/v3/ai/vector/stats/:workspaceId` -- Получить статистику по эмбеддингам ### Требования - **OPENAI_API_KEY** -- API ключ OpenAI в переменных окружения - **PostgreSQL + pgvector** -- база данных с расширением для векторов - **База business_crm_vectors** -- отдельная БД для хранения эмбеддингов ## Примеры использования ### Создание записи (cURL) ```bash curl -X POST https://crm.hltrn.cc/api/tables/1/rows \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "values": { "name": "Новый клиент", "email": "client@example.com", "status": "new" } }' ``` ### JavaScript/Fetch ```javascript const response = await fetch('/api/tables/1/rows', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ values: { name: 'Новый клиент', email: 'client@example.com', } }) }); const newRow = await response.json(); console.log('Created row:', newRow.id); ``` ## Обработка ошибок API возвращает стандартные HTTP коды и JSON с описанием ошибки: | Код | Описание | |-----|----------| | `200` | OK -- успешно | | `201` | Created -- создано | | `400` | Bad Request -- ошибка запроса | | `401` | Unauthorized -- не авторизован | | `404` | Not Found -- не найдено | | `500` | Server Error -- ошибка сервера | Формат ошибки: ```json { "error": true, "message": "Table not found", "code": "TABLE_NOT_FOUND" } ``` --- # AI Агенты Интеллектуальные помощники, которые понимают ваши данные и помогают работать с ними. Агенты могут отвечать на вопросы, анализировать данные и выполнять задачи. ## Что такое AI Агенты? AI Агенты -- это настраиваемые AI-помощники на базе GPT-4, Claude или других моделей. Каждый агент имеет свою роль, знания и инструменты. - **Персонализация** -- Настройте системный промпт, модель и инструменты под свои задачи - **Контекст данных** -- Агент понимает структуру ваших таблиц и может работать с данными - **Множество провайдеров** -- OpenAI, Anthropic, Google, Ollama -- выбирайте подходящую модель - **Мониторинг** -- Отслеживание использования токенов, стоимости и качества ответов ## Быстрый старт 1. **Создайте пространство "AI Agents"** -- Или используйте существующее. В пространстве должны быть таблицы: Agents, Models, Providers, API Keys. 2. **Добавьте API ключ провайдера** -- В таблицу API Keys добавьте ключ от OpenAI, Anthropic или другого провайдера. 3. **Создайте агента** -- В таблице Agents создайте запись с именем, описанием, системным промптом и выбором модели. 4. **Начните диалог** -- Нажмите на иконку чата в правом нижнем углу и выберите агента. ## Настройка агента - `name` -- Имя агента для отображения в списке - `description` -- Краткое описание назначения агента - `system_prompt` -- Системный промпт, определяющий поведение и роль агента - `model` -- Связь с таблицей Models -- выбор AI модели - `provider_id` -- Связь с таблицей Providers -- выбор провайдера API - `api_key_id` -- Связь с таблицей API Keys -- ключ для авторизации - `tools` -- JSON массив доступных инструментов агента - `is_active` -- Checkbox -- активен ли агент для использования ## AI агенты и векторный поиск ### Семантический поиск данных AI агенты могут использовать векторный поиск для интеллектуального анализа данных. Вместо точного совпадения слов, агент понимает смысл запроса и находит релевантные записи. ### Пример 1: Поиск похожих товаров **Вопрос:** "Найди товары похожие на iPhone 15" **Агент:** Использует Vector API для поиска товаров с похожими характеристиками: смартфоны премиум-класса, большой экран, хорошая камера -> находит Samsung S24 Ultra, Google Pixel 8 Pro ### Пример 2: Поиск документов по смыслу **Вопрос:** "Где информация про работу с клиентами?" **Агент:** Ищет документы семантически связанные с CRM, клиентским сервисом, продажами -> находит "CRM Руководство", "Обработка заявок", "Скрипты продаж" ### Пример 3: Рекомендации **Вопрос:** "Что еще может понравиться клиенту, который купил ноутбук для дизайна?" **Агент:** Анализирует покупку через векторный поиск -> рекомендует графический планшет, внешний монитор 4K, мышь для дизайнеров, подписку Adobe Creative Cloud ### Как включить векторный поиск для агента 1. Создайте векторную колонку в нужной таблице 2. Настройте формулу векторизации (какие поля включать) 3. Добавьте инструмент `vector_search` агенту 4. В системном промпте укажите, когда использовать векторный поиск ## Поддерживаемые провайдеры - **OpenAI** -- GPT-4, GPT-4 Turbo, GPT-3.5 - **Anthropic** -- Claude 3.5, Claude 3 Opus - **Google** -- Gemini 1.5 Pro, Gemini Flash - **Ollama** -- Llama 3.2, Mistral, CodeLlama ## Логи сообщений Все взаимодействия с агентами автоматически логируются в таблицу "Message Logs": - agent_name - user_id - model - message - response - tokens_in/out - status - timestamp ## Советы - **Системный промпт** -- Четко определите роль агента. Например: "Ты аналитик продаж. Отвечай кратко и по делу." - **Выбор модели** -- GPT-4 Turbo для сложных задач, GPT-3.5 для простых -- экономьте токены разумно. - **Переменные в промптах** -- Используйте шаблоны вида {{table.column}} для динамической подстановки данных из таблиц. --- # AI Agents API API для работы с AI-агентами, провайдерами и моделями. Позволяет управлять искусственным интеллектом в вашем рабочем пространстве. ## Обзор возможностей - **AI Агенты** -- Создание и управление интеллектуальными помощниками - **Чат с агентами** -- Отправка сообщений и получение ответов от AI - **Провайдеры** -- OpenAI, Anthropic, Google, Ollama - **Модели** -- GPT-4, Claude, Gemini и другие ## Базовый URL ``` https://crm.hltrn.cc/api/v3/ai ``` ## Агенты **GET** `/ai/agents` -- Получить список всех агентов **GET** `/ai/agents/:spaceId` -- Получить агентов для конкретного пространства **POST** `/ai/agents` -- Создать нового агента Request Body: ```json { "name": "string", "description": "string", "model": "gpt-4-turbo", "provider": "openai", "system_prompt": "string", "tools": ["string"] } ``` **PATCH** `/ai/agents/:id` -- Обновить агента Request Body: ```json { "name": "string", "model": "string", "system_prompt": "string" } ``` **DELETE** `/ai/agents/:id` -- Удалить агента ## Чат с агентом **POST** `/ai/chat` -- Отправить сообщение агенту и получить ответ Request Body: ```json { "agentId": "number", "message": "string", "conversationId": "string", "context": "object" } ``` Пример ответа: ```json { "success": true, "response": "Привет! Я готов помочь вам с задачами...", "conversationId": "conv_abc123", "model": "gpt-4-turbo", "usage": { "promptTokens": 150, "completionTokens": 85, "totalTokens": 235 } } ``` **GET** `/ai/conversations/:conversationId` -- Получить историю диалога **DELETE** `/ai/conversations/:conversationId` -- Удалить диалог ## Провайдеры AI **GET** `/ai/providers` -- Получить список провайдеров AI Поддерживаемые провайдеры: - `openai` -- OpenAI (GPT-4, GPT-3.5) - `anthropic` -- Anthropic (Claude) - `google` -- Google (Gemini) - `ollama` -- Ollama (локальные модели) **POST** `/ai/providers` -- Добавить провайдера Request Body: ```json { "name": "string", "provider_key": "openai|anthropic|google|ollama", "base_url": "string", "is_active": true } ``` **PATCH** `/ai/providers/:id` -- Обновить провайдера **DELETE** `/ai/providers/:id` -- Удалить провайдера ## Модели **GET** `/ai/models` -- Получить список всех моделей **GET** `/ai/models?providerId=:id` -- Получить модели конкретного провайдера Популярные модели: - **OpenAI:** gpt-4-turbo, gpt-4o, gpt-3.5-turbo - **Anthropic:** claude-3-5-sonnet-20241022, claude-3-opus - **Google:** gemini-1.5-pro, gemini-1.5-flash - **Ollama:** llama3.2, mistral, codellama **POST** `/ai/models` -- Добавить модель Request Body: ```json { "provider_id": "number", "model_id": "gpt-4-turbo", "display_name": "GPT-4 Turbo", "context_window": 128000, "is_active": true } ``` **PATCH** `/ai/models/:id` -- Обновить модель **DELETE** `/ai/models/:id` -- Удалить модель ## Обновление моделей **POST** `/ai/providers/:providerId/refresh-models` -- Обновить список моделей от провайдера через API Пример ответа: ```json { "success": true, "message": "Обновлено моделей: 17", "added": 12, "updated": 5, "models": [ { "model_id": "gpt-4-turbo", "display_name": "GPT-4 Turbo" }, { "model_id": "gpt-4o", "display_name": "GPT-4o" } ] } ``` **Важно:** Для обновления моделей требуется настроенный API ключ провайдера в таблице API Keys. Поддерживается автоматическое обновление для OpenAI и Anthropic. ## API Ключи для AI API ключи провайдеров хранятся в таблице "API Keys" пространства "AI Agents". Структура записи API Key: ```json { "provider": "openai", "key_name": "OpenAI API", "api_key": "sk-...", "is_active": true, "last_used": "2024-01-15" } ``` ## Инструменты агентов Агенты могут использовать инструменты для взаимодействия с CRM. | Инструмент | Описание | |------------|----------| | `get_workspace_info` | Получить информацию о пространствах, проектах и таблицах | | `query_table_data` | Выполнить запрос к данным таблицы | | `create_table` | Создать новую таблицу | | `create_row` | Добавить запись в таблицу | | `update_row` | Обновить запись в таблице | | `create_dashboard` | Создать дашборд | | `create_widget` | Добавить виджет на дашборд | | `search_records` | Поиск записей по критериям | ## Примеры использования ### Отправить сообщение агенту (cURL) ```bash curl -X POST https://crm.hltrn.cc/api/v3/ai/chat \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{ "agentId": 1, "message": "Покажи статистику продаж за этот месяц", "context": { "spaceId": 5, "tableId": 12 } }' ``` ### JavaScript / Fetch ```javascript const response = await fetch('/api/v3/ai/chat', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ agentId: 1, message: 'Создай отчет по задачам', conversationId: 'conv_existing_id' // опционально }) }); const { response: aiResponse, usage } = await response.json(); console.log('AI ответил:', aiResponse); console.log('Использовано токенов:', usage.totalTokens); ``` ### Обновить модели провайдера ```javascript // Получить свежий список моделей от OpenAI const result = await fetch('/api/v3/ai/providers/1/refresh-models', { method: 'POST', headers: { 'Authorization': 'Bearer YOUR_TOKEN' } }); const { added, updated, models } = await result.json(); console.log(`Добавлено: ${added}, обновлено: ${updated}`); ``` ## Обработка ошибок | Код | Описание | |-----|----------| | `400` | Неверный запрос | | `401` | Не авторизован | | `404` | Агент не найден | | `500` | Ошибка AI провайдера | Формат ошибки AI: ```json { "success": false, "error": "AI_PROVIDER_ERROR", "message": "OpenAI API rate limit exceeded", "details": { "provider": "openai", "model": "gpt-4-turbo" } } ```