API и аналитика · 08.08.2026

Дедупликация заказов API Ozon и WB: как не завысить продажи повторными событиями

Один заказ способен появиться в нескольких выгрузках, повторно прийти после перезапуска загрузки или изменить статус и состав полей. Если каждая полученная строка считается новой продажей, отчёт завышает спрос, остаток уменьшается несколько раз, а AI учится на выдуманном росте. Дедупликация строится не на удалении похожих строк, а на устойчивой идентичности заказа, версионности и идемпотентной обработке каждого события.

Проверить на своих товарах
Дедупликация заказов API Ozon и WB: как не завысить продажи повторными событиями

Сначала определите единицу, которую считаете

Заказ, отправление и товарная строка — разные сущности. Один заказ может содержать несколько SKU, разделиться на отправления или частично отмениться. Для аналитики количества нужен ключ строки товара, для логистики — отправления, для клиента — заказа. Склейка только по номеру заказа уничтожит полезную детализацию.

Составьте ключ из стабильных идентификаторов площадки: магазин, заказ или отправление, offer ID, SKU, строка и при необходимости склад. Не включайте в идентичность изменяемый статус, цену или время обновления, иначе каждая нормальная корректировка превратится в новую продажу.

Разделите повтор и новую версию

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

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

Сделайте обработку идемпотентной

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

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

Пересчитывайте показатели разницей состояний

Когда подтверждённый заказ становится отменённым, не добавляйте отрицательный клон без связи. Рассчитайте разницу между старым и новым состоянием: продажи, резерв, доступный остаток, выручка и ожидаемая прибыль меняются согласованно. Так одна история заказа объясняет все движения.

Для частичной отмены или изменения количества разница применяется по конкретной строке SKU. Связанные товары и комплекты требуют одной согласованной операции, иначе дублирование одного компонента создаст ложный дефицит. После применения полезно сверять контрольные суммы по заказу и магазину.

Найдите старые дубли и защитите обучение AI

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

После исправления пересчитайте спрос, конверсию, остатки и исходы прошлых автоматических действий. Иначе оперативный отчёт станет правильным, а модель продолжит считать дубль подтверждением старой рекомендации. Отдельный признак качества источника поможет AI осторожнее работать в периоды повторов и сбоев.

Как ВитринаPro поддерживает чистый поток заказов

ВитринаPro может объединять события Ozon и Wildberries, хранить устойчивые ключи и версии, повторять загрузку без двойного применения и связывать статусы с остатком и прибылью. Селлеру не приходится вручную искать одинаковые строки в больших выгрузках после каждого сбоя или повторного запуска.

Сначала подключите журналирование и теневую проверку дублей, сравните итог с кабинетами и разберите неоднозначные группы. Затем включите идемпотентное применение и автоматический карантин редких конфликтов. Сервис обработает рутину, а команда будет видеть только случаи, где действительно нужен выбор.

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

Почему один заказ появляется в API несколько раз?

Площадки отдают пересекающиеся интервалы, повторяют данные после восстановления и присылают новые статусы одной сущности. Это нормально для интеграции, если обработка различает повтор и версию.

Можно ли считать дублем строки с одинаковой суммой и временем?

Нет. Два реальных заказа могут совпасть по сумме и времени. Нужен устойчивый ключ из идентификаторов магазина, заказа, отправления и товарной строки, а похожесть используется только для аудита.

Что значит идемпотентная обработка заказа?

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

Что делать, если старые дубли уже попали в AI?

После очистки нужно пересчитать исторические показатели и исходы решений, затем переобучить или скорректировать модель. Иначе AI продолжит использовать завышенный спрос как подтверждённый опыт.

ВитринаPro сохраняет идентичность и версии заказов, чтобы повторные события не завышали продажи, не ломали остатки и не обучали AI на ошибочных данных.

Посмотреть решения ВитринаPro для селлеров
Консультант ВитринаPro
Печатает...