Увійти Зареєструватися

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

Як зробити так, щоб залишки на сайті, складі й у замовленнях були однією цифрою: способи інтеграції, вебхуки, типові розбіжності та коли потрібен ПРРО.

9 хвилин
Hero Image

Коротко про головне

Джерело правди має бути одне

Якщо залишок можна змінити і на сайті, і в обліку, розбіжність є лише питанням часу. Одна система веде кількість, решта її отримує.

Синхронізація буває в один бік і в обидва

Товари зазвичай їдуть з обліку на сайт, замовлення їдуть назад. Змішувати напрямки для однієї сутності не варто.

Вебхук швидший за опитування

Магазин може сам повідомляти про нове замовлення. Це надійніше, ніж перевіряти сайт раз на пів години.

ПРРО і інтеграція: різні речі

Закон вимагає застосовувати ПРРО при певних способах оплати, але не вимагає інтегрувати з ним магазин.

Звідки беруться розбіжності

Сценарій майже завжди однаковий. Товар продали в офлайн-точці або через Instagram, на сайті кількість лишилася старою, покупець оформив замовлення на позицію, якої немає. Далі буде дзвінок із вибаченнями, повернення грошей і мінус до репутації.

Причина не в неуважності. Причина в тому, що кількість товару зберігається одночасно в кількох місцях і кожне з них вважає себе правим: сайт, таблиця складу, голова власника, іноді ще й маркетплейс.

Синхронізація вирішує рівно одну задачу: зробити так, щоб залишок був однією цифрою, а не чотирма схожими.

Правило нуль: одне джерело правди

Перед будь-якою технічною роботою треба відповісти на питання, яка система веде кількість. Варіантів насправді два.

Облік веде кількість, сайт відображає. Це нормальний варіант для більшості: продажі йдуть різними каналами, а склад один. Сайт отримує залишок і не змінює його самостійно.

Сайт веде кількість. Працює, тільки якщо магазин є єдиним каналом продажу. Щойно зʼявляється офлайн-точка або продаж у месенджері, схема ламається.

Найгірший варіант, коли залишок можна редагувати з обох боків. Тоді розбіжність не питання «чи», а питання «коли».

Що саме синхронізувати

Різні сутності їдуть у різні боки, і це варто розділяти від початку.

  • Товари й категорії: з обліку на сайт. Створювати картку двічі немає сенсу; це також рятує від дублів, про які ми писали в матеріалі про те, як скласти каталог товарів.
  • Залишки: з обліку на сайт, в один бік і часто.
  • Ціни: з обліку на сайт, але обережно: ціна на маркетплейсі зазвичай відрізняється через комісію.
  • Замовлення: із сайту в облік. Це єдиний потік, який іде назад.
  • Статуси доставки: від перевізника в облік і далі покупцю.

Окремо про варіації: залишок живе на рівні варіанта, а не моделі. Якщо в обліку розмір і колір заведені як варіації, а на сайті як окремі товари, синхронізація або не зійдеться, або доведеться підтримувати мапінг вручну. Як правильно розділити одне й інше, розібрано в матеріалі про варіації товару.

Три способи звести системи

1. Готовий плагін. Найшвидший шлях, якщо у вас WooCommerce. Ставиться, підключається ключем, працює. Мінус у тому, що ви обмежені тим, що вміє плагін.

2. REST API. Універсальний варіант: система обліку й магазин обмінюються даними напряму за токеном. Потрібен розробник або готова інтеграція, але немає стелі за можливостями. У WooCommerce це wc/v3, ключі генеруються в WooCommerce → Settings → Advanced → REST API з правами read, write або read-write.

3. Файловий обмін. Вивантаження прайсу у форматі YML і завантаження його майданчиком за розкладом. Так працюють Rozetka і Prom. Це не синхронізація в реальному часі: Rozetka оновлює дані з фіда приблизно щогодини, а Prom оновлює ключові поля на кшталт ціни й наявності кілька разів на день.

Опитування чи вебхуки

Є два способи дізнатися, що на сайті зʼявилося нове замовлення.

Опитування: облік раз на N хвилин запитує магазин: «щось нове є?». Просто в реалізації, але або створює затримку, або навантажує сайт зайвими запитами.

Вебхук: магазин сам стукає в облік у момент події. WooCommerce має це з коробки: WooCommerce → Settings → Advanced → Webhooks, дванадцять базових подій виду order.created, product.updated, customer.created. Кожна доставка підписується заголовком X-WC-Webhook-Signature, тож приймальна сторона може перевірити, що запит справді від вашого магазину.

Одна деталь, яка з часом усіх кусає: якщо вебхук пʼять разів поспіль не доставився, WooCommerce його вимикає. Мовчки. Тому в будь-якій інтеграції має бути перевірка «а чи приходили події за останню добу».

Доставка: де тут місце перевізника

Третій шматок пазла становить логістика. Ручне створення накладних це не лише час, а й помилки в адресах, які потім перетворюються на повернення.

У Нової Пошти є API, через яке накладну можна створити просто з системи обліку, а статус посилки підтягувати автоматично. Деталі, ключі й обмеження описано в окремому матеріалі про API Нової Пошти.

ПРРО: що вимагає закон, а що ні

Тут варто чітко розділити дві речі, які постійно змішують.

Застосовувати ПРРО є обовʼязком, який залежить від способу оплати:

  • оплата карткою через інтернет-еквайринг: ПРРО потрібен;
  • переказ на реквізити картки ФОП: потрібен;
  • переказ на поточний рахунок за IBAN, який покупець робить сам як повну передоплату: не потрібен (пільга п. 2 ст. 9 Закону № 265/95-ВР);
  • накладений платіж: чек видає перевізник; якщо він перераховує кошти на ваш поточний рахунок, ПРРО не застосовується;
  • ФОП 1 групи звільнена в будь-якому разі (п. 296.10 ПКУ).

Закон прямо згадує інтернет: обовʼязок видати розрахунковий документ поширюється й на операції, замовлення або оплата яких здійснюється з використанням мережі Інтернет.

Інтегрувати магазин із ПРРО не є обовʼязком. У законі такої вимоги немає: ДПС дає безкоштовне ПЗ, і чек можна пробивати вручну. Інтеграція потрібна вам для швидкості, а не для перевірки. Що обрати і скільки коштує, ми розбирали в матеріалі ПРРО чи РРО для ФОП.

Скільки коштує розбіжність у залишках

Цифру легко недооцінити, бо вона розмазана по дрібницях. Порахуймо на звичайному магазині з 300 замовленнями на місяць.

Якщо 3% замовлень оформлені на товар, якого фактично немає, це 9 випадків на місяць. Кожен із них означає дзвінок і вибачення (15 хвилин), повернення оплати, а приблизно в половині випадків ще й втрачений клієнт. Плюс негативний відгук, який коштує наступних покупців.

Зворотний бік такий самий дорогий: товар є на складі, але на сайті стоїть нуль. Тут ви навіть не дізнаєтеся про втрачений продаж, бо покупець просто піде до конкурента. Саме ці втрати ніколи не потрапляють у звіти.

Як часто оновлювати залишки

Відповідь залежить від того, наскільки швидко у вас обертається товар.

Якщо позиції унікальні або їх по одній штуці (вінтаж, ручна робота, техніка з рук), синхронізація має бути практично миттєвою, інакше два покупці куплять ту саму річ. Тут вебхуки не розкіш, а необхідність.

Якщо товару на складі десятки й сотні одиниць, оновлення раз на 15-30 хвилин зазвичай достатньо. А для маркетплейсів вибору й немає: майданчик забирає фід за власним розкладом, і швидше він не стане.

Практичний компроміс: страховий залишок. Якщо на складі 3 штуки, показуйте на сайті 2. Це прибирає більшість конфліктів на дистанції між оновленнями і коштує дешевше за будь-яку доробку інтеграції.

Що перевірити перед запуском

  1. Мапінг товарів. За яким полем система звіряє позиції: за артикулом, ID чи назвою. Назва для цього не годиться.
  2. Що робити з невідомим товаром. Якщо замовлення містить позицію, якої немає в обліку, інтеграція має не мовчати.
  3. Резервування. Чи зменшується залишок у момент оформлення замовлення чи в момент оплати. Обидва варіанти робочі, але треба обрати один.
  4. Скасування й повернення. Найчастіше забутий сценарій: товар має повернутися в залишок.
  5. Журнал обміну. Без логів пошук причини розбіжності перетворюється на ворожіння.

Хто це робить: своїми силами, підрядник чи готове рішення

Три варіанти, і всі три робочі за різних умов.

Готове рішення. Плагін або вбудована інтеграція. Підходить, якщо ваш сценарій типовий: WooCommerce, один склад, одна валюта. Запускається за годину, підтримується вендором.

Підрядник під ключ. Має сенс, коли систем більше двох або є нестандартна логіка, наприклад, резервування під передзамовлення. Головний ризик тут не ціна розробки, а підтримка: інтеграція живе рівно доти, доки хтось оновлює її після змін API з обох боків.

Своїми силами через API. Найгнучкіше і найдешевше на старті, найдорожче в супроводі. Перед тим як обирати цей шлях, чесно спитайте себе, хто виправлятиме обмін о девʼятій вечора в пʼятницю.

Незалежно від варіанта, домовтеся заздалегідь, хто відповідає за журнал обміну і хто отримує сповіщення, коли синхронізація зупинилася. Найдорожчі розбіжності це не ті, що виникли, а ті, які помітили через тиждень.

З чого почати, якщо все зараз у таблиці

Спершу порядок у номенклатурі, потім інтеграція, а не навпаки. Синхронізація безжально розмножує будь-який безлад: дублі в каталозі перетворяться на дублі на сайті, а різні одиниці виміру дадуть залишки, які неможливо зіставити.

Практичний порядок: привести каталог до єдиного вигляду, визначити джерело правди, підключити товари й залишки, потім замовлення, і лише в кінці доставку. Технічну частину переїзду з таблиць описано в гайді про облік товарів і залишків на складі.

Часті запитання

Як синхронізувати залишки між сайтом і складом

Спершу визначте джерело правди, тобто систему, яка веде кількість. Зазвичай це облік, а сайт лише відображає залишок. Далі підключіть обмін: готовий плагін, REST API або файловий фід. Головна умова полягає в тому, щоб залишок не можна було редагувати з обох боків одночасно.

Що краще: опитування чи вебхуки

Вебхуки, якщо магазин їх підтримує: сайт сам повідомляє про подію, і затримки майже немає. Опитування простіше в реалізації, але або створює лаг, або навантажує сайт зайвими запитами. Важливо: WooCommerce вимикає вебхук після пʼяти невдалих доставок поспіль, тому потрібен контроль, що події взагалі приходять.

Як часто оновлювати залишки на сайті

Залежить від обороту. Для унікальних позицій і товару по одній штуці потрібна практично миттєва синхронізація, інакше двоє купують одну річ. Для товару в десятках одиниць вистачає 15-30 хвилин. Для маркетплейсів графік диктує сам майданчик: Rozetka забирає дані з фіда приблизно щогодини. Страховий залишок закриває більшість конфліктів дешевше за доробку інтеграції.

Чи потрібен ПРРО для інтернет-магазину

Залежить від способу оплати. При оплаті карткою через еквайринг або переказі на реквізити картки ФОП ПРРО потрібен. При переказі на поточний рахунок за IBAN у вигляді повної передоплати не потрібен. При накладеному платежі чек видає перевізник. ФОП 1 групи звільнена. Закон прямо поширює обовʼязок і на замовлення через інтернет.

Чи потрібно інтегрувати магазин із ПРРО

Ні, такої вимоги в законі немає. Обовʼязок полягає в тому, щоб застосовувати ПРРО і видати розрахунковий документ, а не звʼязувати його з сайтом. ДПС надає безкоштовне програмне рішення, і чек можна створювати вручну. Інтеграція потрібна для швидкості й меншої кількості помилок, а не для перевірки.

З чого почати інтеграцію

З порядку в каталозі. Синхронізація розмножує будь-який безлад: дублі в обліку стануть дублями на сайті, а різні одиниці виміру дадуть залишки, які неможливо зіставити. Далі: джерело правди, потім товари й залишки, потім замовлення, і в кінці доставка.

Один товар: одна цифра

ERP-модуль ClearMoney синхронізує товари й замовлення з магазином через готовий плагін WooCommerce або відкритий REST API з токен-авторизацією.

Спробувати безкоштовно
✓ Без прив’язки банківської картки
✓ Миттєвий доступ після реєстрації
✓ Підтримка 24/7