Эта история началась 3 года назад. Появилась задача интеграции МойСклад с Интернет-магазином на базе WordPress & WooCommerce.
Готового плагина не нашли. Решили что нужно написать. По примерным оценкам нужно было 2-4 недели… и цена 30-50 тыс. руб. Это была ошибка 🙂
Ошибка дорого обошлась, но в результате появился плагин WooMS. В итоге разработку мы ведем уже 3 года, а общие затраты превысили 1 млн. руб. Вот такая разница в ошибке оценки стоимости разработки.
Почему МойСклад и WooCommerce?
МойСклад – единственный зрелый продукт на рынке РФ, который предлагает эффективный инструмент управления торговлей – розничной и для Интернет-магазинов.
Также очень важный момент – предоставляет протокол REST API для обмена данными с Интернет-магазином. Это обеспечивает колоссальную гибкость и эффективность обмена данными. Можно решить практически любые задачи. У 1С такой возможности нет. Там обмен данными это боль и ад.
WooCommerce – это платформа для создания Интернет-магазинов №1 в мире. Более 30% рынка. Очень много готовых тем и плагинов, которые позволяют закрывать большинство задач без программистов. А с программистами можно сделать все что душе угодно. Единственное чем ограничен бизнес в этом случае это уровнем компетенции программиста.
Бесплатный плагин и платное дополнение
Сначала выпустили бесплатную версию, которую опубликовали в официальном каталоге плагинов WordPress. Это позволяет пользователям быстро находить решение, оценить его применимость и обеспечивает быстрый старт.
Функционал этого решения специально ограничен, чтобы техническая поддержка не захлебнулась в потоке вопросов от бесплатных пользователей. Это вопрос жизни и смерти 🙂
Потому что интеграция вызывает шквал вопросов. А чтобы на них отвечать нужны люди.
Потому есть платная версия – WooMS XT, доходы от которой идут на разработку и позволяют обеспечить Клиентов поддержкой.
Особенности интеграции с Интернет-магазином
Синхронизация товаров из Склада на Сайт
Многие спрашивают есть ли передача товаров из Сайта на Склад? Автоматически это сделать не возможно или как минимум крайне сложно технически. По правилам автоматизации источник данных должен быть один. Иначе будут проблемы и большие затраты. Потому автомата нет. Но у WooCommerce есть экспорт товаров в CSV формат, который можно затем импортировать в МойСклад. Обычно это нужно сделать только 1 раз. Если Интернет-магазин был с товарами, и решили подключить МойСклад.
А вот постоянный обмен данными о товарах из Склада на Сайт это базовая возможность. То с чего все началось. Можно запускать ее вручную, или поставить автомат с периодом обмена. Например повтор через час или 12 часов.
Для начала рекомендуется настроить автомат на обмен 1 раз в сутки. Если сделать чаще, то это создает огромную нагрузку на БД и некоторые хостинги за это могут заблокировать магазин. Перед наращиванием нагрузки стоит убедиться что хостинг выдержит ее. И потому резко делать частый обмен не стоит.
Передача изображений товаров
Сначала мы пытались это сделать в одном потоке с передачей данных о товарах. Но оказалось что это убивает обмен сразу. Уходит слишком много времени на загрузку картинок. Веб-сервер думает что запрос завис и прибивает его.
Пришлось вынести этот механизм в отдельную очередь. Сначала плагин сохраняет данные о товарах и сохраняет очередь загрузки картинок.
Затем отдельный обработчик идет по очереди и грузит картинки.
Изначально эта опция была доступна в платной версии, а потом решили вынести в базовый бесплатный плагин.
Также обнаружили что ряд хостингов не дает работать с такими картинками. Например Fozzy. На таких хостингах картинки просто не грузятся. Есть проверенные и надежные хостинги: ТаймВеб, Бегет.
Обновление остатков
Сначала сделали просто сохранение остатков. Потом оказалось что там много нюансов.
Кому-то из Клиентов нужно чтобы остатки были в целом по организации. А где-то нужно по отдельному складу.
Бывают остатки с резервом, а бывают без резерва. Добавили опцию.
Категории и группы
Сделали сохранение групп в МойСклад как категории в Интернет-магазине WooCommerce.
Затем оказалось что у многих Клиентов нужно синхронизировать только отдельную категорию.
Долго искали решение. Пока не посмотрели как сделан обмен у МойСклад и 1С по протоколу CommerceML. Оказалось что там можно выбрать только 1 группу, из которой будет обмен с сайтом. Мы согласовали это решение с одним из пользователей и оказалось что это подходящее решение. А оно сильно упрощало разработку. Так и сделали.
Подробнее о том как это помогает будет ниже в лайфхаках.
Лайфхаки интеграции Склада и Интернет-магазина
Выборка групп и категорий для синхронизации товаров
Иногда возникают запросы чтобы сделать исключение категорий из обмена. Пока все эти запросы решались просто рекомендацией: определить 1 группу товаров, которые должны быть на сайте. А все что не должно быть на сайте помещать в другие группы. Пока это решение оказывалось подходящим для всех желающих.
Много чего нельзя делать на Складе
Склад не позволяет указать много картинок у товара. Точнее сейчас уже позволяет, но не отдает их на Сайт. Нельзя делать эффективные описания товара с оформлением ленда. Многие тексты для SEO там тоже не написать.
Потому есть смысл рассмотреть стратегию раздельного управления данными: МойСклад только базовые данные о товарах и остатки, а на Сайте делать все остальное: картинки, оформление, SEO тексты, доп. атрибуты и т, д.
На старте лучше использовать типовые плагины и тему Storefront
Интеграция сложная штука. Часто ошибка может быть вызвана конфликтом с каким-то сырым плагином. А когда их 10-20-30 штук в магазине, то диагностика такой ошибки может превратиться в поиск иголки в стоге сена.
Странности МойСклад
Как было сказано в начале статьи… МойСклад – возможно лучшее решение на рынке. Но не без ложек дегтя в бочке меда.
Нет ДВШ
Длина, ширина и высота – 3 базовых параметра для ecommerce. Без них не работает автоматизация доставки. В МойСклад их нет. Пришлось придумывать костыль, который следит за наличием таких доп. полей и если видит их то добавляет в базовые поля магазин.
Это было шоком 🙂
Ошибка доступа при синхронизации
Нужно вместо логина указывать email. Некоторые логины содержат русские символы. Из-за этого система возвращает ошибку на стороне МойСклад. Пароль оставляем тот же самый, но меняем логин на email.
Нет таксономий и связи 1 товара ко многим категориям
В электронной коммерции часто нужно на 1 продукт привязать несколько значений 1 таблицы. Обычно это называют таксономиями. Например у запчастей надо указать несколько брендов под которые подходит запчасть. Или бывает нужно вести списки-подборки для товара. Это все важно для поиска, навигации и SEO. Но все это нельзя сделать на стороне Склада.
Проблемы старта, которые сделали больно
Разработка такого плагина создает проблемы и боль как разработчикам, так и Клиентам.
Сырой функционал
В книгах о стартапах пишут что если вам не стыдно за ваш продукт, то вы слишком затянули выход на рынок. Мы решили что пусть нам будет стыдно. И выкатили сразу как что-то начало работать. Получили кучу сообщений. Поняли что без денег далеко не уедем. Сделали платную версию. Это дало доходы, стало полегче, но от завала поддержки не спасло. Только теперь Клиенты, которые заплатили деньги, писали с 10х злобой и матами 🙂 У нас есть гарантия 30 дней. И по первому запросу мы возвращали деньги.
Но некоторым Клиентам уж очень хотелось нам отомстить за плохое решение. Им это удавалось. Было больно. Но не смертельно )
Все у кого терпение кончалось просили оформить возврат. Мы возвращали. Без проблем.
Кто то просил возврат, а потом снова покупал 🙂
Завалы в поддержке
Технически интеграция очень сложная штука. Одно из успешных решений с которым мне приходилось работать стоило около 30 млн. руб. Работало на множестве серверов за 3000 долларов, с мощными системами очередей и поддерживалось армией из 10 программистов.
Здесь функционал тот же, но нужно сделать так чтобы это работало на хостинге за 100 рублей/месяц и обходилось без поддержки 10 программистов.
Нам почти это удалось. Но на 100% вопросы не снимаются. Много вопросов прилетает в поддержку. А доходов пока не хватает чтобы сделать все по человечески. Поддержка за 2018 год проваливалась 3 раза. Потом разгребали.
Сейчас функционал плагина стал достаточно зрелым. Объем тикетов заметно снизился. Допишем документацию и надеюсь в 2019 году уже станет все как у людей 🙂
Ошибки программирования и 3 глобальных рефакторинга
Программисты ошибаются. Так бывает, люди делают ошибки. Не ошибается только тот кто ничего не делает. Вот и мы не сразу смогли все сделать правильно 🙂
Сначала мы ошиблись в архитектуре. Писали по быстрому. Очень скоро развивать код стало не возможно. Правишь 1 ошибку и получаешь еще 2. Мы переписали систему на хуки. Это сильно упростило работу и позволило разделить все на классы и слои.
Затем мы ошиблись в том как построить очередь синхронизации. На 50-100 товаров обмен шел хорошо, а на 1000 товаров все ломалось. Пришлось переписать плагин почти целиком и обеспечить стабильную очередь через cron.
Далее возникла проблема перегрузки БД. Мы передавали данные через хук-событие (do_action), и каждый слой получал объект по product_id, и делал кучу сохранений в БД. Обычный хостинг на 1000 товаров взвыл от перегрузки и начал блокировать магазин. Мы переписали на хук-фильтр, и стали передавать от слоя к слою весь объект целиком. Сохраняя все слои за 1 раз в конце очереди обработки продукта. Сократили нагрузку на БД в 10 раз.
Выводы
Эта статья давно была в планах. Но не хватало ресурсов. Все свободное время уходило в разработку и поддержку.
Сегодня плагин вышел на стадию стабильной работы. В основном обычные вопросы и мелкие доработки. Это позволяет выделить время на написание документации. Эта статья – первая ласточка. Скоро будет продолжение 🙂
Также радует что вокруг плагина начал образовываться пласт адекватных специалистов, которые могут ясно формулировать требования и общаются с нами в GitHub https://github.com/wpcraft-ru/wooms/issues. С такими клиентами приятно общаться и их задачи часто идут с повышенным приоритетом. Например: https://github.com/wpcraft-ru/wooms/issues/127
WordPress уже давно бесспорный лидер в мире веб-сайтов. WooCommerce – стал мировым лидером для создания Интернет-магазинов. Но как всегда РФ где-то отстает в развитии. Моя личная цель – попробовать решить эту проблему. Сделать чтобы лучшие мировые практики ecommerce стали доступны в РФ. И решение для интеграции со складом которое будет достаточно простым в настройке – это одна из задач, которая позволит приблизить эту цель.
Статья еще в стадии написания и будет постепенно дополняться… Пишите комментарии чтобы знать какие моменты стоит добавить…
Я так понимаю, если синхронизировать, то нужно прописать артикулы в мойсклад и интернет магазине, либо поставить галочку uuid, но тогда все товары из мойсклад попадут в интернет магазин, а это мне не нужно
Спасибо за проработку плагина и хорошее описание путей и шишек. Задам очень полезный вопрос:
“Многие спрашивают есть ли передача товаров из Сайта на Склад? Автоматически это сделать не возможно или как минимум крайне сложно технически.”
А полуавтоматически? То есть, в виджет на бэкенде добавить кнопку “выгрузить товар в мойсклад”? Добавил товар, отгрузил в склад.
Сами же понимаете, что многие мелкие торговцы (т. е. целевая аудитория woocommerce на просторах СНГ) пляшут не от склада, а от сайта.
Да, при первоначальной интеграции можно отгрузиться через yml или csv в мойсклад. Навести порядок. Но потом…
Ту цепочку, которую вы описали (базис в складе, а потом сео и картинки на сайте), можно сильно упростить этой самой кнопкой в единичном товаре. Отправить ОДИН товар в мойсклад.
Заказы же могут ходить в эту сторону… а товары – нет? Хоть по одному, вручную.
Поправьте, если ошибаюсь.
Интересная мысль. Передал в разработку https://github.com/wpcraft-ru/wooms/issues/323
Здравствуйте, хотел бы узнать при установки плагина , требуется выгрузка товаров ,цен, маркет.акций, в сторону приложении и от туда заказов, он поддерживает? и какой транспорт используется при обмене что б понять как развернуть 1с, обычно обменивается через веб сервисы и 1с поддерживает веб сервисы а если файлами то это неудобно, надо понять кому он обращается. Плагин он выполнен как что? он изменяет ? для его установки требуется снимать конфигурацию с поддержки?
Здравствуйте. требуется выгрузка цен, акций, в сторону приложения и загрузка от туда заказа он поддерживает? и какой транспорт используется при обмене, для того как развернуть 1с, если через веб сервис, поддерживается онлайн передача, плагин сам реализовывает модель сервиса? Планиг выполнен как что? требуется снимать конфигурацию с поддержки ? если не изменяет то можем 1 с аренду взять