При работе с Ozon API и попытке выгрузки товаров через метод POST /v2/product/import может возникнуть ситуация, когда запрос успешно отправляется, возвращается task_id, но при последующей проверке статуса товара мы обнаруживаем product_id: 0 и status: failed. Это означает, что товар не прошел валидацию или модерацию на стороне Ozon, несмотря на синтаксически корректный JSON-запрос. Чтобы автоматизировать обмен и сопоставление номенклатуры без ручной сборки структуры запросов, можно использовать расширение для интеграции с маркетплейсами.
Давайте подробно разберем, почему возникает такая ошибка и как ее диагностировать и устранить.
Первый и самый важный шаг при получении статуса failed – это получить подробную информацию о причинах отказа. Метод POST /v2/product/import предоставляет только общий статус. Для детальной диагностики нам понадобится другой метод:
POST /v2/product/import и получаем task_id.GET /v3/product/info/list для получения информации о товарах по их offer_id или product_id. Это позволит нам узнать детальный статус и, самое главное, конкретные сообщения об ошибках.В ответе от /v3/product/info/list мы увидим поле errors, которое будет содержать массив объектов с кодами и описаниями ошибок. Например, это могут быть: SPU_ALREADY_EXISTS (товар с такими характеристиками уже существует), PRICE_IS_NOT_SENT (цена не указана или некорректна), или более специфические ошибки, связанные с атрибутами.
Без этого шага дальнейшая отладка будет крайне затруднительной, поскольку мы будем действовать вслепую. Всегда начинаем с получения максимально подробной информации об ошибке. Чтобы упростить работу с товарами и избежать ручной диагностики ошибок в запросах, используется Интеграция 1С с маркетплейсами Ozon, Wildberries, Яндекс.Маркет.
Одной из наиболее частых причин ошибки failed является некорректное заполнение атрибутов товара. Давайте рассмотрим ключевые моменты:
Многие атрибуты на Ozon имеют предопределенный набор значений, хранящихся в специальных справочниках. Например, цвет, сезон, тип обуви, бренд. Если для атрибута установлен словарь, мы обязаны использовать только значения из этого словаря, а не произвольные строки или числовые идентификаторы, не соответствующие словарю. В приведенном примере мы видим, как числовые значения "1" или "3" были заменены на текстовые, например, "Весна" или "прозрачный".
Как получить правильные значения словарных атрибутов:
GET /v1/description-category/tree для получения идентификатора необходимой категории (category_id).
GET /v3/category/attribute, передав в него category_id и язык (например, RU). Этот метод вернет список всех доступных атрибутов для данной категории, включая информацию о том, являются ли они словарными и обязательными.
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 для получения актуальных словарных значений.
barcode)Поле barcode играет важную роль в идентификации товара. Ozon предъявляет к нему строгие требования:
"Test123456") недопустимо и приведет к ошибке.
Если у товара нет штрихкода производителя, вы можете сгенерировать его в личном кабинете Ozon Seller. В приведенном примере "barcode": "Test123456" был заменен на "barcode": "2245123456", что является правильным шагом.
complex_attributes)Массив complex_attributes используется для описания вариативных товаров, таких как одежда разных размеров или цветов. Если ваш товар не является вариативным или вы не используете эту функциональность, и документация API указывает, что этот атрибут необязательный, то:
"complex_attributes": [] может не быть прямой причиной ошибки, она может создавать ненужную нагрузку или вызывать непредвиденные проблемы в некоторых случаях. Лучше полностью исключить этот ключ из JSON, если он не используется.
complex_attributes заполнена строго по документации Ozon. Обычно это вложенные атрибуты, которые группируют параметры вариаций (например, размер и цвет). Для их обновления может использоваться отдельный метод /v1/product/attributes/update.Обязательно убедитесь, что вы передаете корректные, ненулевые значения для габаритов и веса товара:
height, depth, width: Высота, глубина, ширина товара.
dimension_unit: Единица измерения габаритов (например, "mm" для миллиметров, "cm" для сантиметров).
weight: Вес товара.
weight_unit: Единица измерения веса (например, "g" для граммов, "kg" для килограммов).
В примере из форума первоначальные значения height: 10, depth: 10, width: 10, weight: 10 (хоть и не нулевые) могли быть слишком малыми или нереалистичными для "Ботинок", что также может вызывать подозрение у системы модерации. Важно указывать реалистичные параметры.
Помимо атрибутов, проверьте следующие поля:
category_id: Убедитесь, что идентификатор категории соответствует товару. Неправильная категория может привести к ошибкам валидации атрибутов.
name: Наименование товара. Должно быть информативным.
offer_id: Уникальный идентификатор вашего товара в вашей системе. Используется для сопоставления.
price: Цена товара. Должна быть числовой и положительной.
vat: Ставка НДС. Должна быть одной из разрешенных Ozon ("0", "10", "20") или "0" если вы работаете без НДС.
images: Массив ссылок на изображения товара. Изображения являются обязательными. Убедитесь, что ссылки доступны и ведут к корректным изображениям. В примере из форума массив был пуст "images": [ " " ], что является критической ошибкой.
description: Описание товара. Должно быть информативным.
old_price: Старая цена (для акций). Если указана, должна быть больше текущей price.
currency_code: Код валюты (например, "RUB"). По умолчанию может использоваться валюта, указанная в вашем личном кабинете, но явное указание помогает избежать ошибок.
Давайте рассмотрим, как мог бы выглядеть исправленный 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": [] // Удаляем, если не используем
}
]
}
/v2/product/import на /v3/product/import), и использование устаревших методов может приводить к ошибкам или некорректной работе.
/v2/product/info/limit.
Последовательно применив эти шаги: сначала детально диагностировав ошибку через /v3/product/info/list, а затем проверив и исправив все потенциальные проблемы в JSON-запросе, мы сможем успешно импортировать товары на Ozon.