Решение

Wildberries: остатки и заказы в таблице

Wildberries — крупнейший маркетплейс в России. В этой статье разберём автоматизацию работы с WB через API и Google Таблицы.

Виды интеграции

FBO (Fulfillment by Wildberries)

  • Товар на складе WB
  • Доставка силами WB
  • Остатки синхронизируются автоматически

FBS (Fulfillment by Seller)

  • Товар на вашем складе
  • Доставка до ПВЗ WB
  • Нужно самостоятельно обновлять остатки

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

  1. Зайдите в личный кабинет WB
  2. Настройки → Доступ к API
  3. Создайте ключ с нужными правами

Скрипт синхронизации остатков

const CONFIG = {
  API_KEY: 'ваш-api-ключ',
  SHEET_NAME: 'Остатки'
};

// Получить остатки с WB
function getWildberriesStock() {
  const response = UrlFetchApp.fetch(
    'https://suppliers-api.wildberries.ru/api/v2/stocks',
    {
      headers: {
        'Authorization': CONFIG.API_KEY
      }
    }
  );

  return JSON.parse(response.getContentText());
}

// Обновить остатки на WB
function updateWildberriesStock(sku, amount) {
  const payload = {
    stocks: [{
      sku: sku,
      amount: amount
    }]
  };

  UrlFetchApp.fetch(
    'https://suppliers-api.wildberries.ru/api/v2/stocks',
    {
      method: 'POST',
      headers: {
        'Authorization': CONFIG.API_KEY,
        'Content-Type': 'application/json'
      },
      payload: JSON.stringify(payload)
    }
  );
}

// Синхронизация с таблицей
function syncStocks() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName(CONFIG.SHEET_NAME);

  const data = sheet.getDataRange().getValues();

  for (let i = 1; i < data.length; i++) {
    const [sku, name, targetStock] = data[i];

    if (sku && targetStock !== undefined) {
      try {
        updateWildberriesStock(sku, targetStock);
        sheet.getRange(i + 1, 4).setValue('OK');
      } catch (e) {
        sheet.getRange(i + 1, 4).setValue('Ошибка: ' + e.message);
      }
    }
  }
}

Загрузка заказов

function getOrders(dateFrom, dateTo) {
  const response = UrlFetchApp.fetch(
    `https://suppliers-api.wildberries.ru/api/v2/orders?dateStart=${dateFrom}&dateEnd=${dateTo}`,
    {
      headers: {
        'Authorization': CONFIG.API_KEY
      }
    }
  );

  const orders = JSON.parse(response.getContentText());

  const sheet = SpreadsheetApp.getActiveSpreadsheet()
    .getSheetByName('Заказы');

  orders.forEach(order => {
    sheet.appendRow([
      order.date,
      order.number,
      order.article,
      order.size,
      order.price,
      order.status
    ]);
  });
}

Обработка статусов

const STATUS_MAP = {
  '0': 'Новый',
  '1': 'Принят',
  '2': 'Отменён',
  '3': 'Доставлен',
  '4': 'Возврат'
};

function mapStatus(statusCode) {
  return STATUS_MAP[statusCode] || 'Неизвестно';
}

Автоматизация

// Триггер на каждый час
function createHourlyTrigger() {
  ScriptApp.newTrigger('syncStocks')
    .timeBased()
    .everyHours(1)
    .create();
}

// Ежедневная загрузка заказов
function createDailyTrigger() {
  ScriptApp.newTrigger('getTodayOrders')
    .timeBased()
    .atHour(8)
    .everyDays(1)
    .create();
}

function getTodayOrders() {
  const today = new Date().toISOString().split('T')[0];
  getOrders(today, today);
}

Ограничения API Wildberries

ПараметрЛимит
Запросов в минуту300
Остатков за запрос1000 SKU
Период заказов30 дней

Рекомендации

  1. Кэшируйте данные — не запрашивайте одно и то же часто
  2. Обрабатывайте ошибки — API иногда недоступен
  3. Логируйте операции — для отладки проблем

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

Нужна помощь?

Разработаем интеграцию Wildberries под ваши процессы. Напишите в Telegram.

Не хотите разбираться сами?

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

КМ
Константин
Менеджер проектов · ответит в течение часа

Как автоматизация окупается → Чеклист: 7 процессов для автоматизации →

140+ реализованных проектов
Google Products Expert в команде

Нужна доработка под ваш бизнес?

Адаптируем готовое решение или разработаем с нуля.

Написать в Telegram

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