Спецификация API-слоя — Grace CRM Assistant

Версия: 1.0 Дата: 4 мая 2026

Статус: Этап 0 -- согласование файл 03_api_spec.md


1. Назначение

API-слой Grace CRM Assistant предоставляет интерфейс для:

Все эндпоинты доступны только на внутренней сети. Публичного доступа нет.


2. Базовые параметры

Параметр Значение
Base URL http://grace-ai.i-tech.local/api/v1
Протокол HTTP/HTTPS (TLS 1.3 внутри периметра)
Формат JSON
Аутентификация Bearer Token (JWT)
Версионирование URI (/v1/, /v2/)

Заголовки запроса

Authorization: Bearer {token}Content-Type: application/jsonAccept: application/json

Стандартный формат ответа

{  "success": true,  "data": { ... },  "meta": {    "total": 100,    "page": 1,    "per_page": 20  }}

Стандартный формат ошибки

{  "success": false,  "error": {    "code": "UNAUTHORIZED",    "message": "Токен недействителен или истёк"  }}

3. Аутентификация и авторизация

3.1 Получение токена

POST /api/v1/auth/tokenContent-Type: application/json​{  "client_id": "erp-system",  "client_secret": "***"}

Ответ:

{  "access_token": "eyJ...",  "expires_in": 3600,  "token_type": "Bearer"}

3.2 Матрица доступа по ролям

Группа эндпоинтов manager rop deputy_gd admin system
/projects -- свои проекты
/projects -- все проекты
/recommendations
/analytics/team
/analytics/aggregate
/sync/*
/admin/*

4. Эндпоинты -- данные CRM

4.1 Проекты / Сделки

GET /api/v1/projects

Параметры фильтрации:

Параметр Тип Описание
manager_id integer Фильтр по менеджеру
status string Статус проекта
probability_min integer Минимальная вероятность, %
updated_since ISO8601 Изменено после даты
page integer Страница (default: 1)
per_page integer Записей на странице (max: 100)

Ответ:

{  "success": true,  "data": [    {      "id": 15714,      "name": "ЖК Дмитровское небо",      "account_name": "КР ЭНЕРГО ООО",      "manager_name": "Пересунько Павел",      "project_status": "Отправлено КП",      "probability_percent": 65,      "amount": 91769410,      "forecast_date": "2026-06-30"    }  ],  "meta": { "total": 247, "page": 1, "per_page": 20 }}
GET /api/v1/projects/{id}

Возвращает полную карточку проекта включая историю комментариев и список расчётов.


4.2 Рекомендации

GET /api/v1/recommendations

Параметры:

Параметр Тип Описание
manager_id integer Рекомендации для менеджера
project_id integer Рекомендации по проекту
status string pending / acknowledged / done

Ответ:

{  "success": true,  "data": [    {      "id": "rec_001",      "project_id": 15714,      "project_name": "ЖК Дмитровское небо",      "account_name": "КР ЭНЕРГО ООО",      "action": "Позвонить клиенту и уточнить статус решения по КП",      "deadline": "2026-05-07",      "rationale": "Последний контакт 18 дней назад, КП на согласовании",      "knowledge_ref": "kb://cases/energo-jk-pattern",      "created_at": "2026-05-04T09:00:00",      "status": "pending"    }  ]}
POST /api/v1/recommendations/{id}/acknowledge

Менеджер подтверждает получение рекомендации.

POST /api/v1/recommendations/{id}/done

Менеджер отмечает рекомендацию выполненной.


4.3 Аналитика

GET /api/v1/analytics/funnel

Воронка продаж с разбивкой по статусам и менеджерам.

Параметры: manager_id, date_from, date_to, group_by (manager / status / month)

GET /api/v1/analytics/data-quality

Коэффициент качества данных (Кк) по менеджерам и отделу.

Ответ:

{  "success": true,  "data": {    "team_kk": 0.82,    "managers": [      {        "manager_id": 12,        "manager_name": "Стегнина Мария",        "kk": 0.91,        "projects_total": 249,        "projects_with_gaps": 22      }    ]  }}
GET /api/v1/analytics/backlog

Сводка по backlog-позициям (незавершённые отгрузки).


5. Эндпоинты -- управление системой

5.1 Синхронизация (только role: admin, system)

POST /api/v1/sync/runContent-Type: application/json​{  "mode": "incremental",  "entities": ["projects", "orders"]}

Ответ:

{  "success": true,  "data": {    "run_id": "sync_2026_05_04_090000",    "status": "started",    "estimated_duration_sec": 25  }}
GET /api/v1/sync/status/{run_id}

Статус текущего или последнего запуска синхронизации.

GET /api/v1/sync/history

История запусков синхронизации (последние 30).


5.2 Состояние системы

GET /api/v1/health

Доступен без авторизации. Возвращает статус всех компонентов.

{  "status": "healthy",  "components": {    "opensearch": "healthy",    "ragflow": "healthy",    "grace_api": "healthy",    "sync_agent": "healthy",    "last_sync": "2026-05-04T08:45:00"  }}
GET /api/v1/metrics

Метрики системы для мониторинга (только admin).


6. Эндпоинты -- база знаний

GET /api/v1/knowledge/search

Поиск по базе знаний (через RAGflow).

Параметры: q (текст запроса), industry, deal_stage, product_type

Ответ:

{  "success": true,  "data": {    "answer": "По данному типу клиента рекомендуется...",    "sources": [      {        "id": "kb_case_001",        "title": "Кейс: ЦОД-проект, застройщик",        "excerpt": "...",        "relevance": 0.92      }    ]  }}
POST /api/v1/knowledge/documents

Загрузка нового документа в базу знаний (только role: knowledge_manager, admin).


7. Коды ошибок

Код HTTP Описание
UNAUTHORIZED 401 Токен отсутствует или недействителен
FORBIDDEN 403 Недостаточно прав для операции
NOT_FOUND 404 Ресурс не найден
VALIDATION_ERROR 422 Ошибка валидации параметров
RATE_LIMITED 429 Превышен лимит запросов
INTERNAL_ERROR 500 Внутренняя ошибка сервера
SERVICE_UNAVAILABLE 503 Компонент системы недоступен

8. Лимиты

Параметр Значение
Rate limit 100 запросов / минуту на токен
Максимум записей в ответе 100 (per_page)
Максимальный размер тела запроса 10 МБ
Таймаут 30 секунд

Revision #1
Created 2026-06-22 03:22:40 UTC by Claude Ops
Updated 2026-06-22 03:22:40 UTC by Claude Ops