Files
marketing-parser/FRONTEND_API_CHANGES_MARKETING_ANALYSIS.md
T
2025-12-14 20:43:09 +05:00

324 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Изменения в API маркетингового анализа
## Обзор изменений
Проведен рефакторинг метода генерации JSON-анализа для повышения детализации данных. Структура ответа API для фронтенда **осталась прежней**, но изменилась внутренняя структура данных в `chartsData`.
## Структура ответа API (без изменений)
Ответ API остается прежним:
```json
{
"analysisId": "string",
"status": "completed",
"createdAt": "2024-01-01T00:00:00",
"completedAt": "2024-01-01T00:05:00",
"report": {
"summary": "string",
"fullAnalysis": "string",
"chartsData": {
/* ИЗМЕНЕНИЯ ЗДЕСЬ */
},
"targetAudience": {
"description": "string",
"channels": ["Instagram", "Telegram"]
},
"recommendations": ["string"],
"strategy": {
"duration": "2 недели",
"channels": ["Instagram", "Telegram"],
"contentTypes": ["посты", "сторис"]
},
"pdfUrl": "/api/marketing/analysis/{id}/download"
}
}
```
## Изменения в `chartsData`
### 1. Анализ аудитории (`audienceSegmentation`)
**Было:**
```json
{
"audienceSegmentation": {
"ageGroups": [{ "label": "25-34", "value": "40" }],
"genders": [{ "label": "Женщины", "value": "60" }],
"segments": [{ "label": "Сегмент 1", "value": "35" }]
}
}
```
**Стало (расширенная структура):**
```json
{
"audienceSegmentation": {
"ageGroups": [
{ "label": "18-24", "value": "15" },
{ "label": "25-34", "value": "40" },
{ "label": "35-44", "value": "30" },
{ "label": "45+", "value": "15" }
],
"genders": [
{ "label": "Женщины", "value": "60" },
{ "label": "Мужчины", "value": "40" }
],
"segments": [
{
"label": "Молодые профессионалы",
"value": "35"
}
],
"segmentsChannelMatrix": [
// ← НОВОЕ
{
"segmentName": "Молодые профи",
"instagram": "high",
"telegram": "medium",
"youtube": "low"
}
],
"keyTakeaways": [
// ← НОВОЕ
"Вывод 1",
"Вывод 2",
"Вывод 3"
]
}
}
```
**Что изменилось:**
- ✅ Структура `ageGroups`, `genders`, `segments` осталась прежней
- Добавлено поле `segmentsChannelMatrix` — матрица соответствия сегментов и каналов (heatmap)
- Добавлено поле `keyTakeaways` — ключевые выводы по аудитории
### 2. Анализ конкурентов (`competitors`)
**Было:**
```json
{
"competitors": [
{
"name": "Конкурент А",
"reach": 50000,
"activity": 85,
"reviews": 1200,
"strengths": "Не указано",
"weaknesses": "Не указано"
}
]
}
```
**Стало (расширенная структура):**
```json
{
"marketShareChart": [
// ← НОВОЕ
{ "name": "Наш бренд", "value": 25 },
{ "name": "Конкурент А", "value": 30 },
{ "name": "Конкурент B", "value": 20 },
{ "name": "Другие", "value": 25 }
],
"competitors": [
{
"name": "Конкурент А",
"reach": 50000,
"followers": 12000, // ← НОВОЕ
"activity": 85,
"priceStrategy": "Высокая", // ← НОВОЕ
"channelsHeatmap": {
// ← НОВОЕ
"Instagram": 90,
"TikTok": 20,
"Telegram": 70,
"YouTube": 40
}
}
],
"comparisonTable": [
// ← НОВОЕ
{
"feature": "Ценовая политика",
"us": "Средняя",
"compA": "Высокая",
"compB": "Низкая"
}
],
"swotCompetitors": {
// ← НОВОЕ
"strengths": ["..."],
"weaknesses": ["..."]
}
}
```
**Что изменилось:**
- ✅ Массив `competitors` остался, но с дополнительными полями
- Добавлено поле `marketShareChart` — доли рынка для графика
- Добавлено поле `comparisonTable` — сравнительная таблица характеристик
- Добавлено поле `swotCompetitors` — SWOT-анализ по рынку
- ➕ В объектах конкурентов добавлены: `followers`, `priceStrategy`, `channelsHeatmap`
### 3. Сезонность (`seasonality`)
**Без изменений:**
```json
{
"seasonality": {
"Январь": 45,
"Февраль": 50,
"Март": 60
// ... остальные месяцы
}
}
```
### 4. Рынок (`market`) — НОВОЕ
**Добавлено:**
```json
{
"market": {
"size": "средний",
"growthRate": "растущий",
"trends": ["Тренд 1", "Тренд 2"],
"opportunities": ["Возможность 1"],
"threats": ["Угроза 1"]
}
}
```
## Обратная совместимость
Для обеспечения обратной совместимости, следующие поля могут присутствовать в `chartsData` (если использовалась старая структура):
- `channelsPotential` — каналы продвижения
- `conversionFunnel` — воронка конверсии
- `swot` — SWOT-анализ
**Рекомендация:** Используйте новые поля, но проверяйте наличие старых для обратной совместимости.
## Миграция фронтенда
### Шаг 1: Обновите обработку `audienceSegmentation`
```typescript
// Было
const ageGroups = chartsData.audienceSegmentation?.ageGroups || [];
const genders = chartsData.audienceSegmentation?.genders || [];
const segments = chartsData.audienceSegmentation?.segments || [];
// Стало (добавьте новые поля)
const ageGroups = chartsData.audienceSegmentation?.ageGroups || [];
const genders = chartsData.audienceSegmentation?.genders || [];
const segments = chartsData.audienceSegmentation?.segments || [];
const segmentsChannelMatrix =
chartsData.audienceSegmentation?.segmentsChannelMatrix || []; // НОВОЕ
const keyTakeaways = chartsData.audienceSegmentation?.keyTakeaways || []; // НОВОЕ
```
### Шаг 2: Обновите обработку конкурентов
```typescript
// Было
const competitors = chartsData.competitors || [];
// Стало (добавьте новые поля)
const marketShareChart = chartsData.marketShareChart || []; // НОВОЕ
const competitors = chartsData.competitors || [];
const comparisonTable = chartsData.comparisonTable || []; // НОВОЕ
const swotCompetitors = chartsData.swotCompetitors || {}; // НОВОЕ
// Обновите обработку объектов конкурентов
competitors.forEach((comp) => {
const followers = comp.followers; // НОВОЕ
const priceStrategy = comp.priceStrategy; // НОВОЕ
const channelsHeatmap = comp.channelsHeatmap; // НОВОЕ
});
```
### Шаг 3: Добавьте обработку рынка
```typescript
// НОВОЕ
const market = chartsData.market || {};
const marketSize = market.size;
const growthRate = market.growthRate;
const trends = market.trends || [];
const opportunities = market.opportunities || [];
const threats = market.threats || [];
```
## Примеры использования новых данных
### 1. Heatmap сегментов и каналов
```typescript
const segmentsChannelMatrix =
chartsData.audienceSegmentation?.segmentsChannelMatrix || [];
// Отображение heatmap
segmentsChannelMatrix.forEach((row) => {
const segmentName = row.segmentName;
const instagram = row.instagram; // "high" | "medium" | "low"
const telegram = row.telegram;
const youtube = row.youtube;
// ... отрисовка heatmap
});
```
### 2. График долей рынка
```typescript
const marketShareChart = chartsData.marketShareChart || [];
// Отображение pie chart
marketShareChart.forEach((item) => {
const name = item.name; // "Наш бренд", "Конкурент А", etc.
const value = item.value; // процент доли рынка
// ... отрисовка графика
});
```
### 3. Сравнительная таблица
```typescript
const comparisonTable = chartsData.comparisonTable || [];
// Отображение таблицы
comparisonTable.forEach((row) => {
const feature = row.feature; // "Ценовая политика", "УТП", etc.
const us = row.us;
const compA = row.compA;
const compB = row.compB;
// ... отрисовка таблицы
});
```
## Резюме изменений
| Поле | Статус | Описание |
| --------------------------------- | ---------------- | -------------------------------------------------------------- |
| `chartsData.audienceSegmentation` | ✅ Расширено | Добавлены `segmentsChannelMatrix` и `keyTakeaways` |
| `chartsData.competitors` | ✅ Расширено | Добавлены поля `followers`, `priceStrategy`, `channelsHeatmap` |
| `chartsData.marketShareChart` | ➕ Новое | График долей рынка |
| `chartsData.comparisonTable` | ➕ Новое | Сравнительная таблица |
| `chartsData.swotCompetitors` | ➕ Новое | SWOT-анализ по рынку |
| `chartsData.market` | ➕ Новое | Данные о рынке |
| `chartsData.seasonality` | ✅ Без изменений | Осталось прежним |
## Вопросы?
Если возникнут вопросы по миграции, обращайтесь к бэкенд-команде.