Перед очередной выгрузкой маркетолог каталога видит три разных вопроса: правильно ли собран XML, соответствуют ли поля требованиям площадки и совпадают ли цена с наличием с исходными данными. Если объединить эти проверки в одну, файл может успешно загрузиться, но отдельные товары будут отклонены или скрыты.
Проверка YML-фида должна дать не общий вердикт «всё хорошо», а список по каждому offer: что проверено, какое правило нарушено, кто исправляет источник и можно ли отправлять строку повторно. При этом успешный HTTP-ответ подтверждает передачу данных, а не размещение всего каталога.
Какую задачу решает этот процесс
Представим рабочую ситуацию. E-commerce-команда обновила ассортимент, а маркетологу каталога нужно отправить фид в принимающий канал. В выгрузке могли появиться повторные идентификаторы, отрицательная или устаревшая цена, пустой categoryId, неверный URL либо расхождение между available и фактической возможностью заказать товар.
Процесс проверки должен остановить известные ошибки до отправки и сохранить понятный протокол:
- Экспортёр сформировал XML в ожидаемой кодировке.
- Структура XML разбирается без синтаксической ошибки.
- Каждый
offerпроверен по контракту конкретного приёмника. - Значения сопоставлены с источниками каталога, цен и доступности.
- После загрузки ответ площадки и статус предложения проверены отдельно.
Граница материала — контракт выгрузки и техническая валидация. Здесь мы не генерируем товарные описания, не пишем карточки и не проектируем ответы покупателям. Смежный процесс общения с клиентом разобран в материале про чат-бота для статуса заказа.
Какие данные и правила подготовить
До настройки валидатора составьте реестр полей. Для каждого поля укажите источник, ответственного и статус правила. Статус «обязательное» означает, что поле требуется согласованным контрактом. «Условное» — что требование зависит от типа предложения или канала. «Неизвестное» — что документацию ещё нужно проверить; догадку нельзя превращать в правило.
| Поле | Источник | Ответственный | Статус до проверки канала | Что сверить |
|---|---|---|---|---|
offer_id | Каталог товаров | Владелец каталога | Обязательное для внутреннего контроля | Область уникальности и стабильность ID |
categoryId | Справочник категорий | Контент-менеджер | Условное | Допустимые категории и связь со справочником канала |
price | Источник цен | Коммерческий специалист | Условное по контракту канала | Числовой формат, актуальность и единица продажи |
Валюта (currencyId) | Источник цен | Коммерческий специалист | Условное | Допустимый код и связь с ценой |
available и остаток | Источник доступности | Операционный специалист | Условное | Как канал трактует доступность и отсутствие товара |
| Изображения | Публичный каталог или медиахранилище | Контент-менеджер | Условное | Формат, доступность и соответствие товару |
| URL товара | Публичный каталог | Контент-менеджер | Условное | Адрес открывает нужное предложение |
encoding | Настройка экспортёра | Разработчик интеграции | Техническое обязательное | Заявленная и фактическая кодировка совпадают |
| Дополнительные характеристики | Каталог товаров | Владелец каталога | Неизвестное до сверки | Допустимые названия, типы и обязательность |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Ниже — короткие синтетические учебные данные, а не клиентский файл и не результат запуска на площадке:
| Элемент или атрибут | Условное значение |
|---|---|
| XML-декларация | версия 1.0, encoding UTF-8 |
offer id | DEMO-300 |
available | true |
name | Учебный светильник |
categoryId | DEMO-CAT-10 |
price | 990 |
currencyId | RUB |
url | https://example.invalid/products/demo-300 |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Такой фрагмент можно проверить на трёх уровнях. Сначала XML-парсер должен разобрать дерево и согласовать содержимое с encoding. Затем поля проверяют по контракту выбранного канала. После этого значения сравнивают с бизнес-источниками. Корректный синтаксис XML сам по себе не делает файл корректным YML для конкретного приёмника.
Что проверить до отправки фида
Начните с технического слоя. Файл должен быть корректным XML: теги закрыты, атрибуты записаны допустимым образом, вложенность не нарушена, а байты соответствуют заявленной кодировке. Ошибка на этом уровне мешает надёжно перейти к проверке товаров.
Затем примените согласованную схему или набор правил принимающего канала:
- присутствуют требуемые элементы;
- нет неподдерживаемых элементов;
- значения имеют ожидаемые типы;
- идентификаторы уникальны в области, которую определяет канал;
- ссылки и изображения относятся к тому же предложению;
- цена, валюта и доступность согласованы между собой и с источниками.
Схема формата зависит от приёмника. Нельзя взять правила одной торговой или рекламной площадки и объявить их универсальным стандартом YML. Например, документация Яндекс Товаров отдельно называет отсутствие offer, неправильный формат фида, неверную стоимость, недоступную страницу и расхождение сведений о товаре. Это подтверждает необходимость разных классов проверки именно для этого канала, но не задаёт полный контракт других систем.
Хороший отчёт валидатора ссылается не только на строку XML, но и на правило: «повтор ID в согласованной области», «поле отсутствует по контракту версии X» или «цена не совпала с источником на момент формирования». Тогда сотрудник исправляет причину, а не маскирует сообщение.
Как сопоставить каталог и предложения
Один товар каталога может породить несколько предложений: например, варианты размера или цвета. До выгрузки определите, что считается товаром, вариантом и самостоятельным offer, какой идентификатор остаётся постоянным и как вариант связан с категорией. Эти связи должны одинаково пониматься в каталоге, экспортёре и отчёте ошибок.
Отдельно согласуйте единицу продажи. Цена одной штуки, комплекта и партии — разные значения. Нельзя механически изменить число, чтобы оно прошло проверку: коммерческий специалист должен подтвердить цену и единицу в исходной системе. В документации Яндекс Товаров, например, отдельно описана ошибка, когда передана цена единицы при обязательном заказе партии. Такое условие применимо к указанному каналу и не переносится автоматически на остальные.
Не объединяйте три разных состояния:
- пустое поле означает, что значение не передано;
- ноль — переданное числовое значение, допустимость которого определяет канал;
- отсутствие
offerозначает, что предложения нет в текущей выгрузке, но последствия для ранее принятой позиции зависят от приёмника.
То же относится к available. Значение должно отражать согласованный источник доступности, а не предположение экспортёра. Если маркетолог не знает, означает ли нулевой остаток запрет публикации, предзаказ или иной статус, правило остаётся неизвестным до проверки документации и настроек канала.
Варианты товара, состояние бывшего в употреблении или уценённого товара и оптовую цену описывают только по правилам выбранного приёмника. Для Яндекс Товаров документация различает сведения об уценённом или бывшем в употреблении товаре и указывает элементы condition и quality; это не доказательство такой же структуры в другом канале.
Как читать ошибки загрузки и повторять публикацию
Разделите наблюдение на три этапа.
- Локальная проверка. Файл разбирается как XML, а строки проходят известные технические и бизнес-правила.
- Ответ площадки. Канал получил запрос или файл и вернул технический либо построчный результат обработки.
- Фактическое появление. Принятый
offerполучил ожидаемый статус и появился там, где его должен увидеть пользователь.
HTTP 2xx означает успешный транспортный обмен в пределах соответствующего способа загрузки. Он не подтверждает, что площадка приняла каждую строку, завершила модерацию или разместила товар. Даже сообщение о принятом файле нужно сопоставить с построчным отчётом и фактическим статусом предложений.
При частичном отклонении сохраните перечни принятых и отклонённых offer_id. Для каждой ошибки зафиксируйте исходное значение, правило, владельца исправления и новую версию строки. Исправляйте данные в исходной системе, а не только в готовом XML: иначе следующий экспорт вернёт старую ошибку.
После исправления сформируйте новую версию фида и повторите предусмотренную каналом процедуру. Храните последнюю принятую версию, время формирования и журнал изменений. Это позволит отличить новый дефект от сообщения, относящегося к предыдущей загрузке.
Учебный пример: путь от входных данных до результата
Рассмотрим синтетический пример. Все названия, идентификаторы и суммы условны; это не клиентский кейс и не отчёт о реально выполненной загрузке.
В отдельном учебном реестре уже занят ID DEMO-100. В новую выгрузку входят три предложения:
DEMO-100, условный товар «Лампа A», цена 1490 рублей — конфликтует с реестром ID;DEMO-200, условный товар «Лампа B», цена −250 рублей — содержит отрицательное значение;DEMO-300, условный товар «Лампа C», цена 990 рублей — проходит показанные локальные проверки.
Повтор ID проверяется относительно отдельного реестра. Поэтому среди трёх новых строк остаётся одна строка с конфликтом идентификатора, одна с ошибкой цены и одна без найденных ошибок.
| Offer ID | Поле | Ошибка | Правило канала | Исправление | Результат |
|---|---|---|---|---|---|
DEMO-100 | offer_id | ID уже есть в синтетическом реестре | ID должен быть уникален в области, заданной каналом | После сверки правила идентификации заменить на DEMO-101 во всех связанных данных | Допущен к повторной локальной проверке |
DEMO-200 | price | Указано −250 | В учебной проверке цена должна быть больше 0; фактическое правило подтверждают по документации канала | Сверить источник цены: исправить на 250 только при подтверждении либо исключить строку до выяснения | Заблокирован до исправления |
DEMO-300 | — | Ошибок в показанных проверках не найдено | XML, обязательные учебные поля, уникальность ID и положительная цена прошли проверку | Не требуется | Допущен к отправке |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Сводка строится по строкам, а не по числу сообщений. Новых предложений N = 3. Конфликтов ID E_id = 1, ошибок цены E_price = 1. Всего строк с найденными ошибками: E = 1 + 1 = 2. Без найденных ошибок осталась V = 3 − 2 = 1 строка.
Для этого условного набора доля строк с ошибками равна 2 / 3 × 100 = 66,7%, а доля прошедших показанную локальную проверку — 1 / 3 × 100 = 33,3%. Эти доли описывают только три учебные строки и не прогнозируют качество реального каталога.
Исправление DEMO-100 требует заменить ID на DEMO-101 во всех связанных строках, журнале ошибок и повторной выгрузке. Значение −250 нельзя автоматически превратить в 250: человек сначала сверяет источник цены. Если оба исправления подтверждены, ожидаемый результат повторной учебной проверки — три из трёх строк допущены к отправке. Это ожидаемый результат последовательности, а не выполненный тест и не подтверждение размещения.

Как проверить результат перед запуском
Перед рабочим запуском оформите две независимые квитанции. Первая показывает, что XML разобран и технические поля проверены. Вторая фиксирует бизнес-правила: соответствие ID, категории, цены, валюты, доступности, URL и изображений их источникам и контракту канала.
Для нормального пути задайте три контрольные точки:
| Этап | Ожидаемый результат | Сигнал ошибки | Действие человека |
|---|---|---|---|
| Локальная проверка | Нет синтаксических ошибок и нарушений известных правил | Ошибка XML или конкретного offer_id | Исправить исходные данные или экспортёр и повторить проверку |
| Обработка площадкой | Получен принятый статус по нужным строкам | Файл принят, но есть отклонённые ID или незавершённая обработка | Открыть отчёт площадки и сопоставить его с offer_id |
| Фактическое размещение | Предложение имеет ожидаемый статус и доступно в целевом представлении | Статус не совпадает с ответом загрузки или предложение не появилось | Проверить модерацию, страницу товара и правила канала |
Если таблица не помещается, прокрутите её вправо. С клавиатуры используйте стрелки.
Для исключения предусмотрите отдельный сценарий: площадка приняла часть строк и вернула построчные ошибки. Ожидаемый результат — сохранены перечни принятых и отклонённых ID. Сигнал — конкретные сообщения по строкам. Человек исправляет первичный источник, формирует новую версию фида и повторяет загрузку только по правилам канала. HTTP-ответ не записывают как доказательство размещения.
Генерация товарных описаний в эту проверку не входит. Если требуется автоматически создавать тексты карточек, это отдельный процесс со своими источниками, ограничениями и критериями приёмки.
Что согласовать для внедрения
Готовый валидатор подходит, если он поддерживает нужный формат, версию правил и способ запуска, а его отчёт можно связать с offer_id. До выбора проверьте область правил, обновление схемы, работу с большими файлами, хранение данных и формат выгрузки ошибок. Наличие слова YML в описании инструмента не подтверждает совместимость с вашим каналом.
Собственная интеграция нужна, когда проверку требуется встроить между каталогом и площадкой: получать данные из нескольких источников, применять правила конкретного канала, назначать ошибки ответственным, сохранять версии и блокировать только проблемные строки. Её границы определяют после проверки данных, API, доступных прав и способа получения статусов.
Switch On AI может разработать ИИ-помощника, бота или обычную интеграцию для операции «проверка технических и смысловых ошибок фида до отправки». Формат зависит от действия: интеграция запускает фиксированные проверки и обмен данными; бот помогает сотруднику запросить статус; ИИ-помощник может разбирать текстовые сообщения об ошибках в пределах согласованных источников, но не должен сам придумывать правила канала.
Такая работа не подтверждает заранее совместимость с конкретным вендором, тарифом или набором прав. На первом этапе нужно выбрать одну операцию, получить обезличенный пример выгрузки, документацию принимающего канала и ожидаемый отчёт. Правила бухгалтерского, юридического, кадрового или отраслевого учёта, если они затрагивают данные, задаёт и проверяет специалист заказчика.
Посмотреть возможные форматы можно на странице услуг Switch On AI. Следующий шаг — обсудить автоматическую проверку вашей выгрузки: разобрать одну операцию, согласовать входные данные, исключения и прототип. Прототип проверяет понимание сценария и не равен полному внедрению; эффект, срок и совместимость нельзя обещать до проверки требований.
Вопросы по этой задаче
Чем проверка XML отличается от проверки YML?
Проверка XML отвечает на вопрос, можно ли разобрать документ: корректны ли теги, вложенность и кодировка. Проверка YML дополнительно сопоставляет структуру и значения с контрактом конкретного принимающего канала. Поэтому синтаксически корректный XML может быть отклонён как неподходящий фид.
Почему фид принят, а товар не появился?
Техническое получение файла, обработка строк и фактическое размещение — разные этапы. После ответа о загрузке нужно проверить построчный отчёт, статус конкретного offer_id и появление предложения в целевом каталоге. HTTP 2xx сам по себе не подтверждает публикацию.
Как обрабатывать частично отклонённую выгрузку?
Сохраните списки принятых и отклонённых offer_id, сопоставьте каждую ошибку с правилом и ответственным, исправьте первичный источник и сформируйте новую версию фида. Последнюю принятую версию и журнал изменений следует хранить отдельно от неудачных попыток.
