ICML — формат каталога, по которому RetailCRM получает товары с сайта на Битрикс. Модуль генерирует XML-файл с товарами, торговыми предложениями, ценами и остатками, а CRM забирает его по ссылке. Правильная настройка выгрузки — основа того, чтобы менеджеры собирали заказы из актуального каталога.
Что такое ICML и как его читает RetailCRM
ICML (Intaro Catalog Markup Language) — это XML-фид, разработанный специально для RetailCRM. В отличие от YML для Яндекс.Маркета, он умеет передавать структуру «товар → торговые предложения», единицы измерения, несколько картинок и произвольные свойства. Модуль intaro.retailcrm формирует такой файл на стороне Битрикс, а RetailCRM периодически скачивает его по URL.
Логика простая: на сайте есть каталог в инфоблоках, модуль превращает его в ICML, CRM импортирует товары и обновляет цены и остатки. Заказ в CRM собирается из этих же товаров, поэтому каталог в CRM должен повторять витрину сайта.
Настройка выгрузки в модуле
Параметры генерации задаются в разделе настроек модуля, блок выгрузки каталога (ICML). Ключевые пункты:
- Инфоблоки для выгрузки — выбираете, какие инфоблоки каталога попадут в фид. Обычно это основной каталог товаров.
- Торговые предложения — если используются SKU (размеры, цвета), указываете инфоблок торговых предложений, привязанный к товарному.
- Типы цен — какая цена уходит в CRM как основная (розничная, оптовая).
- Свойства товара и предложений — какие характеристики выгружать в ICML как свойства.
Сгенерированный файл сохраняется в публичной части сайта, обычно по пути вроде /upload/retailcrm/catalog.xml, и доступен по прямой ссылке — именно её вы указываете в RetailCRM.
| Настройка | Влияет на |
|---|---|
| Выбор инфоблоков | Состав товаров в CRM |
| Тип цены | Цену позиции в заказе |
| Свойства | Характеристики и фильтры |
| Картинки | Превью товара в карточке заказа |
Товары и торговые предложения
Самый частый источник путаницы — модель «товар + торговые предложения». В ICML товар выступает как группа, а конкретные SKU (offer) — как отдельные покупаемые позиции. В заказ попадает именно предложение, а не абстрактный товар.
Чтобы выгрузка прошла корректно:
- У торговых предложений должны быть заполнены артикулы (внешние ID) — по ним CRM отличает один SKU от другого и связывает заказы.
- Свойства-характеристики (размер, цвет) должны быть привязаны к инфоблоку предложений, а не товара.
- Цена и остаток задаются на уровне предложения, если товар торгуется в вариантах.
Расписание генерации фида
Фид не обновляется сам по себе — его нужно перегенерировать по расписанию, иначе в CRM повиснут старые цены и остатки. Генерация выносится на агент или cron.
Пример запуска генерации ICML через cron:
*/30 * * * * php -f /home/site/public_html/bitrix/modules/intaro.retailcrm/cron/icml.php
Интервал подбирается под динамику каталога: для стабильного ассортимента хватает раз в несколько часов, для магазина с частыми изменениями остатков — каждые 15–30 минут. На стороне RetailCRM в настройках интеграции задаётся своя частота скачивания фида — она должна быть не чаще генерации, иначе CRM будет качать один и тот же файл.
Проверка и валидация фида
Перед подключением к CRM откройте сгенерированный XML напрямую в браузере и проверьте базовые вещи:
- файл открывается и не обрывается на середине (нет фатальных ошибок PHP в конце);
- у товаров и предложений заполнены
id,productActivity, названия и цены; - картинки указаны абсолютными URL и открываются;
- количество товаров в фиде совпадает с числом активных позиций каталога.
В RetailCRM после первого импорта проверьте раздел загрузки каталога: там видно число импортированных товаров и ошибки. Если часть позиций не загрузилась, причина обычно в пустых артикулах, нулевой цене или неактивных товарах.
php.ini (memory_limit, max_execution_time).Типичные проблемы выгрузки
Что чаще всего ломает каталог в CRM:
- Старый фид — генерация не запускается по cron, CRM импортирует устаревшие цены и остатки.
- Не выгружаются предложения — неверно указан инфоблок SKU или не задана привязка к товарному инфоблоку.
- Нет картинок — в свойствах не выбрано изображение или URL относительный.
- Дубли товаров — совпадающие внешние ID у разных позиций.
- Товары без цены — выбран не тот тип цены или цена не заполнена в инфоблоке.
Отладку удобно вести от фида: сначала добиваемся корректного XML на сайте, затем проверяем импорт в CRM. Если XML верный, а в CRM пусто — проблема в настройках импорта и ссылке на фид.
Итог
Выгрузка каталога ICML из Битрикс в RetailCRM держится на трёх вещах: правильно выбранных инфоблоках и типах цен, уникальных артикулах торговых предложений и регулярной генерации фида по cron. Проверять всегда стоит сам XML — большинство проблем видно уже в нём.
Мы в B2Bsite настраиваем и отлаживаем выгрузку каталога в RetailCRM: подбираем состав фида, чиним артикулы и картинки, ставим генерацию на расписание и сверяем число товаров на сайте и в CRM. Если каталог в CRM расходится с витриной — разберём и приведём в порядок.
Частые вопросы
Чем ICML отличается от YML?
ICML — формат RetailCRM, он передаёт структуру товар/торговые предложения, единицы измерения и произвольные свойства. YML рассчитан на Яндекс.Маркет и такой структуры не даёт.
Где лежит сгенерированный файл ICML?
Обычно в публичной части сайта, например /upload/retailcrm/catalog.xml. Прямую ссылку на этот файл вы указываете в настройках интеграции RetailCRM.
Почему в CRM старые цены и остатки?
Скорее всего, генерация фида не запускается по расписанию. Проверьте cron-задание генерации ICML и частоту импорта на стороне CRM.
Как выгрузить размеры и цвета?
Через торговые предложения: укажите инфоблок SKU, привязанный к товарному, и вынесите характеристики на уровень предложений с уникальными артикулами.
Почему часть товаров не загрузилась в CRM?
Частые причины — пустые или дублирующиеся артикулы, нулевая цена и неактивные позиции. Проверьте эти поля в инфоблоке и пересоберите фид.
Как часто генерировать фид?
Зависит от каталога: для стабильного ассортимента достаточно раз в несколько часов, для частых изменений остатков — каждые 15–30 минут через cron.
Что делать, если большой каталог не генерируется?
Проверьте memory_limit и max_execution_time в php.ini и при необходимости разбейте генерацию на шаги. Большие каталоги часто упираются в лимиты PHP.
Поможем с настройкой и поддержкой RetailCRM
Поможем с настройкой, доработкой и поддержкой RetailCRM.