Как получить и обновить остатки на складах Ozon FBS с помощью Гугл Таблицы
- 9 ноября, 2023
- 2 Комментариев
- 4613 просмотров
Продолжаем нашу совместную с площадкой dev.ozon.ru рубрику «Ozon и Google Таблицы: продаем товары “в клеточках”». Вместе с рубрикой продолжает развиваться и наша Таблица Гугл, в которую мы сначала загружали товары из магазина Озон, потом из этой таблицы обновляли на них цены, а теперь настало время поработать и с остатками товаров. Сразу оговорюсь, работать будем только с остатками на складах FBS, потому что учет остатков товаров на складах Озон (схема FBO) ведёт он сам.
ссылка на таблицу в конце статьи
Вот уже несколько месяцев, как я напросился менеджером магазина Озон к заказчику, для которого наша команда разрабатывает систему учета продаж и планирования доставки. И автоматизация учета и обновления остатков товаров на складах Озон закрывает мою личную боль, а именно ежедневно экономит мне до часа, который я просиживал в личном кабинете маркетплейса сверяясь и обновляя остатки вручную, по 3-5 кликов на каждый товар, вдумчиво и монотонно, артикул за артикулом, клик за кликом. При этом, я иногда еще и допускал неприятные ошибки.
Автоматическое обновление остатков помогает избежать следующих проблем и ошибок:
Решение, которому посвящена эта статья, позволило исключить эти проблемы и массово изменять остатки на товары из Таблицы одной кнопкой (а можно и вообще без кнопки), без необходимости скачивать шаблон в личном кабинете, вбивать в него нужные значения и загружать его обратно в Озон, что ощутимо ускорило работу.
Самым ценным же эффектом лично я считаю мое устойчивое душевное равновесие, из которого меня настойчиво пыталась вывести неприятная для меня монотонная деятельность. Потому что сам я в эти моменты мечтал о делах, которые мог бы сделать вместо этого откровенно скучного процесса.
Думаю, пора переходить к подробностям реализации решения и его использования.
Я уже рассказывал про библиотеку и способы ее подключения в первой статье про загрузку товаров из Озон в Таблицу Гугл, но хотел бы о ней напомнить.
Для получения данных об остатках необходимо в запросе передать идентификаторы товаров (sku), но получить их одним запросом было бы слишком просто. Поэтому, мы сначала получаем список артикулов методом `productApiGetProductList`, затем эти артикулы передаем в запросе к методу `productApiGetProductInfoListV2` для того, чтобы получить полную информацию о товарах. И уже из этих данных выделяем нужные нам идентификаторы sku, с которыми, в свою очередь, отправляем запрос к методу `stocksByWarehouseFbs`.
После того, как данные об остатках получены, расширяем их данными об артикуле товара, сопоставляя по идентификатору sku. Это не обязательное действие, но мне так удобнее работать с данными и, в дальнейшем, это упростит формирование запроса на обновление остатков.
Данные об остатках, которые мы записали в таблицу, содержат следующую необходимую нам информацию:
Эти данные записываются на лист, указанный в переменной `fbsStocksSheetName` и выглядят как простая плоская таблица.
Не смотря на то, что визуально работать с информацией, организованной подобным образом, не совсем удобно, это позволяет очень легко обрабатывать ее формулами и скриптами при дальнейших манипуляциях. А сам лист можно скрыть, потому что смотреть на сырые данные у нас не будет необходимости.
Для того, чтобы с информацией, полученной на предыдущем этапе было удобно работать, я формулами построил следующее представление.
Кстати, данные о текущих остатках и названия товаров выведены всего одной формулой, мы разберём её позже в одном из последующих постов на нашем канале про Таблицы Гугл
Для отображения данных нужно только вставить артикулы из листа “Товары”, а для детализации по складу – выбрать соответствующий из выпадающего списка.
Информацию о складах также получаем из Озон по API методом `warehouseApiWarehouseList` и записываем на лист указанный в переменной ‘fbsStoresSheetName‘. Эти данные используются в выпадающих списках на листе с представлением текущих остатков и при отправке новых в Озон.
В отличие от модели FBO, в нашем случае важно не только следить за остатками, но и своевременно их изменять. Давайте рассмотрим как обновлять остатки на складах Озон из этой таблицы. Рядом с представлением текущих остатков я добавил колонки с выбором значений из списка складов, которые мы загрузили на предыдущем этапе. При выборе склада под ним тусклым серым цветом отображается его идентификатор – он используется при построении запроса на изменение количества товаров на конкретном складе. Также, следует помнить о том, что новые остатки не могут быть равны текущим, поэтому для удобства сравнения, я расположил их рядом. Но на всякий случай, реализовал эту проверку в скрипте, что дало свой положительный эффект. Но об этом немного позже.
Для обновления количества товаров на складах используется метод `productApiProductsStocksV2`, который имеет достаточно сложные в соблюдении ограничения, а именно:
Таким образом, если у вас восемьдесят складов, то за минуту можно обновить остатки до восьми тысяч товаров. В действительности же, количество складов редко достигает трех, и после каждого обновления нужно ожидать две минуты. При большом количестве изменений, на обновление остатков может понадобиться достаточно много времени. Поэтому, после получения данных для обновления из таблицы, их нужно проверить на совпадение с уже имеющимися и исключить те, которые отправлять в запросе нет необходимости.
Получение данных о новом количестве товара и отправка запроса на его обновление реализованы в скрипте функциями `getNewStocksData` и `updateFbsStocks`. Там достаточно сложный алгоритм, но я оставил очень подробные комментарии. Если будут конкретные вопросы, то я готов ответить на них в комментариях к статье и нашем чате про Таблицы Гугл и другие инструменты автоматизации.
Готовая и настроенная Таблица со скриптом находится здесь, она доступна только для просмотра и, для того чтобы ей пользоваться, нужно сделать её копию. Что и будет предложено при переходе по ссылке. Основное место ее обсуждения, где я смогу наиболее оперативно реагировать на сообщения – это комментарии к посту в телеграм-канале про Таблицы Гугл.
Важно! При первом запуске скрипта будет предложено пройти авторизацию. Как правильно ее пройти описано в статье про редактор скриптов.
Для выполнения запросов к Seller API необходимо указать ключ API и идентификатор продавца. В отличие от прошлых таблиц, теперь не нужно заходить в редактор скриптов и вносить изменения в код. Достаточно вызвать пункт “Записать ключи API” из меню “Ozon” в шапке Таблицы, заполнить соответствующие поля и нажать кнопку “сохранить”. За дизайн попрошу меня строго не судить, это не самая сильная моя сторона. После этого действия можно будет вызывать другие пункты меню.
Вам нужно получить список товаров, складов и остатки, воспользовавшись соответствующими кнопками в меню, затем перенести необходимые артикулы товаров в первый столбец листа “остатки FBS”. При необходимости можно выбрать склады, чтобы детально посмотреть количество товара на них.
Далее, в разделе “новые остатки” выбрать склады, на которых вы хотите обновить количество товара и внести новые значения. После того как данные будут внесены, останется только нажать кнопку “Обновить остатки FBS” в меню. Если новые значения совпадают с текущими на складе, то данные по этому товару будут проигнорированы. Независимо от того, сколько значений должно быть обновлено, в запрос на обновление остатков на каждом складе попадают первые 100 значений. Поэтому, при необходимости обновления большого количество остатков, необходимо запустить скрипт нужное количество раз с интервалом не менее двух минут, но более правильным и удобным решением будет завести триггер на функцию `readAndSendFbsStocks` на каждые 5 минут.
Очень надеемся, что эта Таблица будет вам полезна.
Если нужно индивидуальное решение под ваши задачи или доработка существующего, то у нас его можно заказать.
С вами была команда GoogleSheets.ru, мы даём бизнесу возможность заниматься развитием, а не операционкой. Все вопросы, замечания и пожелания пишите в комментариях или в наш чат по Гугл таблицам, будем рады обратной связи.
Добрый день. У меня при обновлении выскочила ошибка: При обновлении цен произошли следующие ошибки:
[
{
“product_id”: 0,
“offer_id”: “2102.00”,
“updated”: false,
“errors”: [
{
“code”: “NOT_FOUND”,
“message”: “product not found”
}
]
}
]
Как можно исправить?
Нужно поставить формат “текст”, чтобы артикул уходил без лишних нулей