Найти в Дзене

Выход на Ozon с автоматизацией всего: импорт 15000 товаров + генерация фото + заказы в Telegram

Импорт на Ozon товаров из каталога, включающего
более 15000 SKU от поставщиков с разными складскими остатками, условиями
доставки и ценообразованием, не имеющего единого формата данных,
с автоматической генерацией изображений и описаний для карточек товаров
и выгрузкой заказов в админку сайта. Наш клиент — сеть шинных центров «ШинСнаб.рф» — сотрудничает с различными поставщиками шин и дисков и имеет несколько собственных удаленных складов. У каждого поставщика свой формат представления данных: у кого-то есть API, кто-то в XML выгружает, а кто-то по старинке шлет в Excel на почту. Конечно, же состав данных, значения характеристик и прочее не имеют никакого унифицированного формата, каждый как может, так и делает. У каждого поставщика — порядка 6000 наименований шин и 9000 наименований дисков. 75% товаров у разных поставщиков совпадают между собой, остальные — уникальные. Как правило, это либо остатки по складу, либо непопулярные бренды, каждый из которых представляет только один пос
Оглавление

Импорт на Ozon товаров из каталога, включающего
более 15000 SKU от поставщиков с разными складскими остатками, условиями
доставки и ценообразованием, не имеющего единого формата данных,
с автоматической генерацией изображений и описаний для карточек товаров
и выгрузкой заказов в админку сайта.

Задача

Наш клиент — сеть шинных центров «ШинСнаб.рф» — сотрудничает с различными поставщиками шин и дисков и имеет несколько собственных удаленных складов. У каждого поставщика свой формат представления данных: у кого-то есть API, кто-то в XML выгружает, а кто-то по старинке шлет в Excel на почту. Конечно, же состав данных, значения характеристик и прочее не имеют никакого унифицированного формата, каждый как может, так и делает.

У каждого поставщика — порядка 6000 наименований шин и 9000 наименований дисков. 75% товаров у разных поставщиков совпадают между собой, остальные — уникальные. Как правило, это либо остатки по складу, либо непопулярные бренды, каждый из которых представляет только один поставщик.

Итак, мы имеем: разные поставщики, разные форматы данных, разные значения свойств одного и того же товара, разные складские остатки, условия доставки и ценообразования.

Задача: используя сайт компании (отдельный технический инфоблок на нем), импортировать в единую базу данных товары от разных поставщиков, уникализировать их, сопоставляя товары по артикулу, привести все данные к формату, установленному Ozon для товаров, дополнить информацию о товарах из других источников, а также от себя, сгенерировать изображения, как принято на маркетплейсах, выгрузить все массово через API Ozon Seller, настроить обновление информации (товары, остатки, цены) в дальнейшем, выгрузку на сайт заказов с Ozon, получение уведомлений о новых заказах в Telegram.

Решение задачи

Сразу заметим, что готового комплексного решения нам не удалось найти, поэтому поставленную задачу решали с помощью комбинации готовых решений, собственных разработок, а также опыта полученного при работе по интеграции с 1С.

Получаем данные от поставщика

Для примера опишем интеграцию с одним поставщиком — сервисом «Форточки» (4tochki.ru). Он дает возможность настроить выгрузку с нужных нам складов интересующих нас позиций, отобранных по их фильтру, и выполнять экспорт товаров раз в сутки по постоянной ссылке в разных форматах. Мы выбрали удобный для нас XML.

-2

Для обработки полученного файла создали технический инфоблок на нашем сайте, работающем под управлением 1С-Битрикс в редакции Бизнес, задали необходимые свойства для преобразования и последующего экспорта.

-3

Импорт и преобразования реализуем с помощью уже 1000 раз нами испробованному продукту E-solutions: «Импорт из XML». Это сильнейшее решение, способное привести что угодно в заданный формат.

-4

Какие проблемы удалось решить с помощью решения:

  • Формат XML, мягко говоря, неоптимален для работы с товарами. К примеру, каждая позиция описана не как привычно для формата CommerceML — информация по товару, а с указанием для каждой категории товаров своего тега, например, — для шин, — для дисков и так далее. Это ломает массовый перебор товаров в секции offers, поэтому пришлось создавать разные профили и грузить сначала теги — для шин — сразу автоматом создавая для них категорию «Шины», для удобства, а диски уже через другой профиль импорта, с обработкой тэгов.
  • Контроль уникальности от разных поставщиков путем проверки по уникальному коду — артикулу. Если товар уже создан в нашей базе по артикулу, то информацию о нем от другого поставщика не применяем, только остатки раскидываем по своим складам, и цены преобразовываем, если их образование не совпадает с общей ценовой политикой. Таким образом мы объединяем информацию от всех поставщиков с контролем дубликатов по артикулу.
  • Цены и остатки приходят в одной и той же секции: , и тут же —. Конечно же, такой файл не обработать. С остатком решение простое: каждый склад сопоставляем с нашим складом на сайте и прогружаем остатки по складам. А вот с ценой — беда. Если товара нет на каком-то из складов — то тега с ценой этого склада вообще нет. На сайте можно, конечно, использовать разные цены –, но в конечном итоге в Ozon нужно отправить только одну. Поэтому решением стала проверять последовательно наличие цены и исходя из этого принимать решение, перезаписывать ее или нет. Нас это спасло: если цена не указана для склада в Самаре, но указана, например, для склада в Казани, мы записываем ту, что есть, учитывая, что цены идентичны.
  • Изображения. Чуть далее расскажем про «чудо-генератор» для картинок, но для начала нам нужно было просто загрузить детальное изображение и привести его к единому стандарту, формату и размеру. Дополнительно то же самое изображение загружали в свойство с доп. картинками — это нужно на будущее, чтоб то самое чудо заработало.
  • Описания для товаров. Тут много пришлось поиграть с преобразованиями. Сначала нужно было получить текст по внешней ссылке, в нашем xml-файле описание модели содержится в таком виде «https://www.4tochki.ru/descriptions/models/viatti/Brina_Nordico_V-522/info.html».
    Это описание скачали в формате html и далее применили череду преобразований: вырезали лишний код, тэги, стили, лишние слова (Ozon запрещает использовать ссылки в описании, названия каналов разных и не только), плюс убрали специфические моменты: длинные слова, спецсимволы (например, TM), вставку изображений в текст описания и так далее. Одним из массовых интеллектуальных решений стало применение преобразований описания в зависимости от свойств товара. Так, например, описание для всей модельной линейки одно, и в ней есть две шины полностью идентичные по параметрам, но одна с технологией RunFlat, другая — без. Ozon ругается: говорит, это одинаковый товар, пообщавшись с техподдержкой приняли решение преобразовывать описание при импорте. Если технологии RunFlat нет — значит, мы вырезаем из описания абзац про эту технологию и вставляем свой текст. Так удалось избежать штрафов от Ozon.
-5
  • Преобразование для поддержания актуальности списка товаров: при отсутствии в последующем в файле информации по товару, он деактивируется. Это важно — ведь если в файле перестанет приходить информация по товару, то он будет болтаться в Ozon с неактуальными данными по цене, остатку и так далее. Затем его кто-то купит, и магазин будет оформлять возврат, что снизит рейтинг и вызовет негодование со стороны покупателя.
  • И, конечно же, множество преобразований свойств, которые у поставщиков записаны по-разному. Не «летняя», а «Лето», не «с шипами», а «Шипованная», не «Pirelli Formula», а «Formula». Потому что Ozon имеет свои справочники свойств, и для импорта значения характеристик должны совпадать буква в букву.

В итоге мы загрузили все товары от разных поставщиков в наш временный инфоблок с товарами:

-6

«Чудо-генератор» фото: автоматическая генерация изображений в формате маркетплейсов

Многие видели, наверное, или даже обращались по объявлениям наподобие: «наполнение карточек 100 руб/штука». Отличное предложение! А что делать если у нас 15 000 SCU? Тратить на добавление 1 500 000 р. и год труда? Можно, наверное, как-то использовать ИИ там, или детский труд, но мы поступили по-своему.

Учитывая, что у нас есть изображение шины или диска от поставщика в таком формате:

https://api-b2b.pwrs.ru/15068/pictures/tyres/Antares/Ingens_A1/src/big_0.png

которое выглядит так:

-7

и понимая, что шаблон для карточки будет один, в него лишь необходимо подставлять свои для каждого товара значения, мы стали писать код.

Логика работы:

Cкрипт перебирает все товары, подходящие под заданные условия. Они могут быть любыми, к примеру: id инфоблока, раздел, свойство и так далее. Для каждого товара скрипт приводит изображение к стандартной для Ozon пропорции 3:4, преобразовывает в формат .PNG, выполняет кадрирование и наложение поверх картинки данных, полученных из свойств инфоблока. Холст мы создаем заранее: для шин — свой, для дисков — свой. Также берем иконки типов шин из подготовленной базы: шипы, лето, зима и так далее. Далее обрабатываем последовательно каждый элемент и вставляем данные в наш шаблон. Получаем итоговое изображение в стиле карточки маркетплейса и сохраняем его в свойство товара «Картинка для Ozon». Запуск скрипта и отчет оформляем во внешний обработчик.
-8

При необходимости изменить картинки выполняем повторный запуск. Он обновляет созданные изображения, создавая новую копию взамен старой. Скрипт максимально универсальный, чтобы количество элементов, располагаемых поверх картинки, можно было варьировать, добавляя свойства и их значения, как при верстке. Стиль текста, картинок и так далее можно прописать аналогично CSS и легко менять потом. Например, можно изменить цвет, размер шрифта, заменить иконку шипа и так далее. Условия задаются через стандартную конструкцию «if else», то есть если свойство «сезонность — лето», то ставим иконку-солнышко, если «зима» — значит снежинку и так далее.

На выходе получаем:

-9

Генерация 15 000 картинок занимает около 2 часов. По идее, можно создавать новые шаблоны, менять свойства и так далее в зависимости от бренда или сезона, но для первичной задачи мы оставили единый шаблон для всех шин. И обложки карточек товаров теперь выглядят так:

-10

Поместив полученное с помощью скрипта изображение в свойство товара «Картинка для Ozon», и добавив, как писали ранее, исходное изображение в «Доп. изображения» мы решили задачу по повышению качества наполняемости карточки в Ozon. Его алгоритмы проверяют наполненность карточки, и наличие двух и более изображений дает больше баллов, чем только одна картинка.

Экспорт итоговых обработанных/приведенных данных через API Ozon Seller

Для этой задачи мы использовали решение от студии «ВебПростор»: «Интеграция с Ozon (Озон) через SELLER API: выгрузка товаров, обновление цен и остатков, заказы FBS». Решение интересное, многофункциональное, но сложное в первичной настройке. Зато поддержка решения позволяет получить быстро помощь, а при необходимости ребята могут дописать решение и его функционал под конкретные задачи, сделав модуль еще более функциональным.

-11

Что нам удалось решить с помощью этого модуля:

  • Непосредственно сама выгрузка товаров, остатков и цен. Начало настройки интеграции обманчиво простое: получили токен, ключ ввели, и API Озон готово дружить с нами. Далее настройка происходит мучительно долго, приходится сопоставлять каждую характеристику Ozon со свойством нашего товара. Из особенностей настройки: так как Ozon имеет для каждой категории свою специфичность свойств и требований, то нужно чтобы каждый профиль соответствовал одной категории. В нашем случае один профиль с мы используем для шин, еще один — для дисков.
  • Модуль позволяет дорабатывать и дополнять отсутствующие данные шаблонными значениями по умолчанию. К примеру, так мы заполнили ключевые слова, хештеги, размер упаковки и так далее. Обогащая карточку товара данными, мы улучшаем качество наполненности и объем информации, а значит, увеличиваем рейтинг магазина, видимость товара и так далее.
  • Отличным решением стало преобразование ценовой политики. Мы от поставщика получаем входную цену и можем разными формулами привести ее к той цене, по которой она будет продаваться на Ozon. Скидки и прочие условия также могут подтягиваться из условий торгового каталога. К примеру, если активируется «Скидка дня» на товары, цена будет скорректирован и на Ozon и в нашем интернет-магазине. Для этого мы применили простую формулу, прибавляющую % к базе.
  • Связка товаров со схожей характеристикой в серию. У нас товары в рамках одной серии абсолютно идентичны, поэтому в одной карточке удобно показывать другие модели этой же серии.
-12
  • Вишенкой на торте стал фильтр, отбирающий, что экспортировать на Ozon. По умолчанию сейчас на Ozon можно отправить только 500 товаров. Нам удалось получить квоту в 20 000 товаров, включая архивные позиции, за все время. Учитывая наш объем в 15 000 SCU только от двух поставщиков — не разбежишься. Решением стал отбор товаров, подходящих под определенные правила, так мы отобрали товары с базовой ценой менее 15 000 р., а также доступные в наличии в количестве более четырех штук — считаем, что большинство людей покупают комплектом. А для штучных продаж есть наш интернет-магазин и офлайн-магазины в городе.
-13
Важный момент!
Учитывая, что мы производим загрузку остатков с разных складов, а в фильтр необходимо ставить значение общего доступного количества, мы сделали еще одно преобразование, выполняемое при периодическом импорте в наш инфоблок. Мы считаем остатки по всем складам и записываем итоговое значение в свойство «Доступное количество». Так мы можем применить нужное условие, и работать складами в Ozon.
-14

Дальнейшая обработка остатков, деактивация товаров, списание остатков, возврат из архива, и другие процессы настроены отдельными профилями и зациклены в cron — автоматически запускаются с интервалом раз в сутки.

Итог:
поставщики формируют ежесуточно свои файлы, сайт кроном забирает их раз в сутки, преобразовывает и вносит в нашу БД, далее по таймеру запускаются процессы экспорта товаров с целью создания/обновления товаров, остатков и цен. Картинка генерируется по событию добавления нового товара. Если товар новый — то для него создаем основное изображение нашим генератором картинок для Ozon.

Результат автоматизированного наполнения карточки можно посмотреть тут.

Выгрузка заказов в админку сайта и уведомления в Telegram

Оперативность и удобство обработки информации в одном окне — пожалуй, не менее важная задача, чем автоматизация бизнес-процессов. С помощью решения по интеграции мы не только экспортируем товары в Ozon, но и получаем заказы в стандартную, привычную для менеджеров компании, админ-панель интернет-магазина. Новый заказ приходит с полностью заполненными данными.

-15

Наконец, мы направляем оповещение о новом заказе в специально созданную для этого группу Telegram. В нее добавлены менеджеры и обработка нового заказа происходит в течение максимально короткого времени, ведь если занят один — то заказ увидит второй, нет — третий и так далее. Об интеграции с Telegram для бизнеса мы писали подробно здесь.

Резюме

Все это позволило организовать размещение товаров на одном из крупнейших маркетплейсов в автоматическом режиме, без участия человека. Целая плеяда процессов происходит автоматизированно, в считанные секунды, с точным соблюдением заданного регламента, что исключает влияние человеческого фактора и возможные последствия этого.

Поэтому наш клиент может сконцентрироваться исключительно на продажах! Хотите себе такую же автоматизацию? Напишите или позвоните нам!