AI · 9 мин чтения

Интеграция МоегоСклада с сайтом: остатки, цены, заказы

Когда клиент просит сделать так, чтобы остатки на сайте не расходились со складом, речь почти всегда об одном - интеграции с МоимСкладом. Я подключал этот сервис к Tilda, WordPress и кастомным SPA больше десятка раз, и задача каждый раз сводится к трём вещам: остатки, цены и заказы должны ходить между сайтом и складом без ручной выгрузки в эксель. Ниже разбираю, как это устроено на практике: через API, вебхуки, n8n, и что чаще всего ломается в первый месяц после запуска.

Зачем нужна интеграция с МоимСкладом на сайте

Пока каталог на сайте меньше полусотни товаров, обновлять остатки руками терпимо. С ростом ассортимента расхождения растут быстрее, чем кажется. У одного клиента с интернет-магазином на 800 SKU менеджер обновлял цены и остатки в WordPress раз в неделю через CSV-импорт. За неделю успевало разойтись 10-12% позиций: часть товаров продавали в ноль, часть висела в наличии, хотя склад был пуст. После интеграции с МоимСкладом через API остатки обновляются каждые 15 минут, а заказы улетают в склад сразу при оплате.

Есть и обратная сторона: если склад ведут в МоемСкладе несколько менеджеров, а заказы с сайта не попадают туда автоматически, отгрузка задерживается на день-два, потому что сборщик просто не видит заказ в общей очереди. Интеграция снимает оба узких места одновременно - и остатки актуальны, и заказы не теряются между почтой и таблицей.

Способы подключения: API, готовые модули, n8n

У МоегоСклада открытый JSON API (remap 1.2) с токенами доступа и вебхуками, так что вариантов подключения по сути три.

  • Прямая интеграция через API - пишу backend-прокси, который забирает остатки, цены и создаёт заказы напрямую через HTTP-запросы. Даёт полный контроль над логикой: свои правила резервирования, кастомные статусы, любые дополнительные поля.
  • Готовый модуль - у МоегоСклада есть официальная интеграция для WooCommerce с синхронизацией по CommerceML. Работает из коробки, но гибкость ограничена тем, что заложили разработчики модуля.
  • No-code через n8n - собираю цепочку: вебхук от МоегоСклада, обработка данных, запись в CRM или отправка в Telegram. Хорошо ложится на задачи вроде «уведомить менеджера о новом заказе» или «продублировать остатки в таблицу для отдела закупок», без написания отдельного сервиса.

Кроме WooCommerce у МоегоСклада есть готовые коннекторы для 1С-Битрикс, InSales и amoCRM, но у большинства этих модулей одна и та же особенность: они синхронизируют товары и остатки, а логику заказов, статусов доставки и оплаты приходится либо донастраивать отдельно, либо переносить в собственный backend. На практике готовый модуль закрывает 70-80% задачи, а остальное всё равно приходится дорабатывать под конкретную воронку продаж.

Таблица показывает, что выбираю в зависимости от задачи:

Способ Что настраивается Срок реализации Когда выбираю
Прямая интеграция через API Полная логика синхронизации, свои статусы и правила 1-3 недели Нестандартная воронка заказов, сайт на WordPress или SPA
Готовый модуль Базовая синхронизация остатков и цен 1-3 дня Стандартный WooCommerce-магазин без особых требований
No-code через n8n Отдельные сценарии: уведомления, дублирование данных 2-5 дней Нужна автоматизация вокруг склада, а не полноценная интеграция каталога

На Tilda готовый модуль для МоегоСклада есть: в кабинете магазина включается «Синхронизация через CommerceML», а в МоемСкладе в разделе «Онлайн-торговля» выбирается магазин Tilda, после чего заказы уходят в склад, а цены и остатки приходят на сайт по одному складу, ID которого указывается в настройках. Кастомный скрипт с прокси-сервером или обвязку в n8n поверх стандартной формы заказа собираю сверх этого: несколько складов, свои статусы, резерв по своим правилам, уведомления. По деньгам ориентируюсь на свой прайс: комплексная интеграция МоегоСклада с CRM, эквайрингом и СДЭК для Tilda у меня начинается от 40 000 ₽, разработка отдельного плагина под WordPress - от 60 000 ₽, а обвязка на n8n без изменения самого сайта - от 25 000 ₽.

Бесплатный материал

🎁 Полезный скрипт в подарок

Подпишитесь на Telegram - пришлю готовый скрипт по этой теме.

Без спама. Отписка в 1 клик.

Синхронизация остатков и цен между складом и сайтом

У API МоегоСклада лимит - 45 запросов за 3 секунды на токен, и это ощутимо на каталоге в несколько тысяч товаров. Полную выгрузку в 3000 SKU при пагинации по 1000 позиций забираю за 3 запроса, это укладывается в лимит и занимает 5-7 секунд. Дальше делаю кеш: сохраняю остатки в отдельную таблицу на сайте и обновляю её по крону раз в 10-15 минут, а не дёргаю МойСклад при каждом визите на страницу товара.

Для магазинов с частой сменой цен, например при акциях и распродажах, крон в 15 минут не годится, тогда подписываюсь на вебхуки МоегоСклада: при изменении позиции сервис сам присылает событие на мой эндпоинт, и обновление остатка на сайте происходит почти мгновенно, без опроса API впустую.

В МоемСкладе можно завести несколько типов цен - розничная, оптовая, цена для сайта, цена со скидкой по промокоду. Если тянуть на сайт не ту цену, розница может внезапно показать оптовые условия всем подряд. Поэтому при синхронизации явно указываю, какой тип цены забирать через API, и проверяю это в первую очередь, если после запуска клиент жалуется, что цены на сайте «не такие, как в 1С».

Пример запроса за остатками по складу:

curl -X GET \
  "https://api.moysklad.ru/api/remap/1.2/report/stock/all?limit=1000" \
  -H "Authorization: Bearer ВАШ_ТОКЕН" \
  -H "Accept-Encoding: gzip"

Дёргать API МоегоСклада прямо из браузера нельзя - токен доступа окажется в открытом виде в коде страницы, а это уже вопрос безопасности данных. Поэтому на Tilda и в любых JS-виджетах остатки идут через собственный backend-прокси: он хранит токен на сервере и отдаёт на фронт только нужные поля.

Заказы с сайта в МоемСкладе: от корзины до отгрузки

Когда покупатель оформляет заказ, backend создаёт документ customerorder через POST-запрос к API, с привязкой к контрагенту по телефону или email и позициями из корзины. На этом этапе решаю сразу две вещи: резервирую товар на складе, чтобы его не продали повторно, и подставляю в документ актуальную цену из МоегоСклада, а не ту, что успела устареть в кеше на сайте.

Заказ в МоемСкладе проходит через статусы вроде «Новый», «В сборке», «Отгружен», «Доставлен». Я подписываюсь на смену каждого статуса вебхуком и подтягиваю то же состояние в личный кабинет покупателя на сайте, чтобы человек видел реальное движение заказа, а не гадал по звонку менеджера.

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

Доставка и оплата: СДЭК и T‑Bank в связке с МоимСкладом

Расчёт стоимости доставки через СДЭК завязываю на тот же заказ: как только клиент выбрал пункт выдачи, backend запрашивает тариф у СДЭК API и передаёт итоговую сумму в позицию заказа МоегоСклада, чтобы в документе сразу была верная сумма к оплате, без ручного пересчёта менеджером.

Для Tilda зоны доставки и расчёт стоимости обычно делаю отдельным скриптом поверх стандартной формы заказа, для этого в библиотеке есть готовый виджет зон доставки для Tilda, который можно настроить под свои зоны на Яндекс.Карте и цену для каждой зоны, а не собирать логику зон с нуля.

Оплату завязываю на T‑Bank эквайринг: после успешного платежа T‑Bank шлёт вебхук на мой backend, тот меняет статус заказа в МоемСкладе на «Оплачен» и снимает резерв товара со склада. Без этой связки бывает ситуация, когда заказ оплачен, а на складе товар всё ещё числится свободным и его продают повторно другому покупателю.

Ошибки и подводные камни, с которыми сталкиваюсь на практике

Самая частая ошибка - синхронизировать весь каталог одним циклом без пагинации и задержек между запросами: на каталоге от пары тысяч позиций упираюсь в лимит 45 запросов за 3 секунды и получаю 429 от API. Решается забором данных пачками по 100‑1000 позиций с паузой между запросами.

Вторая проблема - часовые пояса. МойСклад отдаёт даты в UTC, и если сайт работает по московскому времени без пересчёта, заказы в интерфейсе появляются со сдвигом на 3 часа, а менеджер путается, какой заказ пришёл раньше.

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

Четвёртая - несовпадение единиц измерения и модификаций товара. Если на сайте карточка товара с размерами и цветами собрана вручную, а в МоемСкладе те же позиции заведены как отдельные модификации с другими артикулами, синхронизация начинает путать остатки между вариантами одного товара, и на сайте показывает наличие не там, где оно есть на самом деле.

И последнее - забытая проверка подписи вебхука. МойСклад можно настроить слать события на любой публичный URL, но без проверки источника запроса этот эндпоинт превращается в открытую дверь: кто угодно может отправить туда поддельное событие об оплате заказа.

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

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

Частые вопросы

Сколько стоит интеграция МоегоСклада с сайтом

Зависит от способа и глубины: обвязка на n8n для уведомлений и дублирования данных у меня стоит от 25 000 ₽, комплексная интеграция с CRM, эквайрингом и СДЭК на Tilda - от 40 000 ₽, а разработка отдельного модуля под WordPress - от 60 000 ₽. Точную сумму называю после разбора текущей схемы работы склада и сайта.

Можно ли обойтись готовым модулем без разработки

Для стандартного WooCommerce-магазина да, официальный модуль МоегоСклада закрывает синхронизацию остатков и цен из коробки. На Tilda тоже да: штатная «Синхронизация через CommerceML» в кабинете магазина плюс подключение магазина Tilda в разделе «Онлайн-торговля» МоегоСклада закрывают заказы, цены и остатки по одному складу. В кастомных решениях и в сценариях сверх штатного, несколько складов или своя логика резерва, либо пишу прокси-сервис, либо собираю сценарий в n8n.

Как часто обновляются остатки на сайте после интеграции

Если синхронизация идёт по крону, раз в 10-15 минут, этого достаточно для большинства магазинов. Для товаров с высокой оборачиваемостью или во время распродаж подключаю вебхуки МоегоСклада, тогда остаток на сайте меняется почти сразу после изменения на складе.

Что делать, если каталог большой и синхронизация занимает много времени

Забирать данные пачками с пагинацией и не гонять полную выгрузку каждый раз, а синхронизировать только изменённые позиции по дате обновления. На каталоге в 3000-5000 SKU это сокращает время синхронизации с нескольких минут до 10-15 секунд.

Есть задача?

Обсудим в мессенджере

Расскажите, что нужно сделать — отвечу в течение 4 часов в рабочее время. Первая консультация бесплатно.

Продолжая пользование настоящим сайтом Вы выражаете своё согласие на обработку Ваших персональных данных (файлов куки) с использованием Yandex.Metrika.
Понятно