Функции
Функциональные характеристики
Обработка прайсов
Собираем файлы с почты, по ссылкам, с Гугл таблиц и Гугл диска, Яндекс диска, Дропбокса и т. д.
Понимаем разные форматы: xls, xlsx, csv, xml
Сопоставление товаров
Автоматически сопоставляем товары из разных источников
Отслеживаем подозрительные цены
Формирование конкурентных цен
Гибкие правила ценообразования
Учитываем закупочные цены, цены конкурентов и характеристики товаров
Создание карточек товаров
Автоматически создаем карточки товаров
Находим изображения без водяных знаков
Интеграции с маркетплейсами
Управляем ценами более чем на 10 площадках
Разные цены для разных площадок
Патоматически управляем карточками товаров на маркетплейсах
API
Документированное API с возможностью отладки из браузера
Интеграция с любой из ваших систем
Отчеты
О всех показателях всех товаров на маркетплейсах
Позволяют строить управленческий учет
Оптовые продажи
Формируем оптовые цены
Рассылаем сформированные цены клиентам
Что нового?
Блог
Автоматически заполняем карточки товаров для маркетплейсов и не только
Расшифрую интригующий заголовок: С помощью нашего сервиса можно автоматически обогащать карточки товаров характеристиками и контентом, тем самым повышая конверсию.
Это проблема становиться особенно актульной, когда товаров много, и я имею в виду тысячи и сотни тысяч товаров.
Что же мы делаем и как?
У нас есть два источника данных для обогащения:
файлы и API поставщиков
данные, которые мы нашли в интернете
Второй пункт подразумевает парсинг сайтов. На данный момент мы парсим около 300 источников, более 150 из которых с ежедневным обновлением. Информация с этих источников попадает к нам в библиотеку (сейчас там есть информация более чем о 70 млн товаров).
Далее эту информацию мы сопоставляем с товарами из каталога компании, анализируем, обрабатываем и на выходе получаем результат — заполненную карточку.
Было: строка в таблице
Стало: готовая карточка товара с характеристиками и медиа-контентом
Приведу наглядный пример:
У меня есть прайс-лист с товарами, там содержится минимальная информация о товаре (наименование, бренд, артикул и т.д).
При загрузке его в систему хочу получить готовые карточки. Запускаю процесс.
Алгоритмы используют эту информацию и находят 20 готовых карточек для одного моего товара.
Но ведь информация на разных сайтах может отличаться, и у кого-то картинки могут быть плохого качества, что тогда?
Наши алгоритмы анализируют качество фото и видео, выбирают самые лучшие, а также сохраняют последовательность картинок.
Характеристики тоже проходят отбор. В итоге, все товары в рамках категории можно сравнивать между собой, потому что для них будут подобраны одинаковые характеристики.
По скорости механизм сопоставляет 5-6 тысяч товаров в секунду, что конечно намного быстрее и эффективнее ручного заполнения.
Чтобы посмотреть систему в работе мы создали каталог вымышленной компании, там можно протестировать все функции, в частности автозаполнение:
Обзор возможностей catalog.app
Это инструмент, который позволяет компании вырости. Работа с каталогом максимально автоматизируется.
Результаты внедрения
Высокоуровневая схема
Работа с поставщиками
1 000+ поставщиков, 1 000 000+ предложений
Разные источники данных (почта, гугл диск, яндекс диск, с компьютера)
Разные форматы данных (Эксель, csv, yml, xml)
Выявление ошибочных цен
Возможность создавать товары в каталоге на базе предложений поставщиков
Статистика по предложениям поставщиков за весь период работы
Скидки и наценки относительно первоначальной цены по категориям и производителям. Возможность добавить / отнять НДС
Информация о времени доставки каждого товара
Возможность учесть выходные и праздничные дни
Несколько календарей (для разных поставщиков, разных стран и т.д.)
Работа с минимальными розничными и оптовыми ценами
Автоматическое определение поставщика по файлу с его предложением
Статистика по поставщику за длительный период
Работа с конкурентами
Парсинг веб-сайтов (1 000 000+ в сутки)
Разные источники данных (почта, гугл диск, яндекс диск, с компьютера)
Разные форматы данных (Эксель, csv, yml, xml)
Автоматическое сопоставление каталогу со скоростью 5000 записей в секунду (на больших объемах)
Выделение приоритетных конкурентов
Возможность поставщиков считать конкурентами
Умное сопоставление
Продвинутый алгоритм сопоставления
Скорость сопоставления - тысячи товаров в секунду
Не требует настройки
Мы автоматически поймем, что это один и тот же товар
Монитор LG LCD 22MP48D-P
21.5" LG 22MP48D-P Black (16:9, 1920x1080, IPS, 60 Гц, интерфейсы DVI+D-Sub (VGA))
COMP - Компьютерная периферия - Мониторы LG 22MP48D-P
до 22" включительно LG Монитор LG 22MP48D-P (21.5", черный, IPS LED 5ms 16:9 DVI матовая 250cd 1920x1080 D-Sub FHD) 22MP48D-P
Мониторы LG 22" LG 22MP48D-P Glossy-Black (IPS, LED, 1920x1080, 5 ms, 178°/178°, 250 cd/m, 100M:1 ,+DVI) Монитор
Мониторы LCD LG Монитор LCD 22" IPS 22MP48D-P LG 22MP48D-P
LG Монитор 21.5" LG 22MP48D-P gl.Black IPS, 1920x1080, 5ms, 250 cd/m2, 1000:1 (Mega DCR), D-Sub, DVI-D (HDCP), vesa 22MP48D-P.ARUZ
LG Монитор LG 22MP48D-P Black 22MP48D-P.ARUZ
Монитор LG 22MP48D-P 22MP48D-P
Мониторы LG 22MP48D-P Glossy-Black 22MP48D-P
Монитор 21.5" LG Flatron 22MP48D-P gl.Black (IPS, 1920x1080, 16:9, 178/178, 250cd/m2, 1000:1, 5ms, D-Sub, DVI-D) (22MP48D-P) 22MP48D-P
Монитор 22" LG 22MP48D-P
LG 22MP48D-P IPS DVI
Ведение каталога
Работа с неограниченным количеством каталогов
Возможность вести каталог в catalog.app или в другом месте
Возможность создать товар по предложению поставщика (автоматически заполним поля, которые сможем найти)
Умный алгоритм по поиску дублей
Поиск ошибок
Статистический поиск неадекватных цен. Учитываем поставщиков, конкурентов, другие товары из этой же категории
Карантин для неадекватных цен. Такие цены не участвуют ни в каких процессах, если не подтверждены человеком. Подтвердить один раз достаточно, мы запомним.
Ценообразование
Неограниченное количество профилей
Возможность работать с разными поставщиками для разных категорий и брендов товара
Возможность учитывать разных конкурентов в зависимости от профиля
Возможность рассматривать поставщиков как конкурентов (для опта хорошо)
Наценки в зависимости от цены, категории, бренда, поставщика
Работа с банковскими рассрочками и картами рассрочек
Страховка от продаж в минус (но если явно подтвердить - то можно)
Демпинг. Можно включить, можно не включать.
Минимальные розничные и оптовые цены. Возможность соблюдать выборочно
Скорость обработки - 5000 предложений в секунду
Поиск
Быстрый поиск по сырым исходным поставщиков и конкурентов
Быстрый поиск по каталогу
Уникальная ссылка на результаты поиска (можно переслать в мессенджере)
Любую ссылку можно переслать в мессенджере
Интеграции
Рассылка результатов ценообразование по email
Интеграции с CRM, сайтами, маркетплейсами
Отслеживание данных, которые были изменены, для ускорения процесса и экономии трафика
Возможность реализовать дополнительные интеграции по запросу клиента
Ответственность
У каждого пользователя свой аккаунт
Ведется журнал всех изменений
Статистика по действиям пользователя
Детальный отчет по действиям пользователя
Как мы автоматизировали большой интернет-магазин и стали сопоставлять товары автоматически
Делаем быстрый поиск по неточному совпадению среди 100 миллионов товаров
Видеоуроки
Список доступных видеоуроков
Продаем 20 тысяч товаров на онлайнере
Осваиваем catalog.app на практическом примере. Настраиваем парсинг файлов с ценами поставщиков и правила, по которым будем формирвать розничные цены. Учитываем цены конкурентов при формировании розничных цен. Выгружаем сформированные цены на онлайнер и начинаем продавать 20 тысяч товаров.
Работаем с файлами поставщиков в catalog.app
Разбираемся, как настраивать парсинг файлов, применять скидки или наценки к ценам поставщика, а также прогнозируем время доставки товара до покупателя.
Создаем карточки товаров автоматически с помощью catalog.app
Наполняем товары характеристиками и находим изображения без водяных знаков в автоматическом режиме. Подбираем аналоги товаров. Создаем 13 тысяч карточек товаров за 15 минут.
Формируем цены на товары в catalog.app
Разбираемся с тем, как работает алгоритм ценообразования. Настраиваем профиль для формирования розничных цен.
catalog.app: экспорт, интеграции с маркетплейсами, работа с API
Разбираем работу с Яндекс Маркетом и другими маркетплейсами, а также получение карточек товаров и работу с API.
Ссылка на документацию по Scriban: https://github.com/scriban/scriban/tree/master/doc
Документация по API catalog.app: https://catalog.app/swagger
Собираем информацию тысячах товаров и размещаем ее на маркетплейсах. Пример реального использования
Обсуждаем, как собрать информацию о предложениях поставщиков, сформировать цены, создать карточки товаров и разместить предложения на маркетплейсах. Делаем это на примере аккаунта реальной компании, в которой автоматизирован весь процесс управления информацией о товарах.
Начало работы
Регистрация компании
Нажмите на ссылку "Регистрация" в правом верхнем углу.
Заполните форму регистрации. Обратите внимание, что это одновременно и регистрация компании, и регистрация первого пользователя (администратора) этой компании.
Проверьте почту. На почту должно прийти письмо со ссылкой на активацию аккаунта.
Войдите в свой аккаунт, используя логин и пароль администратора.
Если нужно больше учетных записей пользователей, их может создать администратор на странице "Пользователи".
Общие принципы работы
Компании и пользователи
При регистрации указывается email компании и логин и пароль администратора.
Каждый пользователь относится к какой-то компании. Учетными записями пользователей компании управляет администратор.
Пользователя нельзя удалить, можно только заблокировать возможность войти в систему. Это связано с историей изменений, мы запоминаем, кто сделал каждое изменение.
Каталоги
Каталогов может быть несколько. В основном, это нужно для синхронизации с маркетплейсами.
Каталог можно вести в catalog.app, а можно обновлять из стороннего источника. Собственный каталог компании лучше вести в catalog.app.
Каталоги маркетплейсов лучше забирать как есть из API соответствующих платформ.
Создавать товары в собственном каталоге удобно по предложениям поставщиков.
Поставщики
Предложения поставщиков можно обновлять из разных источников: из почты, по ссылкам или вручную. Мы понимаем разные форматы данных: xls, xlsx, csv, xml.
Настройка поставщика производится один раз, в дальнейшем поставщика не нужно указывать, мы определим его по содержанию файла автоматически.
Понимаем МРЦ. Файлы не нужно называть каким-то определенным образом.
Кроме того, можно применить специальные правила скидок или наценок для каждого поставщика в зависимости от производителя или категории товара.
Предложения поставщиков сопоставляются товарам из каталога. В основном, это происходит автоматически и участия человека не требует.
По каждому из поставщиков мы ведем статистику и храним историю последних загруженных файлов.
Конкуренты
Возможности те же, что доступны при работе с поставщиками. Плюс к этому, данные по ценам конкурентов могут обновляться автоматическим парсером.
Сопоставление
Данные из разных источников мы умеем автоматически сопоставлять каталогу. В некоторых случаях просим человека подтвердить или исправить автоматические сопоставления.
Статья про алгоритм сопоставления
Ценообразование
Имея данные о ценах поставщиков, ценах конкурентов, МРЦ, времени поставки товара, мы можем сформировать "исходящие" цены.
Количество профилей "исходящих" цен не ограничено, каждый из профилей можно гибко настроить.
Так можно сформировать розничные и оптовые цены, специальные предложения для важных клиентов и так далее.
Цены из профиля ценообразования могут быть поставщиком для другого каталога. Это нужно, например, для интеграции с маркетплейсами, которые работают с собственными наименованиями.
Интеграции
У нас есть API, данные из catalog.app можно выгружать в любую другую систему.
Работа с каталогом типа "Забирать с Озона"
После создания каталога необходимо:
Обновить каталог
Обновить цены
Скачать файл
Заполнить файл
Обновить каталога с помощью файла
Обновить цены
Сопоставление с библиотекой и заполнение свойств
Создание новых товаров и обновление существующих
Обновить цен и остатки
1 Обновление каталога
Обновляем каталог с помощью кнопки "Обновить сейчас".
Этот шаг необходим после создания каталога, для создания брендов, категорий и свойств категорий.
Если каталог уже создан на Озон, то этот шаг обновит товары, бренды, категории и свойства категорий.
2 Обновление цен
Этот шаг необходим даже если в каталоге еще нет товаров. Перед тем как обновлять цены необходимо создать поставщика.
Существует 3 способа обновления цен:
Способ №1 Автоимпорт прайса
Для создания профиля автоимпорта прайса
Перейдите на страницу "Настройки"
Перейдите на вкладку "Автоимпорт прайса"
Нажмите "+"
Укажите название профиля автоимпорта прайса
Выберите источник "Озон (обновление каталога)"
Укажите в зависимости от источника почту, ссылку или каталог
Нажмите "Сохранить"
Для выполнения автоимпорта:
Перейдите на страницу "Настройки"
Перейдите на вкладку "Автоимпорт прайса"
Выберите необходимый профиль экспорта
Нажмите кнопку "Обновить"
Будет создана задача, статус которой можно посмотреть на странице "Задачи" во вкладке "Обновление цен" в списке "История обновления цен".
Способ №2 Загрузка файла
Способ №3 Загрузка профиля ценообразования
3 Скачивание файла
Перейдите на страницу "Цены"
Перейдите на не сопоставленные товары необходимого поставщика
Нажмите кнопку "↓"
4 Заполнение файла
В файле необходимо заполнить незаполненные обязательные поля "Категория" и "Производитель", а также проверить что,
заполненные данные поля - заполнены корректно. В поле "Название" в начало нужно добавить название модели, без этого товары
не проходят модерацию на Озоне ("DQ650-M 650W" - не пройдет модерацию, "Блок питания DQ650-M 650W" - пройдет модерацию).
5 Обновление каталога с помощью файла
Обновляем каталог с помощью кнопки "Обновить из файла". Используем файл, который был подготовлен в предыдущем шаге.
6 Обновление цен
Обновите цены одним из способов описанных в шаге 2.
7 Сопоставление с библиотекой и заполнение свойств
Сопоставление с библиотекой необходимо для автоматического заполнения свойств.
Для выполнения сопоставления с библиотекой:
Перейдите на страницу "Задачи"
Перейдите на вкладку "Сопоставление с библиотекой"
Нажмите кнопку "Обновить библиотеку"
В всплывающем окне выберите источники обновления и нажмите кнопку "Обновить"
Статус задачи, а также историю последних выполненных сопоставлений можно посмотреть в списке "История обновления библиотеки".
8 Создание новых товаров и обновление существующих
Для создания новых товаров и обновление существующих необходимо создать профиль экспорта типа "Озон (обновление каталога)":
Перейдите на страницу "Настройки"
Перейдите на вкладку "Экспорт"
Нажмите "+"
Укажите название профиля экспорта
Выберите тип профиля экспорта "Озон (обновление каталога)"
Выберите поставщика
Нажмите "Сохранить"
Для выполнения экспорта:
Перейдите на страницу "Задачи"
Перейдите на вкладку "Экспорт"
Выберите необходимый профиль экспорта
Нажмите кнопку "Запустить"
Статус задачи, а также историю последних выполненных экспортов можно посмотреть в списке "Последние экспорты".
Результатом выполнения задачи является файл в формате .xlsx, который можно скачать.
9 Обновление цен и остатков
Для обновления цен и остатков необходимо создать профиль экспорта типа "Озон":
Перейдите на страницу "Настройки"
Перейдите на вкладку "Экспорт"
Нажмите "+"
Укажите название профиля экспорта
Выберите тип профиля экспорта "Озон"
Нажмите "Сохранить"
Для выполнения экспорта:
Перейдите на страницу "Задачи"
Перейдите на вкладку "Экспорт"
Выберите необходимый профиль экспорта
Нажмите кнопку "Запустить"
Статус задачи, а также историю последних выполненных экспортов можно посмотреть в списке "Последние экспорты".
Подробное описание функций
Управление пользователями
catalog.app позволяет в рамках одной компании иметь много учетных записей пользователей.
Все изменения настроек, создание товаров, сопоставления производятся от имени конкретного пользователя. Журнал всех действий доступен в интерфейсе.
По действиям каждого пользователя считается статистика.
Управление пользователями находится в разделе общих настроек.
Удалить пользователя невозможно, т.к. с его учетной записью связаны события в журнале действий. Можно заблокировать, тогда пользователь не сможет войти в систему со своим логином и паролем.
Создание каталога
Для создания каталога:
Перейдите на страницу "Общие настройки"
Перейдите на вкладку "Каталог"
Нажмите на кнопку "+"
Укажите название каталога
Укажите тип каталога (
Для каталога "Синхронизировать с Wildberries" заполните три обязательных поля "API key", "API key для статистики" и "API key для рекламного кабинета". Инструкция по получению API ключей для Wildberries
Для каталога "Синхронизировать с Ozon" заполните четыре обязательных поля "Client Id", "API key", "Performance client Id" и "Performance API key". Инструкция по получению ClientId и API ключей для Ozon
для каталога типа "Синхронизировать с Wildberries", "Синхронизировать с Ozon" и "Забирать с Онлайнера" необходимо перечислить список категорий(если необходимо),
которые нужно импортировать (каждую категорию следует указывать на новой строке);
для каталога типа "Свой каталог" существуют возможность обновлять каталог из внешних источников,
для этого нажмите "Возможность редактирования" и укажите адрес, по которому его можно скачать)
При необходимости укажите шаблон внешнего адреса
При необходимости укажите стратегию обработки изображений, для этого нужно нажать "Заполнять свойства"
Нажмите "Сохранить"
Адрес указывать необязательно, можно загрузить файл с каталогом с локального компьютера.
Формат каталога может быть следующим:
- Как у Онлайнера. Актуальный каталог (переходите осторожно, xml-файл ~100 MB, браузер может зависнуть)
<?xml version="1.0" encoding="UTF-8"?>
<onliner version="1.1">
<category name="3D-принтеры">
<vendor name="Anet">
<model id="1227615" name="Original i3 MK3 Kit">
<articles>
<article>PRI-MK3-KIT-ORG</article>
</articles>
</model>
</vendor>
<vendor name="Raise3D">
<model id="1200054" name="N2 Dual">
<articles/>
</model>
<model id="1200087" name="N2 Plus Dual">
<articles/>
</model>
</vendor>
</category>
<category name="SSD">
<vendor name="A-Data">
<model id="1345419" name="GAMMIX S11 240GB AGAMMIXS11-240GT-C">
<articles>
<article>AGAMMIXS11-240GT-C</article>
</articles>
</model>
</vendor>
</category>
</onliner>
- YML. Вероятно, у вас уже есть интеграция с Яндекс-маркетом, тогда вам будет проще подготовить каталог в YML формате.
<?xml version="1.0" encoding="windows-1251"?>
<yml_catalog date="24.04.2019 11:15:15">
<shop>
<name>Мебель-Импэкс</name>
<company>Мебель-Импэкс</company>
<url>http://mebelimpex.ru/</url>
<phone>+7 (495) 648-63-63</phone>
<platform>Yandex.YML for OpenCart (ocStore)</platform>
<version>1.8.3</version>
<currencies>
<currency id="RUB" rate="1"/>
</currencies>
<categories>
<category id="523710794" parentId="854203851">Комплекты для отдыха</category>
<category id="748864907">Кресла</category>
<category id="1001203373" parentId="748864907">Кресла-качалки</category>
<category id="1613603839" parentId="748864907">Кресла для отдыха</category>
<category id="1206734567">Банкетки</category>
<category id="1565793639">Вешалки</category>
<category id="1790791422">Зеркала</category>
<category id="1965946137">Комоды</category>
<category id="2268755365">Консоли</category>
<category id="2545471345">Столики</category>
<category id="3252338994">Подставки</category>
<category id="752942848">Обувницы</category>
<category id="1102938522">Тумбы</category>
<category id="1567196494">Этажерки</category>
<category id="770054526">Обеденные группы</category>
<category id="770054527" parentId="770054526">Столы</category>
<category id="892083986" parentId="770054526">Стулья</category>
<category id="1215829729" parentId="854203851">Качели</category>
<category id="1215829730" parentId="2333942339">Аксессуары</category>
<category id="1215829731" parentId="1215829730">Пуфы животные</category>
<category id="1376452753" parentId="1215829730">Игрушки животные</category>
<category id="2631905704">Пуфы</category>
<category id="314258030">Раскладные кровати</category>
<category id="2333942339">Детский ассортимент</category>
<category id="989027627" parentId="748864907">Подвесные на стойке</category>
<category id="854203851">Садовая мебель</category>
</categories>
<offers>
<offer id="2000026631446" available="true">
<price>27330</price>
<currencyId>RUB</currencyId>
<quantity>25</quantity>
<categoryId>770054527</categoryId>
<name>Стол раздвижной Leset Денвер 1Р МИ, Капучино лак, стекло Капучино</name>
<vendor>ООО "Лесет Рус"</vendor>
<description>Стол Денвер выполнен в современном стиле и оснащен синхронным механизм раздвижения. Центральная вставка хранится внутри стола. Материал столешницы - закаленное стекло. Подстолье - МДФ в покраске лак. В белом цвете вставка – ЛДСП. В цвете капучино вставка - стекло.</description>
<param unit="м" name="Длина">1,2</param>
<param unit="м" name="Ширина">0,8</param>
<param unit="м" name="Высота">0,75</param>
<param unit="кг" name="Вес упаковки"/>
<param name="Страна производителя">РОССИЯ</param>
<param unit="кг" name="Вес">48</param>
<barcode>2000026631446</barcode>
<picture>http://yml.mebelimpex.ru/images/all/2000026631446.jpg</picture>
</offer>
<offer id="2500000024399" available="true">
<price>20750</price>
<currencyId>RUB</currencyId>
<quantity>32</quantity>
<categoryId>770054527</categoryId>
<name>Стол раздвижной Leset Лесь МИ, металл Кремовый, стекло Кремовое</name>
<vendor>ООО "Лесет Рус"</vendor>
<description>Сочетание тяжелой металлической опоры и закаленного стекла, делает стол Лесь надежным и практичным. Все крепления стола выполнены по типу «металл-металл», что гарантирует долговечность и монолитность конструкции.</description>
<param unit="м" name="Длина">1,4</param>
<param unit="м" name="Ширина">0,8</param>
<param unit="м" name="Высота">0,74</param>
<param unit="кг" name="Вес упаковки"/>
<param name="Страна производителя">РОССИЯ</param>
<param unit="кг" name="Вес">60</param>
<barcode>2500000024399</barcode>
<picture>http://yml.mebelimpex.ru/images/all/2500000024399.jpg</picture>
</offer>
</offers>
</shop>
</yml_catalog>
Импортировать каталог не обязательно, вы можете вести его в catalog.app с нуля.
Обновление каталога
Для обновления каталога необходимо создать задачу, для этого необходимо:
Перейдите на страницу "Задачи"
Перейдите на вкладку "Обновление каталога"
Нажмите "Создать сейчас", "Обновить сейчас", если вы указали адрес, или нажмите "Создать из файла", "Обновить из файла" и выберите файл с каталогом.
Статус задачи, а также историю последних обновлений каталога посмотреть в списке "История обновления каталога".
Также можно обновить каталог через API.
Настройка поставщика
Настройки поставщика должны быть уникальными.
Мы узнаем поставщика по структуре файла, таким образом, значений, указанных при настройке, доджно быть достаточно, чтобы однозначно определить поставщика.
Если набор столбцов не уникален, можно добавить уникальное значение в файле (например, если файл содержит ячейку с номером телефона или емейлом) или уникальную строчку в имени файла.
Это нужно для того, чтобы была возможность загружать сразу много файлов и забирать файлы из почты без жесткой связи с адресом отправителя или темой письма.
Перейдите на страницу "Настройки"
Перейдите на вкладку "Поставщики"
Создайте нового поставщика
Заполните необходимые настройки
Поставщиков, которые работают с YML форматом, можно не настраивать. В этом случае в качестве уникального идентификатора поставщика мы будем использовать элемент
<shop>
<name>amd</name>
</shop>
Настройка фильтров парсинга цен поставщика/конкурента
Настройка фильтра парсинга цен поставщика/конкурента производится на вкладке "Настройки фильтра при парсинге" соотвествующих настроек поставщика или конкурента.
Доступны два типа фильтров:
Фильтр по умолчанию
Фильтр по шаблону
Настройка фильра по умолчанию:
Выберите тип фильтра "Фильтр по умолчанию"
Задайте диапазоны цен, МРЦ, количества в наличии и сроков доставки
Нажмите "Сохранить"
Настройка фильтра по шаблону:
Выберите тип фильтра "Фильтр по шаблону"
Задайте шаблон
Нажмите "Сохранить"
Для написания шаблона мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев.
Подробнее с языком можно ознакимиться здесь.
Шаблон на вход должен получать объект offer(описание смотри ниже), а возращать один из трех типов данных:
true
false
модифицированный объект offer (можно оставлять только изменяемые поля, остальные сохранят свои значения)
Пример модифицированного объекта offer
{
Category: offer.Category,
Vendor: offer.Vendor,
Name: offer.Name,
Ean: offer.Ean,
Article: offer.Article,
SellerCode:offer.SellerCode,
Price: offer.Price,
MinRetailPrice: offer.MinRetailPrice,
InStockAmount: offer.InStockAmount,
DeliveryTime: offer.DeliveryTime
}
Пример шаблона
if offer.Price > 10 && offer.InStockAmount> 40
ret {
Category: "Новая Категория",
Vendor: "Новый бренд"
}
else
ret false
end
В результате выполнения фильтра дальше в сопоставление пройдут только предложения с входной ценой больше 10 и с количеством в наличии больше 40.
Кроме того у всех товаров, удовлетворяющих первому условию категория будет заменена на "Новая категория", а бренд "Новый бренд".
Все остальные свойства (Name, Article, SellerCode, Price, MinRetailPRice, InStockAmount, DeliveryTime) будут взяты из исходных данных.
Помимо данных, которые есть в модели, можно вернуть значение специального свойства "SellerId".
Это требуется, если нужно разбить общий файл на несколько поставщиков в зависимости от некоторого условия.
Пример:
if offer.OriginalRecord.Param["Гарантия"] == "12"
ret {SellerId: 4}
end
ret true
В результате всем товарам с гарантией в 12 месяцев будет назначен поставщик с Id=4.
Настройка шаблонов парсинга цен поставщика
Настройка шаблонов парсинга цен поставщика производится на вкладке "Настройки шаблона" соотвествующих настроек поставщика.
Для распознавания файла на вкладке нужно указать уникальную подстроку в названии файла и задать шаблон.
Для написания шаблона мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев.
Подробнее с языком можно ознакимиться здесь.
Шаблон на вход получает объект сформированный из xml-файла, а возращать должен объект PriceRecord.
Объект PriceRecord состоит из следующих полей:
Name - название товара
Category - категория товара
Vendor - бренд товара
Article - артикул бренда
Ean - EAN
SellerCode - внешний Id
Price - цена товара (можно передавать как строку и в качестве разделитля дробной части использовать '.' или ',')
PriceCurrency - валюта цены (поддерживаются значения "BYN", "RUB", "USD", "EUR", "UAH", "KZT", регистр не учитывается)
MinRetailPrice - МРЦ товара (можно передавать как строку и в качестве разделитля дробной части использовать '.' или ',')
MinRetailPriceCurrency - валюта МРЦ (поддерживаются значения "BYN", "RUB", "USD", "EUR", "UAH", "KZT", регистр не учитывается)
InStockAmount - количество товаров на складе
DeliveryTime - время доставки, дней (если не указано, то значение по умолчанию возьмется из настроек поставщика)
DeliveryCountryPrice - цена доставки по стране (можно передавать как строку и в качестве разделитля дробной части использовать '.' или ',')
DeliveryTownPrice - цена доставки по городу (можно передавать как строку и в качестве разделитля дробной части использовать '.' или ',')
Source - внешняя ссылка (URL) на товар
CodeForExactMatching - код для точного сопоставления со свойством каталога, указанным в настройках
Исходный xml-файл будет предбразован в scriban-объект согласно вложенности файла. Более подробно разберем на примере.
Пример xml-файла:
<?xml version="1.0" encoding="UTF-8"?>
<supplier_catalog date="2022-05-23 13:44" version="1.2">
<supplier>
<company>catalog.app</company>
<post_address>109428, Москва г</post_address>
<legal_address>109428, Москва г</legal_address>
<address>109428, Москва г</address>
<website>https://catalog.app</website>
<phone>(123)456-78-90</phone>
<platform>1C</platform>
<platform_version>8.2</platform_version>
<email>example@catalog.app</email>
<currencies>
<currency id="RUR" rate="1"/>
</currencies>
<categories>
<category id="28255779">09.01.02 Бассейны, игровые центры BESTWAY</category>
<category id="28274064">18.01 Кухня</category>
<category id="28266257">313.18.12 Разное</category>
<category id="28266266">313.18.13 Пластиковые горшки</category>
</categories>
<offers>
<offer id="28263223">
<currencyId>RUR</currencyId>
<categoryId>28266257</categoryId>
<Article>44695</Article>
<name>Антилед Гуд Хим Стронг 4л, арт. 44695</name>
<description/>
<url/>
<stock1>0</stock1>
<stock2>2</stock2>
<price_rrc>172</price_rrc>
<price_opt>125.06</price_opt>
<price_opt1>121.43</price_opt1>
<price_opt2>117.91</price_opt2>
<price_opt3>114.48</price_opt3>
<VAT>20</VAT>
<multi>120</multi>
<unit>шт.</unit>
<brand>ГудХим</brand>
<SHK>4623721344695</SHK>
</offer>
<offer id="28266353">
<currencyId>RUR</currencyId>
<categoryId>28274064</categoryId>
<Article/>
<name>Ручка для стеклянной банки d-82, 5шт.</name>
<description/>
<url/>
<stock1>0</stock1>
<stock2>>50</stock2>
<price_rrc>48</price_rrc>
<price_opt>34.96</price_opt>
<price_opt1>33.94</price_opt1>
<price_opt2>32.96</price_opt2>
<price_opt3>32</price_opt3>
<VAT>20</VAT>
<multi>40</multi>
<unit>шт.</unit>
<brand>Нет бренда</brand>
<SHK>4665299490220</SHK>
</offer>
<offer id="28261987">
<currencyId>RUR</currencyId>
<categoryId>28266266</categoryId>
<Article>П-12TX</Article>
<name>Корона для орхидей МИНИ с поддоном</name>
<description/>
<url/>
<stock1>>50</stock1>
<stock2>32</stock2>
<price_rrc>230</price_rrc>
<price_opt>167.14</price_opt>
<price_opt1>162.29</price_opt1>
<price_opt2>157.59</price_opt2>
<price_opt3>153</price_opt3>
<VAT>20</VAT>
<multi>24</multi>
<unit>шт.</unit>
<brand>Нет бренда</brand>
<SHK>4607021018777</SHK>
</offer>
<offer id="28271213">
<currencyId>RUR</currencyId>
<categoryId>28255779</categoryId>
<Article>57273</Article>
<name>57273 Бассейн с надувным бортом 366х76см</name>
<picture>https://example.com/shop/products/52/74/17452/images/8944/8944.970.jpg</picture>
<description/>
<url>https://example.com/57273-basseyn-366-kh-76-sm/</url>
<stock1>6</stock1>
<stock2>32</stock2>
<price_rrc>7865</price_rrc>
<price_opt>5727.45</price_opt>
<price_opt1>5561.25</price_opt1>
<price_opt2>5400.29</price_opt2>
<price_opt3>5243</price_opt3>
<VAT>20</VAT>
<multi>1</multi>
<unit>шт.</unit>
<brand>Bestway</brand>
<SHK>6942138951356</SHK>
</offer>
</offers>
</supplier>
</supplier_catalog>
Данный xml-файл будет преобразован в следующий объект (для понятности используем JSON):
{
"?xml": {
"version": "1.0",
"encoding": "UTF-8"
},
"supplier_catalog": {
"date": "2022-05-23 13:44",
"version": "1.2",
"supplier": {
"company": "catalog.app",
"post_address": "109428, Москва г",
"legal_address": "109428, Москва г",
"address": "109428, Москва г",
"website": "https://catalog.app",
"phone": "(123)456-78-90",
"platform": "1C",
"platform_version": "8.2",
"email": "example@catalog.app",
"currencies": {
"currency": {
"id": "RUR",
"rate": "1"
}
},
"categories": {
"category": [
{
"id": "28255779",
"text": "09.01.02 Бассейны, игровые центры BESTWAY"
},
{
"id": "28274064",
"text": "18.01 Кухня"
},
{
"id": "28266257",
"text": "313.18.12 Разное"
},
{
"id": "28266266",
"text": "313.18.13 Пластиковые горшки"
}
]
},
"offers": {
"offer": [
{
"id": "28263223",
"currencyId": "RUR",
"categoryId": "28266257",
"Article": "44695",
"name": "Антилед Гуд Хим Стронг 4л, арт. 44695",
"description": null,
"url": null,
"stock1": "0",
"stock2": "2",
"price_rrc": "172",
"price_opt": "125.06",
"price_opt1": "121.43",
"price_opt2": "117.91",
"price_opt3": "114.48",
"VAT": "20",
"multi": "120",
"unit": "шт.",
"brand": "ГудХим",
"SHK": "4623721344695"
},
{
"id": "28266353",
"currencyId": "RUR",
"categoryId": "28274064",
"Article": null,
"name": "Ручка для стеклянной банки d-82, 5шт.",
"description": null,
"url": null,
"stock1": "0",
"stock2": ">50",
"price_rrc": "48",
"price_opt": "34.96",
"price_opt1": "33.94",
"price_opt2": "32.96",
"price_opt3": "32",
"VAT": "20",
"multi": "40",
"unit": "шт.",
"brand": "Нет бренда",
"SHK": "4665299490220"
},
{
"id": "28261987",
"currencyId": "RUR",
"categoryId": "28266266",
"Article": "П-12TX",
"name": "Корона для орхидей МИНИ с поддоном",
"description": null,
"url": null,
"stock1": ">50",
"stock2": "32",
"price_rrc": "230",
"price_opt": "167.14",
"price_opt1": "162.29",
"price_opt2": "157.59",
"price_opt3": "153",
"VAT": "20",
"multi": "24",
"unit": "шт.",
"brand": "Нет бренда",
"SHK": "4607021018777"
},
{
"id": "28271213",
"currencyId": "RUR",
"categoryId": "28255779",
"Article": "57273",
"name": "57273 Бассейн с надувным бортом 366х76см",
"picture": "https://example.com/shop/products/52/74/17452/images/8944/8944.970.jpg",
"description": null,
"url": "https://example.com/57273-basseyn-366-kh-76-sm/",
"stock1": "6",
"stock2": "32",
"price_rrc": "7865",
"price_opt": "5727.45",
"price_opt1": "5561.25",
"price_opt2": "5400.29",
"price_opt3": "5243",
"VAT": "20",
"multi": "1",
"unit": "шт.",
"brand": "Bestway",
"SHK": "6942138951356"
}
]
}
}
}
}
Особое внимание стоит обратить на прицип формирования массивов и название поля для внутреннего содержимого тега (text).
Обращение к полям объекта будет происходить через разделение символом точки, а главный объект будет называться 'model'.
К примеру, чтобы получить название первой категории нужно выполнить следующее обращение: model.supplier_catalog.supplier.categories.category[0].text
.
Пример шаблона для парсинга указанного выше xml-файла:
func get_array(item, prop)
if object.has_key item prop
if (object.typeof item[prop]) == "array"
ret item[prop]
else
ret [item[prop]]
end
end
ret []
end
func get_in_stock_amount(offer)
in_stock_amount = "0"
if string.starts_with offer.stock1 ">"
in_stock_amount = string.remove_first offer.stock1 ">"
else
in_stock_amount = offer.stock1
end
ret string.to_int in_stock_amount
end
func get_currency(offer)
available_currencies = ["BYN", "RUB", "USD", "EUR", "UAH", "KZT"]
currency_id_normalized = string.upcase offer.currencyId
currency = currency_id_normalized == "RUR" ? "RUB" : currency_id_normalized
ret array.contains available_currencies currency ? currency : null
end
categories = get_array model.supplier_catalog.supplier.categories "category"
categories_dict = {}
for category in categories
categories_dict[string.to_long category.id] = category
end
offers = get_array model.supplier_catalog.supplier.offers "offer"
records = []
for offer in offers
currency = get_currency offer
if currency == null
continue
end
record = {
Name: offer.name,
Vendor: offer.brand,
Article: offer.Article,
Ean: offer.SHK,
Category: categories_dict[string.to_long offer.categoryId].text,
Price: offer.price_opt,
SellerCode: offer.id,
InStockAmount: get_in_stock_amount offer,
PriceCurrency: currency
}
records = array.add records record
end
ret records
Настройка шаблонов сценариев ценообразования
Настройка шаблонов ценообразования производится при создании/редактировании сценариев ценообразования. Чтобы создание шаблона стало доступно, нужно сделать активной галочку "Уникальный алгоритм формирования цены".
Для написания шаблона мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев.
Подробнее с языком можно ознакимиться здесь.
Шаблон на вход получает объект model, содержащий следующие поля:
Settings - [объект с параметрами] - предпосчитанные настройки необходимые для ценообразования товара
ProductCard - [объект с параметрами] - карточка товара (основные данные и свойства)
SupplierPrices - [список объектов] - список данных активных цен поставщиков
CompetitorPrices - [список объектов] - список данных активных цен конкурентов
CommonAlgorithmPrice - [объект с параметрами] - данные о цене, посчитанные стандартным алгоритмом
OzonCommissions - [объект с параметрами] - данные о коммиссиях Озон
WbCommissions - [объект с параметрами] - данные о коммиссиях Wildberries
Объект Settings содержит следующие поля:
MinSupplierPrice - [объект с параметрами] - данные о минимальной цене поставщика
MinCompetitorPrice - [объект с параметрами или null] - данные о минимальной цене конкурента
DeliveryTownPrice - [число] - цена доставки по городу
DeliveryCountryPrice - [число] - цена доставки по стране
MinExtraCharge - [число] - минимальная наценка (%)
MaxExtraCharge - [число] - максимальная наценка (%)
FixedExtraCharge - [число] - фиксированная наценка
TargetMargin - [число] - целевая маржинальность (%)
AverageOrderExpenses - [число] - средние расходы на один заказ товара. Заполнены, если хотя бы для одного товара задана целевая маржинальность
AverageOrderCommissionPercent - [число] - средний процент комиссии на один заказ товара (%). Заполнен, если хотя бы для одного товара задана целевая маржинальность
GlobalMinRetailPrice - [число] - МРЦ среди поставщиков для которых указано "Глобальное МРЦ" в опциях поставщиков
MinRetailPrice - [число] - МРЦ среди всех поставщиков
Объект CommonAlgorithmPrice содержит следующие поля:
Price - [число] - вычисленная цена
SupplierPrice - [число] - цена поставщика
SupplierPriceSellerCode - [текст или null] - код товара в системе поставщика
DeliveryTime - [число] - время доставки (дней)
SupplierId - [число] - Id поставщика
OriginalPrice - [число или null] - цена до акции
DeliveryTownPrice - [число] - цена доставки по городу
DeliveryCountryPrice - [число] - цена доставки по стране
CompetitorPrice - [число или null] - цена конкурента
InStockAmount - [число] - количество товаров в наличии
MinRetailPrice - [число или null] - МРЦ
CompetitorName - [текст или null] - Название конкурента
MinPrice [число или null] - минимальная цена (экспортируется как минимальная цена на Озон)
Объект MinSupplierPrice из объекта Settings и объекты из списка SupplierPrices содержат следующие данные о цене поставщика:
Supplier - [объект с параметрами] - данные о поставщике
Price - [число] - цена
MinRetailPrice - [число] - МРЦ
InStockAmount - [число] - количество товаров в наличии
Product - [объект с параметрами] - данные о товаре
DeliveryTime - [число] - время доставки (дней)
DeliveryTownPrice - [число или null] - цена доставки по городу
DeliveryCountryPrice - [число или null] - цена доставки по стране
ConsiderLocalMinRetailPrice - [логическое значение] - соблюдать ли "МРЦ только для предложений от этого поставщика" выбранное на вкладке с опциями поставщиков
PriceSellerCode - [строка или null] - код товара в системе поставщика
Объект Supplier содержит следующие данные о поставщике:
Id - [число] - Id
Name - [текст] - название
ExternalId - [текст или null] - внешний код
BundleIds - [список чисел] - спикок Id пакетов, в которые входит поставщик
Объект Product содержит следующие данные о товаре поставщика:
Id - [текст или null] - Id
Name - [текст] - название
Article - [текст или null] - артикул
CategoryName - [текст или null] - категория
VendorName - [текст или null] - бренд
Ean - [текст или null] - EAN
Объект MinCompetitorPrice из объекта Settings и объекты из списка CompetitorPrices содержат следующие данные о цене конкурента:
Competitor - [объект с параметрами] - данные о конкуренте
Product - [объект с параметрами] - данные о товаре
Price - [число] - цена
OriginalPrice - [число] - цена до применения скидок
InStockAmount - [число] - количество товаров в наличии
Объект Competitor содержит следующие данные о конкуренте:
Id - [число] - Id
Name - [текст] - название
ExternalId - [текст или null] - внешний код
Объект Product содержит следующие данные о товаре конкурента:
Id - [текст или null] - Id
Name - [текст] - название
Article - [текст или null] - артикул
CategoryName - [текст или null] - категория
VendorName - [текст или null] - бренд
Объект ProductCard содержит следующие поля:
Id - [число] - Id
Name - [текст] - название
Color - [текст или null] - цвет
Article - [текст или null] - артикул
CategoryId - [число] - Id категории
CategoryName - [текст] - название категории
VendorId - [число] - Id бренда
VendorName - [текст] - название бренда
Ean - [текст или null] - EAN
ExternalId - [текст или null] - внешний Id
Properties - [список объектов] - список свойств
Tags - [список объектов] - список тегов
Список Tags состоит из объектов содержащих следующие данные о тегах:
Id - [число] - Id
Name - [текст] - название
Список Properties состоит из объектов содержащих следующие данные о свойствах:
Id - [число] - Id
Name - [текст] - название
Type - [текст] - тип
Unit - [текст] - визическая величина
StringValue - [текст] - тестовое значение, когда тип равен "String"
BooleanValue - [логическое значение] - логическое значение, когда тип равен "Boolean"
IntegerValue - [число] - целое число, когда тип равен "Integer"
DecimalValue - [число] - дробное число, когда тип равен "Decimal"
MinRangeValue - [число] - дробное число, нижняя граница диапазона, когда тип равен "Range"
MaxRangeValue - [число] - дробное число, верхняя граница диапазона, когда тип равен "Range"
EnumValue - [текст или null] - тестовое значение, когда тип равен "Enum"
FlagValues - [список текстовых значений] - список текстовых значений, когда тип равен "Flag" (множественный выбор)
Объект OzonCommissions содержит следующие поля:
SalesPercent - [число или null] - наибольший процент комиссии за продажу среди FBO и FBS
SalesPercentFbo - [число или null] - процент комиссии за продажу (FBO)
SalesPercentFbs - [число или null] - процент комиссии за продажу (FBS)
SalesPercentRFbs - [число или null] - процент комиссии за продажу (RFBS)
FboFulfillmentAmount - [число или null] - комиссия за сборку заказа (FBO)
FboDirectFlowTransMinAmount - [число или null] - магистраль от (FBS)
FboDirectFlowTransMaxAmount - [число или null] - магистраль до (FBS)
FboDelivToCustomerAmount - [число или null] - последняя миля (FBS)
FboReturnFlowAmount - [число или null] - комиссия за возврат и отмену (FBO)
FboReturnFlowTransMinAmount - [число или null] - комиссия за обратную логистику от (FBO)
FboReturnFlowTransMaxAmount - [число или null] - комиссия за обратную логистику до (FBO)
FbsFirstMileMinAmount - [число или null] - минимальная комиссия за обработку отправления (FBS) — 0 рублей.
FbsFirstMileMaxAmount - [число или null] - максимальная комиссия за обработку отправления (FBS) — 25 рублей
FbsDirectFlowTransMinAmount - [число или null] - магистраль от (FBS)
FbsDirectFlowTransMaxAmount - [число или null] - магистраль до (FBS)
FbsDelivToCustomerAmount - [число или null] - последняя миля (FBS)
FbsReturnFlowAmount - [число или null] - комиссия за возврат и отмену, обработка отправления (FBS)
FbsReturnFlowTransMinAmount - [число или null] - комиссия за возврат и отмену, магистраль от (FBS)
FbsReturnFlowTransMaxAmount - [число или null] - комиссия за возврат и отмену, магистраль до (FBS)
Объект WbCommissions содержит следующие поля:
KgvpBooking - [число или null] - комиссия по модели «Бронирование», %
KgvpMarketplace - [число или null] - комиссия по модели «Маркетплейс» (FBS), %
KgvpPickup - [число или null] - комиссия по модели «Самовывоз из магазина продавца» (C&C), %
KgvpSupplier - [число или null] - комиссия по моделям «Витрина» (DBS) и «Курьер WB» (DBW), %
KgvpSupplierExpress - [число или null] - комиссия по модели «Витрина экспресс» (EDBS), %
PaidStorageKgvp - [число или null] - комиссия по модели «Склад WB» (FBW), %
Поле Unit может иметь следующие значения:
NotUnit - неизвестная величина
Nanometers - нанометры
Micrometers - микрометры
Millimeters - миллиметры
Centimeters - сантиметры
Meters - метры
Milligrams - миллиграммы
Grams - граммы
Kilograms - килограммы
Tons - тонны
Seconds - секунды
Minutes - минуты
Hours - часы
Days - дни
Weeks - недели
Months - месяцы
Years - годы
Kelvins - кельвины
DegreeCelsius - градусы по цельсию
SquareMeters - квадратные метры
SquareCentimeters - квадратные сантиметры
Milliliters - миллилитры
Liters - литры
CubicMillimeters - кубические миллиметры
CubicCentimeters - кубические сантиметры
CubicMeters - кубические метры
Amperes - амперы
Kiloamperes - килоамперы
Volts - вольты
Kilovolts - киловольты
Watts - ватты
Kilowatts - киловатты
Megawatts - мегаватты
Ohms - омы
Kiloohms - килоомы
Candles - канделы
Luxes - люксы
Lumens - люмены
Joules - джоули
Hertz - герцы
Kilohertz - килогерцы
Megahertz - мегагерцы
Gigahertz - гигагерцы
Bits - биты
Bytes - байты
Kilobytes - килобайты
Megabytes - мегабайты
Gigabytes - гигабайты
Terabytes - терабайты
BitsPerSecond - биты в секунду
KilobitsPerSecond - килобиты в секунду
MegabitsPerSecond - мегабиты в секунду
GigabitsPerSecond - гигабиты в секунду
AmpereHours - ампер-часы
MilliampereHours - миллиампер-часы
WattHours - ватт-часы
KilowattHours - киловатт-часы
MegawattHours - мегаватт-часы
Grands - штуки
GramsPerSquareCentimeter - граммы на квадратный сантиметр
GramsPerSquareMeter - граммы на квадратный метр
Inches - дюймы
CubicMetersPerMinute - кубические метры в минуту
MetersPerSecond - метры в секунду
MetersPerHour - метры в час
Percents - проценты
Pixels - пиксели
Megapixels - мегапиксели
Diaphragm - диафрагма
FramesPerSeconds - фреймы в секунду
ScreenDensity - разрешение экрана
Decibels - децибелы
GramsPerMinute - граммы в минуту
KilogramsPerMinute - килограммы в минуту
KilogramsPerHour - килограммы в час
RotationsPerMinute - обороты в минуту
LitersPerHour - литры в час
Bars - бары
CubicMetersPerHour - кубические метры в час
DotsPerInch - точки на дюйм
MillilitersPerHour - миллилитры в час
MillilitersPerSecond - миллилитры в секунду
MillilitersPerMinute - миллилитры в минуту
PixelsPerInch - пиксели на дюйм
LitersPerMinute - литры в минуту
LitersPerDays - литры в день
BeatsPerMinute - удары в минуту
SheetsPerMinute - страницы в минуту
SheetsPerSecond - страницы в секунду
Sheets - листы
InputOutputOperationsPerSecond - опрерации ввода-вывода в секунду
KilometersPerHour - километры в час
Kilometers - километры
CentimetersPerMinute - сантиметры в минуту
MetersPerMinute - метры в минуту
KilogramsPerDays - килограммы в день
FramesPerMinute - кадры в минуту
Horsepowers - лошадиные силы
Milliseconds - миллисекуды
NewtonMeters - ньютон-метры
MovesPerMinute - ходы в минуту
DecibelsPerMilliwatt - децибелы на милливатт
AngleDegrees - градусы углов
VoltAmperes - вольт-амперы
MillionPacketsPerSecond - миллионы пакетов в секунду
Dins - вязкость (DIN)
GuideNumbers - ведущие числа
StandardAtmospheres - стандартные атмосферы
WattsPerKilogram - ватты на килограмм
ThousandGrands - тысячи штук
IsotropicDecibels - изотропные децибелы
GrandsPerSquareMeter - штуки на метр квадратный
DimensionlessQuantity - безразмерная величина
WattsPerSquareMeter - ватты на квадратный метр
GrandsPerSleepingArea - штуки на спальное место
VibrationsPerMinute - колебания в минуту
LitersPerSquareMeter - литры на квадратный метр
Milliamperes - миллиамперы
KilovoltAmperes - киловольт-амперы
Kilonewtons - килоньютоны
CutsPerMinute - резов в минуту
CandelaPerSquareMeter - канделы на квадратный метр
PointsPerSecond - пункты в секунду
GramsPerKilowattHour - граммы на киловатт-час
MillimetersPerSecond - миллиметры в секунду
MillimetersPerMinute - миллиметры в минуту
SquareMetersPerHour - квадратные метры в час
SquareMetersPerMinute - квадратные метры в минуту
Pascals - паскали
Megapascals - мегапаскали
PersonHours - человеко-часы
Newtons - ньютоны
NewtonsPerSquareMillimeter - ньютоны на квадратный миллиметр
LitersPerSecond - литры в секунду
GramsPerHour - граммы в час
MetersPerSquareSecond - метры на секунду в квадрате
SquareCentimetersPerMinute - квадратные сантиметры в минуту
GrandsPerHour - штуки в час
KilogramsPerSquareMeter - килограммы на квадратный метр
Hectares - гектары
Ares - сотки
Kilopascals - килопаскали
HectaresPerHour - гектаров в час
GrandsPerMinute - штук в минуту
SquareMillimeters - квадратные миллиметры
PoundsPerSquareInch - фунты на квадратный дюйм
Farads - фарады
Millifarads - миллифарады
Microfarads - микрофарады
Nanofarads - нанофарады
Picofarads - пикофарады
Шаблон на вход должен получать объект model, а возращать один из трех типов данных:
true
false
объект с таким же набором полей как у CommonAlgorithmPrice (можно оставлять только часть полей, остальные сохранят свои значения)
Пример шаблона для исключения товаров тяжелеее 100 кг (проверка по свойству с названием "Вес"):
func normalize(value)
ret string.downcase(string.strip(value))
end
func get_property(prop_name)
normalized_prop_name = normalize(prop_name)
for prop in model.ProductCard.Properties
if normalize(prop.Name) == normalized_prop_name
ret prop
end
end
ret null
end
prop = get_property("Вес")
if (prop != null && prop.Unit == "Kilograms" && (prop.Type == "Decimal" && prop.DecimalValue > 100 || prop.Type == "Integer" && prop.IntegerValue > 100))
ret false
else
ret true
end
Пример шаблона для установки зачеркнутых цен на 20 процентов выше от вычисленных:
ret {
OriginalPrice: model.CommonAlgorithmPrice.Price * 1.2
}
Автоматическое обновление цен поставщиков
В системе есть возможность обновлять цены поставщиков автоматически. Мы умеем забирать файлы по прямым ссылкам, с гугл и яндекс дисков, из почты.
Обратите внимание, что настройки источников обновления (почта, ссылки) находится в разделе настроек каталога, а настройка расписания - в разделе общих настроек.
Сначала необходимо настроить ссылки и доступ к почте в разделе настроек конкретного каталога. Потом эти настройки можно использовать при настройке расписания.
Для автоматического обновления цен поставщиков необходимо выбрать тип задачи "Импорт".
Результат автоматического обновления цен поставщиков можно получить через API.
Алгоритм ценообразования
1. Выбираем опции конкурентов (вкладка "Опции конкурентов" настроек ценообразования).
2. Выбираем правило наценок для товара (вкладка "Наценки каталога" настроек ценообразования).
Приоритет правил следющий:
"Категория товара"/"Бренд товара".
"Все"/"Бренд товара".
"Категория товара"/"Все".
"Все"/"Все".
3. Выбираем правило опций поставщиков для товара (вкладка "Опции поставщиков" настроек ценообразования).
Приоритет правил следющий:
"Категория товара"/"Бренд товара".
"Все"/"Бренд товара".
"Категория товара"/"Все"
"Все"/"Все".
4. Выбираем предложения поставщиков, которые участвуют в ценообразовании товара.
Это будут все предложения поставщиков, которые в опциях поставщика (п.3) отмечены в столбце "Учитывать при ценообразовании" с учетом наценки/скидки по данному поставщику, которая указана в столбце "Наценка (скидка) (%)" опций поставщика.
5. Определяем входную цену на товар Ps.
Среди предложений поставщиков (п.4) выбираем то, у которого цена минимальная и время доставки меньше либо равно максимального времени доставки профиля ЦО (задается в поле "Максимальное время доставки" на вкладке "Основное" настроек ценообразования).
Если предложений со временем доставки меньшим либо равным максимальному времени доставки профиля ценообразования не оказалось, то выбираем среди оставшихся предложений поставщиков (п.4) то, у которого цена наименьшая.
6. Определяем наценки на товар.
Из правила наценок (п.2) выбираем диапазон, которому принадлежит входная цена на товар Ps. Для выбранного диапазона
определяем минимальную (minCharge), максимальную (maxCharge) и фиксированную (fixedCharge).
7. Определяем диапазон окончательной цены.
Pmin = Ps*(1 + minCharge/100) + fixedCharge -> Pmin - цена с учетом минимальной наценки.
Pmax = Ps*(1 + maxCharge/100) + fixedCharge -> Pmax - цена с учетом максимальной наценки.
8. Определяем цену конкурента Pc.
Из опций конкурентов (п.1) выбираем конкурентов с высоким приоритетом.
Из опций поставщиков (п.3) выбираем тех, что отмечены в столбце "Конкурент. Высокий приоритет".
Выбираем предложение с наименьшей ценой из 8.1 и 8.2.
Если конкурентов с высоким приоритетом для товара не оказалось,
повторяем пункты 8.1-8.3, только теперь выбираем среди конкурентов с низким приоритетом.
9. Определяем МРЦ на товар Pmrp (если отмечена опция "Учитывать МРЦ" на вкладке "Основные" настроек ценообразования).
Из опций поставщиков (п.3) выбираем тех, МРЦ которых учитывается (столблец "Учитывать МРЦ").
Если у поставщика, по которому определена входная цена есть МРЦ и его МРЦ учитывается (п.9.1), то выбираем это МРЦ.
Если МРЦ из п.9.2 не определено, то выбирается максимальное МРЦ среди предложений из п.9.1 (у поставщика должна быть отмечена опция "Применять минимальные розничные цены ко всем поставщикам" на вкладке "Главная" настроек поставщика).
10. Определеям демпинг по поставщику.
Это будет поставщик из п.4 процент демпинга которого максимальный (процент демпинга берем из вкладки "Демпинг по поставщику").
11. Определяем ручную цену.
12. Вычисляем окончательную цену.
Если есть ручная цена, то она принимается за окончательную.
Если есть демпинг по поставщику.
Если есть цена конкурента (п.8) или МРЦ (п.9), то окончательная цена будет минимальной среди Рс и Pmrp минус процент демпинга.
Если цены конкурента и МРЦ для товара нет, то окончательная цена будет равна Pmin, если выбрана минимальная наценка при отсутствии конкурентов и МРЦ (свойство "наценка при отсутствии конкурентов и МРЦ" настраивается на вкладке "Основные" настроек ценообразования).
Если цены конкурента и МРЦ для товара нет, то окончательная цена будет равна Pmax, если выбрана максимальная наценка при отсутствии конкурентов и МРЦ (свойство "наценка при отсутствии конкурентов и МРЦ" настраивается на вкладке "Основные" настроек ценообразования).
Если Pmrp < Pmin:
если Рс < Pmin, окончательная цена равна Pmin.
если Рс > Pmin, окончательная цена равна минимальной среди Pc и Pmax.
Если Pmrp > Pmin, окончательная цена равна Pmrp.
Если нет Рс и Pmrp:
Окончательная цена будет равна Pmin, если выбрана минимальная наценка при отсутствии конкурентов и МРЦ (свойство "наценка при отсутствии конкурентов и МРЦ" настраивается на вкладке "Основные" настроек ценообразования).
Окончательная цена будет равна Pmax, если выбрана максимальная наценка при отсутствии конкурентов и МРЦ (свойство "наценка при отсутствии конкурентов и МРЦ" настраивается на вкладке "Основные" настроек ценообразования).
Работа с настройками профилей ценообразования
Список профилей ценообразования можно найти на вкладке "Ценообразование" на странице настроек.
Для создания нового профиля нажмите кнопку "+".
Для редактирования профиля нажмите напротив этого профиля кнопку "...".
Для удаления профиля нажмите напротив этого профиля кнопку "-". Подтвердите удаление.
Рассмотрим настройки отдельного профиля ценообразования.
Вкладка Основные.
Название - название профиля в произвольном формате.
Валюта - валюта профиля.
Максимальное время поставки - определяет максимальное число дней поставки товара для поиска входной цены на товар при ценообразовании. Если таких предложений для товара не будет, для входной цены будет браться предложение с минимальной ценой на товар.
Время доставки 0 дней для всех складских товаров, даже если цена посчитана от другого поставщика - если опция отмечена, то для складских товаров будет рассчитано время доставки 0 дней, даже если входная цена будет посчитана от другого поставщика (с меньшей входной ценой).
Учитывать МРЦ - если опция отмечена, то при ценообразовании будет учитываться МРЦ.
Наценка при отсутствии конкурентов и МРЦ - данное поле определяет наценку на товар в случае отсутствия конкурентов и МРЦ.
Не учитывать товары с ценой выше чем у конкурентов - если опция выбрана, то в результате ценообразования будут лишь те товары, окончательная цена которых меньше минимальной цены конкурентов.
Соблюдать минимальную наценку при демпинге по поставщику - если опция выбрана, то несмотря на демпинг по поставщику окончательная цена на товар будет не ниже, чем минимальная наценка на товар.
Соблюдать минимальную розничную цену при демпинге по поставщику - если опция выбрана, то несмотря на демпинг по поставщику окончательная цена на товар будет не ниже, чем МРЦ на товар.
Общий демпинг (%) - применяется к окончательной цене, если не задан демпинг по поставщику.
Вкладка Диапазоны (диапазоны нужны для определения наценок, минимальной маржи при продаже в рассрочку и стоимости доставки по городу/стране).
Создание нового диапазона.
Нажмите кнопку "+".
Укажите только нижнюю границу диапазона. Верхнюю границу мы посчитаем автоматически на основании существующих диапазонов.
Нажмите кнопку "Сохранить".
Редактирование существующего диапазона.
Нажмите напротив этого диапазона кнопку "...".
Отредактируйте нижнюю границу диапазона. Верхнюю границу мы посчитаем автоматически на основании существующих диапазонов.
Нажмите кнопку "Сохранить".
Удаление существующего диапазона.
Нажмите напротив этого диапазона кнопку "-".
Подтвердите удаление.
Вкладка Наценки. На этой вкладке выводится список правил применения наценок к товарам.
Создание нового набора правил применения наценок к товарам.
Нажмите кнопку "+".
Выберите категорию. Незаполненное поле будет соответствовать всем категориям каталога.
Выберите производителя. Незаполненное поле будет соответствовать всем производителям каталога.
Заполните поля наценок и минимальной маржи при продаже в рассрочку для всех диапазонов.
Нажмите кнопку "Сохранить".
Редактирование существующего набора правил применения наценок к товарам.
Нажмите напротив этого набора правил применения наценок к товарам кнопку "...".
Отредактируйте необходимые поля.
Нажмите кнопку "Сохранить".
Удаление существующего набора правил применения наценок к товарам.
Нажмите напротив этого набора правил применения наценок к товарам кнопку "-".
Подтвердите удаление.
Вкладка Доставка. На этой вкладке выводится список правил формирования стомости доставки.
Создание нового набора правил формирования стомости доставки.
Нажмите кнопку "+".
Выберите категорию. Незаполненное поле будет соответствовать всем категориям каталога.
Выберите производителя. Незаполненное поле будет соответствовать всем производителям каталога.
Заполните поля стоимости доставки для всех диапазонов.
Нажмите кнопку "Сохранить".
Редактирование существующего набора правил формирования стомости доставки.
Нажмите напротив этого набора правил формирования стомости доставки кнопку "...".
Отредактируйте необходимые поля.
Нажмите кнопку "Сохранить".
Удаление существующего набора правил формирования стомости доставки.
Нажмите напротив этого набора правил формирования стомости доставки кнопку "-".
Подтвердите удаление.
Вкладка Опции поставщиков. На этой вкладке выводится список правил опций поставщиков, которые используюся для определения поставщиков, участвующих в ценообразовании, в которых можно задать участвует ли поставщик в ценообразование, учитывать ли его МРЦ (при наличии), рассматривать ли поставщика как конкурента и какую наценку использовать для поставщика при ценообразовании.
Создание нового набора правил опций поставщиков.
Нажмите кнопку "+".
Выберите категорию. Незаполненное поле будет соответствовать всем категориям каталога.
Выберите производителя. Незаполненное поле будет соответствовать всем производителям каталога.
В столбце "Учитывать при ценообразовании" отметьте участвующих в ценообразовании поставщиков.
В столбце "Учитывать МРЦ" отметьте тех поставщиков, МРЦ которых необходимо учитывать при ценообразовании.
В столбцах "Конкурент. Высокий приоритет", "Конкурент. Низкий приоритет", "Не конкурет" выбирете, является ли данный поставщик конкурентом.
В столбце "Наценка (скидка) (%)" укажите наценку, которая будет применяться при расчете цены от данного поставщика. Если задать отрицательное значение, то это будет скидкой.
Нажмите кнопку "Сохранить".
Редактирование существующего набора правил опций поставщиков.
Нажмите напротив этого набора правил опций поставщиков кнопку "...".
Отредактируйте необходимые поля.
Нажмите кнопку "Сохранить".
Удаление существующего набора правил опций поставщиков.
Нажмите напротив этого набора правил опций поставщиков кнопку "-".
Подтвердите удаление.
Редактирование набора правил опций поставщиков для определенного поставщика.
Нажмите кнопку "По поставщику".
Найдите нужного поставщика и напротив нажмите кнопку "...".
Отредактируйте необходимые поля.
Нажмите кнопку "Сохранить".
Вкладка Опции конкурентов. На этой вкладке можно настроить, какие конкуренты участвуют в ценообразовании и их приоритет.
Отметьте конкурентов в соответствии с их приоритетом.
Нажмите кнопку "Сохранить".
Вкладка Рассрочки.
Работа со свойствами категорий
Для удобства пользования каталогом в целом и категориями товаров в частности, категории можно вести в иерархическом порядке (корневая категория и подкатегории).
Свойства можно добавлять для любой ступени в иерархии. Свойства товара наследуют свойства от всех родительских категорий.
При наличии одинаковых свойств берется свойство из последней подкатегории. Например, для иерархии "Бытовая техника –> Встраиваемая бытовая техника –> Варочные панели"
если в каждой подкатегории есть свойство "Ширина", то берется свойство из подкатегории "Варочные панели".
Создание нового свойства:
Перейдите на страницу "Каталог".
Перейдите на вкладку "Категории".
Выберите в списке нужную категорию/подкатегорию.
Перейдите на вкладку "Свойства".
Нажмите "Добавить свойство".
Заполните свойство(описано ниже).
Нажмите напротив этого свойства кнопку "V".
Заполнение свойства:
"Название" - заполнить название свойства.
"Исп. в YML" - отметить если свойство должно попасть в YML-файл для интеграции с интернет площадкой.
"Описание" - заполнить описание свойства(как подсказка при заполнении карточки).
"Как заполнять" - заполнить правила заполнения в зависимости от типа свойства и допустимых значений.
"Тип" - выбрать тип свойства(описано ниже).
"Возможные значения" - выбрать единицы измерения (дробное число, целое число) или добавить варианты выбора (взаимоисключающий выбор, множественный выбор)
Типы свойств:
Логическое значение (да/нет)
Дробное число
Строковое значение
Взаимоисключающий выбор (только один вариант)
Множественный выбор (несколько вариантов)
Целое число
Также имеется возможность импортировать свойства из файла, подготовленного по определенному формату.
Нажмите кнопку "Импортировать свойства", затем выберите файл и нажмите кнопку загрузить. Пример такого файла.
Редактирование существующего свойства:
Отредактируйте свойство.
Нажмите напротив этого свойства кнопку "V" (добавление/удаление перечислений для множественного или взаимоисключающего выбора
так же сохраняется только после нажатия кнопку "V").
Удаление существующего свойства:
- Нажмите напротив этого свойства кнопку "-".
Также имеется возможность перетягивать свойства (выше/ниже). Это влияет на расположение свойств на карточке,
а также при передаче по API (в том порядке, в котором они расположены во вкладке "Свойства").
Модификации товаров
Модификации прредставляют собой различные вариации товара, различающиеся, к примеру, по цвету, объему оперативной памяти, диагонали экрана и тд. В модицикациях могут использоваться следующие типы свойств:
Взаимоисключающий выбор
Логическое значение
Строковое значение
Дробное число
Целое число
Если свойство участвует в модификациях, то его значение обязательно должно быть заполнено вручную в карточке. После заполнения значение может быть изменено, но не может быть очищено. Все товары в модификациях могут находиться только в одной и той же категории. При смене категории товар будет автоматически удаляться из модификаций.
Операции непосредственно с модификациями
Создание модификаций
Создание модификаций товаров доступно двумя способами:
На главной странице товара (вкладка "Главная")
Нажать кнопку "+" в блоке основной информации товара, затем выбрать свойства для модификаций, заполнить недостающие значения и добавить другие товары.
На вкладке "Каталог" через массовые операции
Выбрать необходимые товары, выбрать пункт "Объединить товары в модификации" в массовых операциях, затем выбрать свойства для модификаций, заполнить недостающие значения, проверить и подтвердить список товаров.
Удаление товара из модификаций
Удаление товара из модификаций доступно только с главной страницы товара. Для этого нажмите на значок корзины вверху справа в блоке "Модификации" (возле значка карандаша).
Добавление товара к существующим модификациям
Добавление товара к существующим модификациям доступно двумя способами:
На главной странице товара (вкладка "Главная")
Нажать на значок карандаша вверху справа в блоке "Модификации" (возле значка корзины), проверить и подтвердить список товаров.
На вкладке "Каталог" через массовые операции, с добавлением как минимум одного нового свойства
Выбрать необходимый товар и, как минимум, один товар уже состоящий в модификациях, выбрать пункт "Объединить товары в модификации" в массовых операциях, затем выбрать новые свойства для модификаций, заполнить недостающие значения, проверить и подтвердить список товаров.
Удаление свойства из модификаций
Чтобы удалить свойство из модификаций, необходимо нажать на значок корзины, напротив свойства, на главной странице товара.
Добавление свойства к существующим модификациям
Добавление свойства к существующим модификациям доступно двумя способами:
На главной странице товара (вкладка "Главная")
Нажать на значок "+" в блоке основной информации товара, затем выбрать новые свойства для модификаций, заполнить недостающие значения, проверить и подтвердить список товаров.
На вкладке "Каталог" через массовые операции
Выбрать как минимум один товар уже состоящий в модификациях, выбрать пункт "Объединить товары в модификации" в массовых операциях, затем задать новые свойства для модификаций, заполнить недостающие значения, проверить и подтвердить список товаров.
Вспомогательные операции с модификациями
Применение одинакового набора изображений к модификациям
Чтобы применить одинаковый набор изображений к модификациям, необходимо зайти на вкладку "Карточка" товара, нажать на значок трех вертикальных точек вверху справа в блоке "Подтвержденные" и выбрать нужный пункт меню.
Применение значения свойства к модификациям
Чтобы применить значение свойства к модификациям, необходимо зайти на вкладку "Карточка" товара, нажать на значок "▼" возле галочки подтверждения значения и выбрать нужный пункт меню.
Тип свойства: выражение
Иногда бывает полезно вычислять некоторые значения свойств на основе уже имеющихся. Например, объем упаковки (параллелепипеда со сторонами a, b и c) вычисляется по формуле V = a * b * c.
Пример посложнее: вычислить массу автомобильной шины с пригодной для практического применения точностью можно по формуле
M = 0.000014 * (D ^ 1.6) * (W * 17 + W * (H - 15) * 0.69),
где D - посадочный диаметр в дюймах, W - ширина в миллиметрах, H - высота в процентах от ширины.
Для вычисления таких значений в catalog.app есть тип свойства "выражение". Впрочем, его возможности гораздо шире, это полноценный язык программирования.
Для описания выражений мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев.
Подробнее с языком можно ознакимиться здесь.
Дополнительно доступна функция возведения в степень pow.
Объект с данными доступен в свойстве model. Проверить корректность работы выражения можно нажав на кнопку "Тест". После этого появится окно "Результаты",
в котором, появится результат выражения или сообщения об ошибках. Модель данных можно увидеть, нажав на кнопку "Модель".
И для проверки корректности, и для просмотра модели данных необходимо указать Id товара, который будет использован в качестве тестовой модели.
В объект с данными товара другие вычисляемые свойства не добавляются.
Пример модели данных:
{
"Category": "Шины",
"Vendor": "Formula",
"Name": "Шина зимняя(Ice 235/55R17 103T,шипы)",
"Article": null,
"Color": null,
"Ean": "8019227278347",
"Properties": {
"Ширина профиля": 235.000000,
"Диаметр": 17.000000,
"Шипы": true,
"Возможность ошиповки": false,
"Тип автомобиля": ["легковой"],
"Способ герметизации": ["бескамерные"],
"Конструкция": "радиальные",
"Страна производства": "Китай",
"Высота профиля": 55,
"Производитель": "Formula",
"Импортер": "ООО ПОКРЫШКИНО Минский р-н, Щомыслицкий с/с, 31-1 район аг. Озерцо, каб. 107",
"Ставка НДС": 20.000000
},
"Tags": [
{
"Id": 1,
"Name": "Черная пятница"
},
{
"Id": 2,
"Name": "11.11"
}
]
}
Пример вычисления массы шины по представленной модели:
d = model.Properties["Диаметр"];
w = model.Properties["Ширина профиля"];
h = model.Properties["Высота профиля"];
ret 0.000014 * pow(d, 1.6) * (w * 17 + w * (h - 15) * 0.69);
Результат:
13,653658330880194600000000000
Карточка товара
Карточка товара используется для описания товара. Товар сопоставляется с товарами, имеющимися в базе данных (библиотеке),
при наличии таких товаров, некоторый процент свойств и изображений товара сопоставится автоматически
(статья на хабре), а некоторые свойства необходимо заполнить вручную
и, при необходимости, загрузить новые изображения. Для просмотра товаров, с которыми был сопоставлен товар из карточки,
можно перейти на соседнюю вкладку "Библиотека".
Работа с изображениями
Изображения могут быть 4 видов:
сопоставленные автоматически (бежевый фон)
сопоставленные вручную (голубой фон)
исключенные автоматически (бежевый фон)
исключенные вручную (голубой фон)
Автоматически/вручную сопоставленные изображения товара располагаются в левой части экрана, исключенные - в правой.
Изображения можно перетягивать из одной области в другую. Для ручного подтверждения на изображении в левом нижнем углу расположена зеленая кнопка "V",
для исключения - в правом нижнем углу красная кнопка "-". Также доступно изменение порядка изображений перетягиванием.
При необходимости, можно загрузить изображение. Для этого нажмите кнопку "Загрузить изображение", затем выберите файл и нажмите кнопку загрузить.
Работа со свойствами
Свойства могут быть 3 видов:
заполненные автоматически (бежевый фон)
заполненные вручную (голубой фон)
не заполненные (белый фон)
Для подтверждения введенного значения нужно нажать зеленую кнопку "V", для сброса значения - красную кнопку "-".
Для помощи в заполнении свойств есть подсказки. Также свойства можно загрузить из библиотеки. Для этого нажмите кнопку "Загрузить свойства из библиотеки".
Для добавления новых свойств - Работа со свойствами категорий.
Уведомления
После выболнения любой из задач приложение может отправлять на заданный адрес уведомления о статусе задачи. Для этого необходимо:
Перейдите на страницу "Общие настройки"
Перейдите на вкладку "Интеграция"
Заполните поле "Адрес для уведомлений" настройки
Нажмите кнопку "Сохранить".
Создание фида каталога по шаблону
Фид для интеграции можно создать с помощью экспорта каталога по шаблону. Для этого небходимо создать профиль экспорта:
Перейдите на страницу "Настройки"
Перейдите на вкладку "Экспорт"
Нажмите на кнопку "+"
Укажите название профиля экспорта, выберите профиль ценообразования, по которому будет подготовлен фид, и выберите
формат "Каталог по шаблону"
- Нажмите "Сохранить"
После сохранения профиля экспорта станет доступна настройка шаблона интеграции.
Редактирование существующего профиля:
Нажмите напротив этого профиля на значок карандашика.
Отредактируйте название или добавьте/удалите профиль ценообразования.
Нажмите кнопку "Сохранить".
Удаление существующего профиля:
Нажмите напротив этого профиля на значок корзинки.
Подтвердите удаление.
Настройка шаблона интеграции:
Перейдите на вкладку "Настройка шаблона".
Выберите тип выгрузки параметров.
Выберите тип валидации (при необходимости).
Выберите шаблон (нажамите кнопку "Шаблоны") или напишите свой.
Нажмите кнопку "Сохранить".
Для написания шаблона мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев.
Подробнее с языком можно ознакимиться здесь.
Проверить корректность работы шаблона можно нажав на кнопку "Тест". После этого появится окно "Результаты",
в котором, при корректнонаписаном шаблоне, появится результат (как будет выглядеть фид).
Пример модели данных:
{
"Categories": [
{
"Id": 5548,
"SingularName": null,
"Name": "Сад и дача",
"ParentId": null
},
{
"Id": 5549,
"SingularName": null,
"Name": "Отдых/досуг на даче",
"ParentId": 5548
},
{
"Id": 5550,
"SingularName": null,
"Name": "Бассейны",
"ParentId": 5549
},
{
"Id": 2312,
"SingularName": "Надувной бассейн",
"Name": "Надувные бассейны",
"ParentId": 5550
},
{
"Id": 5006,
"SingularName": "Каркасный бассейн",
"Name": "Каркасные бассейны",
"ParentId": 5550
},
{
"Id": 5254,
"SingularName": null,
"Name": "Спорт и отдых",
"ParentId": null
},
{
"Id": 5255,
"SingularName": null,
"Name": "Велосипеды, аксессуары, запчасти",
"ParentId": 5254
},
{
"Id": 56,
"SingularName": "Велосипед",
"Name": "Велосипеды",
"ParentId": 5255
},
{
"Id": 83,
"SingularName": "Батут",
"Name": "Батуты",
"ParentId": 5549
},
{
"Id": 5741,
"SingularName": null,
"Name": "Надувная мебель",
"ParentId": 5254
},
{
"Id": 1964,
"SingularName": "Надувное кресло",
"Name": "Надувные кресла",
"ParentId": 5741
},
{
"Id": 1914,
"SingularName": "Надувной диван-кровать",
"Name": "Надувные диваны",
"ParentId": 5741
},
{
"Id": 5334,
"SingularName": "Надувной матрас",
"Name": "Надувные матрасы для улицы",
"ParentId": 5741
},
{
"Id": 1893,
"SingularName": "Надувная кровать",
"Name": "Надувные кровати",
"ParentId": 5741
},
{
"Id": 1895,
"SingularName": null,
"Name": "Насосы для надувных изделий",
"ParentId": 5741
},
{
"Id": 5972,
"SingularName": "Электрический насос",
"Name": "Электрические насосы для надувных изделий",
"ParentId": 1895
},
{
"Id": 1894,
"SingularName": "Надувной матрас",
"Name": "Надувные матрасы для дома",
"ParentId": 5741
},
{
"Id": 1963,
"SingularName": "Надувная подушка",
"Name": "Надувные подушки",
"ParentId": 5741
},
{
"Id": 5347,
"SingularName": null,
"Name": "Пляжный отдых",
"ParentId": 5254
},
{
"Id": 3131,
"SingularName": "Надувной плот",
"Name": "Надувные плотики",
"ParentId": 5347
},
{
"Id": 202,
"SingularName": null,
"Name": "Садовая мебель",
"ParentId": 5549
},
{
"Id": 103,
"SingularName": "Садовые качели",
"Name": "Садовые качели",
"ParentId": 5549
},
{
"Id": 5558,
"SingularName": null,
"Name": "Мангалы, грили, барбекю",
"ParentId": 5549
},
{
"Id": 3204,
"SingularName": "Садовое барбекю",
"Name": "Садовые барбекю",
"ParentId": 5558
},
{
"Id": 5326,
"SingularName": null,
"Name": "Туризм и рыбалка",
"ParentId": 5254
},
{
"Id": 196,
"SingularName": "Палатка",
"Name": "Палатки",
"ParentId": 5326
},
{
"Id": 422,
"SingularName": "Гамак",
"Name": "Гамаки",
"ParentId": 5549
},
{
"Id": 3130,
"SingularName": "Надувной жилет",
"Name": "Надувные жилеты",
"ParentId": 5347
},
{
"Id": 3760,
"SingularName": "Надувные водные ходунки",
"Name": "Надувные водные ходунки",
"ParentId": 5347
},
{
"Id": 3129,
"SingularName": "Надувные нарукавники",
"Name": "Надувные нарукавники",
"ParentId": 5347
},
{
"Id": 3132,
"SingularName": "Надувной мяч",
"Name": "Надувные мячи",
"ParentId": 5347
},
{
"Id": 3761,
"SingularName": "Круг для плавания",
"Name": "Круги для плавания",
"ParentId": 5347
},
{
"Id": 404,
"SingularName": "Туристический коврик",
"Name": "Туристические коврики",
"ParentId": 5326
},
{
"Id": 5551,
"SingularName": null,
"Name": "Аксессуары для бассейнов",
"ParentId": 5549
},
{
"Id": 3782,
"SingularName": "Ручка телескопическая",
"Name": "Ручки телескопические",
"ParentId": 5551
},
{
"Id": 3783,
"SingularName": "Сачок для чистки",
"Name": "Сачки для чистки бассейнов",
"ParentId": 5551
},
{
"Id": 3821,
"SingularName": "Песок для фильтра бассейна",
"Name": "Пески для фильтров бассейнов",
"ParentId": 5551
},
{
"Id": 3852,
"SingularName": "Подстилка-подложка для бассейнов",
"Name": "Подстилки-подложки для бассейнов",
"ParentId": 5551
},
{
"Id": 3780,
"SingularName": "Ремкомплект для надувных изделий",
"Name": "Ремкомплекты для надувных изделий",
"ParentId": 5551
},
{
"Id": 5553,
"SingularName": null,
"Name": "Аксессуары для батутов",
"ParentId": 5549
},
{
"Id": 2819,
"SingularName": "Защитная сетка для батута",
"Name": "Защитные сетки для батутов",
"ParentId": 5553
},
{
"Id": 2580,
"SingularName": "Чехол для батута",
"Name": "Чехлы для батутов",
"ParentId": 5553
},
{
"Id": 5500,
"SingularName": null,
"Name": "Детские товары",
"ParentId": null
},
{
"Id": 5737,
"SingularName": null,
"Name": "Активные игры",
"ParentId": 5500
},
{
"Id": 3882,
"SingularName": "Игровой центр детский",
"Name": "Игровые центры детские",
"ParentId": 5737
},
{
"Id": 5341,
"SingularName": null,
"Name": "Термоемкости",
"ParentId": 5326
},
{
"Id": 3393,
"SingularName": "Термосумка",
"Name": "Термосумки",
"ParentId": 5341
},
{
"Id": 1803,
"SingularName": "Аккумулятор холода",
"Name": "Аккумуляторы холода",
"ParentId": 5341
},
{
"Id": 5342,
"SingularName": "Сумка-холодильник",
"Name": "Сумки-холодильники",
"ParentId": 5341
}
],
"Products": [
{
"ModelId": 21942,
"Model": "Easy Set 183x51",
"Category": "Надувные бассейны",
"CategoryId": 2312,
"Vendor": "Intex",
"VendorId": 526,
"Article": "54402/28101",
"Color": "",
"BarCodes": [
"6941057400006"
],
"OzonSku": 765430756,
"OzonFboSku": 1000123456,
"OzonFbsSku": 1000123457,
"OzonProductId": 440761234,
"OzonOfferId": "NV-TK1234",
"WbImtId": 189510123,
"WbNmId": 209690123,
"WbSku": "4640001123456",
"WbVendorCode": "HB-CE000A",
"ExternalId": "8e6558a5-c330-11e4-80c0-3085a918de0b",
"Description": "Конструкция: надувной, Назначение: детский, Объём: 886 л, Форма: круглый",
"Pictures": [
"https://catalogapp.b-cdn.net/local/images/12/72/89/09/55f7d8a5-df3f-4997-9937-a02a036db361.jpg",
"https://catalogapp.b-cdn.net/local/images/03/50/17/16/7d2519d9-8851-40f0-86c2-342f7c80c554.jpg",
"https://catalogapp.b-cdn.net/local/images/04/03/83/53/a9c7ff05-81f6-4a06-b4b9-f873d9cf99ba.jpg"
],
"Tags": [
{
"Id": 1,
"Name": "Черная пятница"
},
{
"Id": 2,
"Name": "11.11"
}
],
"Parameters": [
{
"Name": "Производитель",
"Value": "Intex"
},
{
"Name": "Конструкция",
"Value": "надувной"
},
{
"Name": "Джакузи",
"Value": "Нет"
},
{
"Name": "Форма",
"Value": "круглый"
},
{
"Name": "Объём",
"Value": "886.00",
"Unit": "л"
},
{
"Name": "Длина",
"Value": "183.00",
"Unit": "см"
},
{
"Name": "Высота",
"Value": "51.00",
"Unit": "см"
},
{
"Name": "Распылитель (фонтан)",
"Value": "нет"
},
{
"Name": "Генератор пузырьков",
"Value": "Нет"
},
{
"Name": "Скиммер (устройство сбора мусора)",
"Value": "нет"
},
{
"Name": "Подстилка",
"Value": "Нет"
},
{
"Name": "Тент-чехол",
"Value": "Нет"
},
{
"Name": "Ширина",
"Value": "183.00",
"Unit": "см"
},
{
"Name": "Изготовитель",
"Value": "Intex Dervelopment Co Ltd 9/F., Dah Sing Financial Centre,108 Glouceste Road, Wanchai, China."
},
{
"Name": "Импортер",
"Value": "АзияИнвест ЧТПУП, 220073, Минск, ул. Ольшевского, оф. 604А, Сандэйз точка бай ЧТПУП 220073, г. Минск, ул. Ольшевского, 22, комната 604 ><*\"'/\\&$?"
},
{
"Name": "Прозрачные стенки",
"Value": "Нет"
},
{
"Name": "Комплект для чистки бассейна",
"Value": "Нет"
},
{
"Name": "Сетка для волейбола",
"Value": "Нет"
},
{
"Name": "Возраст детей",
"Value": "3+"
},
{
"Name": "Время установки",
"Value": "0.17",
"Unit": "ч"
},
{
"Name": "Цвет",
"Value": "синий"
},
{
"Name": "Вес",
"Value": "183"
},
{
"Name": "Фильтр-насос",
"Value": "нет"
},
{
"Name": "Назначение",
"Value": "детский"
},
{
"Name": "Дополнительные опции",
"Value": "сетка для волейбола"
}
]
},
{
"ModelId": 22067,
"Model": "Детский 140x11 с фонтаном",
"Category": "Надувные бассейны",
"CategoryId": 2312,
"Vendor": "Intex",
"VendorId": 526,
"Article": "57126",
"Color": "",
"BarCodes": [
"6941057403120"
],
"ExternalId": "9d9f5b7e-0ed5-11e7-8edf-00155d640707",
"Description": "Конструкция: надувной, Назначение: детский, Объём: 115 л, Форма: прямоугольный",
"Pictures": [
"https://catalogapp.b-cdn.net/local/images/11/17/99/91/77f8dd64-9c8b-4eae-9d7a-76a22025d720.jpg",
"https://catalogapp.b-cdn.net/local/images/04/03/82/91/21409749-182e-4c88-8c27-483c8b3a39e3.jpg",
"https://catalogapp.b-cdn.net/local/images/10/43/57/57/daf9c19a-bc38-4e71-a1ea-3876cdb399d5.jpg"
],
"Tags": [
{
"Id": 3,
"Name": "8 марта"
}
],
"Parameters": [
{
"Name": "Производитель",
"Value": "Intex"
},
{
"Name": "Конструкция",
"Value": "надувной"
},
{
"Name": "Джакузи",
"Value": "Нет"
},
{
"Name": "Форма",
"Value": "прямоугольный"
},
{
"Name": "Объём",
"Value": "115.00",
"Unit": "л"
},
{
"Name": "Длина",
"Value": "140.00",
"Unit": "см"
},
{
"Name": "Высота",
"Value": "11.00",
"Unit": "см"
},
{
"Name": "Распылитель (фонтан)",
"Value": "да"
},
{
"Name": "Генератор пузырьков",
"Value": "Нет"
},
{
"Name": "Скиммер (устройство сбора мусора)",
"Value": "нет"
},
{
"Name": "Подстилка",
"Value": "Нет"
},
{
"Name": "Тент-чехол",
"Value": "Нет"
},
{
"Name": "Ширина",
"Value": "140.00",
"Unit": "см"
},
{
"Name": "Сливной клапан",
"Value": "Нет"
},
{
"Name": "Прозрачные стенки",
"Value": "Да"
},
{
"Name": "Комплект для чистки бассейна",
"Value": "Нет"
},
{
"Name": "Сетка для волейбола",
"Value": "Нет"
},
{
"Name": "Цвет",
"Value": "голубой"
},
{
"Name": "Возраст детей",
"Value": "1+"
},
{
"Name": "Фильтр-насос",
"Value": "нет"
},
{
"Name": "Назначение",
"Value": "детский"
},
{
"Name": "Дополнительные опции",
"Value": "распылитель (фонтан)"
}
]
},
{
"ModelId": 231199,
"Model": "26710NP 366x76",
"Category": "Каркасные бассейны",
"CategoryId": 5006,
"Vendor": "Intex",
"VendorId": 526,
"Article": "",
"Color": "",
"BarCodes": [
""
],
"ExternalId": "5084182b-f0d7-48ec-a25e-ba8813d2c337",
"Description": "Конструкция: каркасный, Назначение: семейный, Объём: 6503 л, Форма: круглый",
"Pictures": [
"https://catalogapp.b-cdn.net/local/images/07/30/16/67/47d005a1-0d7b-4939-813b-181873fc0190.jpg",
"https://catalogapp.b-cdn.net/local/images/11/23/01/66/ef3819aa-96b7-4eff-baff-c4f7c471169c.jpg",
"https://catalogapp.b-cdn.net/local/images/04/03/82/22/21afd167-0d75-4d5b-9fc4-478ac197163b.jpg"
],
"Tags": [
{
"Id": 1,
"Name": "Черная пятница"
},
{
"Id": 2,
"Name": "11.11"
}
],
"Parameters": [
{
"Name": "Прозрачные стенки",
"Value": "Нет"
},
{
"Name": "Комплект для чистки бассейна",
"Value": "Нет"
},
{
"Name": "Возраст детей",
"Value": "6+"
},
{
"Name": "Цвет",
"Value": "серый"
},
{
"Name": "Производитель",
"Value": "Intex"
},
{
"Name": "Конструкция",
"Value": "каркасный"
},
{
"Name": "Джакузи",
"Value": "Нет"
},
{
"Name": "Форма",
"Value": "круглый"
},
{
"Name": "Объём",
"Value": "6503.00",
"Unit": "л"
},
{
"Name": "Длина",
"Value": "366.00",
"Unit": "см"
},
{
"Name": "Высота",
"Value": "76.00",
"Unit": "см"
},
{
"Name": "Сливной клапан",
"Value": "Да"
},
{
"Name": "Распылитель (фонтан)",
"Value": "нет"
},
{
"Name": "Генератор пузырьков",
"Value": "Нет"
},
{
"Name": "Скиммер (устройство сбора мусора)",
"Value": "нет"
},
{
"Name": "Подстилка",
"Value": "Нет"
},
{
"Name": "Тент-чехол",
"Value": "Нет"
},
{
"Name": "Ширина",
"Value": "366.00",
"Unit": "см"
},
{
"Name": "Время установки",
"Value": "30.00",
"Unit": "мин"
},
{
"Name": "Фильтр-насос",
"Value": "нет"
},
{
"Name": "Сетка для волейбола",
"Value": "Нет"
},
{
"Name": "Дополнительные опции",
"Value": "сливной клапан"
},
{
"Name": "Назначение",
"Value": "семейный"
}
]
},
{
"ModelId": 248344,
"Model": "Надувной 168x38",
"Category": "Надувные бассейны",
"CategoryId": 2312,
"Vendor": "Intex",
"VendorId": 526,
"Article": "58449",
"Color": "",
"BarCodes": [
"6941057454498"
],
"ExternalId": "0a973d6b-9cf0-4ca8-b2e6-0074541fd850",
"Description": "Картридж\n HP CLJ 653A Yellow (CF322A)\nбув спеціально розроблений для найточнішої сумісності з Вашим пристроєм і максимально відповідає високим стандартам. Він дозволяє використовувати весь потенціал Вашого лазерного принтера, забезпечуючи отримання відбитків професійної якості, а також максимальну продуктивність Вашої оргтехніки. Картридж\n HP CLJ 653A Yellow (CF322A)\nнадасть Вам виключно високу якість друку, рівномірне покриття носія і насичені кольори друку. Фахівці компанії розробили цей сумісний картридж у відповідності зі світовими стандартами якості та надійності - це кращий за своїми характеристиками картридж. Упаковка картриджа відрізняється не тільки оригінальним дизайном, але і надійністю і зручністю. Він має ресурс друку - 16500 стор при 5%-ному заповненні аркуша формату А4.°С®<>\"'&•™",
"Pictures": [
"https://catalogapp.b-cdn.net/local/images/11/23/06/82/8a94bddd-2009-4b05-8b88-0e418ae5f7ef.jpg",
"https://catalogapp.b-cdn.net/local/images/01/32/34/53/6c6132e1-a0a8-4956-8a54-fa0251e35773.jpg",
"https://catalogapp.b-cdn.net/local/images/11/18/02/17/2f389eae-95a9-4779-99ad-bc8fb371b43e.jpg",
"https://catalogapp.b-cdn.net/local/images/11/18/02/17/ec1f69dc-37c4-49f4-9280-9e90d4925b6e.jpg"
],
"Tags": [
{
"Id": 4,
"Name": "14 февраля"
}
],
"Parameters": [
{
"Name": "Производитель",
"Value": "Intex Dervelopment Co Ltd 9/F., Dah Sing Financial Centre,108 Glouceste Road, Wanchai, China."
},
{
"Name": "Конструкция",
"Value": "надувной"
},
{
"Name": "Форма",
"Value": "круглый"
},
{
"Name": "Объём",
"Value": "481.00",
"Unit": "л"
},
{
"Name": "Джакузи",
"Value": "Нет"
},
{
"Name": "Длина",
"Value": "168.00",
"Unit": "см"
},
{
"Name": "Высота",
"Value": "41.00",
"Unit": "см"
},
{
"Name": "Распылитель (фонтан)",
"Value": "нет"
},
{
"Name": "Генератор пузырьков",
"Value": "Нет"
},
{
"Name": "Скиммер (устройство сбора мусора)",
"Value": "нет"
},
{
"Name": "Подстилка",
"Value": "Нет"
},
{
"Name": "Тент-чехол",
"Value": "Нет"
},
{
"Name": "Прозрачные стенки",
"Value": "Нет"
},
{
"Name": "Комплект для чистки бассейна",
"Value": "Нет"
},
{
"Name": "Сетка для волейбола",
"Value": "Нет"
},
{
"Name": "Сливной клапан",
"Value": "Нет"
},
{
"Name": "Возраст детей",
"Value": "3+"
},
{
"Name": "Цвет",
"Value": "разноцветный"
},
{
"Name": "Горка",
"Value": "Нет"
},
{
"Name": "Вес",
"Value": "3"
},
{
"Name": "Фильтр-насос",
"Value": "нет"
},
{
"Name": "Назначение",
"Value": "детский"
},
{
"Name": "Дополнительные опции",
"Value": "сливной клапан"
}
]
},
{
"ModelId": 612923,
"Model": "Fast Set 10' x 30\"/305х76см",
"Category": "Надувные бассейны",
"CategoryId": 2312,
"Vendor": "Bestway",
"VendorId": 525,
"Article": "57266",
"Color": "",
"BarCodes": [
"6942138949933"
],
"ExternalId": "6f25f580-0af8-4470-82b5-7cd11f12537c",
"Description": "Конструкция: надувной, Назначение: семейный, Объём: 3638 л, Форма: круглый",
"Pictures": [
"https://catalogapp.b-cdn.net/local/images/04/85/35/62/553709fa-5605-40a3-9b69-4c71b02600d8.jpg",
"https://catalogapp.b-cdn.net/local/images/04/85/35/62/71789081-f5ed-4f3a-8d10-916b718717ea.jpg",
"https://catalogapp.b-cdn.net/local/images/04/03/81/62/b136633b-f70b-408f-80c7-2c812e766377.jpg",
"https://catalogapp.b-cdn.net/local/images/04/03/81/62/a5e8665f-2d12-4dbc-a9b0-94c720913d82.jpg"
],
"Tags": [
{
"Id": 1,
"Name": "Черная пятница"
},
{
"Id": 2,
"Name": "11.11"
}
],
"Parameters": [
{
"Name": "Конструкция",
"Value": "надувной"
},
{
"Name": "Джакузи",
"Value": "Нет"
},
{
"Name": "Форма",
"Value": "круглый"
},
{
"Name": "Объём",
"Value": "3638.00",
"Unit": "л"
},
{
"Name": "Длина",
"Value": "305.00",
"Unit": "см"
},
{
"Name": "Высота",
"Value": "76.00",
"Unit": "см"
},
{
"Name": "Распылитель (фонтан)",
"Value": "нет"
},
{
"Name": "Генератор пузырьков",
"Value": "Нет"
},
{
"Name": "Скиммер (устройство сбора мусора)",
"Value": "нет"
},
{
"Name": "Подстилка",
"Value": "Нет"
},
{
"Name": "Тент-чехол",
"Value": "Нет"
},
{
"Name": "Ширина",
"Value": "305.00",
"Unit": "см"
},
{
"Name": "Сливной клапан",
"Value": "Да"
},
{
"Name": "Прозрачные стенки",
"Value": "Нет"
},
{
"Name": "Комплект для чистки бассейна",
"Value": "Нет"
},
{
"Name": "Сетка для волейбола",
"Value": "Нет"
},
{
"Name": "Тип фильтр-насоса",
"Value": "картриджный"
},
{
"Name": "Цвет",
"Value": "синий"
},
{
"Name": "Фильтр-насос",
"Value": "нет"
},
{
"Name": "Возраст детей",
"Value": "3+"
},
{
"Name": "Назначение",
"Value": "семейный"
}
]
}
]
}
Добавление условий в шаблон
Условия помогают в выборе товаров, соответствующих определенным критериям. Для добавления условий удобно пользоваться функциями.
Функции небходимо определить до шаблона и вызвать внутри шаблона.
Условий может быть несколько (при этом они должны называться по разному), несколько условий можно скомбинировать в одно, a также добавлять свои условия.
Проверить корректность условий можно здесь.
Для выполнения экспорта:
Перейдите на страницу "Задачи".
Перейдите на вкладку "Экспорт".
Выберите необходимый профиль экспорта.
Нажмите кнопку "Запустить".
Статус задачи, а также историю последних выполненых экспортов можно посмотреть в списке "Последние экспорты". Результатом выполнения задачи является файл в формате .xml,
который можно скачать нажав напротив нужного экспорта "Скачать". В настройках шаблона можно посмотеть ссылку на этот файл.
Создание фида ценообразования по шаблону
Фид для интеграции можно создать с помощью экспорта каталога по шаблону. Для этого небходимо создать профиль экспорта:
Перейдите на страницу "Настройки"
Перейдите на вкладку "Экспорт"
Нажмите на кнопку "+"
Укажите название профиля экспорта, выберите профиль ценообразования, по которому будет подготовлен фид, и выберите
формат "Каталог по шаблону"
- Нажмите "Сохранить"
После сохранения профиля экспорта станет доступна настройка шаблона интеграции.
Редактирование существующего профиля:
Нажмите напротив этого профиля на значок карандашика.
Отредактируйте название или добавьте/удалите профиль ценообразования.
Нажмите кнопку "Сохранить".
Удаление существующего профиля:
Нажмите напротив этого профиля на значок корзинки.
Подтвердите удаление.
Настройка шаблона интеграции:
Перейдите на вкладку "Настройка шаблона".
Выберите тип выгрузки параметров.
Выберите тип валидации (при необходимости).
Выберите шаблон (нажамите кнопку "Шаблоны") или напишите свой.
Нажмите кнопку "Сохранить".
Для написания шаблона мы используем язык Scriban. Scriban - это быстрый, мощный, безопасный и легкий язык сценариев.
Подробнее с языком можно ознакимиться здесь.
Проверить корректность работы шаблона можно нажав на кнопку "Тест". После этого появится окно "Результаты",
в котором, при корректнонаписаном шаблоне, появится результат (как будет выглядеть фид).
Пример модели данных:
{
"Categories": [
{
"Id": 5548,
"SingularName": null,
"Name": "Сад и дача",
"ParentId": null
},
{
"Id": 5549,
"SingularName": null,
"Name": "Отдых/досуг на даче",
"ParentId": 5548
},
{
"Id": 5550,
"SingularName": null,
"Name": "Бассейны",
"ParentId": 5549
},
{
"Id": 2312,
"SingularName": "Надувной бассейн",
"Name": "Надувные бассейны",
"ParentId": 5550
}
],
"MaxDeliveryCost": "0.00",
"MaxDeliveryTime": "2",
"Currency": "BYN",
"Offers": [
{
"ModelId": 21942,
"OfferId": "0021942",
"Model": "Easy Set 183x51",
"Category": "Надувные бассейны",
"CategorySingularName": "Надувной бассейн",
"Vendor": "Intex",
"Price": 1866.1,
"SupplierPrice": 1166.31,
"Article": "54402/28101",
"OzonSku": 765430756,
"OzonFboSku": 1000123456,
"OzonFbsSku": 1000123457,
"OzonProductId": 440761234,
"OzonOfferId": "NV-TK1234",
"WbImtId": 189510123,
"WbNmId": 209690123,
"WbSku": "4640001123456",
"WbVendorCode": "HB-CE000A",
"DeliveryTime": 0,
"DeliveryTownPrice": 0.0,
"DeliveryCountryPrice": 0.0,
"MinHighCompetitorPrice": null,
"MinLowCompetitorPrice": null,
"Color": "",
"InStockAmount": 1.0,
"BarCodes": [
"6941057400006"
],
"ExternalId": "8e6558a5-c330-11e4-80c0-3085a918de0b",
"MinRetailPrice": null,
"CategoryId": 2312,
"Description": "Конструкция: надувной, Назначение: детский, Объём: 886 л, Форма: круглый",
"Profit": 37.5,
"Pictures": [
"https://catalogapp.b-cdn.net/production/images/12/72/89/09/55f7d8a5-df3f-4997-9937-a02a036db361.jpg",
"https://catalogapp.b-cdn.net/production/images/03/50/17/16/7d2519d9-8851-40f0-86c2-342f7c80c554.jpg",
"https://catalogapp.b-cdn.net/production/images/04/03/83/53/a9c7ff05-81f6-4a06-b4b9-f873d9cf99ba.jpg"
],
"Tags": [
{
"Id": 1,
"Name": "Черная пятница"
},
{
"Id": 2,
"Name": "11.11"
}
],
"Parameters": [
{
"Name": "Производитель",
"Value": "Intex"
},
{
"Name": "Конструкция",
"Value": "надувной"
},
{
"Name": "Джакузи",
"Value": "Нет"
},
{
"Name": "Форма",
"Value": "круглый"
},
{
"Name": "Объём",
"Value": "886.00",
"Unit": "л"
},
{
"Name": "Длина",
"Value": "183.00",
"Unit": "см"
},
{
"Name": "Высота",
"Value": "51.00",
"Unit": "см"
},
{
"Name": "Распылитель (фонтан)",
"Value": "нет"
},
{
"Name": "Генератор пузырьков",
"Value": "Нет"
},
{
"Name": "Скиммер (устройство сбора мусора)",
"Value": "нет"
},
{
"Name": "Подстилка",
"Value": "Нет"
},
{
"Name": "Тент-чехол",
"Value": "Нет"
},
{
"Name": "Ширина",
"Value": "183.00",
"Unit": "см"
},
{
"Name": "Изготовитель",
"Value": "Intex Dervelopment Co Ltd 9/F., Dah Sing Financial Centre,108 Glouceste Road, Wanchai, China."
},
{
"Name": "Импортер",
"Value": "АзияИнвест ЧТПУП, 220073, Минск, ул. Ольшевского, оф. 604А, Сандэйз точка бай ЧТПУП 220073, г. Минск, ул. Ольшевского, 22, комната 604 ><*\"'/\\&$?"
},
{
"Name": "Прозрачные стенки",
"Value": "Нет"
},
{
"Name": "Комплект для чистки бассейна",
"Value": "Нет"
},
{
"Name": "Сетка для волейбола",
"Value": "Нет"
},
{
"Name": "Возраст детей",
"Value": "3+"
},
{
"Name": "Время установки",
"Value": "0.17",
"Unit": "ч"
},
{
"Name": "Цвет",
"Value": "синий"
},
{
"Name": "Вес",
"Value": "183"
},
{
"Name": "Фильтр-насос",
"Value": "нет"
},
{
"Name": "Назначение",
"Value": "детский"
},
{
"Name": "Дополнительные опции",
"Value": "сетка для волейбола"
}
]
},
{
"ModelId": 612923,
"OfferId": "0612923",
"Model": "Fast Set 10' x 30\"/305х76см",
"Category": "Надувные бассейны",
"CategorySingularName": "Надувной бассейн",
"Vendor": "Bestway",
"Price": 6313.31,
"SupplierPrice": 1978.92,
"Article": "57266",
"DeliveryTime": 0,
"DeliveryTownPrice": 0.0,
"DeliveryCountryPrice": 0.0,
"MinHighCompetitorPrice": null,
"MinLowCompetitorPrice": null,
"Color": "",
"InStockAmount": 277.0,
"BarCodes": [
"6942138949933"
],
"ExternalId": "6f25f580-0af8-4470-82b5-7cd11f12537c",
"MinRetailPrice": null,
"CategoryId": 2312,
"Description": "Конструкция: надувной, Назначение: семейный, Объём: 3638 л, Форма: круглый",
"Profit": 68.65,
"Pictures": [
"https://catalogapp.b-cdn.net/production/images/04/85/35/62/553709fa-5605-40a3-9b69-4c71b02600d8.jpg",
"https://catalogapp.b-cdn.net/production/images/04/85/35/62/71789081-f5ed-4f3a-8d10-916b718717ea.jpg",
"https://catalogapp.b-cdn.net/production/images/04/03/81/62/b136633b-f70b-408f-80c7-2c812e766377.jpg",
"https://catalogapp.b-cdn.net/production/images/04/03/81/62/a5e8665f-2d12-4dbc-a9b0-94c720913d82.jpg"
],
"Tags": [
{
"Id": 3,
"Name": "8 марта"
}
],
"Parameters": [
{
"Name": "Конструкция",
"Value": "надувной"
},
{
"Name": "Джакузи",
"Value": "Нет"
},
{
"Name": "Форма",
"Value": "круглый"
},
{
"Name": "Объём",
"Value": "3638.00",
"Unit": "л"
},
{
"Name": "Длина",
"Value": "305.00",
"Unit": "см"
},
{
"Name": "Высота",
"Value": "76.00",
"Unit": "см"
},
{
"Name": "Распылитель (фонтан)",
"Value": "нет"
},
{
"Name": "Генератор пузырьков",
"Value": "Нет"
},
{
"Name": "Скиммер (устройство сбора мусора)",
"Value": "нет"
},
{
"Name": "Подстилка",
"Value": "Нет"
},
{
"Name": "Тент-чехол",
"Value": "Нет"
},
{
"Name": "Ширина",
"Value": "305.00",
"Unit": "см"
},
{
"Name": "Сливной клапан",
"Value": "Да"
},
{
"Name": "Прозрачные стенки",
"Value": "Нет"
},
{
"Name": "Комплект для чистки бассейна",
"Value": "Нет"
},
{
"Name": "Сетка для волейбола",
"Value": "Нет"
},
{
"Name": "Тип фильтр-насоса",
"Value": "картриджный"
},
{
"Name": "Цвет",
"Value": "синий"
},
{
"Name": "Фильтр-насос",
"Value": "нет"
},
{
"Name": "Возраст детей",
"Value": "3+"
},
{
"Name": "Назначение",
"Value": "семейный"
}
]
}
]
}
Добавление условий в шаблон
Условия помогают в выборе товаров, соответствующих определенным критериям. Для добавления условий удобно пользоваться функциями.
Функции небходимо определить до шаблона и вызвать внутри шаблона. Пример:
{{-func condition(offer)
if (offer.MinHighCompetitorPrice == null && offer.MinLowCompetitorPrice == null)
ret true
else
ret false
end
end-}}
<?xml version="1.0" encoding="utf-8"?>
<yml_catalog date="{{ date.now | date.to_string '%F %R' }}">
<shop>
<categories>
{{- for category in model.Categories}}
<category id="{{category.Id}}" parentId="{{category.ParentId}}">{{category.Name}}</category>
{{- end }}
</categories>
<company>ООО "Компания"</company>
<currencies>
<currency id="{{model.Currency}}" />
</currencies>
<delivery-options>
<option cost="{{model.MaxDeliveryCost}}" days="{{model.MaxDeliveryTime}}" />
</delivery-options>
<name>Название магазина</name>
<url>https://example.ru/</url>
<offers>
{{- for offer in model.Offers}}
{{- if condition offer }}
<offer id="{{offer.OfferId}}" type="vendor.model" available="true">
<barcode>{{offer.BarCodes | array.join ", "}}</barcode>
<categoryId>{{offer.CategoryId}}</categoryId>
<currencyId>{{model.Currency}}</currencyId>
<outlets>
<outlet id="0" instock="{{offer.InStockAmount}}" />
</outlets>
<model>{{offer.Model}} {{offer.Color}}</model>
<name>{{offer.CategorySingularName}} {{offer.Vendor}} {{offer.Model}} {{offer.Color}} {{offer.Article}}</name>
{{- for parameter in offer.Parameters}}
<param name="{{parameter.Name}}" unit="{{parameter.Unit}}">{{parameter.Value}}</param>
{{- if parameter.Name == "Страна-производитель" -}}
{{- capture country_of_origin -}}
{{parameter.Value}}
{{- end -}}
{{- end -}}
{{- if parameter.Name == "Длина в упаковке" -}}
{{- capture length -}}
{{parameter.Value}}
{{- end -}}
{{- end -}}
{{- if parameter.Name == "Ширина в упаковке" -}}
{{- capture width -}}
{{parameter.Value}}
{{- end -}}
{{- end -}}
{{- if parameter.Name == "Высота в упаковке" -}}
{{- capture height -}}
{{parameter.Value}}
{{- end -}}
{{- end -}}
{{- if parameter.Name == "Вес" -}}
{{- capture weight -}}
{{parameter.Value}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- for picture in offer.Pictures}}
<picture>{{picture}}</picture>
{{- end }}
<country_of_origin>{{country_of_origin}}</country_of_origin>
<dimensions>{{length}}/{{width}}/{{height}}</dimensions>
<weight>{{weight}}</weight>
<description>{{offer.Description}}</description>
<price>{{offer.Price}}</price>
<typePrefix>{{offer.CategorySingularName}}</typePrefix>
<url>https://techshop.ru/product/?XML_ID={{offer.ExternalId}}</url>
<vendor>{{offer.Vendor}}</vendor>
<vendorCode>{{offer.Article}}</vendorCode>
<shop-sku>{{offer.OfferId}}</shop-sku>
</offer>
{{- end }}
{{- end }}
</offers>
</shop>
</yml_catalog>
Вызов функции:
<offers>
{{- for offer in model.Offers}}
{{- if condition offer }}
<offer id="{{offer.OfferId}}" type="vendor.model" available="true">
<barcode>{{offer.BarCodes | array.join ", "}}</barcode>
...
<shop-sku>{{offer.OfferId}}</shop-sku>
</offer>
{{- end }}
{{- end }}
</offers>
Примеры условий:
- Цены выше до n % от цен конкурентов 1-го уровня
{{-func condition(offer, ConditionVal)
if (offer.MinHighCompetitorPrice != null && ConditionVal != null)
if (offer.Price > offer.MinHighCompetitorPrice && (offer.Price - offer.MinHighCompetitorPrice) * 100 / offer.MinHighCompetitorPrice < ConditionVal)
ret true
else
ret false
end
end
end-}}
- Цены = ценам конкурентов 1-го уровня
{{-func condition(offer)
if (offer.MinHighCompetitorPrice != null)
if (offer.MinHighCompetitorPrice == Price)
ret true
else
ret false
end
end
end-}}
- Цена ниже, чем у 1-го, но выше более n %, чем у 2-го
{{-func condition(offer, ConditionVal)
if (offer.MinHighCompetitorPrice != null && offer.MinLowCompetitorPrice != null)
if (offer.Price < offer.MinHighCompetitorPrice && offer.Price > offer.MinLowCompetitorPrice && (offer.Price - offer.MinLowCompetitorPrice) * 100 / offer.MinLowCompetitorPrice > ConditionVal)
ret true
else
ret false
end
end
end-}}
- Цена ниже, чем у 1-го, но выше не более n %, чем у 2-го
{{-func condition(offer, ConditionVal)
if (offer.MinHighCompetitorPrice != null && offer.MinLowCompetitorPrice != null)
if (offer.Price < offer.MinHighCompetitorPrice && offer.Price > offer.MinLowCompetitorPrice && (offer.Price - offer.MinLowCompetitorPrice) * 100 / offer.MinLowCompetitorPrice <= ConditionVal)
ret true
else
ret false
end
end
end-}}
- Цена ниже, чем у 1-го и 2-го
{{-func condition(offer)
if (offer.MinHighCompetitorPrice != null && offer.MinLowCompetitorPrice != null)
if (offer.Price < offer.MinHighCompetitorPrice && offer.Price < offer.MinLowCompetitorPrice)
ret true
else
ret false
end
end
end-}}
- Нет товара у конкурентов, но есть у нас
{{-func condition(offer)
if (offer.MinHighCompetitorPrice == null && offer.MinLowCompetitorPrice == null)
ret true
else
ret false
end
end-}}
- Минимальное время доставки в диапазоне MinDeliveryTime-MaxDeliveryTime дня и маржа в диапазоне MinProfit-MaxProfit %
{{-func condition(offer, MinProfit, MaxProfit, MinDeliveryTime, MaxDeliveryTime)
if (offer.Profit >= MinProfit && offer.Profit <= MaxProfit && offer.DeliveryTime >= MinDeliveryTime && offer.DeliveryTime <= MaxDeliveryTime)
ret true
else
ret false
end
end-}}
- Функция для получения родительской категории любого уровня (положительный level для подсчета уровня с корня дерева, отрицательный - для подсчета с категории товара):
categories = {}
for category in model.Categories
categories[category.Id] = category
end
# use positive level to iterate categories from root
# use negative level to iterate categories from leaf
func getCategory(offer, level)
i = 0
path = []
current = categories[offer.CategoryId]
while current
path[i] = current
i = i + 1
current = categories[current?.ParentId ?? 0]
end
if level < 0 && path.size > -level
ret path[-level]
end
if path.size >= level
begin
ret path[path.size - level - 1]
end
ret null
end
Условий может быть несколько (при этом они должны называться по разному), несколько условий можно скомбинировать в одно, a также добавлять свои условия.
Проверить корректность условий можно здесь.
Для выполнения экспорта:
Перейдите на страницу "Задачи".
Перейдите на вкладку "Экспорт".
Выберите необходимый профиль экспорта.
Нажмите кнопку "Запустить".
Статус задачи, а также историю последних выполненых экспортов можно посмотреть в списке "Последние экспорты".Результатом выполнения задачи является файл в формате .xml,
который можно скачать нажав напротив нужного экспорта "Скачать". В настройках шаблона можно посмотеть ссылку на этот файл.
Ручной импорт еженедельных отчетов по продажам из кабинета Wildberries
SellerApi Wildberries может работать некорректно, поэтому мы добавили возможно загрузки данных по продажам на основе еженедельных отчетов из кабинета.
Порядок действий следующий:
- С главной страницы кабинета, перейдите по ссылке "Финансовые отчеты"
- Скачайте список отчетов
Загрузите отчет в catalog.app
Скачайте необходимые еженедельные отчеты. Для этого переходим на страничку детализации отчета
- Скачиваем отчет
В catalog.app на странице "Аналитика" выбираем вкладку "Ручной импорт данных". Загружаем список еженедельных отчетов и сами отчеты по соотвествующим ссылкам
В дальнейшем необходимо лишь актуализировать данные новыми отчетами. Отчеты формируются еженедельно по понедельникам. После того как появились новые отчеты необходимо скачать список отчетов и загрузить его в сервис. А после скачать новые еженедельные отчеты и загрузить их в сервис. Данные применятся после отрабатывания задачи "Обновление статистики продаж". Как правило, задача запускается по настроенному расписанию
Работа с API
Документация API
API документация создана с помощью набора инструментов Swagger. Для полного просмотра API документации,
где также можно проверить вызовы API прямо в браузере, воспользуйтесь Swagger UI.
В этом разделе руководства пользователя описаны лишь некоторые методы.
Обновление каталога через API
Обновить каталог через API можно POST-запросом (/api/catalogs/{catalogId}/tasks/update), который создаст задачу, но только после того,
как он (каталог) был создан через пользовательский интерфейс.
Статус задачи можно получить GET-запросом (/api/catalogs/{catalogId}/tasks/update/{id}). Для того чтобы не делать постоянные запросы
и проверять статус задачи, можно настроить получение уведомлений на заданный адрес.
Получение результата обновления цен поставщиков через API
После настройки автоматического обновления цен поставщиков и запуска задачи через интерфейс, статус задачи можно получить через API GET-запросом
(/api/catalogs/{catalogId}/tasks/import/{id}). Для того чтобы не делать постоянные запросы и проверять статус задачи,
можно настроить получение уведомлений на заданный адрес.
Получить результат обновления цен поставщиков через API можно GET-запросом (/api/catalogs/{catalogId}/suppliers/{supplierId}/prices).
Получение результата ценообразования через API
После настройки ценообразования и запуска задачи через интерфейс, статус задачи можно получить через API GET-запросом (/api/catalogs/{catalogId}/tasks/pricing/{id}).
Для того чтобы не делать постоянные запросы и проверять статус задачи, можно настроить получение уведомлений на заданный адрес.
Получить результат ценообразования можно GET-запросом (/api/catalogs/{catalogId}/pricing-profiles/{profileId}/prices).
Работа со свойствами товаров через API
Cвойства товара, а также их значения можно получить через API GET-запросом (/api/catalogs/{catalogId}/models/{id}/details).
Также можно получить свойства выбранной категории товаров GET-запросом (/api/catalogs/{catalogId}/categories/{id}).
Аналитика
Руководство пользователя catalog.app Lite
Здесь собрана документация по истользованию сервиса управленческого учета на маркетплейсах.
{menu.md}
Часто задаваемые вопросы
Сколько каталогов(кабинетов) можно настроить в системе?
У нас нет ограничения по количеству каталогов.
Сколько пользователей могут работать одновременно?
У нас нет ограничений на одновременную работу пользователей.
Сколько занимает настройка обновления себестоимости?
За пять минут можно настроить обновление себестоимости в формате, который предоставите вы.