О документе
Документ подготовлен для Bussol: Видеовиджеты PRO — Bubble, Stories, Carousel, A/B и аналитика, версия 1.1.1, на основе фактической реализации релизного архива и в структуре, близкой к эксплуатационной документации BUSSOL DataBridge. Он предназначен для администратора сайта, маркетолога, интегратора и разработчика.
Платформа видеомаркетинга и видеопродаж для 1С-Битрикс: Bubble, Stories, Carousel, eCommerce, A/B, аналитика и Сайты24
1. Назначение и модель работы
Модуль BUSSOL: Видеовиджеты PRO организует управляемый показ видеоконтента на сайтах 1С-Битрикс и объединяет в одном решении плавающие видеовиджеты, Stories, Carousel, eCommerce-действия, сегментацию, A/B-тестирование и аналитику. Версия 1.1.1 предназначена для администратора сайта, маркетолога, интегратора и разработчика.
| Компонент | Назначение |
|---|---|
| Виджет | Хранит формат, медиаисточник, дизайн, правила показа, аудиторию, CTA, eCommerce, A/B и интеграции. |
| Карточка Stories / Carousel | Отдельный элемент подборки со своим видео/URL, preview, poster, CTA, товаром и количеством. |
| Клиентский движок | Без jQuery. Изолирует экземпляры, запускает триггеры, проигрывание, CTA, DataLayer, DOM-события и клиентскую телеметрию. |
| AutoRenderer | Автоматически вставляет подходящие плавающие форматы в публичную страницу с учётом сайта, Сайты24, URL-правил и Композита. |
| Runtime context | No-store endpoints передают авторизацию, группы, корзину и sessid без встраивания персонального состояния в статический Композит. |
| Аналитика | Фиксирует показы, открытия, этапы просмотра, CTA, корзину и формы; строит KPI, воронку, динамику и A/B-статистику. |
| Агент очистки | Раз в сутки удаляет сырые события старше заданного срока хранения. |
Создайте тестовый неактивный виджет, настройте страницы и аудиторию, проверьте его на копии или тестовом сайте, затем включите аналитику/Метрику и только после приёмки активируйте production-показ. Для eCommerce, форм, Композита и Сайты24 обязательно выполните интеграционный тест на реальной установке.
2. Возможности версии 1.1.1
- Пять форматов: Bubble, Popup, Inline, Stories и Carousel; одновременно на странице может работать несколько независимых экземпляров.
- Локальные MP4/WebM/MOV/M4V, прямые MP4/WebM URL, HLS, YouTube, Rutube и VK Видео; отдельные preview, poster и mobile-видео.
- URL include/exclude, wildcard-маски, ограниченные регулярные выражения, расписание, delay, scroll, exit intent, inactivity, pageviews и повторный визит.
- Frequency cap: каждый раз, раз за сессию, раз в сутки, раз в N дней или никогда после закрытия.
- Сегментация по авторизации, группам, устройству, новому/вернувшемуся посетителю, referrer, UTM и состоянию корзины.
- CTA: URL, телефон, WhatsApp, Telegram, CSS-форма/элемент, штатная веб-форма Bitrix, корзина, «Купить сейчас», anchor и JS CustomEvent.
- eCommerce: товар и количество для виджета или отдельной карточки Stories/Carousel; серверное добавление в корзину и безопасный переход к оформлению заказа.
- Встроенная статистика, Яндекс.Метрика, DataLayer/GTM, DOM-события и публичный JavaScript API.
- Стабильное A/B-распределение с весами, периодом теста, основной метрикой и 95% Wilson confidence interval.
- Полная многосайтовость, поддержка Композита и Сайты24 с отдельным Inline-блоком.
- Импорт видео из старого bussol.vwidget, сохранение данных при удалении, автоматическое обновление схемы.
- Security hardening 1.1.1: CSRF/sessid, SSRF-защита webhook, HMAC-подпись, allowlist URL/upload, ReDoS limits и серверная валидация trusted-событий.
| Формат | Основной сценарий |
|---|---|
| Bubble | Плавающий preview, который раскрывается в увеличенное видео. |
| Popup | Видеосообщение поверх страницы по выбранному триггеру. |
| Inline | Видео в конкретном месте шаблона/страницы или как блок Сайты24. |
| Stories | Набор последовательных вертикальных карточек с индивидуальным CTA/товаром. |
| Carousel | Горизонтальная подборка видеокарточек с индивидуальным CTA/товаром. |
3. Системные требования
| Компонент | Требование |
|---|---|
| 1С-Битрикс | main 26.0.0 или новее. Поддерживается любая редакция, если выполнено требование по версии ядра. |
| PHP | PHP 8.2 или новее. Установщик блокирует более старые версии. |
| Обязательные модули | Только main. |
| Опциональные модули | sale + catalog — корзина/eCommerce; form — веб-формы; landing — Сайты24; iblock — импорт из старого bussol.vwidget. |
| База данных | MySQL/MariaDB в поддерживаемой установке Битрикс; install SQL поставляется в db/mysql. |
| Браузеры | Современные Chrome/Edge/Firefox/Safari. Автовоспроизведение подчиняется политикам браузера; обычно preview должен быть muted. |
| Сеть | Исходящий HTTPS нужен только для настроенных webhook и внешних видео/HLS; YouTube/Rutube/VK требуют доступ к соответствующим платформам. |
| Композит | Поддерживается; персональный runtime-context передаётся через no-store endpoints. |
| Сайты24 | Опционально, при установленном landing и выполнении публичной страницы тем же PHP-ядром Bitrix. |
Сделайте резервную копию файлов и базы данных. На production сначала проверьте обновление на копии сайта, особенно если используются sale/catalog/form/landing, Композит, многосайтовость или внешние CSP-ограничения.
4. Установка, обновление и удаление
Чистая установка
- Скопируйте каталог bussol.vwidget2 в /bitrix/modules/ либо установите решение штатным механизмом Marketplace.
- Откройте «Marketplace → Установленные решения» и установите «Bussol: Видеовиджеты PRO — Bubble, Stories, Carousel, A/B и аналитика».
- Установщик создаст таблицы модуля, зарегистрирует обработчики AutoRenderer и меню, агент очистки аналитики, компонент, tools-endpoints, тему и при наличии landing — Inline-блок Сайты24.
- Откройте «Bussol → Bussol: Видеовиджеты PRO → Настройки», проверьте авто-рендер, статистику, Метрику, срок хранения, webhooks, URL заказа и HLS.
- Перейдите в «Виджеты», создайте неактивный тестовый виджет и проверьте его на целевой странице.
Обновление 1.0.0 / 1.1.0 → 1.1.1
- Сделайте резервную копию каталога модуля и базы данных.
- Используйте штатный механизм обновлений Marketplace или замените файлы модуля без удаления таблиц.
- SchemaService автоматически проверяет схему и добавляет недостающие поля/индексы без удаления существующих виджетов и статистики.
- После обновления проверьте кеш, Композит, один плавающий формат, Inline, аналитику и используемые интеграции.
- Версия 1.1.1 повторно валидирует сохранённые URL/CTA/regex при рендере, поэтому старые небезопасные значения не должны попадать в публичный HTML.
Не удаляйте таблицы модуля при обычном обновлении. Если используется контролируемая переустановка, выбирайте сохранение данных. Любая пересборка релизного архива требует нового security-journal.json.
Удаление
Деинсталлятор удаляет обработчики, агент, компонент, tools-endpoints, тему, административные прокси и блок Сайты24. В диалоге удаления можно сохранить таблицы и накопленные данные. Общая иконка раздела Bussol намеренно сохраняется, поскольку её могут использовать другие модули Bussol.
Миграция из bussol.vwidget
- Установите v2 параллельно со старым модулем.
- Откройте «Импорт из v1» и выберите сайты.
- Импорт переносит название и видео из инфоблока bussol_videowidgets и создаёт новые виджеты неактивными.
- Вручную проверьте позиции, URL-условия и CTA: в v1 эти параметры не хранились в инфоблоке.
- После теста деактивируйте старые вставки v1 и активируйте v2.
5. Права, настройки и навигация
Права групп
| Право | Возможности |
|---|---|
| D | Доступ запрещён. |
| R | Просмотр списка виджетов и страницы статистики. |
| W | Полный доступ к созданию/редактированию, групповым действиям, импорту из v1 и настройкам модуля. |
Путь к интерфейсу: «Bussol → Bussol: Видеовиджеты PRO». Внутри доступны «Виджеты», «Статистика», «Импорт из v1» и «Настройки». Несколько модулей Bussol используют общий корневой раздел global_menu_bussol.
Глобальные настройки модуля
| Параметр | По умолчанию | Назначение |
|---|---|---|
| Автоматически подключать плавающие виджеты | Включено | AutoRenderer добавляет подходящие Bubble/Popup/Stories/Carousel в публичный HTML. |
| Встроенная статистика | Включено | Разрешает запись событий в таблицу аналитики. |
| ID счётчика Яндекс.Метрики | пусто | Счётчик по умолчанию, если не задан в самом виджете. |
| Префикс целей Яндекс.Метрики | bussol_vwidget2 | Префикс для goal-событий. |
| Хранить сырые события, дней | 180 | От 1 до 3650 дней; очистка выполняется агентом раз в сутки. |
| Разрешить исходящие webhooks | Включено | Глобальный предохранитель для отправки webhook. |
| URL оформления заказа | /personal/order/make/ | Только локальный путь для CTA «Купить сейчас». |
| URL hls.js | пусто | Необязательный HTTPS URL официальной сборки с cdn.jsdelivr.net или unpkg.com. |
Страница настроек показывает фактическую версию PHP/main и наличие sale, catalog, form и landing. Отсутствие опциональных модулей не мешает базовой работе платформы.
6. Создание и параметры видеовиджета
Редактор разделён на семь вкладок: «Основное», «Дизайн», «Показ», «Сегментация», «CTA / eCommerce», «A/B и аналитика», «Stories / Carousel». Это позволяет отделить контент и внешний вид от маркетинговой логики.
| Вкладка | Что настраивается |
|---|---|
| Основное | Активность, название, сайты, Сайты24, сортировка, формат, источники desktop/mobile, локальные файлы, URL, preview, poster, autoplay/muted/loop. |
| Дизайн | Позиции desktop/mobile, размеры preview/expanded/mobile, отступы, mobile on/off, radius, рамка, progress, shadow, z-index, CSS-класс. |
| Показ | URL include/exclude/regex, trigger и frequency cap. |
| Сегментация | Даты/дни/время, авторизация, группы, устройство, тип посетителя, referrer, корзина и UTM. |
| CTA / eCommerce | Кнопка, действие, значение, товар/количество, новая вкладка, момент появления, цвета, Bitrix Web Form. |
| A/B и аналитика | A/B группа/вес/период/метрика, Метрика, DataLayer и webhook. |
| Stories / Carousel | Список карточек со своими источниками, preview/poster, CTA, товаром и количеством. |
Базовые значения нового виджета
| Параметр | Значение по умолчанию |
|---|---|
| Формат | Bubble |
| Preview desktop | 140 × 248 px |
| Expanded | 320 × 568 px |
| Mobile | 110 × 196 px |
| Отступ desktop | 24 / 24 px |
| Отступ mobile | 12 / 12 px |
| Скругление | 16 px |
| Позиция | Справа снизу |
| Autoplay / muted / loop | Да / Да / Да |
| z-index | 999999 |
| A/B вес | 50 |
| Количество товара | 1 |
Для первого запуска оставьте виджет неактивным, настройте страницу через include-mask, проверьте mobile, CTA и статистику; затем активируйте. Для нескольких виджетов на одной странице используйте сортировку и разные условия показа.
7. Форматы и медиаисточники
Источники видео
| Источник | Настройка | Особенности |
|---|---|---|
| Локальный файл | Upload | Видео: mp4/webm/mov/m4v, до 500 МБ; содержимое проверяется по MIME. |
| Прямая ссылка | MP4/WebM URL | HTTP/HTTPS или безопасный относительный путь для direct; основной источник подключается лениво. |
| HLS | URL .m3u8 | Native HLS используется где доступен; для остальных браузеров можно подключить доверенный hls.js. |
| YouTube | URL ролика | Рендер через iframe/embed. |
| Rutube | URL ролика | Рендер через iframe/embed. |
| VK Видео | URL ролика | Рендер через iframe/embed. |
Для desktop и mobile можно выбирать независимые источники. Локальное mobile-видео может отличаться от desktop. Preview-видео и poster используются для первого контакта и помогают уменьшить ненужную загрузку основного источника.
Поведение проигрывания
- Autoplay, muted и loop задаются на уровне виджета.
- Bubble использует preview до раскрытия; после открытия переключается на основной источник.
- Для локального/direct/HLS-видео рассчитываются video_start, 25%, 50%, 75% и video_complete.
- Для YouTube/Rutube/VK в 1.1.1 доступны show/open/CTA, но квартильные события 25/50/75/100 не вычисляются без отдельного API провайдера.
Poster: jpg/jpeg/png/gif/webp до 20 МБ. Видео: mp4/webm/mov/m4v до 500 МБ. Проверяются расширение, фактический размер и MIME/изображение.
8. Правила показа, триггеры и частота
URL-правила
| Поле | Поведение |
|---|---|
| Показывать только на URL | По одному правилу на строку; поддерживаются точные пути и wildcard * (например /catalog/*). |
| Исключить URL | Исключение имеет приоритет для подходящих страниц. |
| Регулярные выражения | Отдельные regex; до 20 выражений, до 512 символов каждое; используются PCRE limits для снижения риска ReDoS. |
Триггеры
| Триггер | Значение |
|---|---|
| Сразу | Значение не используется. |
| Через N секунд | Число секунд. |
| После прокрутки N% | Процент страницы. |
| Exit intent | Попытка ухода курсора на desktop. |
| После N секунд бездействия | Период отсутствия активности. |
| После N просмотренных страниц | Счётчик страниц в текущей сессии. |
| Только при повторном визите | Показ посетителю, который уже был на сайте. |
Frequency cap
| Режим | Смысл |
|---|---|
| Каждый раз | Без ограничения. |
| Раз за сессию | Не повторять в текущей сессии. |
| Раз в сутки | Не чаще одного раза в день. |
| Раз в N дней | Период задаётся отдельно. |
| Не показывать после закрытия | После явного закрытия больше не показывать этому браузеру. |
Frequency и стабильное A/B-распределение используют клиентское хранилище браузера. При очистке storage поведение для такого посетителя начнётся заново.
9. Расписание и сегментация аудитории
Расписание
Можно задать дату начала и окончания, разрешённые дни недели и временной интервал. Условия применяются совместно с URL, сайтом, landing-режимом, trigger, frequency и сегментами.
Сегменты
| Сегмент | Варианты / пример |
|---|---|
| Авторизация | Все / только авторизованные / только гости. |
| Группы пользователей | Мультивыбор групп 1С-Битрикс; пусто — без ограничения. |
| Устройство | Все / desktop / mobile-tablet. |
| Посетитель | Все / новый / вернувшийся. |
| Referrer | Wildcard-маски, например https://yandex.ru/* . |
| Корзина | Не учитывать / пуста / непуста / сумма не меньше / содержит товар / не содержит товар. |
| UTM | utm_source, utm_medium, utm_campaign; допускаются несколько значений и wildcard-маски. |
Авторизация, группы и корзина не помещаются в кешируемый HTML: клиент получает их через отдельный no-store endpoint. Если требуемый динамический контекст недоступен, виджет с таким условием не должен показываться.
Если sale недоступен, базовые форматы продолжают работать. Виджет с корзинной сегментацией безопасно не проходит соответствующее условие, а eCommerce CTA завершается cart_error без фатальной ошибки.
10. CTA, eCommerce, формы и webhooks
CTA-действия
| Действие | Значение / поведение |
|---|---|
| URL | HTTP/HTTPS или безопасный локальный путь; можно открыть в новой вкладке. |
| Телефон | Номер телефона. |
| Номер или разрешённая ссылка wa.me / api.whatsapp.com / web.whatsapp.com. | |
| Telegram | Имя пользователя или ссылка t.me / telegram.me. |
| CSS-форма / элемент | Безопасный CSS-селектор: показать элемент, прокрутить к нему и отправить DOM-событие формы. |
| Веб-форма 1С-Битрикс | ID формы; форма открывается в same-origin iframe/modal. |
| Добавить в корзину | Товар и количество берутся из серверной конфигурации виджета/карточки. |
| Купить сейчас | Сначала серверно добавить товар, затем перейти на настроенный локальный ORDER_URL. |
| Anchor | Прокрутить к элементу по безопасному селектору. |
| JS CustomEvent | Имя события вида A-Z/a-z/0-9/_.:-, до 100 символов. |
CTA можно показывать сразу, через N секунд, после N% локального видео либо после окончания. Для Stories/Carousel у каждой карточки может быть собственный label/action/value и собственный товар.
Webhook
Для каждого виджета можно задать публичный HTTPS endpoint и список событий. Разрешённые события: show, open, video_start, video_25, video_50, video_75, video_complete, cta_click, close, cart_add, cart_error, form_open, form_submit. Запрос отправляется JSON POST без редиректов; private/loopback адреса запрещены. Тело до 256 КБ подписывается заголовком X-Bussol-Signature: sha256=<HMAC>.
cart_add и form_submit записываются/отправляются только после подтверждённой серверной операции. Клиентский tracking endpoint не может самостоятельно подделать эти события.
11. Stories и Carousel
В форматах Stories и Carousel редактор содержит таблицу карточек. Карточки сортируются числовым полем SORT и могут использовать разные источники, CTA и товары в рамках одного виджета.
| Поле карточки | Назначение |
|---|---|
| Сортировка | Определяет порядок карточек. |
| Название | Подпись/идентификатор карточки. |
| Источник | local, direct, HLS, YouTube, Rutube или VK. |
| Видео/URL | Локальный upload либо внешний URL. |
| Preview | Отдельный preview-файл. |
| Poster | Изображение-обложка. |
| CTA | Собственный label/action. |
| Значение CTA | URL, ID формы, selector, event и т. п. |
| Товар / количество | Собственный PRODUCT_ID и quantity для add_to_basket / buy_now. |
Если собственный CTA карточки отсутствует, клиент может использовать параметры CTA основного виджета. В viewer фиксируется открытие конкретного item_id, что позволяет анализировать взаимодействие с элементами подборки.
Для товарных Stories используйте отдельный товар на каждой карточке, а общему виджету задайте сегментацию, расписание и UTM-условия. Это позволяет запускать видеоподборки под конкретную рекламную кампанию.
12. Аналитика, Яндекс.Метрика и A/B
События
| Событие | Что означает |
|---|---|
| show | Виджет показан. |
| open | Bubble/Stories/Carousel открыт или карточка открыта. |
| video_start | Начато проигрывание локального/direct/HLS источника либо загружен embed. |
| video_25 / 50 / 75 | Достигнута соответствующая доля локального/direct/HLS видео. |
| video_complete | Досмотр локального/direct/HLS видео. |
| cta_click | Пользователь активировал CTA. |
| cart_add / cart_error | Серверно подтверждённое добавление в корзину / ошибка корзины. |
| form_open / form_submit | Открытие формы / подтверждённая успешная отправка. |
| close | Виджет закрыт. |
Страница статистики
- Периоды 7 / 30 / 90 / 180 / 365 дней; фильтры по виджету, устройству и UTM source/medium/campaign.
- KPI: показы, CTA, досмотры, добавления в корзину, формы и проценты от показов.
- Воронка: показ → открытие → 50% видео → досмотр → CTA.
- Таблица событий по каждому виджету с общими и уникальными значениями, CTR и долей досмотра.
- Динамика по дням: показы, открытия, досмотры, CTA, корзина и формы.
A/B-тесты
Виджеты с одинаковой A/B-группой участвуют в стабильном распределении браузера; вес варианта задаётся от 1 до 100. Можно ограничить период теста и выбрать основную метрику: cta_click, cart_add, form_submit, video_complete или open. В статистике конверсия считается по уникальным посетителям и выводится 95% Wilson confidence interval. Модуль не объявляет автоматического «победителя».
Яндекс.Метрика и DataLayer
Метрика использует ID счётчика/префикс виджета либо глобальные значения. DataLayer отправляет события вида bussol_vwidget2_* с widgetId, itemId, productId, A/B-группой, форматом, устройством и UTM.
URL аналитики сохраняются без query-string и fragment; visitor/session идентификаторы хешируются на сервере; IP-адрес модуль не сохраняет. Срок хранения сырых событий регулируется глобальной настройкой.
13. Многосайтовость, Композит и Сайты24
Многосайтовость
- Один виджет может быть привязан сразу к нескольким SITE_ID.
- Связи хранятся в отдельной таблице b_bussol_vwidget2_widget_site; SITE_ID остаётся совместимым основным сайтом.
- Копирование виджета переносит site/landing bindings.
- Список виджетов показывает назначенные сайты и позволяет фильтровать по SITE_ID.
Композит
- Компонент работает в frame mode.
- AutoRenderer не вставляет виджеты в обычные AJAX и composite AJAX-ответы.
- После изменения конфигурации очищаются обычный кеш и Static HTML cache.
- Авторизация, группы, корзина и sessid запрашиваются динамически через no-store endpoint, а не сохраняются в общем HTML-кеше.
Сайты24
| Режим | Поведение |
|---|---|
| Все обычные страницы и Сайты24 | Без ограничения по конкретному landing-сайту. |
| Только выбранные Сайты24 | Показ только на отмеченных landing-site ID. |
| Все, кроме выбранных Сайты24 | Исключить выбранные лендинги. |
| Только обычные страницы | Не показывать на Сайты24. |
Модуль устанавливает отдельный Inline-блок «Bussol: Видеовиджеты PRO … — Inline». В визуальном редакторе Inline-блок может игнорировать публичные URL-правила для удобства настройки, а плавающие форматы не перекрывают интерфейс редактора. На опубликованной странице правила применяются штатно.
Автоматическая интеграция рассчитана на локальную/коробочную страницу, которая исполняется тем же PHP-ядром Битрикс и видит установленный модуль. Внешне размещённая статическая страница без этого ядра не может автоматически выполнить модуль.
14. Расширение разработчиком
Компонент
<?php
$APPLICATION->IncludeComponent(
'bussol:video.widget2',
'',
[
'AUTO' => 'N',
'WIDGET_ID' => 12,
'SITE_ID' => SITE_ID,
'CACHE_TYPE' => 'N',
]
);
?>| Параметр | Смысл |
|---|---|
| AUTO | Y — автоматический режим для всех подходящих плавающих виджетов. |
| INLINE_ONLY | Y — выводить только Inline. |
| WIDGET_ID | ID конкретного виджета; 0 — все подходящие. |
| SITE_ID | SITE_ID; пусто — текущий SITE_ID. |
| LANDING_SITE_ID | ID сайта Сайты24; 0 — определить автоматически. |
| IGNORE_PAGE_RULES | Служебный режим редактора Сайты24. |
| CACHE_TIME | По умолчанию 3600. |
JavaScript API
BussolVWidget2.show(12);
BussolVWidget2.hide(12);
BussolVWidget2.open(12);
BussolVWidget2.play(12);
BussolVWidget2.pause(12);
const widget = BussolVWidget2.get(12);
const all = BussolVWidget2.all();DOM-события
document.addEventListener('bussol:vwidget2:event', (e) => {
console.log(e.detail.event, e.detail.widgetId, e.detail.itemId);
});
document.addEventListener('myLeadEvent', (e) => {
console.log(e.detail.widgetId, e.detail.itemId);
});Каждое событие движка публикуется как bussol:vwidget2:event. CTA типа JS CustomEvent публикует событие с заданным именем. eCommerce также использует bussol:vwidget2:cart и bussol:vwidget2:cart-error.
DataLayer
// Пример структуры события
{
event: 'bussol_vwidget2_cta_click',
bussol_vwidget2: {
widgetId: 12,
itemId: 0,
productId: 123,
abGroup: 'hero-test',
format: 'bubble',
device: 'desktop',
utmSource: 'yandex',
utmMedium: 'cpc',
utmCampaign: 'summer'
}
}15. Хранение данных и структура модуля
| Таблица | Назначение |
|---|---|
| b_bussol_vwidget2_widget | 83 поля конфигурации виджета, включая формат, дизайн, правила, сегменты, CTA, eCommerce, A/B и интеграции. |
| b_bussol_vwidget2_widget_site | Связи виджетов с SITE_ID. |
| b_bussol_vwidget2_widget_landing | Связи виджетов с конкретными сайтами Сайты24. |
| b_bussol_vwidget2_item | Карточки Stories/Carousel. |
| b_bussol_vwidget2_event | Сырые аналитические события. |
| Каталог / файл | Назначение |
|---|---|
| /bitrix/components/bussol/video.widget2/ | Публичный компонент и шаблон. |
| /bitrix/tools/bussol_vwidget2_*.php | Tracking, context, cart и form endpoints. |
| /bitrix/blocks/bussol/bussol-vwidget2-inline/ | Inline-блок Сайты24. |
| /bitrix/themes/.default/bussol.vwidget2.css | Стили административной иконки/меню. |
| /upload/bussol_vwidget2/ | Файлы, сохранённые через CFile::SaveFile. |
Сырые события очищаются агентом CleanupService::run() один раз в сутки. Период хранения задаётся глобально от 1 до 3650 дней; значение по умолчанию — 180.
При деинсталляции с сохранением данных таблицы остаются. Без сохранения выполняется uninstall.sql. Перед необратимым удалением сделайте резервную копию.
16. Безопасность
Версия 1.1.1 прошла pre-submission hardening перед публикацией в Bitrix Marketplace. Финальный security-journal.json привязан к релизному архиву по SHA-256.
| Контроль | Реализация |
|---|---|
| CSRF / sessid | State-changing endpoints, массовые административные действия и удаление модуля требуют Bitrix sessid. |
| Same-origin | Публичные POST-запросы дополнительно проверяют origin там, где это применимо. |
| Webhook / SSRF | Только публичный HTTPS, private/loopback/link-local запрещены, redirect=false, лимиты времени/тела, HMAC SHA-256 подпись. |
| CTA / URL | Опасные схемы javascript:/data: и credentials в URL не допускаются; buy-now redirect только локальный. |
| HLS loader | hls.js разрешён только с HTTPS cdn.jsdelivr.net или unpkg.com и официальных путей пакета. |
| Uploads | Видео: mp4/webm/mov/m4v ≤ 500 МБ; изображения jpg/jpeg/png/gif/webp ≤ 20 МБ; проверяются is_uploaded_file, размер, расширение и MIME/содержимое. |
| Regex / ReDoS | До 20 regex, до 512 символов; применяются PCRE match/depth limits. |
| Trusted events | cart_add/form_submit создаются только после успешной серверной операции; клиентская телеметрия не может их подделать. |
| Ошибки | Storefront endpoints не возвращают пользователю внутренние exception-сообщения. |
| Сохранённые данные | При рендере выполняется повторная серверная валидация ранее сохранённых значений. |
Версия 1.1.1; SHA-256 релизного ZIP: cdeab5062813d6360d0179d196bf21828ca26bbed4d313481584c0301b7052d2. Журнал должен формироваться после последнего изменения кода и относиться именно к отправляемому архиву.
17. Ограничения и совместимость
- Поддерживается PHP 8.2+ и main 26.0.0+; обязательный модуль только main. Возможности sale/catalog/form/landing отключаются или gracefully fall back при отсутствии соответствующего модуля.
- Для YouTube/Rutube/VK квартильные события 25/50/75/100 в 1.1.1 не вычисляются без API соответствующего видеопровайдера.
- HLS зависит от поддержки браузера либо от корректно настроенной доверенной сборки hls.js; CSP сайта должна разрешать нужные источники.
- Autoplay со звуком ограничивается политиками браузера; для надёжного preview рекомендуется muted.
- Корзинные действия требуют sale + catalog и должны быть проверены на реальных товарах/SKU используемой редакции.
- Веб-форма требует модуль form и доступ текущего пользователя к форме.
- Сайты24 требуют модуль landing и публичное исполнение страницы тем же ядром Bitrix.
- Архитектурная совместимость с любой редакцией реализована через отсутствие обязательных зависимостей, кроме main, но перед Marketplace требуется интеграционный прогон на конкретных редакциях/лицензиях.
- Статистика использует серверное время и MySQL DATE_SUB/NOW(); убедитесь, что timezone сайта/БД настроены ожидаемо.
Проверьте минимум базовую редакцию без sale/catalog/form/landing и редакцию с интернет-магазином; отдельно протестируйте Композит, несколько SITE_ID, Сайты24, mobile browsers, внешние video providers, Яндекс.Метрику, DataLayer и webhook.
18. Диагностика и чек-лист приёмки
Диагностика
| Симптом | Что проверить |
|---|---|
| Виджет не появляется | ACTIVE, SITE_ID bindings, LANDING_MODE, URL include/exclude/regex, даты/время, trigger, frequency, сегменты и A/B-период. |
| На Композите неверная аудитория | Доступность bussol_vwidget2_context.php, Cache-Control: no-store, отсутствие блокировки same-origin/CSP. |
| Не добавляется товар | Наличие sale/catalog, корректный PRODUCT_ID/SKU, sessid, права/наличие товара и ответ bussol_vwidget2_cart.php. |
| Не открывается Web Form | Наличие form, правильный ID, привязка к активному виджету и доступ текущего пользователя. |
| Не воспроизводится внешнее видео | Тип источника, URL, CSP, iframe permissions, сеть; для HLS — native HLS или HLS_JS_URL. |
| Нет аналитики | TRACKING_ENABLED, endpoint track, sessid/origin, срок хранения, фильтр периода и отсутствие блокировки JS. |
| Не приходят webhooks | WEBHOOKS_ENABLED, публичный HTTPS URL, отсутствие private IP/redirect, 2xx ответ endpoint и проверка X-Bussol-Signature. |
| Сайты24 не видит блок | Наличие landing, установленный блок, очищенный repository cache, правильный landing site binding. |
Чек-лист приёмки
- Установка на PHP 8.2+ / Bitrix main 26+ проходит без ошибок.
- Базовая редакция без sale/catalog/form/landing показывает Bubble/Popup/Inline/Stories/Carousel без fatal error.
- Редакция интернет-магазина успешно добавляет простой товар и SKU в корзину и выполняет «Купить сейчас».
- Web Form открывается и form_submit фиксируется только после успешной отправки.
- Проверены SITE_ID s1/s2, landing bindings, редактор/preview/публикация Сайты24.
- Композит включён: статический HTML не переносит авторизацию/корзину между пользователями.
- Проверены URL-маски, regex, schedule, все используемые triggers и frequency cap.
- Проверены desktop/mobile размеры, Safari/iOS и Chrome/Android autoplay policies.
- Проверены локальные видео, HLS и реально используемые YouTube/Rutube/VK URL при CSP проекта.
- Яндекс.Метрика, DataLayer/GTM и webhook получают ожидаемые события.
- A/B-варианты распределяются стабильно; в статистике отображаются уникальные показы, конверсии и 95% ДИ.
- Агент очистки зарегистрирован, retention соответствует политике проекта.
- Перед релизом сформирован security-journal.json после последнего изменения кода; SHA-256 журнала совпадает с отправляемым ZIP.
После прохождения чек-листа сохраните резервную копию, зафиксируйте версию и SHA-256, приложите security-journal.json и только затем отправляйте текущую сборку на модерацию Marketplace.