eCommSender

Компонент для отправки данных в сервисы электронной коммерции.
Автор дополнения
Артур Шевченко
Пакетов
31
Закачек
3 568
Обычно отвечает в течение суток
Автор дополнения
Пакетов
31
Закачек
3 568
Обычно отвечает в течение суток
Версия 1.2.0-pl
Дата выпуска 30.09.2026
Загрузки 1
Просмотры 1 877
Внимание, этот компонент несовместим с MODX 3.
Зависимости:
1. UniversalEventBus

Как пользоваться:
1. Создать копию файла core/components/ecommsender/services/config.inc.php и изменить параметры
* templateIds — содержит массив id шаблонов ключевых страниц (корзина, форма заказа, страница благодарности)
* chunks — содержит массив шаблонов структуры данных для различных событий
* payedStatuses — содержит массив, где ключами являются id способов оплаты, а значениями — id статусов
* paymentKeyParams — содержит массив, где ключами являются id способов оплаты, а значениями — параметр в ссылке на оплату содержащий ключ оплаты
* counterId — id счетчика метрики (актуально только при использовании Яндекс метрики).
* measurementProtocolToken — токен для передачи события purchase в случае невозврата пользователя на сайт
после оплаты (актуально только при использовании Яндекс метрики).

2. Указать путь к вашему файлу конфигурации в системных настройках.
3. Установить код метрики на сайт.

После этого будут доступны следующие события:
* click
* detail
* add
* remove
* view_cart
* initiate_checkout
* order_created
* dl_purchase
* purchase

!!! ВАЖНО!!! События dl_purchase и purchase являются взаимоисключающими,
т.е. если было отправлено одно из них, второе отправлено не будет.

Для отслеживания событий просмотра списка товаров (impressions) необходимо каждому списку добавить следующие атрибуты:
* data-ecs-list
* data-ueb-event=«show»
* data-ueb-once=«1»

Для отслеживания просмотра миникорзины, если она у вас сделана в модальном окне, нужно добавить следующие атрибуты:
* data-ueb-event=«open»
* data-ueb-params=«eventName:ecsViewMiniCart»
И добавить в системные настройки селектор открытой миникорзины.

Для отслеживания открытия окна быстрого заказа нужно добавить следующие атрибуты:
* data-ueb-event=«open»
* data-ueb-params=«eventName:ecsFastOrderWithCart»
И добавить в системные настройки селектор открытого окна быстрого заказа.

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

Системные события:
1. OnGetEcsWebConfig — можно добавить свои параметры в веб-конфиг
$object->webConfig['paramName'] = 'paramValue';
2. OnGetEcsHandleEvent — для обработки кастомных событий, можно вернуть массив с данными для добавления в dataLayer
$object->output = ['eventName' => 'eventName', 'eventData' => 'eventData'];

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

1.2.0-pl

  • FIX: плагин ecsEventWatcher на msOnAddToCart/msOnChangeInCart/msOnRemoveFromCart ставится с приоритетом 10 — после скидочных плагинов; add_to_cart больше не уходит с ценой до скидки.
  • FEATURE: событие ecsOnBeforeHashUserData перед хешированием контактов: сайт может дополнить userData/orderData через returnedValues (например, дописать код страны к телефону из формы чекаута).
  • FIX: телефон перед хешированием приводится к цифрам (E.164 без «+», пробелов и скобок) — хеш совпадает с тем, что ждут Google/Meta, и одинаков на чекауте и в покупке.
  • FIX: повторное событие заказа (двойная смена статуса, параллельные запросы) больше не отправляет второй purchase: флаг заказа захватывается атомарно (GET_LOCK + перечитывание properties заказа) до формирования событий.
  • FIX: Measurement Protocol — строка хита кодируется по RFC3986 (пробелы %20, а не «+»), амперсанды и тильды в названиях не ломают параметры.
  • FEATURE: каждый пуш получает event_uid и event_time; ecommsender.js отбрасывает уже показанные (sessionStorage) и устаревшие (старше 30 минут) пуши — дубли из очереди событий при перезагрузке/новой вкладке не попадают в dataLayer.

1.1.1-rc

  • FIX: add_shipping_info не отправлялся никогда. deliveryId писался в сессию при любом изменении формы заказа: первое же касание поля (обязательные поля ещё пустые, checkDelivery() = false) фиксировало id, и все последующие изменения отбивались уже по совпадению id с сессией. Теперь сессия запоминает доставку только когда событие реально сформировано. Сброс сессии в loadJS() (перезагрузка страницы) картину не менял — цикл повторялся с первого же изменения поля.
  • FIX: плагин ecsEventWatcher не был подписан на msOnCreateOrder — событие order_created не срабатывало, заказу не проставлялись properties.analytics, и purchase уходил без идентификаторов пользователя (client_id, gclid, utm). Подписка добавлена.

1.1.0-rc

  • FEATURE: новое системное событие ecsOnGetRequires (параметры: deliveryId, requires, object) — сайт может подменить список обязательных полей, по заполненности которых eCommSender решает, что шаг доставки завершён и пора слать add_shipping_info. Нужно, когда обязательность полей заказа реализована не через msDelivery.requires (например, кастомной конфигурацией per context). Возврат — returnedValues['requires'].
  • FIX: у доставки с пустым msDelivery.requires explode давал [''] — одно «обязательное» пустое поле, из-за которого add_shipping_info не отправлялся никогда. Теперь пустой requires (после array_filter) означает «полей-условий нет» — событие уходит по факту выбора доставки (если слушатель ecsOnGetRequires не задал свой список).

1.0.5-rc

  • FIX: шквал change-событий формы заказа (быстрый ввод / автозаполнение чекаута) схлопывается в один запрос — отправка addToOrder через debounce (параметр JS-конфига addToOrderDebounce, по умолчанию 400 мс). Раньше каждый change порождал отдельный fetch, на чекауте копились одновременные запросы.

1.0.4-rc

  • Логирование переведено с файлов (assets/logs/*.txt) на mxLogger. Logger делегирует записи сервису mxLogger (если установлен), иначе молчит и один раз предупреждает в журнале MODX. Перевод затронул eCommSender и Request.
  • Гейты: ecs_debug (вкл/выкл) + новая настройка ecs_log_level (минимальный уровень debug|info|warning|error, по умолчанию error; единый приёмник mxLogger, включено из коробки). Консистентно с mxLogger.min_level.
  • Тэги: базовые ecommsender + analytics, этапные event (dataLayer-событие), protocol (отправка в measurement protocol), http (CURL). Воронка processuid = «ecommsender»+md5(session_id).
  • Сигнатура Logger::write сохранена (позиционные method/msg/data), добавлены $level и $tags. Уровни: отправка событий — info, CURL-детали — debug (ошибка CURL — warning).
  • Настройка ecs_log_path больше не используется (файлового лога нет) — оставлена для обратной совместимости.
  • ВНИМАНИЕ: перед сборкой настройку ecs_log_level создать в менеджере (namespace ecommsender) — сборка тянет настройки из БД стенда.

1.0.3-rc

  • Добавил селектор формы заказа.

1.0.2-rc

  • Добавил проверку на массив в hashUserData() перед перебором hashedKeys.
  • Исправил получение списка событий measurementProtocol для избежания ошибки при пустом значении.

1.0.1-rc

  • Убрал из clickHandler() e.preventDefault().

1.0.0-rc

  • Добавил возможность указывать несколько статусов для оплаченных заказов.
  • Добавил возможность отключить переопределение submit miniShop2.
  • Добавил событие OnSendEventByMeasurementProtocol
  • Добавил возможность отправлять события в GTM с сервера по Measurment Protocol
  • Перенёс список данных пользователя для хэширования в конфигурацию

1.0.0-beta9

  • Мелкие правки.
  • Добавил явную передачу контекста в плагин-наблюдатель за событиями.

1.0.0-beta7

  • Добавил очистку localstorage при отмене редиректа.
  • Добавил проверку на ajax при событии ecsOnLoadWebDocument.
  • Добавил событие page_view при просмотре НЕтовара.
  • Добавил редирект даже если событие order_created не отслеживается
  • Добавил опциональную цепочку при доступе к e.detail?.data?.pushed

1.0.0-beta6

  • Переместил создание экземпляра класса eCommSender из обработчика события DOMContentLoaded.

1.0.0-beta5

  • Сделал вызов редиректа постоянным.

1.0.0-beta4

  • Поменял имя события для обработки данных возвращаемых из события.
  • Поменял порядок формирования данных в плагине подготовки ответа.

1.0.0-beta3

  • Добавил проверку наличия файла конфигураци.
  • Добавил события JS 'ecommsender:click' и 'ecommsender:getlistdata'
  • Уточнил данные зааписываемые в localstorage responseOrder

1.0.0-beta2

  • Добавил в конфигурацию параметр clientIdKey для передачи ключа клиента.
  • Добавил в конфигурацию параметр savedCookiesOnCreatingOrder для передачи ключей кук которые необходимо записать в свойства заказа.

1.0.0-beta

  • Первая сборка.

Последние обсуждения в сообществе MODX.pro