Загрузка в Гугл таблицу и обновление остатков на Озон
Ozon

Загрузка в Гугл таблицу и обновление остатков на Озон

Загрузка в Гугл таблицу и обновление остатков на Озон

Продолжаем нашу совместную с площадкой dev.ozon.ru рубрику «Ozon и Google Таблицы: продаем товары “в клеточках”». Вместе с рубрикой продолжает развиваться и наша Таблица Гугл, в которую мы сначала загружали товары из магазина Озон, потом из этой таблицы обновляли на них цены, а теперь настало время поработать и с остатками товаров. Сразу оговорюсь, работать будем только с остатками на складах FBS, потому что учет остатков товаров на складах Озон (схема FBO) ведёт он сам.

Зачем нужно автоматизировать обновление остатков?

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

Автоматическое обновление остатков помогает избежать следующих проблем и ошибок:

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

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

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

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

Реализация

Библиотека

Я уже рассказывал про библиотеку и способы ее подключения в первой статье про загрузку товаров из Озон в Таблицу Гугл, но хотел бы о ней напомнить.

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

Для получения данных об остатках необходимо в запросе передать идентификаторы товаров (sku), но получить их одним запросом было бы слишком просто. Поэтому, мы сначала получаем список артикулов методом productApiGetProductList, затем эти артикулы передаем в запросе к методу productApiGetProductInfoListV2 для того, чтобы получить полную информацию о товарах. И уже из этих данных выделяем нужные нам идентификаторы sku, с которыми, в свою очередь, отправляем запрос к методу stocksByWarehouseFbs.

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

Последовательность действий для получения данных об остатках по складам

После того, как данные об остатках получены, расширяем их данными об артикуле товара, сопоставляя по идентификатору sku. Это не обязательное действие, но мне так удобнее работать с данными и, в дальнейшем, это упростит формирование запроса на обновление остатков.

Запись данных об остатках в Таблицу Гугл

Запись данных об остатках в Таблицу Гугл

Данные об остатках, которые мы записали в таблицу, содержат следующую необходимую нам информацию:

  • идентификатор товара в системе Ozon (sku)
  • идентификатор товара в системе продавца или артикул (offer_id)
  • наименование склада (warehouse_name)
  • идентификатор склада (warehouse_id)
  • количество товара на складе (present)
  • количество зарезервированного товара на складе (reserved)

Эти данные записываются на лист, указанный в переменной fbsStocksSheetName и выглядят как простая плоская таблица.

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

Отображение данных об остатках в Таблице

Для того, чтобы с информацией, полученной на предыдущем этапе было удобно работать, я формулами построил следующее представление.

Отображение текущих остатков товаров на складах в Таблице Гугл

Отображение текущих остатков товаров на складах в Таблице Гугл

Кстати, данные о текущих остатках и названия товаров выведены всего одной формулой, мы разберём её позже в одном из последующих постов на нашем канале про Таблицы Гугл.

Для отображения данных нужно только вставить артикулы из листа “Товары”, а для детализации по складу – выбрать соответствующий из выпадающего списка.

Информацию о складах также получаем из Озон по API методом warehouseApiWarehouseList и записываем на лист указанный в переменной fbsStoresSheetName. Эти данные используются в выпадающих списках на листе с представлением текущих остатков и при отправке новых в Озон.

Обновление остатков

В отличие от модели FBO, в нашем случае важно не только следить за остатками, но и своевременно их изменять. Давайте рассмотрим как обновлять остатки на складах Озон из этой таблицы. Рядом с представлением текущих остатков я добавил колонки с выбором значений из списка складов, которые мы загрузили на предыдущем этапе. При выборе склада под ним тусклым серым цветом отображается его идентификатор – он используется при построении запроса на изменение количества товаров на конкретном складе. Также, следует помнить о том, что новые остатки не могут быть равны текущим, поэтому для удобства сравнения, я расположил их рядом. Но на всякий случай, реализовал эту проверку в скрипте, что дало свой положительный эффект. Но об этом немного позже.

Для обновления количества товаров на складах используется метод productApiProductsStocksV2, который имеет достаточно сложные в соблюдении ограничения, а именно:

  • в одном запросе можно обновить не более 100 товаров
  • за одну минуту можно отправить не более 80 запросов
  • И, самое интересное, товары на одном складе можно обновлять не чаще чем один раз в две минуты

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

Получение данных о новом количестве товара и отправка запроса на его обновление реализованы в скрипте функциями getNewStocksData и updateFbsStocks. Там достаточно сложный алгоритм, но я оставил очень подробные комментарии. Если будут конкретные вопросы, то я готов ответить на них в комментариях к статье и нашем чате про Таблицы Гугл и другие инструменты автоматизации.

Обновляем остатки автоматически

Первый запуск

Важно! При первом запуске скрипта будет предложено пройти авторизацию. Как правильно ее пройти описано в статье про редактор скриптов.

Запись ключей API

Для выполнения запросов к Seller API необходимо указать ключ API и идентификатор продавца. В отличие от прошлых таблиц, теперь не нужно заходить в редактор скриптов и вносить изменения в код. Достаточно вызвать пункт “Записать ключи API” из меню “Ozon” в шапке Таблицы, заполнить соответствующие поля и нажать кнопку “сохранить”. За дизайн попрошу меня строго не судить, это не самая сильная моя сторона. После этого действия можно будет вызывать другие пункты меню.

Получение и внесение данных для обновления

Вам нужно получить список товаров, складов и остатки, воспользовавшись соответствующими кнопками в меню, затем перенести необходимые артикулы товаров в первый столбец листа “остатки FBS”. При необходимости можно выбрать склады, чтобы детально посмотреть количество товара на них.

Далее, в разделе “новые остатки” выбрать склады, на которых вы хотите обновить количество товара и внести новые значения. После того как данные будут внесены, останется только нажать кнопку “Обновить остатки FBS” в меню. Если новые значения совпадают с текущими на складе, то данные по этому товару будут проигнорированы. Независимо от того, сколько значений должно быть обновлено, в запрос на обновление остатков на каждом складе попадают первые 100 значений. Поэтому, при необходимости обновления большого количество остатков, необходимо запустить скрипт нужное количество раз с интервалом не менее двух минут, но более правильным и удобным решением будет завести триггер на функцию readAndSendFbsStocks на каждые 5 минут.

Очень надеемся, что эта Таблица будет вам полезна.

Готовая таблица

👉 Сделать копию таблицы — таблица полностью рабочая, достаточно вставить свои ключи API.

Читайте также

Нужна помощь с автоматизацией?

Разработаем решение под ваши задачи.

Написать в Telegram

Подписывайтесь — делимся скриптами, кейсами и лайфхаками