Как получить и обновить остатки на складах Ozon FBS с помощью Гугл Таблицы

Содержание

Продолжаем нашу совместную с площадкой 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‘. Эти данные используются в выпадающих списках на листе с представлением текущих остатков и при отправке новых в Озон.

code for get list of warehouses from Ozon
Получение данных о складах (r)FBS из Озон

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

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

Поле ввода новых остатков Озон
Данные для обновления остатков в Озон

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

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

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

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

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

Гугл Таблица со скриптом автоматического обновления остатков

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

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

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

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

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

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

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

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

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

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

С вами была команда GoogleSheets.ru, мы даём бизнесу возможность  заниматься развитием, а не операционкой. Все вопросы, замечания и пожелания пишите в комментариях или в наш чат по Гугл таблицам, будем рады обратной связи.

5 1 голос
Рейтинг статьи
Подписаться
Уведомить о
guest

2 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Андрей
Андрей
3 месяцев назад

Добрый день. У меня при обновлении выскочила ошибка: При обновлении цен произошли следующие ошибки:
[
{
“product_id”: 0,
“offer_id”: “2102.00”,
“updated”: false,
“errors”: [
{
“code”: “NOT_FOUND”,
“message”: “product not found”
}
]
}
]
Как можно исправить?

2
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x