Как исправить ошибку "status: failed" при импорте товаров через Ozon API (POST /v2/product/import)?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

При работе с Ozon API и попытке выгрузки товаров через метод POST /v2/product/import может возникнуть ситуация, когда запрос успешно отправляется, возвращается task_id, но при последующей проверке статуса товара мы обнаруживаем product_id: 0 и status: failed. Это означает, что товар не прошел валидацию или модерацию на стороне Ozon, несмотря на синтаксически корректный JSON-запрос. Чтобы автоматизировать обмен и сопоставление номенклатуры без ручной сборки структуры запросов, можно использовать расширение для интеграции с маркетплейсами.

Давайте подробно разберем, почему возникает такая ошибка и как ее диагностировать и устранить.

1. Диагностика подробных ошибок с помощью API

Первый и самый важный шаг при получении статуса failed – это получить подробную информацию о причинах отказа. Метод POST /v2/product/import предоставляет только общий статус. Для детальной диагностики нам понадобится другой метод:

  1. Отправляем запрос на импорт товара через POST /v2/product/import и получаем task_id.
  2. Используем метод GET /v3/product/info/list для получения информации о товарах по их offer_id или product_id. Это позволит нам узнать детальный статус и, самое главное, конкретные сообщения об ошибках.

В ответе от /v3/product/info/list мы увидим поле errors, которое будет содержать массив объектов с кодами и описаниями ошибок. Например, это могут быть: SPU_ALREADY_EXISTS (товар с такими характеристиками уже существует), PRICE_IS_NOT_SENT (цена не указана или некорректна), или более специфические ошибки, связанные с атрибутами.

Без этого шага дальнейшая отладка будет крайне затруднительной, поскольку мы будем действовать вслепую. Всегда начинаем с получения максимально подробной информации об ошибке. Чтобы упростить работу с товарами и избежать ручной диагностики ошибок в запросах, используется Интеграция 1С с маркетплейсами Ozon, Wildberries, Яндекс.Маркет.

2. Проверка и корректировка атрибутов товара

Одной из наиболее частых причин ошибки failed является некорректное заполнение атрибутов товара. Давайте рассмотрим ключевые моменты:

2.1. Словарные атрибуты: использование значений из справочников Ozon

Многие атрибуты на Ozon имеют предопределенный набор значений, хранящихся в специальных справочниках. Например, цвет, сезон, тип обуви, бренд. Если для атрибута установлен словарь, мы обязаны использовать только значения из этого словаря, а не произвольные строки или числовые идентификаторы, не соответствующие словарю. В приведенном примере мы видим, как числовые значения "1" или "3" были заменены на текстовые, например, "Весна" или "прозрачный".

Как получить правильные значения словарных атрибутов:

  1. Получаем дерево категорий: Используйте метод GET /v1/description-category/tree для получения идентификатора необходимой категории (category_id).
  2. Получаем атрибуты для категории: Используйте метод GET /v3/category/attribute, передав в него category_id и язык (например, RU). Этот метод вернет список всех доступных атрибутов для данной категории, включая информацию о том, являются ли они словарными и обязательными.
  3. Ищем идентификатор справочного значения: Если атрибут словарный, используйте метод GET /v1/description-category/attribute/values/search, передав attribute_id и строку для поиска (например, "Весна"). В ответе мы получим объекты с id и value. Именно эти value (или соответствующие id, если требуется) и должны использоваться в JSON-запросе.

Рассмотрим пример из темы форума с атрибутом "Сезон" (id: 4495). Изначально было передано "1", что привело к ошибке. Если бы мы запросили значения для этого атрибута, мы бы увидели что-то подобное:


{
  "result": [
    { "id": 30936, "value": "Весна", "info": "", "picture": "" },
    { "id": 30937, "value": "На любой сезон", "info": "", "picture": "" },
    { "id": 30938, "value": "Демисезон", "info": "", "picture": "" },
    { "id": 30939, "value": "Зима", "info": "", "picture": "" },
    { "id": 30940, "value": "Лето", "info": "", "picture": "" },
    { "id": 30941, "value": "Осень", "info": "", "picture": "" },
    { "id": 30942, "value": "Еврозима", "info": "", "picture": "" }
  ],
  "has_next": false
}

В этом случае вместо "1" нужно передавать одно из значений из поля "value", например, "Весна". Всегда проверяйте документацию для каждого атрибута и при необходимости используйте API для получения актуальных словарных значений.

2.2. Требования к штрихкоду (barcode)

Поле barcode играет важную роль в идентификации товара. Ozon предъявляет к нему строгие требования:

  1. Только цифры: Штрихкод должен содержать только числовые символы. Использование букв (например, "Test123456") недопустимо и приведет к ошибке.
  2. Поддерживаемые форматы: Ozon поддерживает стандарты EAN (8, 13, 14), ISBN (10, 12), UPC-12 и Code39. Наиболее распространенные — EAN-8 и EAN-13.
  3. Уникальность: Штрихкод должен быть уникальным для каждого товара в вашем ассортименте на Ozon.

Если у товара нет штрихкода производителя, вы можете сгенерировать его в личном кабинете Ozon Seller. В приведенном примере "barcode": "Test123456" был заменен на "barcode": "2245123456", что является правильным шагом.

2.3. Комплексные атрибуты (complex_attributes)

Массив complex_attributes используется для описания вариативных товаров, таких как одежда разных размеров или цветов. Если ваш товар не является вариативным или вы не используете эту функциональность, и документация API указывает, что этот атрибут необязательный, то:

  1. Рекомендуется не передавать пустой массив: Хотя передача пустого массива "complex_attributes": [] может не быть прямой причиной ошибки, она может создавать ненужную нагрузку или вызывать непредвиденные проблемы в некоторых случаях. Лучше полностью исключить этот ключ из JSON, если он не используется.
  2. Корректное заполнение для вариаций: Если ваш товар имеет вариации, убедитесь, что структура complex_attributes заполнена строго по документации Ozon. Обычно это вложенные атрибуты, которые группируют параметры вариаций (например, размер и цвет). Для их обновления может использоваться отдельный метод /v1/product/attributes/update.

2.4. Габариты и вес товара

Обязательно убедитесь, что вы передаете корректные, ненулевые значения для габаритов и веса товара:

  1. height, depth, width: Высота, глубина, ширина товара.
  2. dimension_unit: Единица измерения габаритов (например, "mm" для миллиметров, "cm" для сантиметров).
  3. weight: Вес товара.
  4. weight_unit: Единица измерения веса (например, "g" для граммов, "kg" для килограммов).

В примере из форума первоначальные значения height: 10, depth: 10, width: 10, weight: 10 (хоть и не нулевые) могли быть слишком малыми или нереалистичными для "Ботинок", что также может вызывать подозрение у системы модерации. Важно указывать реалистичные параметры.

3. Прочие обязательные поля и нюансы

Помимо атрибутов, проверьте следующие поля:

  1. category_id: Убедитесь, что идентификатор категории соответствует товару. Неправильная категория может привести к ошибкам валидации атрибутов.
  2. name: Наименование товара. Должно быть информативным.
  3. offer_id: Уникальный идентификатор вашего товара в вашей системе. Используется для сопоставления.
  4. price: Цена товара. Должна быть числовой и положительной.
  5. vat: Ставка НДС. Должна быть одной из разрешенных Ozon ("0", "10", "20") или "0" если вы работаете без НДС.
  6. images: Массив ссылок на изображения товара. Изображения являются обязательными. Убедитесь, что ссылки доступны и ведут к корректным изображениям. В примере из форума массив был пуст "images": [ " " ], что является критической ошибкой.
  7. description: Описание товара. Должно быть информативным.
  8. old_price: Старая цена (для акций). Если указана, должна быть больше текущей price.
  9. currency_code: Код валюты (например, "RUB"). По умолчанию может использоваться валюта, указанная в вашем личном кабинете, но явное указание помогает избежать ошибок.

4. Пример скорректированного JSON-запроса

Давайте рассмотрим, как мог бы выглядеть исправленный JSON, учитывая все вышеизложенные рекомендации, на основе данных из форума и предполагаемых корректных значений из справочников (гипотетически):


{
  "items": [
    {
      "attributes": [
        { "id": 31, "values": [ { "value": "Odyssey" } ] },
        { "id": 4194, "values": [ { "value": "МатериалВерхаИзСправочника" } ] }, // Пример: значение из справочника
        { "id": 4298, "values": [ { "value": "40" } ] },
        { "id": 4495, "values": [ { "value": "Весна" } ] }, // Изменено на значение из справочника
        { "id": 4503, "values": [ { "value": "Базовая коллекция" } ] }, // Изменено на значение из справочника
        { "id": 8229, "values": [ { "value": "Кеды" } ] }, // Изменено на значение из справочника
        { "id": 8292, "values": [ { "value": "ОбщееНазваниеДляРазныхЦветов" } ] },
        { "id": 9163, "values": [ { "value": "Женский" } ] }, // Изменено на значение из справочника
        { "id": 9904, "values": [ { "value": "ОКПД 2 - 15.20.11 - Обувь водонепроницаемая на подошве и с верхом из резины или пластмассы, кроме обуви с защитным металлическим подноском" } ] }, // Изменено на значение из справочника
        { "id": 10096, "values": [ { "value": "прозрачный" } ] } // Изменено на значение из справочника
      ],
      "category_id": 22826983,
      "images": [
        "https://example.com/image1.jpg", // Важно: реальные, доступные ссылки на изображения
        "https://example.com/image2.jpg"
      ],
      "image_group_id": "Тест123",
      "old_price": "1200000", // Старая цена должна быть больше новой
      "height": 400,
      "depth": 400,
      "width": 400,
      "dimension_unit": "mm",
      "weight": 1000,
      "weight_unit": "g",
      "description": "Описание тестовых ботинок для Ozon. Подробности о материалах и размерах.",
      "name": "Ботинки Весенние Женские", // Более полное название
      "offer_id": "123424",
      "price": "1000000",
      "vat": "20", // Пример: корректная ставка НДС
      "barcode": "2245123456", // Только цифры
      "currency_code": "RUB" // Явно указываем валюту
      // "complex_attributes": [] // Удаляем, если не используем
    }
  ]
}

5. Общие рекомендации при работе с Ozon API

  1. Версия API: Всегда проверяйте актуальную версию API. Иногда Ozon может переводить функционал на новые версии (например, с /v2/product/import на /v3/product/import), и использование устаревших методов может приводить к ошибкам или некорректной работе.
  2. API-ключ и Авторизация: Убедитесь, что ваш API-ключ действителен, имеет необходимые разрешения для работы с товарами и не имеет ограничений по IP-адресу.
  3. Лимиты запросов: Помните о лимитах на количество создаваемых и обновляемых товаров в сутки. Их можно узнать с помощью метода /v2/product/info/limit.
  4. Модерация: После успешной отправки товар проходит модерацию, которая может занимать до трех дней. До ее завершения товар не будет отображаться на витрине.
  5. Тестирование: При первом внедрении всегда начинайте с небольшого количества тестовых товаров и тщательно проверяйте каждый шаг.

Последовательно применив эти шаги: сначала детально диагностировав ошибку через /v3/product/info/list, а затем проверив и исправив все потенциальные проблемы в JSON-запросе, мы сможем успешно импортировать товары на Ozon.

← На главную