Плейбук: цены покупателя Ozon
Назначение
Система ежедневно в 09:00 МСК сохраняет цены из таблицы товаров Ozon Seller.
Собирается отдельная строка на (shop_id, offer_id, московская дата), поэтому
размеры не смешиваются: HZ030-Blue-S, HZ030-Blue-M и HZ030-Blue-L — три
разные наблюдения.
Источник — авторизованный Chrome-профиль конкретного магазина. Кабинет делает
read-only запрос POST /api/v1/products/list-by-filter; из его ответа нужны:
| Поле | Значение |
|---|---|
part_price.user_price |
цена продавца («Ваша цена») |
part_marketing_price.price |
цена для покупателя |
part_marketing_price.oa_price |
цена с Ozon Картой |
part_price.old_price |
зачёркнутая цена |
part_price.min_price |
минимально допустимая цена |
Публичный Ozon Seller API не подменяет этот источник: его price.price может
быть ценой продавца, а customer_price закрыт для данного ключа.
Подключение магазина
Правило общее: если Ozon-магазин подключён к системе (заказы, продажи, остатки
или реклама), он автоматически попадает в таблицу профилей со статусом
pending. До отдельного Chrome-профиля и ручной авторизации снимок не
собирается и помечается «ожидает авторизацию».
Для готового профиля зарегистрировать CDP-порт:
.venv/bin/python scripts/collect_ozon_buyer_prices.py \
--configure-profile --shop-id <ID> --profile-name '<магазин>' \
--debug-url http://127.0.0.1:<PORT> --status ready
Исследования
Цена и реклама
Соединяем ozon_buyer_price_daily с ozon_ad_metrics_daily по shop_id,
offer_id и дате. Смотрим не только тот же день, но и лаги 1–3 дня после
старта/остановки кампании. Цена покупателя, цена с Ozon Картой и цена продавца
анализируются раздельно.
Цена и заказы
Соединяем снимки с ozon_postings + ozon_posting_items по магазину, артикулу
и дате создания заказа. Метрика — заказы/единицы в день при данной цене.
Ограничения вывода
Корреляция не доказывает, что реклама снизила цену. В модель проверки добавляем акции/скидки Ozon, остатки и дни без рекламы. Один снимок в 09:00 описывает цену в этот момент; изменения внутри дня он не ловит.
Сбои
Если компьютер/Chrome-профиль недоступен или сессия Ozon истекла, создаётся
строка ozon_buyer_price_runs со статусом error; задним числом снимок не
догружается. После повторного входа следующий снимок идёт по обычному графику.
Уведомление
После ежедневного снимка цен в 09:00 МСК системный Telegram-бот отправляет
одно сообщение: итог цен за сегодня и ночного трафика за вчера. Он использует
уже настроенные на сервере ALERT_BOT_TOKEN и ALERT_CHAT_ID; токены не
хранятся в коде или плейбуке. При ошибке любого из двух сборов сообщение всё
равно отправляется со статусом ОШИБКА и краткой причиной.