
Прайс поставщика в Excel на одном конце, карточка маркетплейса на другом, а между ними — работа, которая не делается руками на тысячах позиций. Показываем конвейер, который мы собрали на 1С-Битрикс для магазина HOFER FD — продавца автозапчастей бренда HÖFER: где берутся недостающие данные, как рисуются восемь изображений и видео на товар и сколько это стоит по часам.
У продавца на маркетплейсе есть две вещи: прайс от поставщика в Excel и кабинет продавца. Между ними — работа, которую обычно делают руками: разложить номенклатуру по требованиям площадки, найти то, чего в прайсе нет, написать описания, собрать картинки, снять видео. На сотне товаров это терпимо. На пяти тысячах — не делается вообще.
Для магазина HOFER FD — продавца автозапчастей бренда H?FER — мы собрали конвейер, который проходит этот путь сам: на входе прайс как прислали, на выходе карточка на Ozon с рейтингом контента 100 из 100. В статье рассказываем, из чего он собран, что оказалось неочевидным и сколько такое стоит по времени.
Четыре звена конвейера. Прайс не правим никогда — следующий придёт такой же
У заказчика — ООО «Бюро проектов „Фьюжн“», магазин HOFER FD на Ozon — есть прайс поставщика: 1 566 строк, 86 товарных групп, около 1 460 позиций. В прайсе лежит скелет: наименование, артикул, OE-номер, кросс-номера, норма упаковки, цена. И всё.
Ozon для той же позиции хочет заметно больше: развёрнутое наименование, аннотацию, вид и место установки, код ТН ВЭД, вес и три габарита упаковки, восемь и больше изображений, видео. Половины этого в прайсе нет физически.
Задача звучала так: сделать так, чтобы недостающее добиралось само, а не набивалось вручную. Ассортимент планируется расширять до пяти тысяч позиций — там ручная работа не масштабируется ни за какие деньги.
Первое, о чём думаешь, — написать скрипт. Мы так не сделали, и вот почему.
Всё, что нужно этому конвейеру, в «1С-Битрикс» уже есть готовым: хранилище номенклатуры со свойствами любой формы, импорт из Excel с преобразованиями полей, генератор изображений по шаблону, выгрузка в Seller API. Каждый кусок — существующий модуль, который поддерживает его автор, а не мы. Своя строка кода — это долг: чинить и обновлять придётся самим.
Поэтому Битрикс здесь работает не витриной, а станком. Публичная часть сайта выключена намеренно — смотреть на конвейер некому, он не для посетителей. Единственный критерий любого решения: годится ли результат для выгрузки на Ozon.
Из этого следует приятное: хватает редакции «Старт». Торгового каталога и «Интернет-магазина» в ней нет, и это проверено — не мешает. И импорт, и выгрузка работают на инфоблоках, беря цены, остатки и габариты из обычных свойств.
Прайс поставщика мы не правим никогда: следующий придёт в том же виде, и правка не переживёт. Вместо этого рядом появляется рабочая Google-таблица — тот же прайс, разложенный под загрузку.
Столбцы источника остаются нетронутыми, наши начинаются правее. Смысл в том, что таблица — общий стол: в ней работает заказчик (цены и наценка — его зона), в ней работаем мы, и она же уходит на импорт. Ничего не надо пересылать и сводить.
Правая часть таблицы: габариты и их источник, аннотация, вид колодок, ТН ВЭД и блок промптов — он всегда последний
Грабля, на которую наступают все. Модуль импорта различает категории и товары не по содержимому, а по оформлению строки: ей нужны одновременно заливка и объединённые ячейки по всей ширине. Мы перенесли клиентский файл в Google-таблицу голыми значениями — и модуль перестал видеть имена разделов. Ошибка молчит: глазами всё верно, значения на месте, а разделы не парсятся. Поэтому таблицу для импорта правят поверх существующей, а не пересобирают из данных.
Второе правило родилось само: новые столбцы добавляются до блока промптов, а промпты всегда идут последними. Иначе через месяц в таблице тридцать столбцов вперемешку, и в ней невозможно работать.
Часть недостающего берётся с официального сайта бренда, и это самый честный источник: развёрнутое наименование, комплектация, применяемость (марка / модель / годы), OE и Ref-номера, фотографии. Сборщик обходит сотню с лишним карточек за три минуты и не требует ни прокси, ни браузера.
А вот весогабариты в открытом доступе почти отсутствуют — и это главный вывод всей истории.
Мы перебрали двенадцать каталогов и маркетплейсов. Итог:
Вывод устойчивый: массового источника весогабаритов в открытом доступе нет. Их публикуют продавцы маркетплейсов, а маркетплейсы закрыты. Значит схема должна работать без них.
Поиск не по артикулу. Один каталог на запрос по артикулу колодок Chevrolet Captiva уверенно выдал колодки Lada Vesta. Данные пришли настоящие — просто не про тот товар. Источник годится только тогда, когда артикул на найденной карточке совпадает с запрошенным, и это проверяется программно, а не глазами.
Размер детали вместо размера коробки. Внешне не отличить: числа правдоподобные, поля заполнены. Проверяется плотностью: разделите вес на объём. У коробки с колодками выходит 0,3–1,5 г/см³; если получилось 7,3 — это плотность сплошной стали, и в источнике указан размер самого изделия. У нас такая проверка стоит отдельным скриптом и отбраковывает строки до того, как они уедут в карточку.
И мелочь, которая стоит часа: размеры почти везде отдаются в метрах, вес в килограммах, а Ozon просит миллиметры и граммы. Приводить к одному виду надо при разборе, а не «потом в таблице».
Схема в итоге двухслойная. Что нашлось — берём фактом. Остальное закрываем типовым значением по категории (медианой собранных) и честно помечаем это в отдельном столбце «Источник габаритов».
Так делать можно, потому что пустое поле роняет карточку на валидации, а помеченная оценка видна глазами и правится точечно. У колодок разброс невелик, а Ozon всё равно перемеряет посылку при приёмке. Заказчик видит, где факт, а где оценка, и может уточнить любую строку сам.
Аннотация нужна каждой позиции, и писать её руками на пяти тысячах товаров бессмысленно. Мы не стали гонять тексты через отдельный сервис: генерация живёт прямо в Google-таблице, надстройкой с моделью.
Устроено так:
Промпт живёт формулой не для красоты: поправили данные в строке — промпт изменился сам, и перегенерация не требует переписывания заданий. На тестовой категории 132 описания сгенерировались примерно за минуту, длина 261–438 знаков, все уникальные.
Три вещи, которые стоит знать заранее:
Медиа весит в рейтинге Ozon больше всего, и восемь кадров дают за него максимум. Собираются они тремя разными способами и ни один — руками.
Его рисует наш модуль wintra.genimgmarketplace: один шаблон на всю категорию, послойная композиция, 132 картинки за прогон.
Каждый слой берёт значение из своего источника: фон — из шаблона, фото — с сайта бренда, текст — из свойств товара
Текстовые слои умеют считать: наименование склеивается из раздела каталога и свойства «Вид колодок» и обрезается по длине контейнера, применяемость переносится по строкам, длинный список Ref-номеров ломается и закрывается многоточием. Это важнее, чем кажется: без ограничения длины строка просто уезжает за край картинки, и заметно это только на просмотре всех 132 файлов подряд.
Дальше — карусель. Здесь мы разделили слайды на общие (годятся любой категории) и категорийные.
Новая категория стоит двух новых файлов — профиль импорта при этом не трогают
Ключевая деталь схемы: категорийный слайд ищется не по ID раздела и не по его названию. Причина простая — при первом импорте разделы только создаются, их ID ещё не существует. Зато в строке уже лежит артикул, а у артикула есть смысловая средняя часть: «HF 350 960» ? 350. По ней и идёт подбор. Импорт забирает слайды двумя масками: общие и категорийные.
Что нельзя рисовать на слайдах. Ozon запрещает на дополнительных фото информацию о доставке и возврате — сроки, стоимость, способ, географию, скорость. Наш слайд «Доставка и оплата» получил замечание модерации целиком и был заменён. Под тот же запрет попадает безобидное на вид «отгружаем со склада в Самаре». Заодно мы убрали со слайдов сроки гарантии, контакты, рейтинг магазина и число заказов: последние два меняются, а картинка нет.
Главное изображение, фотографии с сайта бренда и четыре слайда — восемь кадров в каждой карточке
Видео в рейтинге Ozon даёт +40 к группе «Медиа». Без него общий рейтинг упирается в 82 балла, сколько ни заполняй остальное. При этом генератора видео в Seller API нет вовсе: площадка принимает только ссылку на готовый файл.
Значит ролики надо собирать самим — и на 132 позиции это уже не ручная работа. Мы собрали видеообложки из кадров той же галереи: растворение между кадрами, вертикальный формат под карточку, имя файла равно слитному артикулу, чтобы импорт подхватил без сопоставления.
Требования площадка отдаёт сама, в описании атрибутов: видеообложка — MP4 или MOV, 8–30 секунд, до 20 МБ. Здесь есть тихая ловушка: кроссфейды съедают время внахлёст. Восемь кадров по 1,25 секунды дают на выходе 7,6 секунды — то есть меньше минимума, и файл отбивается. Поэтому длительность считается от целевой, а каждый готовый файл проверяется программно.
Выгрузку ведёт модуль webprostor.ozon: профиль на категорию, товары, цены и остатки через Seller API.
Здесь главная особенность площадки: у Ozon своя структура атрибутов на каждую категорию. Это значит, что профиль выгрузки настраивается по каждой категории отдельно — универсального «залить весь прайс» не бывает в принципе.
И самое дорогое из мелочей: значение словарного атрибута должно совпадать со справочником Ozon побайтно. Площадка принимает строку молча, но без точного совпадения ставит нулевой идентификатор значения и роняет валидацию. Выглядит это как «импорт прошёл успешно, а карточка не публикуется». Поэтому словари категории мы выгружаем из API и подставляем значения из них, а не набираем руками.
Формула проверена на живых цифрах карточки
Тестовая карточка набрала 100 баллов: медиа 100, текст 100, атрибуты 100. Посмотреть её можно прямо сейчас — колодки H?FER HF 350 563 на Ozon.
Цены модулей открыты, ссылки ниже — считайте сами. Интереснее часы, потому что именно они определяют объём работы.
Фундамент — один раз на весь проект:
Дальше работа идёт категориями — «колодки», «амортизаторы», «фильтры» и так далее, включая подкатегории. На каждую:
Итого около 8 часов работы контент-менеджера на категорию. И вот что важно: количество товаров внутри категории почти не влияет. Десять позиций или сто тридцать — работа одна и та же. Десяток проще сделать руками; со ста — конвейер уже окупается, а с тысячей альтернативы нет.
Любому продавцу, который выходит на маркетплейсы с чужим прайсом и большим ассортиментом:
Особенно — если ассортимент регулярно обновляется. Разовую выгрузку можно пережить руками; ежемесячную с новыми позициями — нет.
Схема не привязана к Ozon: Wildberries, Яндекс.Маркет и Авито отличаются требованиями к размерам картинок и составом атрибутов, а звенья конвейера остаются те же.
Соберём такой же конвейер под ваш прайс: развернём площадку, настроим импорт, найдём источники недостающих данных, сделаем шаблон картинок под ваш бренд и профиль выгрузки под ваши категории. Начинаем с одной тестовой категории — на ней видно и результат, и объём работы по остальным.
Напишите нам на info@wintramedia.ru или оставьте заявку на wintramedia.ru — посмотрим ваш прайс и скажем, что в нём есть, а что придётся добирать.