Обсудить проект

Бета ПРО и Ladies Health: как устроена интеграция

Возненко Игорь «Ось Бизнеса»

В двух прошлых статьях я разбирал маркировку и работу со складом-подрядчиком вообще. Здесь — конкретный случай: интернет-магазин Ladies Health, склад фулфилмента ООО «Бета ПРО», доставка Яндексом и Честный Знак. Что с чем разговаривает, какими методами и где мы обожглись.

Смысл разбора не в том, чтобы повторить его один в один: у вашего оператора будет своё API. Смысл в том, что грабли у таких связок одинаковые, а найти их можно только на живом заказе.

Кто участвует

Пять систем, и у каждой своя роль:

  • Сайт — WooCommerce: витрина, корзина, оформление, оплата.
  • CRM Ось Бизнеса — наш корпоративный портал: заказы, статусы, чеки, коды маркировки, работа менеджера. Дальше по тексту — просто «портал».
  • Бета ПРО — склад: получает, хранит, собирает и отгружает заказы.
  • Яндекс.Доставка — везёт: заявка, штрихкод, трек, возврат.
  • Честный Знак — учитывает коды маркированных единиц; чек в него уходит через ОФД.

Ключевое решение: разговаривает со всеми одна система — портал. Раньше между ними стоял отдельный сервис-коннектор, и на бумаге это выглядело правильнее. На практике получилось два места, где живёт правда о заказе, и вопрос «почему статусы разошлись» перестал иметь однозначный ответ. Коннектор убрали.

Путь заказа: сайт, оплата, портал, склад, доставка, чек

Путь одного заказа. Каждая стрелка — вызов, который может не пройти, и на каждый нужен ответ на вопрос «что тогда».

Путь заказа

Как это работает на живом заказе:

  1. Покупатель оформляет заказ на сайте и платит картой.
  2. Платёжный сервис присылает уведомление, заказ становится оплаченным.
  3. Портал забирает заказ с сайта и заводит его у себя.
  4. Портал создаёт заявку в Яндекс.Доставке и получает штрихкод-этикетку.
  5. Портал ставит складу задание на отгрузку и прикладывает к нему этикетку.
  6. Склад собирает заказ, сканирует коды маркировки, отгружает курьеру.
  7. Портал получает коды отгруженных единиц и пробивает чек — код уходит в Честный Знак.
  8. Дальше портал следит за доставкой и возвратом.

Восемь шагов, и на каждом стыке — чужая система со своими правилами.

Транспорт Бета ПРО: два API вместо одного

Первое, что выясняется на практике: у оператора не одно API, а два поколения, и для корректной работы нужны оба.

REST /grh/api — основной, авторизация Basic. Им делается всё, ради чего интеграция и затевается:

  • POST /goods — завести товар в номенклатуре склада;
  • POST /indocs — создать задание: что и кому отгрузить;
  • POST /indocs/{id}/files — приложить к заданию файл, у нас это этикетка Яндекса;
  • POST /indocs/{id}/attributes — дополнительные признаки задания;
  • POST /outdocs/list — что склад отгрузил.

XML /wsrv — старый сервис, но без него не обойтись: часть данных живёт только там. Нам нужны два метода — «Остатки» и «Состояние отправления». Авторизация другая: пара «партнёр и пароль» кладётся в тело запроса, а не в заголовки. Ответ — с признаком state: ноль означает успех, минус единица — ошибку, и тогда весь запрос откатывается целиком.

⚠️ Планируя интеграцию, спросите оператора не «есть ли API», а какие методы в каком из API. Мы узнали про два транспорта уже в процессе, и это переписанный клиент вместо запланированного.

Грабли, которые нашлись только на бою

В позиции заказа нет количества

Самая дорогая ошибка. Мы отправляли позицию с количеством: артикул, две штуки. Склад принимал задание, показывал «2 шт», а отгружал одну.

Оказалось, в задании Бета ПРО количества у позиции нет. Данный атрибут игнорируется в связи с тем, что строка всегда означает одну единицу. Подтвердил менеджер оператора: «если заказали четыре штуки, необходимо указывать строку четыре раза».

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

⚠️ Диагностика: недоотгрузка выглядит не как ошибка, а как «клиенту приехало меньше». В журнале ошибок ничего нет — обе системы отработали штатно.

Осиротевшая заявка в доставке

Портал создавал заявку в Яндекс.Доставке и не сохранял её номер до того, как продолжить работу. Дальше шаг падал — и следующая попытка создавала вторую заявку на тот же заказ. Первая оставалась висеть ничьей.

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

Возврат со склада никто не присылает

Заказ вернулся на склад, склад оформил его отдельным документом возврата — а в портале заказ так и висел доставленным. Нашли это не по уведомлению, а по расследованию: два кода маркировки числились на складе, хотя в Честном Знаке были списаны.

Вывод простой: документы склада надо опрашивать, а не ждать, что о них сообщат. Возврат — это не статус, который придёт сам, а документ, который появляется в списке отгрузок и возвратов.

Кто хозяин статуса

Отдельная история — доставка. Любой возвратный статус Яндекса портал переводит в «Возвращается». А вот терминальное «Возврат» автоматика не ставит.

Причина из практики: клиент отказался от посылки, менеджер решил не принимать её на склад и отправить замену за свой счёт. Заказ должен спокойно стоять в «Возвращается», пока человек не решит иначе, — а автоматика упрямо сбрасывала его в «Возврат», перебивая ручное решение.

Отсюда правило: у каждого статуса один хозяин. Промежуточные ведёт автоматика по данным перевозчика, терминальные ставит человек. Смешение этих ролей выглядит как «система живёт своей жизнью».

Оплата, которой не было

Первый заказ завис в ожидании оплаты, хотя деньги списались. Причина оказалась не в коде: на боевом терминале платёжного сервиса не были заполнены адреса уведомлений. Тестовый терминал был настроен, боевой — нет.

⚠️ При переезде на боевые ключи проверяйте не только сами ключи, но и настройки уведомлений: платёж пройдёт, а ваша система об этом не узнает.

Маркировка в этой схеме

Коды приходят от склада вместе с отгрузкой — по одному на единицу. Портал проверяет их полноту, кладёт в заказ и передаёт в чек отдельным реквизитом, откуда они уходят в Честный Знак через ОФД.

Здесь же — правило про количество из раздела выше: одна единица, одна строка, один код. Заказ с двумя одинаковыми позициями без этого не пробивается.

Что ещё важно знать про коды при работе через чужой склад — в отдельной статье про Честный Знак при отгрузке со склада: там про то, почему коды приезжают неполными и что проверять до отгрузки.

Что из этого следует для вашей интеграции

Перечислю то, что я бы выяснял на месте заказчика до начала работ:

  • Какие методы в каком API — и нет ли второго, старого, без которого не обойтись.
  • Поддерживается ли количество в позиции — необходимый для уточнения вопрос. Чтобы избежать недоотгрузок, важно уточнить, как построен учёт количества в системе.
  • Как приходят коды маркировки: файлом, ответом метода, из личного кабинета руками.
  • Как узнать о возврате на склад: приходит уведомление или надо опрашивать документы.
  • Кто ставит статусы доставки и что делать, если человек решил иначе.
  • Что происходит при повторной попытке: создастся вторая заявка или вернётся та же.

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

Как выбирать оператора и что должно ходить между вами автоматически — в статье про фулфилмент для интернет-магазина.

Если ваш склад — Бета ПРО

Всё описанное выше — не разовая история под один магазин. Особенности API, разбиение позиций, работа с этикетками Яндекса, коды маркировки и статусы возвратов уже пройдены на боевом проекте, и эти наработки применимы к интеграции у любого клиента Бета ПРО: склад тот же, методы те же, грабли те же. Проходить их заново не нужно.

Что обычно входит в такую работу:

  • разбор вашей схемы: сайт или учётная система, перевозчики, маркированный товар;
  • подключение к складу: номенклатура, задания на отгрузку, этикетки, документы возврата;
  • статусы и остатки в обе стороны — с правилом, кто из систем ими распоряжается;
  • маркировка: коды от склада до чека, с проверками до отгрузки;
  • то, о чём вспоминают последним: куда придёт сигнал, когда обмен сломается.

Сроки зависят от вашей стороны: склад со своей стороны готов, и то, что обычно занимает недели на выяснение особенностей, здесь уже выяснено.

Хотите такую же связку у себя — расскажите о задаче.

Содержание
  1. Кто участвует
  2. Путь заказа
  3. Транспорт Бета ПРО: два API вместо одного
  4. Грабли, которые нашлись только на бою
  5. Маркировка в этой схеме
  6. Что из этого следует для вашей интеграции
  7. Если ваш склад — Бета ПРО