BR 6.5: OSINT-разведчик конкурентов
Демо 29.05.2026 — Сценарий 4 (часть 2)
Этот BR закрывает OSINT-разведку Сценария 4: автоматически собираем данные о всех конкурентах рядом с твоей ТТ через открытые источники (2ГИС, Yandex Maps, Telegram, IG/VK, Avito и др.) и через LLM превращаем сырьё в инсайты. Превью — HTML-демо.
Зависит от:
- BR 6.4 — использует LLM-провайдера для генерации инсайтов
- Store Service — координаты ТТ для геопоиска конкурентов
- ADR-023 (создать) — юридическая позиция и провайдер прокси
Контекст
Сейчас в продукте нет автоматической разведки конкурентов. Маркетолог делает это вручную — заходит в 2ГИС, читает отзывы соседей, смотрит их IG / TG. Это не масштабируется и теряет 80% событий (например, конкурент запустил −30% завтраки — узнаешь через неделю, когда уже теряешь утреннюю выручку).
OSINT-разведчик = автоматический сбор всех публичных данных + LLM-обработка. На демо это второй после AI-постера wow-эффект: «ваш ERP знает о соседях больше, чем они сами».
Что хочет бизнес
Маркетолог открывает «AI-аналитика → Конкуренты», видит:
- Радар на 500 м — карта/радар вокруг твоей ТТ с найденными конкурентами
- Карточки конкурентов — название, средний чек, отзывы (★), последний пост в соцсетях, активность
- Алерты — конкурент с критичным изменением (новое промо, рост подписчиков, плохие отзывы)
- Инсайты от LLM — «Coffee Lab запустил −30% завтраки 4 дня назад, +820 подписчиков в TG, потеряешь 12% утра — запусти контр-промо»
Функции «OSINT-разведчика»
- Поиск конкурентов — по координатам ТТ через 2ГИС/Yandex Maps в радиусе 500 м
- Сбор отзывов — рейтинги, последние отзывы, тренды (улучшается / ухудшается)
- Парсинг соцсетей — публичные TG-каналы (через Telethon), IG (через proxy), VK (через API)
- Анализ промо — какие акции у конкурентов, как часто, в какое время
- LLM-инсайты — превращение сырых данных в action-рекомендации
- Ручной запуск скана — кнопка «Просканировать сейчас» для демо
Поток
Cron (раз в сутки) — обходит все ТТ → запускает скан
↓
Для каждой ТТ:
- 2ГИС / Yandex Maps: ищет соседей в 500 м, тянет отзывы и фото витрины
- Telethon: парсит публичные TG-каналы (если знаем @имя)
- IG / VK / Avito: парсит публичные посты конкурентов
- Сохраняет в competitor_data_point с timestamp
↓
Раз в день:
- LLM-провайдер (TBD, см. BR 6.4) получает агрегаты за последние 7 дней
- Генерирует insight'ы для UI (что важно, что критично)
Пользователи
| Профиль | Кто | Permissions |
|---|---|---|
| Маркетолог / владелец ТТ | Видит конкурентов своей ТТ | osint.read |
| Администратор франшизы | Видит всё, настраивает источники | osint.read.all, osint.config |
Сущности
competitor
| Поле | Тип | Описание |
|---|---|---|
id | UUID | PK |
store_id | UUID | Привязка к нашей ТТ |
name | VARCHAR | «Coffee Lab», «Pizza District» |
category | VARCHAR | «coffee», «pizza», «burger» |
lat, lng | DECIMAL | Координаты |
distance_m | INTEGER | Расстояние до нашей ТТ |
sources | JSONB | { "2gis_id": "...", "tg_channel": "@coffee_lab", "ig_handle": "...", "vk_id": "..." } |
is_alert | BOOLEAN | Текущий состояние (зелёный / красный) |
created_at, last_scanned_at | TIMESTAMPTZ |
competitor_data_point
| Поле | Тип | Описание |
|---|---|---|
id | UUID | PK |
competitor_id | UUID FK | |
source | ENUM | 2gis / yandex_maps / telegram / instagram / vk / avito |
kind | ENUM | review / post / promo / rating / photo |
payload | JSONB | Сырьё (текст, рейтинг, URL) |
captured_at | TIMESTAMPTZ |
osint_insight
| Поле | Тип | Описание |
|---|---|---|
id | UUID | PK |
store_id | UUID | |
competitor_id | UUID FK | Иногда null (если про общий тренд) |
severity | ENUM | info / warning / critical |
text | TEXT | На русском |
data_refs | JSONB | Какие data_point’ы использовались |
expires_at | TIMESTAMPTZ | |
generated_at | TIMESTAMPTZ |
API (новый osint-service)
| Метод | Путь | Описание |
|---|---|---|
| GET | /api/v1/admin/osint/competitors?store_id= | Список конкурентов своей ТТ |
| GET | /api/v1/admin/osint/competitors/{id}/data?period=7d | История данных по конкуренту |
| GET | /api/v1/admin/osint/insights?store_id= | Текущие LLM-инсайты |
| POST | /api/v1/admin/osint/scan?store_id= | Принудительный запуск скана (для демо) |
| POST | /api/v1/admin/osint/competitors | Добавить конкурента вручную (если не нашли автоматически) |
Источники
Приоритет от пользователя — все в работе:
| Источник | Доступ | Сложность |
|---|---|---|
| 2ГИС | Official API (если есть ключ) или scraping | Низкая — есть structured API |
| Yandex Maps | Same | Низкая |
| Telegram | Telethon (account-based) или Bot API | Средняя — нужен telegram-бот / account |
| Заблокирован в РФ → нужен proxy + парсер | Высокая — fragile, ToS-риски | |
| VK | Official VK API | Низкая |
| Avito | Scraping (нет official API для бизнеса) | Средняя |
| TripAdvisor / Restoclub / Yandex.Eda | Scraping или proxy | Средняя |
Для MVP к 29.05 — старт с 2ГИС, Yandex Maps, Telegram. Остальные — добавляем по мере готовности.
Технологический стек
Новый сервис erp-osint-service. Язык — обсудим в спеках:
- Python + FastAPI — стандарт для OSINT-стека (Scrapy, Telethon, BeautifulSoup, Playwright)
- Java + Spring Boot — консистентно с остальными ERP-сервисами, но менее удобная экосистема скраперов
Скорее Python.
Compliance и риски
Юридические риски
Scraping не всех источников легален. ToS большинства площадок запрещают автоматический сбор. Для банковского продукта это критичный момент.
Закрепить в ADR-023 (создать как папку-блокер):
- Юридическая позиция (внутренний legal-обзор)
- Провайдер прокси (если IG / Avito)
- Rate-limiting и идентификация бота (User-Agent, headers)
- Хранение только публичных данных (никаких приватных профилей)
Новые permissions
| Ключ | Описание |
|---|---|
osint.read | Просмотр конкурентов и инсайтов своей ТТ |
osint.read.all | Просмотр по всей франшизе |
osint.config | Настройка источников, добавление конкурентов |
Что НЕ входит в текущий скоуп
- Парсинг приватных IG / TG каналов — запрещено законом
- Распознавание лиц на фото конкурентов — отдельный сервис, Phase 2
- Sentiment-анализ отзывов (положительный / отрицательный) — Phase 2
- Push-уведомления о критических алертах — Phase 2
- Сравнение цен на товары — отдельный модуль pricing-intelligence, Phase 2
Затронутые сервисы и продукты
| Компонент | Что меняется |
|---|---|
| erp-osint-service (новый) | Python + FastAPI, БД osint_db, cron, REST API, scraping-modules |
| LLM-провайдер | Используется для генерации osint_insight. Самопис erp-llm-gateway отказан 2026-05-13 — см. BR 6.4 |
| admin-bff | Прокси для /osint/* эндпоинтов |
| erp-admin/web | Вкладка «Конкуренты» внутри раздела «AI-аналитика» |
| erp-user-service | Permissions osint.read, osint.read.all, osint.config |
Acceptance criteria для демо 29.05
- Раздел «AI-аналитика → Конкуренты» открывается
- Радар на 500 м показывает 4–6 реальных конкурентов вокруг демо-ТТ
- Карточки конкурентов с реальными отзывами / постами / промо за последние 7 дней
- Один конкурент — в alert-состоянии (новое промо, рост подписчиков)
- 2–3 LLM-инсайта на русском — упоминают конкретные конкуренты и цифры
- Кнопка «Просканировать сейчас» работает — через ≤ 15 секунд карточки обновляются
Ссылки
- HTML-превью демо
- BR 6.4 — LLM-провайдер
- ADR-023 — OSINT compliance и провайдер прокси (создать)
- Спека: OSINT-разведчик