ICML (IntaroCRM Markup Language) — формат, в котором RetailCRM принимает каталог из внешних систем. Правильно собранный ICML-фид определяет, насколько точно в CRM отображаются товары, торговые предложения, цены и категории, а значит — работают ли рекомендации и триггеры.
Что такое ICML и зачем он нужен
ICML — это XML-файл особой структуры, который RetailCRM периодически забирает по ссылке и на его основе строит свой каталог. В отличие от YML для маркетплейсов, ICML заточен под модель RetailCRM: товары, торговые предложения (offers), категории и производители.
Каталог в CRM нужен не ради витрины — он питает товарные рекомендации, триггерные сценарии, аналитику продаж и подстановку позиций в заказ. Неточный фид ломает именно эти механики.
Ещё одна причина отнестись к ICML серьёзно — заказ в RetailCRM ссылается на товары из этого каталога. Если позиции в фиде и в заказах не совпадают по идентификаторам, менеджер увидит «неопознанные» строки, а аналитика по товарам развалится. Поэтому ключи в ICML и в выгрузке заказов должны быть согласованы между собой.
Структура ICML-файла
Файл состоит из двух основных блоков — категории и товарные предложения. Упрощённо структура выглядит так:
<yml_catalog><shop><categories>…</categories><offers>…</offers></shop></yml_catalog>
Ключевые элементы:
<category>— раздел с атрибутамиidиparentIdдля дерева.<offer>— торговое предложение с атрибутамиid,productId,quantity.- внутри offer:
<price>,<name>,<categoryId>,<picture>,<vendor>,<param>.
productId группирует предложения в один товар — это важно для магазинов с размерами и цветами.Товары и торговые предложения
В Битрикс товар с вариациями — это элемент основного инфоблока плюс привязанный инфоблок торговых предложений. При выгрузке в ICML нужно правильно спроецировать эту модель.
| Битрикс | ICML |
|---|---|
| Элемент каталога | productId (группирующий) |
| Торговое предложение (SKU) | offer с уникальным id |
| Свойства предложения (размер, цвет) | <param> |
| Товар без вариаций | offer, где id совпадает по смыслу с productId |
Цены, остатки и категории
Что важно передать корректно в каждом offer:
- Цена — базовый тип цены (обычно розница). Дополнительные типы цен настраиваются в модуле отдельно.
- Остаток — атрибут
quantity, значение из каталога Битрикс. - Категория —
categoryIdдолжен ссылаться на существующий<category>. - Изображение и производитель —
picture(абсолютный URL) иvendor.
Категории должны образовывать связное дерево: у каждого parentId обязан существовать родитель, иначе часть разделов не отобразится. Идентификаторы категорий и товаров стоит брать из стабильных полей Битрикс (ID раздела, XML_ID элемента), а не генерировать заново при каждой выгрузке — иначе при следующей генерации RetailCRM посчитает те же товары новыми и продублирует их.
Характеристики и свойства (param)
Тег <param> переносит в RetailCRM дополнительные характеристики товара — их CRM использует в фильтрах, сегментах и триггерах. Чем полнее переданы свойства, тем точнее работает автоматизация.
- Свойства торговых предложений (размер, цвет) — обязательны для корректной работы вариаций.
- Характеристики товара (материал, бренд, сезон) полезны для сегментации и рекомендаций.
- Каждый param имеет имя (
name) и значение; список свойств для выгрузки согласуют заранее.
Как генерировать и отдавать фид
Есть два способа получить ICML в Битрикс.
- Модуль
intaro.retailcrmумеет генерировать ICML по расписанию из выбранных инфоблоков с настройкой соответствия свойств — это штатный путь. - Собственный генератор — скрипт, который обходит каталог и пишет XML, когда нужна нетиповая логика (составные наименования, фильтрация товаров, кастомные param).
Файл кладётся в публичный путь, а RetailCRM забирает его по расписанию. Генерацию лучше повесить на cron, а не на хит пользователя, чтобы большой каталог не тормозил сайт:
30 */2 * * * php /home/bitrix/www/local/tools/icml_export.php
Частые ошибки в ICML
Проблемы фида почти всегда попадают в короткий список:
| Ошибка | Последствие |
|---|---|
| Относительные URL картинок | Изображения не подгружаются в CRM |
| categoryId без категории | Товары без раздела |
| Дублирующиеся offer id | Позиции перезаписывают друг друга |
| Невалидный XML (спецсимволы) | Фид не парсится целиком |
| Пустая цена/остаток | Товар не участвует в рекомендациях |
Перед боевым подключением проверьте фид валидатором XML и выборочно сверьте десяток позиций с сайтом.
Итог
Корректная выгрузка каталога в RetailCRM — это валидный ICML, где единицей является offer, товары с вариациями сгруппированы через productId, у категорий целостное дерево, а URL картинок абсолютные. Штатно фид генерирует модуль intaro.retailcrm, но под нестандартный каталог удобнее собственный генератор на cron.
Мы в B2Bsite настраиваем ICML-выгрузку под структуру вашего каталога, включая сложные торговые предложения и кастомные свойства, и отлаживаем связку так, чтобы рекомендации и триггеры RetailCRM работали на полных данных.
Частые вопросы
Чем ICML отличается от YML?
YML — формат для маркетплейсов и Яндекса, а ICML заточен под модель RetailCRM: товары, торговые предложения через productId, категории и производители. Структурно они похожи, но не взаимозаменяемы.
Как передать товары с размерами и цветами?
Каждая вариация — отдельный offer с уникальным id, а группирующий атрибут productId связывает их в один товар. Свойства размера и цвета уходят в теги param.
Почему в RetailCRM пропали картинки?
Обычно из-за относительных URL в теге picture. Ссылки на изображения должны быть абсолютными, с доменом и протоколом.
Как часто обновлять фид?
Для большинства магазинов достаточно генерации раз в 1–2 часа по cron. Остатки и цены при этом лучше обновлять чаще отдельным потоком через API.
Можно ли выгружать несколько типов цен?
Базовая цена уходит в теге price, а дополнительные типы цен настраиваются в модуле отдельно. Для нестандартной логики цен используют собственный генератор.
Что делать, если фид не парсится?
Проверить XML на валидность: чаще всего мешают неэкранированные спецсимволы в наименованиях и описаниях. Их нужно корректно экранировать при генерации.
Генерировать фид на хите или по расписанию?
По расписанию через cron. Генерация большого каталога на пользовательском хите замедляет сайт и может обрываться по таймауту.
Поможем с настройкой и поддержкой Интеграции и связки систем
Поможем с настройкой, доработкой и поддержкой Интеграции и связки систем.