From 8b1a96efe56c0b5775f8dd827eb50869beb1a2c0 Mon Sep 17 00:00:00 2001 From: root Date: Wed, 3 Dec 2025 09:02:21 +0500 Subject: [PATCH] . --- FACEBOOK_ADS_CREDENTIALS.md | 340 +++++++ STRATEGY_EXECUTION_API.md | 11 + marketing-analysis-api-updated-fields.md | 700 +++++++++++++ .../controller/MarketingController.java | 927 +++++++++--------- .../parser/dto/AnalysisHistoryResponse.java | 66 +- .../parser/dto/MarketingAnalysisRequest.java | 112 ++- .../kz/konturai/parser/model/DetailLevel.java | 36 + .../parser/model/MarketingAnalysis.java | 102 +- .../service/MarketingAnalysisService.java | 181 +++- .../validator/DetailLevelValidator.java | 21 + .../parser/validator/RegionValidator.java | 44 + .../parser/validator/ValidDetailLevel.java | 22 + .../parser/validator/ValidRegion.java | 22 + Модуль м.md | 232 +++++ ОТЛИЧИЯ_ТЗ_ОТ_РЕАЛИЗАЦИИ.md | 400 ++++++++ ТЗ. Модуль - маркетинг..docx | Bin 0 -> 32371 bytes 16 files changed, 2629 insertions(+), 587 deletions(-) create mode 100644 FACEBOOK_ADS_CREDENTIALS.md create mode 100644 marketing-analysis-api-updated-fields.md create mode 100644 src/main/java/kz/konturai/parser/model/DetailLevel.java create mode 100644 src/main/java/kz/konturai/parser/validator/DetailLevelValidator.java create mode 100644 src/main/java/kz/konturai/parser/validator/RegionValidator.java create mode 100644 src/main/java/kz/konturai/parser/validator/ValidDetailLevel.java create mode 100644 src/main/java/kz/konturai/parser/validator/ValidRegion.java create mode 100644 Модуль м.md create mode 100644 ОТЛИЧИЯ_ТЗ_ОТ_РЕАЛИЗАЦИИ.md create mode 100644 ТЗ. Модуль - маркетинг..docx diff --git a/FACEBOOK_ADS_CREDENTIALS.md b/FACEBOOK_ADS_CREDENTIALS.md new file mode 100644 index 0000000..6ed5fe4 --- /dev/null +++ b/FACEBOOK_ADS_CREDENTIALS.md @@ -0,0 +1,340 @@ +# Учетные данные Facebook для запуска рекламы + +## Обзор + +Для запуска рекламных кампаний в Facebook через Marketing API (ранее Ads API) требуются специальные учетные данные, которые отличаются от простого Access Token для публикации постов. + +--- + +## Необходимые учетные данные + +### 1. **Access Token (обязательно)** + +Access Token с расширенными разрешениями для управления рекламой. + +**Требуемые разрешения (Permissions):** + +- `ads_management` - Управление рекламными кампаниями +- `ads_read` - Чтение данных о рекламе +- `business_management` - Управление бизнес-аккаунтом +- `pages_read_engagement` - Чтение данных страниц (опционально) + +**Типы токенов:** + +- **User Access Token** - краткосрочный (1-2 часа) +- **Long-Lived User Access Token** - долгосрочный (60 дней) +- **Page Access Token** - для управления страницами +- **System User Access Token** - для серверных приложений (рекомендуется для продакшена) + +--- + +### 2. **Ad Account ID (обязательно)** + +ID рекламного аккаунта Facebook, в котором будут создаваться кампании. + +**Формат:** `act_XXXXXXXXX` (например: `act_123456789`) + +**Где найти:** + +1. Перейдите в [Facebook Ads Manager](https://business.facebook.com/adsmanager) +2. В настройках аккаунта найдите "Account ID" +3. Или используйте API: `GET /me/adaccounts` + +--- + +### 3. **App ID и App Secret (обязательно для серверных приложений)** + +Учетные данные Facebook приложения. + +**Где найти:** + +1. Перейдите на [Facebook Developers](https://developers.facebook.com/) +2. Выберите ваше приложение +3. В разделе "Settings" → "Basic" найдите: + - **App ID** + - **App Secret** (нажмите "Show" для отображения) + +**Важно:** App Secret должен храниться в безопасности и никогда не передаваться на клиент. + +--- + +### 4. **Page ID (опционально, но рекомендуется)** + +ID страницы Facebook, связанной с рекламным аккаунтом. + +**Где найти:** + +1. Перейдите на вашу страницу Facebook +2. В настройках страницы найдите "Page ID" +3. Или используйте API: `GET /me/accounts` + +--- + +## Пошаговая инструкция получения учетных данных + +### Шаг 1: Создание Facebook приложения + +1. Перейдите на [Facebook Developers](https://developers.facebook.com/) +2. Нажмите "My Apps" → "Create App" +3. Выберите тип приложения: **"Business"** или **"Other"** +4. Заполните название и контактный email +5. Нажмите "Create App" + +### Шаг 2: Добавление продукта "Marketing API" + +1. В панели управления приложением найдите раздел "Add Products" +2. Найдите "Marketing API" и нажмите "Set Up" +3. Следуйте инструкциям для настройки + +### Шаг 3: Получение App ID и App Secret + +1. В левом меню выберите "Settings" → "Basic" +2. Скопируйте **App ID** +3. Нажмите "Show" рядом с **App Secret** и скопируйте его +4. **Сохраните эти данные в безопасном месте** + +### Шаг 4: Настройка разрешений (Permissions) + +1. В левом меню выберите "Settings" → "Advanced" +2. Добавьте в "Valid OAuth Redirect URIs" ваш callback URL +3. В разделе "Permissions and Features" запросите: + - `ads_management` + - `ads_read` + - `business_management` + - `pages_read_engagement` + +### Шаг 5: Получение Access Token + +#### Вариант A: User Access Token (для тестирования) + +1. Перейдите в [Graph API Explorer](https://developers.facebook.com/tools/explorer/) +2. Выберите ваше приложение +3. Нажмите "Generate Access Token" +4. Выберите необходимые разрешения +5. Скопируйте полученный токен + +#### Вариант B: Long-Lived Token (для разработки) + +```bash +# Обмен краткосрочного токена на долгосрочный +curl -X GET "https://graph.facebook.com/v18.0/oauth/access_token?grant_type=fb_exchange_token&client_id={app-id}&client_secret={app-secret}&fb_exchange_token={short-lived-token}" +``` + +#### Вариант C: System User Token (для продакшена - рекомендуется) + +1. В панели управления приложением перейдите в "Business Settings" +2. Создайте System User +3. Назначьте ему доступ к рекламному аккаунту +4. Сгенерируйте токен для System User + +### Шаг 6: Получение Ad Account ID + +**Через Ads Manager:** + +1. Перейдите в [Facebook Ads Manager](https://business.facebook.com/adsmanager) +2. В настройках аккаунта найдите "Account ID" + +**Через API:** + +```bash +curl -X GET "https://graph.facebook.com/v18.0/me/adaccounts?access_token={access-token}" +``` + +Ответ будет содержать массив с `id` в формате `act_XXXXXXXXX`. + +--- + +## Структура учетных данных для вашего API + +Для интеграции с вашей системой, учетные данные Facebook для рекламы должны быть сохранены в следующем формате: + +### Формат JSON для сохранения credentials + +```json +{ + "platform": "facebook_ads", + "credentials": { + "accessToken": "EAABwzLix...", + "adAccountId": "act_123456789", + "appId": "1234567890123456", + "appSecret": "your-app-secret-here", + "pageId": "1234567890123456", + "tokenType": "LONG_LIVED", + "expiresAt": "2024-12-31T23:59:59Z" + } +} +``` + +### Пример сохранения через API + +```javascript +const facebookAdsCredentials = { + platform: 'facebook_ads', + credentials: JSON.stringify({ + accessToken: 'EAABwzLix...', + adAccountId: 'act_123456789', + appId: '1234567890123456', + appSecret: 'your-app-secret-here', + pageId: '1234567890123456', + tokenType: 'LONG_LIVED', + expiresAt: '2024-12-31T23:59:59Z', + }), +}; + +// Сохранение через ваш API +const response = await fetch('/api/social-media/credentials', { + method: 'POST', + headers: { + Authorization: `Bearer ${jwtToken}`, + 'Content-Type': 'application/json', + }, + body: JSON.stringify(facebookAdsCredentials), +}); +``` + +--- + +## Требования и ограничения + +### Ограничения Facebook Marketing API + +1. **Rate Limits:** + + - 200 вызовов в час на пользователя + - 4800 вызовов в час на приложение + +2. **Минимальные требования:** + + - Рекламный аккаунт должен быть активен + - У пользователя должны быть права администратора на аккаунте + - Приложение должно пройти ревью Facebook (для продакшена) + +3. **Версия API:** + - Текущая версия: v18.0 + - Facebook регулярно обновляет API, следите за изменениями + +### Безопасность + +1. **Никогда не храните App Secret в открытом виде** +2. **Используйте шифрование для хранения credentials** (ваша система уже использует шифрование) +3. **Регулярно обновляйте токены** (Long-Lived токены истекают через 60 дней) +4. **Используйте System User Token для продакшена** вместо User Token + +--- + +## Проверка учетных данных + +### Проверка Access Token + +```bash +curl -X GET "https://graph.facebook.com/v18.0/me?access_token={access-token}" +``` + +Если токен валиден, вы получите информацию о пользователе. + +### Проверка доступа к Ad Account + +```bash +curl -X GET "https://graph.facebook.com/v18.0/{ad-account-id}?access_token={access-token}&fields=id,name,account_id" +``` + +Если доступ есть, вы получите информацию об аккаунте. + +### Проверка разрешений + +```bash +curl -X GET "https://graph.facebook.com/v18.0/me/permissions?access_token={access-token}" +``` + +Проверьте, что в ответе есть: + +- `ads_management` со статусом `granted` +- `ads_read` со статусом `granted` +- `business_management` со статусом `granted` + +--- + +## Примеры использования для создания рекламной кампании + +### Создание кампании + +```bash +curl -X POST "https://graph.facebook.com/v18.0/{ad-account-id}/campaigns" \ + -d "name=Test Campaign" \ + -d "objective=OUTCOME_TRAFFIC" \ + -d "status=PAUSED" \ + -d "access_token={access-token}" +``` + +### Создание Ad Set + +```bash +curl -X POST "https://graph.facebook.com/v18.0/{ad-account-id}/adsets" \ + -d "name=Test Ad Set" \ + -d "campaign_id={campaign-id}" \ + -d "billing_event=IMPRESSIONS" \ + -d "optimization_goal=REACH" \ + -d "bid_amount=100" \ + -d "daily_budget=1000" \ + -d "targeting={'geo_locations':{'countries':['KZ']}}" \ + -d "access_token={access-token}" +``` + +--- + +## Обновление токенов + +Access Token имеет срок действия. Для автоматического обновления: + +1. **Отслеживайте срок действия токена** (`expiresAt`) +2. **Используйте refresh token** (если доступен) +3. **Или запросите новый токен** перед истечением старого + +### Обмен краткосрочного токена на долгосрочный + +```javascript +async function exchangeToken(shortLivedToken, appId, appSecret) { + const response = await fetch( + `https://graph.facebook.com/v18.0/oauth/access_token?grant_type=fb_exchange_token&client_id=${appId}&client_secret=${appSecret}&fb_exchange_token=${shortLivedToken}` + ); + + const data = await response.json(); + return { + accessToken: data.access_token, + expiresIn: data.expires_in, // в секундах + expiresAt: new Date(Date.now() + data.expires_in * 1000).toISOString(), + }; +} +``` + +--- + +## Рекомендации + +1. **Для разработки:** Используйте Long-Lived User Access Token +2. **Для продакшена:** Используйте System User Access Token +3. **Храните credentials в зашифрованном виде** (ваша система уже это делает) +4. **Реализуйте автоматическое обновление токенов** +5. **Логируйте все операции с рекламой** для отладки +6. **Обрабатывайте ошибки API** (rate limits, invalid tokens, etc.) + +--- + +## Полезные ссылки + +- [Facebook Marketing API Documentation](https://developers.facebook.com/docs/marketing-apis) +- [Facebook Graph API Explorer](https://developers.facebook.com/tools/explorer/) +- [Facebook Business Settings](https://business.facebook.com/settings) +- [Facebook Ads Manager](https://business.facebook.com/adsmanager) +- [Access Token Debugger](https://developers.facebook.com/tools/debug/accesstoken/) + +--- + +## Поддержка + +При возникновении проблем с получением или использованием учетных данных: + +1. Проверьте документацию Facebook Marketing API +2. Используйте [Access Token Debugger](https://developers.facebook.com/tools/debug/accesstoken/) для проверки токена +3. Убедитесь, что все разрешения запрошены и одобрены +4. Проверьте, что рекламный аккаунт активен и имеет необходимые права diff --git a/STRATEGY_EXECUTION_API.md b/STRATEGY_EXECUTION_API.md index 2896329..06caa63 100644 --- a/STRATEGY_EXECUTION_API.md +++ b/STRATEGY_EXECUTION_API.md @@ -586,6 +586,17 @@ try { - Для долгосрочного использования рекомендуется использовать Long-Lived Token - Токен должен иметь разрешения `pages_manage_posts` для публикации +**Для запуска рекламных кампаний в Facebook требуется дополнительная настройка:** + +📖 **Подробная инструкция:** См. [FACEBOOK_ADS_CREDENTIALS.md](./FACEBOOK_ADS_CREDENTIALS.md) + +Для рекламы нужны: + +- Access Token с разрешениями `ads_management`, `ads_read`, `business_management` +- Ad Account ID (формат: `act_XXXXXXXXX`) +- App ID и App Secret +- Page ID (опционально) + --- ## Примеры React компонентов diff --git a/marketing-analysis-api-updated-fields.md b/marketing-analysis-api-updated-fields.md new file mode 100644 index 0000000..97494e5 --- /dev/null +++ b/marketing-analysis-api-updated-fields.md @@ -0,0 +1,700 @@ +# API Документация: Обновленные поля для генерации бизнес-анализа (Frontend/AI Agent) + +## Обзор изменений + +API для генерации маркетингового анализа был обновлен с новыми полями, которые более точно отражают требования бизнес-анализа. Все старые поля были заменены новыми для улучшения качества анализа. + +--- + +## Изменения в структуре запроса + +### Удаленные поля (больше не используются) + +Следующие поля были **удалены** из API и больше не принимаются: + +- ❌ `location` - заменено на `region` +- ❌ `client` - заменено на `targetAudience` +- ❌ `differentiator` - заменено на комбинацию `businessNiche`, `strongSide`, `weakSide` + +### Новые обязательные поля + +| Поле | Тип | Обязательный | Описание | Пример значения | +| ---------------- | ------ | ------------ | -------------------------------------- | ------------------------------------------------------ | +| `businessNiche` | string | ✅ | Ниша бизнеса | "E-commerce платформы" | +| `product` | string | ✅ | Продукт или услуга | "Разработка мобильных приложений" | +| `targetAudience` | string | ✅ | Целевая аудитория (детальное описание) | "Малый и средний бизнес, владельцы интернет-магазинов" | +| `region` | string | ✅ | Регион (город Казахстана) | "Алматы" | +| `goal` | string | ✅ | Цель на 6-12 месяцев | "Увеличить количество клиентов на 50%" | +| `detailLevel` | string | ✅ | Уровень детализации анализа | "СТАНДАРТНО" | +| `analysisType` | string | ✅ | Тип анализа | "РЫНОК" | + +### Новые опциональные поля + +| Поле | Тип | Обязательный | Описание | Пример значения | +| ------------ | ------ | ------------ | ----------------------- | ------------------------------------------------- | +| `strongSide` | string | ❌ | Сильная сторона бизнеса | "Опытная команда разработчиков, быстрая доставка" | +| `weakSide` | string | ❌ | Слабая сторона бизнеса | "Ограниченный маркетинговый бюджет" | + +--- + +## Детальное описание полей + +### 1. `businessNiche` (обязательное) + +**Описание**: Ниша бизнеса, в которой работает компания. + +**Валидация**: + +- Минимальная длина: 3 символа +- Максимальная длина: 200 символов +- Разрешены: буквы, цифры, пробелы, дефисы, запятые +- Паттерн: `^[\p{L}\p{N}\s\-,]+$` + +**Примеры**: + +```json +"businessNiche": "E-commerce платформы" +"businessNiche": "Образовательные технологии" +"businessNiche": "Финансовые услуги для малого бизнеса" +``` + +--- + +### 2. `product` (обязательное) + +**Описание**: Конкретный продукт или услуга, которую предоставляет компания. + +**Валидация**: + +- Минимальная длина: 3 символа +- Максимальная длина: 200 символов +- Разрешены: буквы, цифры, пробелы, дефисы, запятые +- Паттерн: `^[\p{L}\p{N}\s\-,]+$` + +**Примеры**: + +```json +"product": "Разработка мобильных приложений" +"product": "Консультации по маркетингу" +"product": "Веб-разработка и дизайн" +``` + +--- + +### 3. `targetAudience` (обязательное) + +**Описание**: Детальное описание целевой аудитории. Это поле заменяет старое поле `client` и должно содержать более подробную информацию. + +**Валидация**: + +- Минимальная длина: 3 символа +- Максимальная длина: 300 символов +- Разрешены любые символы + +**Примеры**: + +```json +"targetAudience": "Малый и средний бизнес, владельцы интернет-магазинов в возрасте 30-50 лет" +"targetAudience": "Стартапы и технологические компании, нуждающиеся в быстрой разработке MVP" +"targetAudience": "Частные лица, желающие создать личный бренд в социальных сетях" +``` + +**Примечание**: В отличие от старого поля `client`, которое принимало только фиксированные значения, `targetAudience` принимает свободный текст для более гибкого описания. + +--- + +### 4. `region` (обязательное) + +**Описание**: Регион (город Казахстана), в котором работает бизнес. Это поле заменяет старое поле `location`. + +**Валидация**: + +- Должно быть одним из допустимых городов Казахстана +- Проверка выполняется через валидатор `@ValidRegion` + +**Допустимые значения** (точное совпадение): + +- `"Алматы"` +- `"Астана"` +- `"Шымкент"` +- `"Караганда"` +- `"Актобе"` +- `"Тараз"` +- `"Павлодар"` +- `"Усть-Каменогорск"` +- `"Семей"` +- `"Костанай"` +- `"Кызылорда"` +- `"Уральск"` +- `"Петропавловск"` +- `"Атырау"` +- `"Актау"` +- `"Туркестан"` +- `"Кокшетау"` +- `"Талдыкорган"` +- `"Экибастуз"` +- `"Рудный"` + +**Примеры**: + +```json +"region": "Алматы" +"region": "Астана" +"region": "Шымкент" +``` + +**Важно**: Значение должно точно совпадать с одним из допустимых городов (регистр важен). + +--- + +### 5. `goal` (обязательное) + +**Описание**: Цель бизнеса на период 6-12 месяцев. Это новое поле, которое помогает AI лучше понять приоритеты бизнеса. + +**Валидация**: + +- Минимальная длина: 10 символов +- Максимальная длина: 500 символов +- Разрешены любые символы + +**Примеры**: + +```json +"goal": "Увеличить количество клиентов на 50% за следующие 6 месяцев" +"goal": "Выйти на рынок соседних регионов и открыть 3 новых филиала" +"goal": "Повысить узнаваемость бренда и увеличить продажи через онлайн-каналы на 30%" +``` + +--- + +### 6. `detailLevel` (обязательное) + +**Описание**: Уровень детализации анализа. Влияет на объем и глубину генерируемого анализа. + +**Валидация**: + +- Должно быть одним из допустимых значений +- Проверка выполняется через валидатор `@ValidDetailLevel` + +**Допустимые значения** (точное совпадение, регистр важен): + +- `"КРАТКО"` - Краткий анализ (1-2 абзаца) +- `"СТАНДАРТНО"` - Стандартный анализ (3-5 абзацев) - **рекомендуется по умолчанию** +- `"ПОДРОБНО"` - Подробный анализ (5-8 абзацев) + +**Влияние на анализ**: + +| Уровень | Длина ответов | Количество рекомендаций | Детализация стратегии | +| ------------ | ------------- | ----------------------- | ------------------------ | +| `КРАТКО` | 1-2 абзаца | 3-4 рекомендации | Краткая | +| `СТАНДАРТНО` | 3-5 абзацев | 4-6 рекомендаций | Стандартная | +| `ПОДРОБНО` | 5-8 абзацев | 6-8 рекомендаций | Детальная с обоснованием | + +**Примеры**: + +```json +"detailLevel": "КРАТКО" +"detailLevel": "СТАНДАРТНО" +"detailLevel": "ПОДРОБНО" +``` + +--- + +### 7. `strongSide` (опциональное) + +**Описание**: Сильная сторона бизнеса. Помогает AI лучше понять конкурентные преимущества. + +**Валидация**: + +- Максимальная длина: 500 символов +- Разрешены любые символы +- Может быть пустым или отсутствовать + +**Примеры**: + +```json +"strongSide": "Опытная команда разработчиков с 10+ летним опытом, быстрая доставка проектов" +"strongSide": "Уникальная технология, низкие цены, отличная поддержка клиентов" +``` + +**Примечание**: Если поле не указано, AI будет анализировать сильные стороны на основе других данных. + +--- + +### 8. `weakSide` (опциональное) + +**Описание**: Слабая сторона бизнеса. Помогает AI лучше понять области для улучшения. + +**Валидация**: + +- Максимальная длина: 500 символов +- Разрешены любые символы +- Может быть пустым или отсутствовать + +**Примеры**: + +```json +"weakSide": "Ограниченный маркетинговый бюджет, недостаточная узнаваемость бренда" +"weakSide": "Небольшая команда, ограниченные ресурсы для масштабирования" +``` + +**Примечание**: Если поле не указано, AI будет анализировать слабые стороны на основе других данных. + +--- + +### 9. `analysisType` (обязательное) + +**Описание**: Тип анализа, который необходимо провести. Поле осталось без изменений. + +**Допустимые значения**: + +- `"РЫНОК"` - Анализ рынка +- `"КОНКУРЕНТЫ"` - Анализ конкурентов +- `"ЦА"` - Анализ целевой аудитории +- `"КАНАЛЫ"` - Анализ маркетинговых каналов +- `"SWOT"` - SWOT-анализ + +--- + +## Полный пример запроса + +### POST `/api/marketing/analysis/start` + +```json +{ + "businessNiche": "E-commerce платформы", + "product": "Разработка мобильных приложений для интернет-магазинов", + "targetAudience": "Малый и средний бизнес, владельцы интернет-магазинов в возрасте 30-50 лет, нуждающиеся в мобильных решениях", + "region": "Алматы", + "goal": "Увеличить количество клиентов на 50% за следующие 6 месяцев и выйти на рынок соседних регионов", + "detailLevel": "СТАНДАРТНО", + "strongSide": "Опытная команда разработчиков с 10+ летним опытом, быстрая доставка проектов, использование современных технологий", + "weakSide": "Ограниченный маркетинговый бюджет, недостаточная узнаваемость бренда в новых регионах", + "analysisType": "РЫНОК" +} +``` + +--- + +## Примеры использования на фронтенде + +### JavaScript/TypeScript + +```typescript +interface MarketingAnalysisRequest { + businessNiche: string; + product: string; + targetAudience: string; + region: string; + goal: string; + detailLevel: 'КРАТКО' | 'СТАНДАРТНО' | 'ПОДРОБНО'; + strongSide?: string; + weakSide?: string; + analysisType: 'РЫНОК' | 'КОНКУРЕНТЫ' | 'ЦА' | 'КАНАЛЫ' | 'SWOT'; +} + +// Список допустимых регионов +const VALID_REGIONS = [ + 'Алматы', + 'Астана', + 'Шымкент', + 'Караганда', + 'Актобе', + 'Тараз', + 'Павлодар', + 'Усть-Каменогорск', + 'Семей', + 'Костанай', + 'Кызылорда', + 'Уральск', + 'Петропавловск', + 'Атырау', + 'Актау', + 'Туркестан', + 'Кокшетау', + 'Талдыкорган', + 'Экибастуз', + 'Рудный', +]; + +// Список уровней детализации +const DETAIL_LEVELS = ['КРАТКО', 'СТАНДАРТНО', 'ПОДРОБНО'] as const; + +// Функция для отправки запроса +async function startMarketingAnalysis( + data: MarketingAnalysisRequest +): Promise { + const response = await fetch( + 'https://api.konturai.kz/api/marketing/analysis/start', + { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer YOUR_JWT_TOKEN', // Если требуется + }, + body: JSON.stringify(data), + } + ); + + const result = await response.json(); + + if (!result.success) { + throw new Error(result.error?.message || 'Failed to start analysis'); + } + + return result.data.analysisId; +} + +// Пример использования +const analysisId = await startMarketingAnalysis({ + businessNiche: 'E-commerce платформы', + product: 'Разработка мобильных приложений', + targetAudience: 'Малый и средний бизнес, владельцы интернет-магазинов', + region: 'Алматы', + goal: 'Увеличить количество клиентов на 50% за следующие 6 месяцев', + detailLevel: 'СТАНДАРТНО', + strongSide: 'Опытная команда, быстрая доставка', + weakSide: 'Ограниченный маркетинговый бюджет', + analysisType: 'РЫНОК', +}); +``` + +### React компонент с формой + +```tsx +import React, { useState } from 'react'; + +const MarketingAnalysisForm: React.FC = () => { + const [formData, setFormData] = useState({ + businessNiche: '', + product: '', + targetAudience: '', + region: '', + goal: '', + detailLevel: 'СТАНДАРТНО', + strongSide: '', + weakSide: '', + analysisType: 'РЫНОК', + }); + + const handleSubmit = async (e: React.FormEvent) => { + e.preventDefault(); + + try { + const analysisId = await startMarketingAnalysis(formData); + console.log('Analysis started:', analysisId); + // Перенаправление на страницу с результатами + } catch (error) { + console.error('Error:', error); + } + }; + + return ( +
+
+ + + setFormData({ ...formData, businessNiche: e.target.value }) + } + required + minLength={3} + maxLength={200} + /> +
+ +
+ + + setFormData({ ...formData, product: e.target.value }) + } + required + minLength={3} + maxLength={200} + /> +
+ +
+ +