Files
marketing-parser/docs/archive/api-history/marketing-api-with-jwt-frontend.md
2026-08-14 16:42:12 +05:00

38 KiB

API Документация: Маркетинговый анализ и стратегии (Frontend/AI Agent)

Базовый URL

https://api.konturai.kz

Обзор

API для генерации маркетингового анализа и стратегий на основе данных о бизнесе. Все эндпоинты требуют JWT аутентификации для связи данных с пользователем.

Важные изменения:

  • Все эндпоинты теперь требуют JWT токен в заголовке Authorization
  • Пользователи могут видеть только свои анализы и стратегии
  • Добавлена детальная история статусов для каждого анализа и стратегии
  • Новые эндпоинты для получения списка всех анализов/стратегий пользователя
  • НОВОЕ: Добавлена поддержка типов анализов (РЫНОК, КОНКУРЕНТЫ, ЦА, КАНАЛЫ, SWOT)

Аутентификация

Все запросы должны включать JWT токен в заголовке Authorization:

Authorization: Bearer <your_jwt_token>

Структура JWT токена

JWT токен содержит следующую информацию:

  • sub: Email пользователя
  • uid: ID пользователя (Long) - используется для связи данных
  • roles: Роли пользователя (String, разделённые запятыми)

Ошибки аутентификации

Если токен отсутствует или невалиден, API вернет:

{
  "success": false,
  "message": "Не авторизован",
  "error": {
    "code": "UNAUTHORIZED",
    "message": "Требуется аутентификация. Пожалуйста, предоставьте валидный JWT токен."
  }
}

HTTP статус: 401 Unauthorized


Эндпоинты

1. Запуск маркетингового анализа

POST /api/marketing/analysis/start

Создает новую задачу на генерацию маркетингового анализа и запускает асинхронную обработку. Анализ автоматически связывается с пользователем из JWT токена.

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

Content-Type: application/json
Authorization: Bearer <your_jwt_token>

Тело запроса (JSON)

Поле Тип Обязательный Описание Пример значения
product string Название продукта или услуги "Веб-разработка"
location string Географическая локация работы "Алматы, Казахстан"
client string Тип целевой аудитории "B2B клиенты"
differentiator string Уникальные особенности бизнеса "Быстрая разработка за 2 недели"
analysisType string Тип анализа для генерации "РЫНОК"

Валидация полей

product (string, обязательное)

  • Минимальная длина: 3 символа
  • Максимальная длина: 200 символов

location (string, обязательное)

  • Минимальная длина: 2 символа
  • Максимальная длина: 150 символов

client (string, обязательное)

  • Допустимые значения:
    • "B2B клиенты"
    • "B2C клиенты"
    • "Частные лица"
    • "Корпорации"
    • "Малый бизнес"

differentiator (string, обязательное)

  • Минимальная длина: 10 символов
  • Максимальная длина: 500 символов

analysisType (string, обязательное)

  • Допустимые значения (регистр не важен, но рекомендуется использовать заглавные буквы):
    • "РЫНОК" - Анализ рынка (размер рынка, динамика роста, сегменты, тренды)
    • "КОНКУРЕНТЫ" - Анализ конкурентов (основные конкуренты, их сильные/слабые стороны, позиционирование)
    • "ЦА" - Анализ целевой аудитории (демография, психография, потребности, поведение)
    • "КАНАЛЫ" - Анализ маркетинговых каналов (эффективность каналов, рекомендации по выбору)
    • "SWOT" - SWOT-анализ (сильные стороны, слабые стороны, возможности, угрозы)

Пример запроса

const response = await fetch(
  'https://api.konturai.kz/api/marketing/analysis/start',
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${jwtToken}`,
    },
    body: JSON.stringify({
      product: 'Разработка мобильных приложений',
      location: 'Нур-Султан, Казахстан',
      client: 'B2B клиенты',
      differentiator: 'Специализируемся на быстрой разработке MVP за 4 недели',
      analysisType: 'РЫНОК',
    }),
  }
);

Пример успешного ответа (200 OK)

{
  "success": true,
  "message": "Анализ запущен успешно",
  "data": {
    "analysisId": "507f1f77bcf86cd799439011",
    "status": "processing",
    "estimatedCompletionTime": "2025-01-20T15:38:00",
    "message": "Анализ запущен успешно. Результаты будут готовы в течение 5-10 минут."
  }
}

2. Получение результата анализа

GET /api/marketing/analysis/{analysisId}

Возвращает статус и результаты анализа по идентификатору. Пользователь может получить только свои анализы.

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

Authorization: Bearer <your_jwt_token>

Параметры пути

Параметр Тип Описание
analysisId string Идентификатор анализа

Пример запроса

const response = await fetch(
  `https://api.konturai.kz/api/marketing/analysis/${analysisId}`,
  {
    headers: {
      Authorization: `Bearer ${jwtToken}`,
    },
  }
);

Пример ответа (когда анализ завершен - 200 OK)

{
  "success": true,
  "message": "Операция выполнена успешно",
  "data": {
    "analysisId": "507f1f77bcf86cd799439011",
    "status": "completed",
    "createdAt": "2025-01-20T15:30:00",
    "completedAt": "2025-01-20T15:38:00",
    "report": {
      "summary": "Краткое резюме анализа...",
      "targetAudience": {
        "description": "Описание целевой аудитории...",
        "channels": ["Instagram", "LinkedIn", "Telegram"]
      },
      "recommendations": ["Рекомендация 1", "Рекомендация 2"],
      "strategy": {
        "duration": "2 недели",
        "channels": ["Instagram", "Telegram", "21MC"],
        "contentTypes": ["посты", "сторис", "баннеры"]
      },
      "pdfUrl": "/api/marketing/analysis/507f1f77bcf86cd799439011/download"
    }
  }
}

Статусы анализа

Статус Описание
queued Запрос в очереди на обработку
processing Анализ выполняется
completed Анализ завершен успешно
failed Анализ завершился с ошибкой

Ошибки доступа

Если пользователь пытается получить доступ к анализу другого пользователя:

{
  "success": false,
  "message": "Доступ запрещен",
  "error": {
    "code": "FORBIDDEN",
    "message": "У вас нет доступа к этому анализу"
  }
}

HTTP статус: 403 Forbidden


3. Получение списка всех анализов пользователя

GET /api/marketing/analysis/my

Возвращает список всех анализов текущего пользователя, отсортированных по дате создания (новые первыми).

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

Authorization: Bearer <your_jwt_token>

Пример запроса

const response = await fetch(
  'https://api.konturai.kz/api/marketing/analysis/my',
  {
    headers: {
      Authorization: `Bearer ${jwtToken}`,
    },
  }
);

Пример успешного ответа (200 OK)

{
  "success": true,
  "message": "Операция выполнена успешно",
  "data": [
    {
      "analysisId": "507f1f77bcf86cd799439011",
      "product": "Разработка мобильных приложений",
      "location": "Нур-Султан, Казахстан",
      "clientType": "B2B клиенты",
      "differentiator": "Быстрая разработка MVP за 4 недели",
      "status": "completed",
      "userId": "12345",
      "createdAt": "2025-01-20T15:30:00",
      "completedAt": "2025-01-20T15:38:00",
      "statusHistory": [
        {
          "status": "queued",
          "timestamp": "2025-01-20T15:30:00",
          "message": "Анализ создан и добавлен в очередь"
        },
        {
          "status": "processing",
          "timestamp": "2025-01-20T15:30:05",
          "message": "Начата обработка анализа"
        },
        {
          "status": "completed",
          "timestamp": "2025-01-20T15:38:00",
          "message": "Анализ успешно завершен"
        }
      ]
    },
    {
      "analysisId": "507f1f77bcf86cd799439012",
      "product": "Веб-разработка",
      "location": "Алматы, Казахстан",
      "clientType": "B2C клиенты",
      "differentiator": "Современные технологии",
      "status": "processing",
      "userId": "12345",
      "createdAt": "2025-01-20T14:00:00",
      "completedAt": null,
      "statusHistory": [
        {
          "status": "queued",
          "timestamp": "2025-01-20T14:00:00",
          "message": "Анализ создан и добавлен в очередь"
        },
        {
          "status": "processing",
          "timestamp": "2025-01-20T14:00:05",
          "message": "Начата обработка анализа"
        }
      ]
    }
  ]
}

Структура ответа

Поле Тип Описание
data[].analysisId string Уникальный идентификатор анализа
data[].product string Название продукта или услуги
data[].location string Географическая локация
data[].clientType string Тип целевой аудитории
data[].differentiator string Уникальные особенности бизнеса
data[].status string Текущий статус анализа
data[].userId string ID пользователя (из JWT)
data[].createdAt string ISO 8601 дата/время создания
data[].completedAt string ISO 8601 дата/время завершения (null если не завершен)
data[].statusHistory array Детальная история изменений статуса
data[].statusHistory[].status string Статус на момент изменения
data[].statusHistory[].timestamp string ISO 8601 дата/время изменения статуса
data[].statusHistory[].message string Описание изменения статуса

4. Получение детальной истории анализа

GET /api/marketing/analysis/{analysisId}/history

Возвращает детальную информацию об анализе, включая полную историю изменений статуса.

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

Authorization: Bearer <your_jwt_token>

Параметры пути

Параметр Тип Описание
analysisId string Идентификатор анализа

Пример запроса

const response = await fetch(
  `https://api.konturai.kz/api/marketing/analysis/${analysisId}/history`,
  {
    headers: {
      Authorization: `Bearer ${jwtToken}`,
    },
  }
);

Пример успешного ответа (200 OK)

{
  "success": true,
  "message": "Операция выполнена успешно",
  "data": {
    "analysisId": "507f1f77bcf86cd799439011",
    "product": "Разработка мобильных приложений",
    "location": "Нур-Султан, Казахстан",
    "clientType": "B2B клиенты",
    "differentiator": "Быстрая разработка MVP за 4 недели",
    "status": "completed",
    "userId": "12345",
    "createdAt": "2025-01-20T15:30:00",
    "completedAt": "2025-01-20T15:38:00",
    "statusHistory": [
      {
        "status": "queued",
        "timestamp": "2025-01-20T15:30:00",
        "message": "Анализ создан и добавлен в очередь"
      },
      {
        "status": "processing",
        "timestamp": "2025-01-20T15:30:05",
        "message": "Начата обработка анализа"
      },
      {
        "status": "completed",
        "timestamp": "2025-01-20T15:38:00",
        "message": "Анализ успешно завершен"
      }
    ]
  }
}

5. Скачивание PDF отчета

GET /api/marketing/analysis/{analysisId}/download

Возвращает PDF файл с полным маркетинговым отчетом. Пользователь может скачать только свои отчеты.

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

Authorization: Bearer <your_jwt_token>

Параметры пути

Параметр Тип Описание
analysisId string Идентификатор анализа

Пример запроса

const response = await fetch(
  `https://api.konturai.kz/api/marketing/analysis/${analysisId}/download`,
  {
    headers: {
      Authorization: `Bearer ${jwtToken}`,
    },
  }
);

if (response.ok) {
  const blob = await response.blob();
  const url = window.URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = url;
  a.download = `marketing_analysis_${analysisId}.pdf`;
  a.click();
}

Успешный ответ (200 OK)

  • Content-Type: application/pdf
  • Content-Disposition: attachment; filename="marketing_analysis_{analysisId}_{timestamp}.pdf"
  • Body: Бинарные данные PDF файла

6. Генерация маркетинговой стратегии

POST /api/marketing/analysis/strategy/generate

Создает маркетинговую стратегию на основе завершенного анализа. Стратегия автоматически связывается с пользователем из JWT токена.

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

Content-Type: application/json
Authorization: Bearer <your_jwt_token>

Параметры запроса

Параметр Тип Обязательный Описание
analysisId string ID завершенного анализа (query parameter)
durationWeeks integer Длительность стратегии в неделях (default: 4)
priorityPlatforms array Приоритетные платформы (массив строк)

Тело запроса (JSON, опционально)

{
  "durationWeeks": 4,
  "priorityPlatforms": ["Instagram", "LinkedIn", "Telegram"]
}

Пример запроса

const response = await fetch(
  `https://api.konturai.kz/api/marketing/analysis/strategy/generate?analysisId=${analysisId}`,
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${jwtToken}`,
    },
    body: JSON.stringify({
      durationWeeks: 4,
      priorityPlatforms: ['Instagram', 'LinkedIn', 'Telegram'],
    }),
  }
);

Пример успешного ответа (200 OK)

{
  "success": true,
  "message": "Генерация стратегии запущена успешно. Результаты будут готовы в течение 3-5 минут.",
  "data": {
    "strategyId": "507f1f77bcf86cd799439020",
    "analysisId": "507f1f77bcf86cd799439011",
    "status": "queued",
    "createdAt": "2025-01-20T15:40:00",
    "completedAt": null,
    "durationWeeks": 4,
    "priorityPlatforms": ["Instagram", "LinkedIn", "Telegram"]
  }
}

7. Получение результата стратегии

GET /api/marketing/analysis/strategy/{strategyId}

Возвращает статус и результаты стратегии. Пользователь может получить только свои стратегии.

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

Authorization: Bearer <your_jwt_token>

Параметры пути

Параметр Тип Описание
strategyId string Идентификатор стратегии

Пример ответа (когда стратегия завершена - 200 OK)

{
  "success": true,
  "message": "Операция выполнена успешно",
  "data": {
    "strategyId": "507f1f77bcf86cd799439020",
    "analysisId": "507f1f77bcf86cd799439011",
    "status": "completed",
    "createdAt": "2025-01-20T15:40:00",
    "completedAt": "2025-01-20T15:43:00",
    "durationWeeks": 4,
    "priorityPlatforms": ["Instagram", "LinkedIn", "Telegram"],
    "strategy": {
      "weeklyPlans": [
        {
          "weekNumber": 1,
          "mainThemes": ["Презентация продукта", "Преимущества"],
          "contentRecommendations": "Создавайте контент, который демонстрирует ценность продукта",
          "priorityPlatforms": ["Instagram", "LinkedIn"]
        }
      ],
      "postCalendar": [
        {
          "publishDate": "2025-01-21T10:00:00",
          "platform": "Instagram",
          "contentType": "пост",
          "theme": "Презентация продукта",
          "postText": "Полный текст поста для публикации...",
          "hashtags": ["#маркетинг", "#бизнес"],
          "publishTime": "10:00"
        }
      ]
    }
  }
}

8. Получение стратегии по ID анализа

GET /api/marketing/analysis/{analysisId}/strategy

Возвращает стратегию, связанную с указанным анализом. Пользователь может получить только стратегии для своих анализов.

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

Authorization: Bearer <your_jwt_token>

Параметры пути

Параметр Тип Описание
analysisId string Идентификатор анализа

9. Получение списка всех стратегий пользователя

GET /api/marketing/analysis/strategy/my

Возвращает список всех стратегий текущего пользователя, отсортированных по дате создания (новые первыми).

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

Authorization: Bearer <your_jwt_token>

Пример успешного ответа (200 OK)

{
  "success": true,
  "message": "Операция выполнена успешно",
  "data": [
    {
      "strategyId": "507f1f77bcf86cd799439020",
      "analysisId": "507f1f77bcf86cd799439011",
      "status": "completed",
      "userId": "12345",
      "durationWeeks": 4,
      "priorityPlatforms": ["Instagram", "LinkedIn", "Telegram"],
      "createdAt": "2025-01-20T15:40:00",
      "completedAt": "2025-01-20T15:43:00",
      "statusHistory": [
        {
          "status": "queued",
          "timestamp": "2025-01-20T15:40:00",
          "message": "Стратегия создана и добавлена в очередь"
        },
        {
          "status": "processing",
          "timestamp": "2025-01-20T15:40:05",
          "message": "Начата генерация стратегии"
        },
        {
          "status": "completed",
          "timestamp": "2025-01-20T15:43:00",
          "message": "Стратегия успешно сгенерирована"
        }
      ]
    }
  ]
}

10. Получение детальной истории стратегии

GET /api/marketing/analysis/strategy/{strategyId}/history

Возвращает детальную информацию о стратегии, включая полную историю изменений статуса.

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

Authorization: Bearer <your_jwt_token>

Параметры пути

Параметр Тип Описание
strategyId string Идентификатор стратегии

Пример успешного ответа (200 OK)

{
  "success": true,
  "message": "Операция выполнена успешно",
  "data": {
    "strategyId": "507f1f77bcf86cd799439020",
    "analysisId": "507f1f77bcf86cd799439011",
    "status": "completed",
    "userId": "12345",
    "durationWeeks": 4,
    "priorityPlatforms": ["Instagram", "LinkedIn", "Telegram"],
    "createdAt": "2025-01-20T15:40:00",
    "completedAt": "2025-01-20T15:43:00",
    "statusHistory": [
      {
        "status": "queued",
        "timestamp": "2025-01-20T15:40:00",
        "message": "Стратегия создана и добавлена в очередь"
      },
      {
        "status": "processing",
        "timestamp": "2025-01-20T15:40:05",
        "message": "Начата генерация стратегии"
      },
      {
        "status": "completed",
        "timestamp": "2025-01-20T15:43:00",
        "message": "Стратегия успешно сгенерирована"
      }
    ]
  }
}

Обработка ошибок

Коды ошибок

Код HTTP статус Описание
UNAUTHORIZED 401 Требуется аутентификация
FORBIDDEN 403 Нет доступа к ресурсу
VALIDATION_ERROR 400 Ошибка валидации входных данных
NOT_FOUND 404 Ресурс не найден
INVALID_ANALYSIS 404 Анализ не найден
ANALYSIS_NOT_COMPLETED 400 Анализ еще не завершен
INTERNAL_SERVER_ERROR 500 Внутренняя ошибка сервера

Формат ошибки

{
  "success": false,
  "message": "Описание ошибки",
  "error": {
    "code": "ERROR_CODE",
    "message": "Детальное сообщение об ошибке",
    "details": {
      "field1": "Сообщение об ошибке для поля 1"
    }
  }
}

римеры использования

JavaScript/TypeScript (Fetch API)

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

// Предполагается, что токен получен при логине
const jwtToken = localStorage.getItem('jwtToken');

Запуск анализа с JWT

async function startMarketingAnalysis(data, jwtToken) {
  const response = await fetch(
    'https://api.konturai.kz/api/marketing/analysis/start',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        Authorization: `Bearer ${jwtToken}`,
      },
      body: JSON.stringify(data),
    }
  );

  if (!response.ok) {
    if (response.status === 401) {
      throw new Error('Требуется аутентификация');
    }
    const error = await response.json();
    throw new Error(error.error?.message || 'Ошибка при запуске анализа');
  }

  const result = await response.json();
  return result.data.analysisId;
}

Получение списка всех анализов пользователя

async function getMyAnalyses(jwtToken) {
  const response = await fetch(
    'https://api.konturai.kz/api/marketing/analysis/my',
    {
      headers: {
        Authorization: `Bearer ${jwtToken}`,
      },
    }
  );

  if (!response.ok) {
    throw new Error('Ошибка при получении списка анализов');
  }

  const result = await response.json();
  return result.data; // Массив анализов
}

Получение детальной истории анализа

async function getAnalysisHistory(analysisId, jwtToken) {
  const response = await fetch(
    `https://api.konturai.kz/api/marketing/analysis/${analysisId}/history`,
    {
      headers: {
        Authorization: `Bearer ${jwtToken}`,
      },
    }
  );

  if (!response.ok) {
    if (response.status === 403) {
      throw new Error('Нет доступа к этому анализу');
    }
    throw new Error('Ошибка при получении истории');
  }

  const result = await response.json();
  return result.data;
}

Полный пример: создание анализа и отслеживание статуса

async function createAndTrackAnalysis(
  product,
  location,
  client,
  differentiator,
  jwtToken
) {
  try {
    // 1. Запускаем анализ
    const analysisId = await startMarketingAnalysis(
      {
        product,
        location,
        client,
        differentiator,
      },
      jwtToken
    );

    console.log(`Анализ запущен: ${analysisId}`);

    // 2. Получаем историю для отслеживания статуса
    const checkStatus = async () => {
      const history = await getAnalysisHistory(analysisId, jwtToken);

      // Показываем последний статус
      const lastStatus =
        history.statusHistory[history.statusHistory.length - 1];
      console.log(`Статус: ${lastStatus.status} - ${lastStatus.message}`);

      return history.status;
    };

    // 3. Polling: проверяем статус каждые 10 секунд
    const pollInterval = setInterval(async () => {
      const status = await checkStatus();

      if (status === 'completed') {
        clearInterval(pollInterval);
        console.log('Анализ завершен!');
        // Получаем полный результат
        const fullResult = await getAnalysisResult(analysisId, jwtToken);
        return fullResult;
      } else if (status === 'failed') {
        clearInterval(pollInterval);
        throw new Error('Анализ завершился с ошибкой');
      }
    }, 10000);

    // Останавливаем polling через 15 минут
    setTimeout(() => {
      clearInterval(pollInterval);
      console.log('Превышено время ожидания');
    }, 15 * 60 * 1000);
  } catch (error) {
    console.error('Ошибка:', error);
    throw error;
  }
}

Получение списка стратегий пользователя

async function getMyStrategies(jwtToken) {
  const response = await fetch(
    'https://api.konturai.kz/api/marketing/analysis/strategy/my',
    {
      headers: {
        Authorization: `Bearer ${jwtToken}`,
      },
    }
  );

  if (!response.ok) {
    throw new Error('Ошибка при получении списка стратегий');
  }

  const result = await response.json();
  return result.data; // Массив стратегий
}

Рекомендации по интеграции

1. Обработка JWT токена

  • Сохраняйте токен в безопасном месте (например, localStorage или sessionStorage)
  • Проверяйте срок действия токена перед запросами
  • Реализуйте механизм обновления токена при истечении

2. Обработка ошибок аутентификации

При получении 401 Unauthorized:

  • Перенаправляйте пользователя на страницу входа
  • Очищайте сохраненный токен
  • Показывайте понятное сообщение пользователю

3. Обработка ошибок доступа

При получении 403 Forbidden:

  • Показывайте сообщение о том, что ресурс недоступен
  • Не пытайтесь повторять запрос с теми же параметрами

4. Polling стратегия

Для отслеживания статуса анализа/стратегии:

  • Используйте интервал 10-15 секунд
  • Максимальное время ожидания: 15 минут
  • Показывайте прогресс пользователю на основе statusHistory

5. Отображение истории статусов

Используйте statusHistory для:

  • Показывать временную шкалу изменений статуса
  • Отображать детальную информацию о каждом этапе
  • Информировать пользователя о прогрессе

6. Кэширование

  • Кэшируйте список анализов/стратегий пользователя
  • Обновляйте кэш при создании новых записей
  • Используйте analysisId/strategyId как ключи кэша

Примечания

  1. Формат даты: Все даты возвращаются в формате ISO 8601 без timezone (LocalDateTime)
  2. Идентификаторы: Используются MongoDB ObjectId (24 символа hex)
  3. Асинхронность: Анализ и стратегия выполняются асинхронно
  4. Безопасность: Все эндпоинты требуют валидный JWT токен
  5. Изоляция данных: Пользователи видят только свои данные
  6. История статусов: Детальная история доступна для всех анализов и стратегий

Изменения: Поддержка типов анализов

Обзор изменений

В API добавлена поддержка различных типов маркетинговых анализов. Теперь при создании анализа можно указать тип анализа, который определяет фокус и содержание генерируемого отчета.

Новое поле в запросе

Поле: analysisType (обязательное)

Тип: string

Допустимые значения:

  • "РЫНОК" - Анализ рынка
  • "КОНКУРЕНТЫ" - Анализ конкурентов
  • "ЦА" - Анализ целевой аудитории
  • "КАНАЛЫ" - Анализ маркетинговых каналов
  • "SWOT" - SWOT-анализ

Описание типов анализов

1. РЫНОК

Генерирует анализ рынка, включающий:

  • Размер рынка
  • Динамику роста
  • Основные сегменты
  • Тренды и перспективы развития

2. КОНКУРЕНТЫ

Генерирует анализ конкурентов, включающий:

  • Основных конкурентов
  • Их сильные и слабые стороны
  • Позиционирование
  • Ценовую политику
  • Маркетинговые стратегии

3. ЦА (Целевая аудитория)

Генерирует анализ целевой аудитории, включающий:

  • Демографические характеристики
  • Психографический профиль
  • Потребности и боли
  • Поведенческие паттерны
  • Предпочтения

4. КАНАЛЫ

Генерирует анализ маркетинговых каналов, включающий:

  • Оценку эффективности различных каналов коммуникации
  • Рекомендации по выбору каналов
  • Особенности использования каждого канала
  • Бюджетные рекомендации

5. SWOT

Генерирует SWOT-анализ, включающий:

  • Сильные стороны (Strengths)
  • Слабые стороны (Weaknesses)
  • Возможности (Opportunities)
  • Угрозы (Threats)

Изменения в ответе

В ответе анализа теперь присутствует поле analysisType в объекте reportData, которое содержит название типа анализа.

Пример использования

// Запрос на создание SWOT-анализа
const response = await fetch(
  'https://api.konturai.kz/api/marketing/analysis/start',
  {
    method: 'POST',
    headers: {
      'Content-Type': 'application/json',
      Authorization: `Bearer ${jwtToken}`,
    },
    body: JSON.stringify({
      product: 'Разработка мобильных приложений',
      location: 'Нур-Султан, Казахстан',
      client: 'B2B клиенты',
      differentiator: 'Специализируемся на быстрой разработке MVP за 4 недели',
      analysisType: 'SWOT', // Указываем тип анализа
    }),
  }
);

Рекомендации для фронтенда

  1. UI для выбора типа анализа: Добавьте выпадающий список или радиокнопки для выбора типа анализа перед отправкой запроса.

  2. Валидация на фронтенде: Убедитесь, что отправляется только один из допустимых значений.

  3. Отображение типа анализа: При показе результатов анализа отображайте тип анализа для контекста.

  4. Обратная совместимость: Если поле analysisType не указано, API вернет ошибку валидации. Это обязательное поле.

Миграция существующих интеграций

Если у вас есть существующие интеграции, которые не используют поле analysisType, необходимо:

  1. Добавить поле analysisType в запрос
  2. Выбрать подходящий тип анализа по умолчанию или позволить пользователю выбрать
  3. Обновить UI для отображения выбора типа анализа

Поддержка

При возникновении проблем с API обращайтесь в техническую поддержку с указанием:

  • analysisId или strategyId (если есть)
  • Время запроса
  • Описание проблемы
  • Код ошибки (если есть)
  • JWT токен (только для отладки, не в продакшене!)