Каталог не грузится или подтягивается частично — одна из самых частых проблем интеграции с RetailCRM. Причина почти всегда в файле ICML: недоступности по URL, битом XML или дублях. Разберём диагностику по шагам — от проверки URL до анализа лога загрузки.
Как работает загрузка каталога
RetailCRM не тянет товары по одному через API, а забирает единый файл ICML (XML) по указанному URL и раскладывает его по товарам и торговым предложениям. Загрузка идёт по расписанию на стороне CRM плюс её можно запустить вручную.
Файл описывается в Администрирование → Магазины → карточка магазина → поле адреса каталога ICML. Там же кнопка ручной загрузки и ссылка на результат последней синхронизации.
Шаг 1. Доступность файла
Если CRM пишет, что файл не получен, проблема в доступности URL, а не в содержимом.
- Проверьте ответ сервера:
curl -I https://site.ru/retailcrm.xmlдолжен вернуть200 OK. - Файл не должен требовать авторизации (Basic-auth, куки, «заглушка» dev-сервера).
- Не должно быть редиректов с http на https или на www — CRM не всегда идёт по цепочке.
- Проверьте, что файл реально существует и обновляется cron-скриптом, а не отдаётся старая версия.
Шаг 2. Валидность XML
Файл дошёл, но каталог пустой или загрузка падает — проверяйте структуру XML. Битую выгрузку RetailCRM отклоняет целиком.
- Кодировка строго
UTF-8без BOM. - Спецсимволы
&,<,>в названиях экранированы. - Нет обрыва файла — частая беда при генерации по таймауту на больших каталогах.
Быстрая локальная проверка структуры:
xmllint --noout retailcrm.xml
Если xmllint ругается на строку — там и обрыв или неэкранированный символ.
Шаг 3. Дубли и externalId
Каталог загрузился, но товары задваиваются или остатки скачут — почти всегда дело в идентификаторах offer.
| Проблема | Причина |
|---|---|
| Дубли товаров | Разные offer с одинаковым id или нестабильный id между выгрузками |
| Позиции в заказе не сопоставляются | id offer в ICML не совпадает с тем, что шлётся в заказе |
| Слетают вариации | Отсутствует общий productId для предложений одного товара |
Идентификатор offer должен быть стабильным между выгрузками и совпадать с тем, что сайт передаёт в составе заказа. Если id меняется при каждой генерации, CRM видит новые товары и плодит дубли.
Шаг 4. Категории, цены и остатки
Товары есть, но лежат «не там» или с нулевой ценой — проверяйте связи и числовые поля.
- Каждый
categoryIdу товара должен ссылаться на существующуюcategoryв том же файле. - Цена — числом без пробелов и валютных знаков; пустая или нулевая цена нередко и есть причина «пропавших» товаров.
- Остатки в ICML передаются опционально; если ведёте их в CRM или из 1С, не переопределяйте нулями из выгрузки.
- Ссылки на картинки должны быть абсолютными и доступными извне, иначе фото не подтянутся.
Шаг 5. Анализ лога загрузки
После каждой синхронизации RetailCRM показывает результат: сколько категорий и предложений обработано и какие строки отклонены. Это главный инструмент отладки.
- Расхождение числа offer в файле и в отчёте — часть позиций отброшена по ошибкам.
- Нулевое число товаров при доступном файле — почти всегда невалидный XML или неверная кодировка.
- Каталог обновляется с задержкой — проверьте частоту генерации файла cron и расписание загрузки в CRM.
Итог
Отладка синхронизации каталога — это последовательность из пяти проверок: доступность URL, валидность XML, стабильность идентификаторов offer, корректность категорий и цен, анализ лога загрузки. В 90% случаев проблема решается на первых двух шагах — файл либо не доходит, либо не проходит валидацию.
Если каталог упорно грузится с ошибками или тормозит на десятках тысяч позиций, мы находим причину и настраиваем стабильную выгрузку ICML, а при необходимости берём интеграцию на поддержку.
Частые вопросы
С чего начать отладку загрузки каталога?
Откройте карточку магазина в «Администрирование → Магазины» и запустите загрузку вручную. CRM покажет, дошёл ли файл ICML и сколько позиций обработано, — это сразу сужает поиск причины.
Почему RetailCRM не видит файл каталога?
Чаще всего URL недоступен: требует авторизации, отдаёт редирект или закрыт IP-фильтром. Проверьте, что curl -I возвращает 200 без переадресаций.
Каталог загрузился пустым, в чём дело?
Обычно это невалидный XML или неверная кодировка. Проверьте файл через xmllint, убедитесь в UTF-8 без BOM и в экранировании спецсимволов.
Почему товары задваиваются в каталоге?
Идентификаторы offer нестабильны или повторяются между выгрузками. id торгового предложения должен быть уникальным и одинаковым при каждой генерации файла.
Позиции заказа не сопоставляются с каталогом — почему?
id offer в ICML не совпадает с идентификатором, который сайт передаёт в составе заказа. Эти значения должны быть одинаковыми.
Товары загрузились без цен или картинок, что проверить?
Цена должна быть числом без пробелов и валютных знаков, а ссылки на изображения — абсолютными и доступными извне. Пустая цена часто и есть причина пропавших товаров.
Каталог обновляется с задержкой, как ускорить?
Сверьте расписание: cron генерирует файл, а CRM забирает его по своему графику. Разнесите их по времени, чтобы CRM не читала полуготовую выгрузку, и при необходимости увеличьте частоту.
Поможем с настройкой и поддержкой RetailCRM
Поможем с настройкой, доработкой и поддержкой RetailCRM.