Обработка заявок

Товарный фид для B2B: YML, CommerceML и что из этого выбрать

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

Филимонов Иван3 мин чтения
Жёлтые оптические патч-корды в коммутационном шкафу
Фото: Albert Stoynov / Unsplash

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

YML

YML — формат товарного фида Яндекса, наследник Yandex Market Language. Это XML с предсказуемой структурой: список категорий, затем список предложений.

Минимально значимый набор данных на товар:

  • id — идентификатор предложения, стабильный между выгрузками;
  • name — наименование;
  • price и currencyId — цена и валюта;
  • categoryId — ссылка на категорию из списка выше;
  • available — наличие;
  • vendor и vendorCode — бренд и артикул производителя;
  • param — произвольные характеристики: имя и значение.

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

CommerceML

CommerceML — формат обмена, принятый в экосистеме 1С и 1С-Битрикс. Выгрузка обычно состоит из двух частей: описание товаров (import.xml) и цены с остатками (offers.xml), нередко упакованных в архив.

Он тяжелее YML и сложнее в разборе, но содержит больше данных: развёрнутые свойства, единицы измерения, иерархию групп. Если каталог ведётся в 1С, эта выгрузка уже настроена — и заново городить YML часто не требуется.

YML CommerceML
Распространённость очень высокая в контуре 1С и Битрикс
Сложность разбора низкая средняя
Свойства товаров простые пары «имя — значение» развёрнутые, с типами
Обычный размер один файл несколько файлов, часто в архиве

Практический вывод: если YML у вас уже есть — используйте его. Если каталог живёт в 1С-Битрикс и выгрузка CommerceML настроена — используйте её. Специально переходить с одного на другой смысла нет.

Где ломается разбор

Кодировка

Значительная часть российских выгрузок отдаётся в windows-1251, а не в UTF-8. Разбор, который предполагает UTF-8 по умолчанию, получает не ошибку, а мусор: названия превращаются в нечитаемые последовательности, и это тихая поломка — файл «разобрался», товары «загрузились».

Правильное поведение: прочитать объявление кодировки в первой строке XML и декодировать файл соответственно.

Сжатие

Крупные фиды часто отдаются архивом. Ссылка при этом может выглядеть как обычный XML — расширение ни о чём не говорит. Определять сжатие нужно по первым байтам файла, а не по адресу.

Размер

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

Нестабильные идентификаторы

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

Расписание важнее формата

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

Минимальные требования к регулярности:

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

Что проверить в своём фиде прямо сейчас

  • Открывается ли он по прямой ссылке без авторизации.
  • В какой он кодировке и соответствует ли объявленная фактической.
  • Есть ли vendorCode — артикул производителя — хотя бы у ходовых позиций.
  • Сколько товаров имеют заполненные характеристики, а не только название.
  • Меняются ли идентификаторы между двумя выгрузками.

Последние два пункта решают, будет ли подбор и поиск работать по существу или только по совпадению слов в названии.

Коротко

  • YML проще и распространённее, CommerceML богаче и уместен там, где каталог в 1С.
  • Кодировка windows-1251 — норма для российских фидов, её нужно читать, а не предполагать.
  • Идентификаторы товаров обязаны быть стабильными между выгрузками.
  • Регулярность обновления важнее выбора формата.
  • Товар без характеристик в фиде можно искать только по названию — со всеми вытекающими ошибками.

Вопросы по теме статьи

Что выбрать: YML или CommerceML?

YML, если он у вас уже есть: формат проще, распространённее и поддерживается почти всеми движками. CommerceML имеет смысл, когда каталог живёт в 1С-Битрикс и в выгрузке нужны подробные свойства товаров, которых в YML нет.

Почему фид открывается «кракозябрами»?

Из-за кодировки: значительная часть российских выгрузок отдаётся в windows-1251, а не в UTF-8. Правильный разбор читает объявление кодировки в первой строке XML и декодирует файл соответственно, а не предполагает UTF-8 по умолчанию.

Как часто нужно обновлять фид?

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

Автоматическая обработка заявок: подбор товаров по спецификации клиента

Клиент присылает спецификацию в Excel, сканом или фото рукописного бланка — CartFlow распознаёт и разбирает строки, подбирает позиции по вашему каталогу, предлагает аналоги и готовит счёт с QR-кодом по ГОСТ.

Читайте дальше