Открыть карточку решения Главная>База знаний (FAQ)>Экспорт каталога товаров в Google Merchant и Facebook

Экспорт каталога товаров в Google Merchant и Facebook

Создание фида для Facebook

Facebook и Google Merchant работают с одним типом feed'ов (выгрузок) - RSS 2.0, поэтому фиды для двух систем можно генерировать одним типом профиля.

Дополнительные советы:



1. При создании магазина в Facebook рекомендуется выбирать Способ оформления заказа - "Оформление заказа на другом сайте".

s1.png

Если вы выбираете "Написать продавцу", обязательно заполняйте поле Запасы (inventory), иначе все товары будут иметь статус "нет в наличии".




Видео инструкция по созданию бизнес страницы на Facebook, вкладки магазин и загрузке каталога из фида:





Те же, описание процесса загрузки готового прайса (фида) в фейсбук вы можете в официальной документации - https://www.facebook.com/business...

Автоматическая выгрузка

Для автоматического обновления фида нужно настроить задание для системы, которое будет автоматически запускать выгрузку

Выгрузка по агенту (рекомендуемый способ)


Данный способ более простой и не требует навыков разработки. С его помощью можно быстро настроить автоматическое обновление фида например каждые 8 часов.

Откройте список профилей выгрузки и найдите нужный профиль. Откройте контекстное меню профиля выгрузки и нажмите "Создать агента"


screen1.png

Далее откроется окно с вводом интервала агента, укажите с каким периодом необходимо обновлять выгрузку:

screen1.png


Дополнительно: Если вы хотите выполнять агенты на cron необходимо перевести запуск агентов по cron согласно инструкции от 1с-Битрикс. На большинстве проектов данный перевод уже выполнен, т.к. является рекомендуемым.


Через крон-задачу (потребуется помощь разработчика)


Данный способ может пригодиться в более сложных случаях, например, когда выгрузку нужно делать точно в определенное время или нужно нестандартное расписание выгрузки.

Шаг 1. Создаём php скрипт генерирующий выгрузку. Ниже пример скрипта

#!/usr/bin/php <?php $_SERVER["DOCUMENT_ROOT"] = "/home/hosting/www"; // В этой переменной укажите корректный DOCUMENT_ROOT $DOCUMENT_ROOT = $_SERVER["DOCUMENT_ROOT"]; define('STOP_STATISTICS', true); define('NOT_CHECK_PERMISSIONS', true); define('NO_AGENT_CHECK', true); set_time_limit(0); @ignore_user_abort(true); define("LANG", "s1"); // В этой константе укажите корректный SITE_ID require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); CCatalogExport::PreGenerateExport(1); // вместо 1 укажите корректный айди вашего профиля require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php"); ?>

Шаг 2. Устанавливаем на крон. Ниже пример крон задачи

30 18 * * * /usr/bin/php -f /home/bitrix/www/cron/exportgoogle.php




Гид по фильтрам

Модуль "Экспорт в Google Merchant и Facebook" поддерживает фильтрацию товаров, попадаемых в выгрузку. В этой статье вы сможете найти примеры и подсказки по настройке типовых фильтров.

1. Фильтр товаров по цене

Данный тип поможет выгружать товары в определенном интервале цены. Для настройки данного типа нужно открыть профиль на редактирование, перейти в детальные настройки на вкладку "Цены и отбор товаров".

price_filter.png

В примере вы можете увидеть фильтр для выгрузки товаров с ценой от 500 до 3000. Валюта фильтра равна валюте выгрузки. Если товары выгружаются в рублях - фильтр так же учитывает цены в рублях.

2. Скрытие товаров Недоступных для покупки / Без картинок / Без описаний / С нулевым доступным количеством

Эти фильтры самые частоиспользуемые, поэтому вынесены в общие настройки профиля

а) Выгружать только доступные к покупке товары - позволяет не выгружать товары недоступные для покупки (товары у которых Доступное количество = 0 и Разрешить покупку при отсутствии товара = Нет). Для работы опции должен быть включен складской учёт

б) Скрыть товары без картинок - позволяет скрыть товары у которых нет изображений

в) Скрыть товары без описаний - позволяет скрыть товары у которых нет описания

г) Скрыть товары с нулевым Доступным количеством - позволяет не выгружать товары у которых количество на складе равно или меньше нуля (Может быть полезна при отключенном складском учёте)

wo_list.png

3. Фильтр товаров по свойствам

Фильтр по свойствам позволяет формировать точные сегментированные выгрузки, но данный инструмент чуть сложнее предыдущих двух в плане настроек. Рассматривать процесс настройки мы будем на примерах.

а) Выбрать товары сделанные из хлопка или льна или дерева

example1.png

б) Выбрать товары новинки бренда "Фэшн хаус"

ex2.png

в) Выбрать товары к которых количество комментариев больше 3х

ex3.png



4. Фильтр торговых предложений по свойству

Решение поддерживает стандартный отбор торговых предложений. Для его отображения и заполнения в пункте "Настройка выгрузки торговых предложений" выберите Условие отбора = Отбор по свойству, после чего настройка отбора по торговым предложения

ex4.png





Правильная кастомизация скриптов выгрузки

Периодически возникают случаи, когда на клиентских сайтах некоторый функционал реализован не через стандартные возможности ядра 1с-Битрикс.

Причины могут быть разные - найден более удобный способ реализовать функционал, стандартное поле было уже занято ранее другой информацией либо такого функционала в данный момент нет в 1с-битрикс. И вне зависимости от причины, может возникнуть необходимость выводить результаты этой работы в выгружаемый файл для Google Merchant или Facebook.

В разработке решения и обновлений я стараюсь максимально охватить возможности ядра битрикса, типовые и распространенные реализации и в подавляющем большинстве случаев всё необходимое можно сделать через настройки.

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

Редактировать исходный код решения не запрещено, но важно понимать несколько вещей:
  • Техническая поддержка не распространяется на кастомизированные решения (только информационная)
  • При неправильной кастомизации обновления решения могут затереть ваш измененный код
  • После обновлений решения вам самим необходимо следить за целостностью работы решения

Если вы кастомизируете решение - делайте это правильно!

Если вам необходимо дописать поменять скрипт экспорта для решения:

1. Скопируйте содержимое /bitrix/modules/arturgolubev.gmerchant/load/googlemerchant_run.php в /bitrix/php_interface/include/catalog_export/merchantgl_run.php
2. Проследите что бы в файле /bitrix/php_interface/include/catalog_export/merchantgl_run.php осталась строчка //<title>Google Merchant Center</title>
3. Редактируйте код в файле /bitrix/php_interface/include/catalog_export/merchantgl_run.php при обновлении решения ваши изменения не затрутся

События

Изменение фильтров

События представляют собой пользовательский код, позволяющий вносить изменения в логику решения без кастомизации.

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

Решение поддерживает события корректировки фильтра товаров непосредственно перед выполнением запроса. С помощью данных событий можно максимально гибко настроить фильтр, например для сложных выборок.

Для товаров и торговых предложений предусмотрены разные события:

onAfterPrepareProductFilter - событие для корректировки фильтра товаров

onAfterPrepareSkuFilter - событие для корректировки фильтра торговых предложений

События срабатывают когда решение сформировало фильтры по своим правилам и готово переходить к запросу элементов.


Примеры применения событий:


В примере событие смотрит адрес формируемого файла и устанавливает фильтр по количеству доступных товаров.
AddEventHandler('arturgolubev.gmerchant', "onAfterPrepareProductFilter", "onAfterPrepareProductFilterCallback"); function onAfterPrepareProductFilterCallback(&$filter, $options){ if($options["file"] == '/bitrix/catalog_export/google_example.xml'){ $filter[">CATALOG_QUANTITY"] = 0; } } AddEventHandler('arturgolubev.gmerchant', "onAfterPrepareSkuFilter", "onAfterPrepareSkuFilterCallback"); function onAfterPrepareSkuFilterCallback(&$filter, $options){ if($options["file"] == '/bitrix/catalog_export/google_example.xml'){ $filter[">CATALOG_QUANTITY"] = 0; } }



Справка по полям

<gtin>, <mpn>, <identifier_exists>

Очень часто пользователи сталкиваются с проблемой - Google Merchant отклоняет товары по причине отсутствия gtin.
GTIN - международный идентификатор товара (штрихкод), по правилам он должен быть заполнен. Если по какой то причине у продукции вообще нет штрихкода - то следует указать MPN - код производителя товара.
Политика Google в данном вопросе достаточно жесткая - у загружаемых товаров должен быть указан GTIN или MPN и в большинстве случаев это ограничение не пройти. Без gtin/mpn мерчант пропускает только товары не серийного производства, товары ручной работы и т.п.

Обмануть Мерчант сложно - он использует алгоритмы определяющие по названию товара, возможно ли найти штрихкод у данного товара. И если оказывается, что существует, а у вас он отсуствует - товар будет отклонен, даже если у вас указан аттрибут identifier_exists = no.

При использовании модуля "Экспорт в Google Merchant и Facebook" аттрибут identifier_exists = no проставляется автоматически, если не заполнен ни gtin, ни mpn.

Достаточно неплохой сервис для поиска и валидации штрихкодов по названию: https://www.barcodelookup.com/

Настройка <availability>

Атрибут availability используется, чтобы указать, доступен ли товар для покупки и имеет 3 возможных значения: in stock [в наличии], out of stock [нет в наличии], preorder [предзаказ]. Обязательный атрибут

В модуле данный атрибут так же является обязательным и появится в фиде, даже если ему не назначено соотвествие в детальных настройках.

Значение по умолчанию

Если в детальных настройках для данного поля не выбрано соответствие - значение availability будет выведено на основе флага битрикса CATALOG_AVAILABLE. Если товар доступен для покупки - in stock, если нет - out of stock


Как поменять значение для конкретных элементов?

Поменять значение для конкретных элементов просто. Заведите в инфоблоке соотвествующее свойство (availability к примеру) и настройте соответствие в настройках. Заполните поле только у тех товаров, где оно отличается от значения по умолчанию. В результате у товаров, в свойствах которых указано значение в фид подтянется оно, а там где не указано система рассчитает availability по умолчанию!

availability_for_merchant.png


Как установить всем товарам значение в наличии?

Для установки значения для всех товаров фида, в настройке соотвествия выберите пункт "Произвольное значение из поля ввода" и введите в появившемся поле "in stock". Данное значение пропишется сразу для всех товаров фида.

all_in_stock.png



Настройка <google_product_category> и <fb_product_category>

Видео-инструкция по настройке google_product_category




Для большего удобства использования модуля, в решение добавлен функционал установки поля <g:google_product_category> для категории каталога. Больше не потребуется заполнять данное поле для каждого товара или использовать общее значение для всех!

Как настроить google_product_category для разделов?


1. Добавить пользовательское поле для раздела

Откройте на изменение любой раздел выгружаемого каталога:


Перейдите на вкладку "Доп. поля" и нажмите "Добавить пользовательское свойство":

scr2.png

При создании укажите следующие значения:
Тип данных = Строка
Код поля = UF_GM_PCATEGORY
Подпись в форме редактирования = Категория Google Merchant

Остальные предложенные поля редактировать не нужно

scr3.png

2. Заполните поле в соответствии со справочником Google

Актуальный справочник Google можно скачать по ссылке. В поле указывайте айди из первой колонки файла.

scr-5.png


3. В настройках профиля обмена в поле "Категория товара в google" выберите "Из настроек раздела"

scr4.png


4. Сохраните настройки и обновите выгрузку

Если всё сделано правильно - в файл подтянется информация из нового поля


- - - - - - - - - - -

Как настроить fb_product_category для разделов?


1. Добавить пользовательское поле для раздела

Откройте на изменение любой раздел выгружаемого каталога:


Перейдите на вкладку "Доп. поля" и нажмите "Добавить пользовательское свойство":

scr2.png

При создании укажите следующие значения:
Тип данных = Строка
Код поля = UF_GM_FPCATEGORY
Подпись в форме редактирования = Категория Facebook

Остальные предложенные поля редактировать не нужно

scr3.png

2. Заполните поле в соответствии со справочником Facebook

Актуальный справочник Facebook можно скачать по ссылке. В поле указывайте category_id из файла.

scr-5.png


3. В настройках профиля обмена в поле "Категория товара в Facebook" выберите "Из настроек раздела"

scr4.png


4. Сохраните настройки и обновите выгрузку

Если всё сделано правильно - в файл подтянется информация из нового поля


Типовые проблемы и их решение

Некорректная ссылка в <link>

Одной из наиболее частых проблем является отсутствие либо неверная ссылка на карточку товара в элементе <link>.

Для решения данной проблемы необходимо правильно настроить шаблоны URL в инфоблоке каталога и торговых предложений. Обратите внимание - данные настройки нужно делать в соовествии с реализацией ЧПУ вашего каталога товаров.


Пример настройки URL детальной страницы в инфоблоке каталога

screen1.png


Пример настройки URL детальной страницы в инфоблоке торговых предложений

screen1.png

Пустой фид без товаров

Переодически пользователи сталкиваются с проблемой. Настройки сделаны, экспорт запущен, файл создался - но в нём нет товаров (тегов <item>). Ниже мы рассмотрим что может влиять на выгрузку в файл конкретных позиций.

1. Цена
Обязательное условие выгрузки товара - наличие цены. Цена должна быть больше нуля. Модуль получает цену автоматически средствами ядра битрикса (CCatalogProduct::GetOptimalPrice)

2. Активность
Товар должен быть активен

3. Опция "Выгружать только доступные к покупке товары"
Проверят признак доступности товара к покупке стандартным функционалом ядра битрикса. Если битрикс считает товар не доступным - товар исключается из выгрузки

4. Опция "Скрыть товары без картинок"
Проверяет наличие картинки у товара. Если картинки нет - товар исключается из выгрузки

5. Опция "Скрыть товары без описаний"
Проверяется наличие описания товара (настраивается в детальных настройках). Если описания нет - товар исключается из выгрузки

6. Опция "Скрыть товары с нулевым Доступным количеством"
Проверяется поле каталога "Доступное количество". Если количество меньше или равно нулю - товар исключается из выгрузки

7. "Выберите группы"
В настройке выгрузки мы выбираем инфоблок и разделы из которых нужно выгружать товары. Выгружаются только товары из разделов, отмеченных галочками.

otbor_grupp.png


8. "Отбор товаров по свойствам" в детальных настройках
Если фильтр настроен, все товары не попадающие под фильтр будут исключены из выгрузки

otbor_svojstva.png


9. "Фильтр по цене" в детальных настройках
Если фильтр настроен, все товары не попадающие под фильтр будут исключены из выгрузки

filtr_price.png


10. "Настройка выгрузки торговых предложений" в детальных настройках
Данная настройка влияет на выгрузку торговых предложений для товара, торговые предложения не попавшие под данную настройку так же будут исключены из прайса

otbor_predlozheniy.png



На данный момент это исключительный список возможного непопадания в выгрузку товаров. Во время диагностики рекомендую отключать по одному пункту из списка, делать выгрузку, проверять.



В детальных настройках нет кнопки "Сохранить"

Данная проблема замечена на серверах, с установленным серверным модулем pagespeed

После установки модуля pagespeed некоторые скрипты ядра битрикса (JavaScript) начинают работать не верно и выдают ошибки.

Данная проблема распространяется не только на мой модуль, но и на весь раздел экспорта, включая стандартные скрипты (к примеру Yandex).

Рекомендация: т.к. после обработки скрипты админки работают не верно, нужно настроить модуль pagespeed таким образом, что бы он не обрабатывал папку /bitrix/ и всё что внутри её, либо отключить его

Формирование и выгрузка цен

Вопрос:
У нас в магазине используется несколько типов цен. В настройках выгрузки мы выбрали определенный тип цен, но в прайс попадает базовая/другая цена.

Ответ:
При разработке функционала разных цен, разработчики им чаще всего используют событие OnGetOptimalPrice влияющее на отдачу цены товара. Это событие влияет на стандартную функцию CCatalogProduct::GetOptimalPrice, с помощью которой модуль получает цену товаров.

Для корректной отдачи цены в прайс обработчик OnGetOptimalPrice должен корректно реагировать на ситуацию, когда заполнен пятый параметр $arPrices (который определяет запрашиваемый тип цен) и выдавать запрошенный тип цены. Либо данный обработчик должен быть отключен в административной части сайта.