К содержимому
Все статьи

Как интернет-магазин сам обновляет цены от поставщика

Даниил Кулешов, фулстек-разработчик ·

Если в магазине больше сотни товаров, а цены и наличие задаёт поставщик, ручное обновление быстро становится отдельной работой. Менеджер сверяет прайс, правит карточки, что-то пропускает — и покупатель видит цену, которой уже нет, или заказывает товар, которого нет на складе.

В интернет-магазине кондиционеров КлиматТех эту работу делает сервер. Каждую ночь он забирает каталог у двух поставщиков и обновляет ~1100 товаров, а остатки сверяет каждые 4 часа. Менеджер утром открывает админку, и каталог уже актуален.

Что обновляется само, а что остаётся за менеджером

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

За менеджером остаётся:

  • Ручная цена. Если цену товара выставили в админке вручную, синхронизация её не меняет.
  • Акции. Распродажу включает менеджер. Синхронизация снимает её только в одном случае: рекомендованная цена упала так, что «акция» стала дороже обычной цены.
  • Отметка «Хит», если её поставили вручную.

Наличие и пропавшие товары

  • Товар есть на складе поставщика — на сайте «Есть в наличии».
  • Нет на складе — «Под заказ». Товар не скрывается, его можно заказать.
  • Товар пропал из выгрузки поставщика — сайт снимает его с продажи. Вернулся — включает снова. От «короткой» выгрузки, когда поставщик по ошибке прислал половину каталога, стоит защита.
  • У товара нет рекомендованной цены — он снимается с продажи: посчитать цену не из чего.

Как это работает

  1. Ночью по расписанию запускается задача на сервере (cron в NestJS): в 02:00 — один поставщик, в 03:00 — другой, чтобы синхронизации не пересекались. Остатки — каждые 4 часа.
  2. Сервер забирает данные по API поставщиков.
  3. Сопоставляет позиции с товарами в базе по коду товара у поставщика; запасной ключ — код номенклатуры.
  4. Считает цену: рекомендованная розничная цена поставщика +10%, с округлением вверх до десятков.
  5. Записывает каждый товар отдельной транзакцией. Товар либо обновляется целиком — цена, остатки, фото и характеристики, — либо не меняется вовсе. Ошибка в одном товаре не останавливает остальные.
  6. Выгружает каталог в Яндекс Товары, чтобы цены в поиске Яндекса совпадали с сайтом.

Если поставщик не ответил

  • Синхронизация не прошла целиком — цены остаются вчерашними, а администратор и менеджеры получают уведомление в админке и в MAX.
  • Часть товаров обновилась с ошибками — приходит уведомление со счётом: сколько обновлено, сколько с ошибкой.
  • Поставщик не вернул остаток по товару — товар пропускается. Остаток не обнуляется, так что «нет в наличии» по ошибке не появится.
  • Если закупочная цена поставщика поднялась выше цены на сайте, менеджеры получают предупреждение. Оно повторяется после каждой синхронизации, пока цену не поправят.

Что это даёт бизнесу

  • Менеджеру не нужно вносить цены и остатки вручную.
  • Покупатель видит актуальную цену и наличие — меньше отказов при звонке «а такого уже нет».
  • Заявка с сайта сразу приходит менеджерам в MAX с составом заказа и остатками, так что перезвонить можно за минуты.
  • Каталог в Яндекс Товарах обновляется вместе с сайтом.

Руководитель КлиматТех так описал результат: «Получили… интеграцию с поставщиком, которая всё обновляет сама».

Что нужно, чтобы сделать так же

  • Доступ к данным поставщика: API или регулярная выгрузка (XML, YML, CSV) по постоянной ссылке. Если поставщик присылает только PDF или письма, автоматизировать сложнее — это обсуждаем отдельно.
  • Однозначный код товара, по которому позиция у поставщика совпадает с карточкой на сайте.
  • Правило цены: по какой формуле считать цену для покупателя от цены поставщика.

Итог

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

По теме

Заявка

Расскажите о задаче — отвечу в течение рабочего дня

Сайт использует cookie и Яндекс Метрику для статистики посещений. Нажимая «Принять», вы даёте согласие на обработку cookie. Подробнее — в политике обработки персональных данных.