Модуль для 1С-Bitrix

Модуль интеграции с catalog.app синхронизирует каталог вашего сайта на 1С-Bitrix с catalog.app: создаёт товары, обновляет цены и остатки по выбранному ценообразованию, импортирует свойства и изображения.

Скачать модуль (ZIP)

Что делает модуль

  • Создание товаров — переносит модели каталога catalog.app в инфоблок каталога на сайте (товары создаются как простые товары торгового каталога с изображениями и свойствами).
  • Обновление цен и остатков — по завершённым ценообразованиям catalog.app записывает цену в выбранный тип цены, обновляет количество и доступность.
  • Импорт свойств и изображений — заполняет свойства товаров и галерею изображений.

Обработка выполняется агентами Bitrix по расписанию (или на хитах) — после установки и настройки ничего запускать вручную не нужно.

Установка

  1. Скачайте модуль.
  2. Распакуйте архив в папку /bitrix/modules/ вашего сайта так, чтобы получился каталог /bitrix/modules/catalogapp.connector/.
  3. В админке перейдите в Marketplace → Установленные решения (или «Партнёрские решения»), найдите «Модуль интеграции с catalog.app» и нажмите «Установить».
  4. Пройдите мастер установки.

Обновление — та же распаковка архива поверх установленного модуля, переустанавливать его не нужно. Новые таблицы и колонки модуль добавит сам при первом запуске своего агента или при открытии страницы настроек.

Удаление — в Marketplace → Установленные решения нажмите «Удалить». Модуль спросит, сохранить ли таблицы: если сохранить, после повторной установки останутся настройки, правила профилей, отметки синхронизации, журнал импорта карточек и сопоставления разделов.

Мастер установки

  1. Инфоблок каталога — выберите инфоблок, в который будут синхронизироваться товары.
  2. Обработчики — включите нужные: создание товаров, обновление цен, обновление свойств.
  3. Подключение к catalog.app — укажите базовый URL API, логин и пароль. Кнопкой «Проверить подключение» можно сразу убедиться, что доступ настроен правильно.

Настройка

Откройте страницу настроек модуля (раздел «Настройки модуля интеграции catalog.app»).

Обработчики

Галочки «Включить синхронизацию каталога (создание товаров)», «…(цены)» и «…(свойства)» включают и выключают обработчики: при сохранении настроек модуль заводит агента для отмеченного обработчика и удаляет агента снятого.

Ниже на странице, в блоке «Обработчики», видно, что происходит на самом деле: включён ли обработчик, есть ли у него агент, когда агент запускался и запустится снова, работает ли обработчик сейчас и когда подавал признак жизни. Если последний запуск оборвался (лимит времени PHP, перезапуск сервера), там же это будет видно; следующий запуск продолжит работу сам. Там же модуль предупредит, если агенты Bitrix выполняются на хитах посетителей (обработчик тогда запускается, только когда кто-то открывает сайт) или не выполняются вовсе — обычно это значит, что не настроен cron для /bitrix/modules/main/tools/cron_events.php.

Каждый обработчик работает в один поток: пока он запущен, второй запуск (из агента или из командной строки) сразу завершается. Если агенты выполняются по cron, запуск работает, пока есть работа: первый импорт каталога идёт одним запуском, а изменения карточек в catalog.app обработчик свойств подхватывает и во время импорта, каждые 5 минут. Если агенты выполняются на хитах посетителей, запуск длится не больше 5 минут, следующий начинается через минуту и продолжает с того места, где остановился предыдущий.

В версиях модуля до сентября 2026 года галочки ни на что не влияли: агенты заводил только мастер установки. При обновлении модуль приводит галочки к тому, что реально работало, — ничего не запускает и не останавливает — и сообщает об этом уведомлением в админке. Проверьте галочки после обновления.

Подключение к catalog.app

  • Базовый URL API, Логин, Пароль — данные доступа к catalog.app. Кнопка «Проверить подключение» проверяет их на сервере.
  • Не проверять сертификат сервера — по умолчанию выключено: модуль проверяет сертификат catalog.app, чтобы логин, пароль и токен не мог перехватить посредник в сети. Включайте, только если «Проверить подключение» сообщает, что сертификат не прошёл проверку (так бывает на сервере со старым набором корневых сертификатов), — а лучше обновите этот набор на сервере.
  • Каталог — нажмите «Загрузить каталоги», чтобы выбрать каталог catalog.app из списка (вместо ручного ввода ID).

Модуль авторизуется в catalog.app, только когда у него нет действующего токена: полученный токен он хранит в настройках до конца срока и использует во всех запусках.

Какие свойства выгружать

По умолчанию (в «Выгружать свойства» ничего не выбрано) модуль записывает в товар все характеристики карточки. Чтобы выгружать на сайт только часть из них:

  1. В catalog.app заведите параметр свойств типа «Логическое значение (да/нет)», например «На сайт» («Каталог» → «Свойства» → «Параметры свойств»).
  2. Поставьте ему «да» у свойств, которые нужны на сайте: у свойств категорий и у глобальных свойств. Параметр свойства родительской категории действует и в подкатегориях. Если у свойства категории то же название, что у глобального, решает параметр свойства категории.
  3. В настройках модуля нажмите «Загрузить параметры», выберите один или несколько параметров с Ctrl (Cmd на macOS) и сохраните настройки. Свойство выгружается, если хотя бы один выбранный параметр установлен в «да». Кнопка «Все свойства» очищает выбор.

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

Если потом переключить параметр у свойства, модуль сам сверит карточки товаров этой категории и её подкатегорий (у глобального свойства — все карточки) примерно через 10 минут. Если выбранный параметр удалить в catalog.app, модуль перестаёт обновлять карточки и показывает уведомление в админке, пока удалённый параметр не убран из выбора (либо выбор не очищен), — чтобы не стереть разом все выгруженные значения.

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

Название товара

По умолчанию модуль даёт название только новому товару: раздел (в единственном числе), бренд, название модели, цвет и артикул в квадратных скобках. Поле «Шаблон названия товара» задаёт своё правило:

  • {category}, {brand}, {name}, {color}, {article} — раздел (в единственном числе, если оно задано в catalog.app), бренд, название модели, цвет, артикул;
  • {property:ID} — значение свойства catalog.app с этим Id (число — без единицы измерения);
  • {brand|lower} — строчными буквами;
  • {article!} — обязательное поле: без него товар по шаблону не переименовывается;
  • [ ... ] — часть, которая пропадает целиком, если в ней пустое поле;
  • \[ и \] — сами квадратные скобки.

Например, {category} {brand|lower} {name}[ {color}][ \[{article}\]]. Пустое поле просто исчезает, лишние пробелы убираются. Кнопка «Предпросмотр» показывает, как изменятся названия последних импортированных товаров. При сохранении шаблон проверяется: ошибка в скобках, неизвестное поле или свойство, которого нет в каталоге catalog.app, настройки не пропустят.

С шаблоном модуль называет по нему новые товары (и символьный код строится по названию) и переименовывает уже созданные — при сохранении шаблона и когда в catalog.app меняются название, бренд, цвет или артикул модели. У созданного товара меняется только название: символьный код и адрес страницы остаются прежними. Значения свойств приходят с карточкой, поэтому новый товар получает их в названии чуть позже, с импортом карточки.

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

Какие изображения выгружать

По умолчанию модуль выгружает все изображения карточки. Отобрать их можно по тегам изображений catalog.app («Каталог» → «Теги» → «Теги изображений»):

  • Импортировать изображения с тегами — только изображения, у которых есть хотя бы один из этих тегов. Пусто — все изображения, кроме исключённых.
  • Не импортировать изображения с тегами — изображение с таким тегом не выгружается, даже если у него есть тег из первого списка.

Теги перечисляются по названию через «;», регистр не важен. При сохранении модуль проверяет названия в catalog.app: тега, которого там нет, настройки не примут. Если тег потом переименуют в catalog.app, фильтр продолжит работать, а в настройках появится новое название.

После сохранения модуль сверяет все карточки. При обработке карточки галерея содержит только изображения catalog.app, прошедшие фильтр, в порядке catalog.app. Лишние и ручные фото удаляются; главной картинкой и картинкой анонса становится первое подходящее изображение. Уберёте фильтр — изображения вернутся при следующей сверке. Порог автоактивации по числу изображений считается по прошедшим фильтр.

Чтобы ошибка в фильтре не оставила каталог без фотографий, модуль без подтверждения убирает все изображения галереи не более чем у 5 % товаров (и не меньше чем у 10). Дальше он останавливает обновление карточек и показывает уведомление в админке; на странице настроек под фильтром видно, у скольких товаров галерея опустела. Если фильтр верен, нажмите там «Разрешить и продолжить». Если тег из фильтра удалят в catalog.app, модуль сверит карточки и попросит проверить фильтр.

Сопоставление

Укажите инфоблок брендов и свойства каталога, в которых хранятся бренд и идентификатор товара в catalog.app.

Правила ценообразования

Для каждого профиля задайте:

  • Ценообразование в catalog.app — какое ценообразование использовать как источник цен.
  • Тип цены на сайте — тип цены Bitrix, в который записывается цена.
  • Обновлять цены и остатки — главный переключатель профиля.
  • Сортировка, автоактивация и скидки — дополнительная обработка (сортировка, автоактивация подходящих товаров, формирование скидок по разнице цен).

Автоактивация

Если включить «Автоматически активировать товары», модуль будет активировать товары, у которых достаточно заполнены изображения и свойства (пороги задаются тут же).

Как обновляются цены

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

Если catalog.app не ответил или отдал цены не целиком, модуль ничего не меняет: цены, остатки и активность товаров профиля остаются прежними, а задача обрабатывается при следующем запуске агента. Из нескольких завершённых задач одного профиля берётся только последняя.

Как импортируются свойства и изображения

Модуль импортирует карточку каждого товара отдельным запросом к catalog.app, поэтому первый импорт большого каталога — это часы работы. Чтобы уложиться в лимит времени выполнения PHP, обработчик берёт карточки порциями: сколько успевает за запуск, столько и импортирует, а следующий запуск продолжает с того места, где остановился. Уже импортированные карточки повторно не забираются.

Параллельно с первым импортом, с самого первого запуска, обработчик забирает карточки, изменившиеся в catalog.app, — и каждый запуск начинает именно с них. Он помнит, на какой карточке остановился, поэтому следующий запуск продолжает ровно с неё — даже если тысячи карточек изменились в catalog.app одновременно. Изменения приходят на сайт не раньше чем через 10 минут: столько catalog.app ждёт, чтобы массовая операция успела записаться целиком и ни одна карточка не потерялась. Так же, страницами, обработчик создания забирает новые модели.

Если карточку не удалось импортировать или товар — создать, обработчик откладывает его и идёт дальше, а отложенное повторяет через 10 минут, час, 6 часов и сутки. После пяти неудач повторы прекращаются: товар ждёт, пока его модель изменится в catalog.app или пока вы не запросите повтор в блоке «Не удалось обработать» (см. ниже), — и в админке появляется уведомление. Если catalog.app не отвечает вовсе, обработчик ничего не откладывает, а просто останавливается до следующего запуска.

Товары сайта, которых нет в catalog.app (например, свои товары магазина), обработчик замечает при импорте и больше их не проверяет. Если модель для такого товара потом появится в catalog.app, её карточка придёт вместе с изменениями.

Модуль пишет в товар только свои свойства — те, что он создал для характеристик catalog.app (их код начинается с CA_), а также артикул, бренд и галерею. Собственные свойства магазина — SEO-поля, производитель, материал и любые другие — импорт карточки не трогает. Если значения характеристики больше нет в catalog.app, модуль очищает его и на сайте, но только в своих свойствах: артикул и бренд в свойствах магазина он записывает, когда они есть в catalog.app, и не стирает, если их нет. Карточка записывается целиком или никак: если сайт отклонил запись, ничего не меняется, а карточка уходит на повтор.

Изображения. При обработке изменённой карточки catalog.app — источник состава и порядка фотографий с учётом фильтра тегов. Недостающие фото добавляются, лишние удаляются, оставшиеся располагаются в порядке catalog.app; первое подходящее фото становится детальной картинкой и картинкой анонса. Пустой список очищает галерею и обе картинки. Это касается и ручных фото. Ручная правка в Битриксе сама не запускает обновление: пока карточка в catalog.app не изменилась, она сохраняется. Для принудительного приведения к источнику используйте «Переимпорт карточек». После обновления модуля до этого формата ранее импортированные карточки автоматически сверяются.

Изображение, которое не удалось получить, карточку не роняет: остальное записывается, а с самой ссылкой модуль поступает по ответу источника. Если источник ответил «такого файла нет» (404 или 410) или отдал по ссылке не картинку, повторять нечего: карточка считается записанной, а строка об этом остаётся в журнале обработчика. Если же ответа не было вовсе — таймаут, обрыв, ошибка сервера или «слишком часто», — галерея и картинки остаются прежними, а карточка уходит на повтор: через 10 минут, час, 6 часов и сутки, и только после пятой неудачи откладывается с уведомлением в админке.

Свойство галереи обычно ограничено списком допустимых типов файлов, а маркетплейсы отдают картинки и в webp — такие изображения магазин бы отверг. Поэтому модуль один раз за запуск дописывает в этот список типы, которые приносит: jpg, png, gif, bmp, webp. Уже разрешённые типы остаются, файлы сохраняются как есть, без перекодирования.

Если список карточек из catalog.app получен не целиком, обработчик в этот запуск ничего не импортирует и повторит попытку в следующий. Если не удалось получить описание категории товара, карточка импортируется, но флаг автоактивации товара остаётся прежним.

Ускорить первый импорт

Если агенты выполняются по cron, первый импорт и так идёт одним запуском. Изображения карточки модуль скачивает одновременно, поэтому импорт упирается в основном в скорость связи с CDN маркетплейсов. Если агенты выполняются на хитах, запуск ограничен 5 минутами, и первый импорт большого каталога растянется на много запусков. Ускорить его можно, запустив обработчик из командной строки (тогда ограничение по времени не действует и каталог импортируется за один проход):

cd /путь/к/сайту
php -d short_open_tag=1 -d max_execution_time=0 -d memory_limit=-1 \
    bitrix/modules/catalogapp.connector/workers/UpdatePropertiesWorker.php

Ту же команду можно добавить в cron. Одновременный запуск не страшен: обработчик защищён блокировкой, и второй запуск просто завершится.

Свойства инфоблока

Свойство инфоблока заводится по названию свойства в catalog.app: одноимённые свойства разных категорий («Тип», «Цвет») попадают в одно свойство сайта, поэтому по ним работают фильтр и сравнение. Если у одноимённых свойств разные типы (где-то список, где-то строка), для второго типа заводится отдельное свойство с суффиксом типа в коде — смешивать значения разных типов нельзя. Одинаковые варианты списков («Белый» из разных категорий) склеиваются в один вариант.

Обслуживание каталога

На странице настроек модуля есть блок «Обслуживание каталога».

Полная сверка каталога (кнопка под основными настройками) — если каталог сайта оказался неполным или устаревшим. Обработчик создания заново сравнит все модели catalog.app с каталогом сайта и создаст недостающие товары, а обработчик свойств проверит карточки всех товаров и перепишет только те, что отличаются от catalog.app. Изменения, которые ещё не дошли до сайта, при этом не теряются. Там же видно, сколько карточек осталось проверить. На большом каталоге сверка занимает часы фоновой работы: каждую карточку модуль запрашивает из catalog.app.

Сверка запускается и сама, с уведомлением в админке, если изменить настройку, от которой зависит запись карточек: инфоблок брендов, свойство бренда, пороги автоактивации, какие свойства и изображения выгружать, шаблон названия товара. Если выбрать другой каталог catalog.app или другой инфоблок, синхронизация начинается заново.

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

Не удалось обработать. Сколько товаров обработчики отложили и ждут повтора, сколько не удалось обработать после пяти попыток, а для последних — товар, модель в catalog.app и текст ошибки. Кнопка «Повторить» даёт таким товарам новые пять попыток, начиная с ближайшего запуска. Если в списке много товаров с одной и той же ошибкой (например, у инфоблока есть обязательное свойство, которое модуль не заполняет), исправьте причину на сайте и нажмите «Повторить».

Переимпорт карточек. Обработчик не возвращается к товару, карточка которого уже импортирована, а из catalog.app забирает только изменившиеся карточки. Если значения товара пропали на стороне сайта, модуль восстановит их сам: он ведёт журнал импорта и видит, что значений стало меньше, чем было. Перезалить карточки можно и вручную — указав ID товаров или оставив поле пустым, чтобы перезалить весь каталог. В отличие от сверки, перезаливка переписывает карточку, даже если она не изменилась, — это нужно, если значения на сайте поправили руками. Товары, которых не было в catalog.app, при этом проверяются заново.

Объединение одноимённых свойств. Нужно один раз на каталогах, где модуль работал до перехода на свойства по названию: тогда он создавал отдельное свойство инфоблока на каждое свойство каждой категории catalog.app, и в каталоге накапливались десятки свойств с одинаковым названием. С такими свойствами не работают фильтр и сравнение, а форма редактирования товара разрастается настолько, что не успевает сохраниться за отведённое PHP время — сохранение товара в админке теряет свойства и описание. Объединение переносит значения в одно свойство на название и склеивает одинаковые варианты списков; значения товаров не теряются.

Перед первым запуском сделайте резервную копию базы. Проход длинный, из админки он идёт порциями — нажимайте «Объединить», пока не останется 0 групп. Быстрее выполнить его из командной строки:

cd /путь/к/сайту
php -d short_open_tag=1 bitrix/modules/catalogapp.connector/tools/MergeProperties.php

Ключ --dry показывает план, ничего не меняя; --limit=N ограничивает число групп за запуск. На время объединения обработчик свойств лучше выключить в настройках модуля.

Журналы

Что делал модуль и какие ошибки встретил, видно в админке: Настройки → Настройки модуля интеграции catalog.app → Журналы (доступно только администраторам). У каждого обработчика по два файла в день: полный журнал и только ошибки; последние строки можно посмотреть прямо на странице или скачать файл. Журналы хранятся 14 дней.

Модуль хранит журналы в папке, которую сайт не отдаёт по ссылке: рядом с корнем сайта (catalogapp.connector-logs) или, если туда нельзя писать, в /bitrix/modules/catalogapp.connector/logs/.

Версии модуля до сентября 2026 года писали журналы в /upload/log/, откуда их мог скачать любой, — вместе с токеном доступа к catalog.app. При обновлении модуль переносит свои старые журналы в новую папку и удаляет из /upload/log/ дампы данных. Если модуль стоял у вас давно, смените пароль пользователя catalog.app, под которым он подключается (смена пароля закрывает все выданные токены), и укажите новый пароль в настройках модуля.

Если модуль не смог получить из catalog.app список товаров, брендов или разделов, в админке появится уведомление; оно исчезнет само, когда следующая загрузка пройдёт.

Требования

  • 1С-Bitrix с модулями «Информационные блоки» и «Торговый каталог».
  • PHP 8.x с расширением curl — через него модуль обращается к catalog.app. Без curl мастер установки остановится с сообщением, а страница настроек покажет ошибку. В BitrixVM расширение бывает выключено: включите его от root командой cp /etc/php.d/20-curl.ini.disabled /etc/php.d/20-curl.ini и перезапустите веб-сервер (systemctl restart httpd).
  • Доступ к API catalog.app (URL, логин, пароль).