#Загрузчик loader.js
Статус: Доступно.
Назначение: один тег <script> подключает к сайту счётчик посещений, сбор поведения и чат Формула ИИ и управляет ими через согласие посетителя.
#Содержание
- Когда использовать
- Доступ
- Что входит в загрузчик
- Установка вручную
- Согласие посетителя
- Интеграция с баннером cookie
- Как проверить установку
- Ответ сервера и кэширование
- Заметки
- Открытые вопросы
#Когда использовать
- Сайт привязан к Формула ИИ (модулем или кодом привязки), и нужны чат, счётчик и сбор поведения без серверной части.
- Модуль для вашей CMS (Bitrix, WordPress) ставит загрузчик сам — вручную тег добавлять не нужно.
Если нужен только счётчик посещений без привязки сайта, используйте JS-трекер по токену.
#Доступ
| Аутентификация | публичный ключ сайта в параметре k (это не секрет) |
| Платно | нет |
| Персональные данные | хеши IP и User-Agent, страница, источник (см. Обзор) |
| Откуда ключ | выдаётся при привязке сайта (ответ bind, поле public_key); равен токену трекера этого сайта |
#Что входит в загрузчик
Загрузчик собирается на облаке по настройкам сайта и подключает только включённые части.
| Часть | Настройка сайта | Что делает |
|---|---|---|
| Трекер | tracker | одно посещение на загрузку страницы (тот же механизм, что в JS-трекере) |
| Поведение | behaviour | скрипт сбора поведения посетителя; запускается только с согласием |
| Чат | chat и chat_channel_id | пузырь чата; включается, только если заданы оба значения |
Настройки сайта целиком:
| Поле | Тип | Значения | Смысл |
|---|---|---|---|
tracker | boolean | true/false | счётчик посещений; выключатель действует и на серверный маячок модуля |
behaviour | boolean | true/false | сбор поведения |
chat | boolean | true/false | чат на сайте |
chat_channel_id | string | идентификатор канала | какой канал отвечает на сайте |
consent_mode | string | wait | immediate | когда запускать части загрузчика |
server_beacon | string | full | anonymous | off | режим серверного маячка модуля |
Настройки меняет персонал в кабинете: «Продвижение → Система → Сайты (модуль)».
#Установка вручную
Публичный ключ показывает ответ bind (протокол коннектора); в интерфейсе кабинета он сейчас не выводится (см. открытые вопросы).
Шаг 1. Перед основным тегом добавьте заглушку очереди согласия. Она нужна, чтобы вызов consent до загрузки скрипта не потерялся.
<script>
window.sapport = window.sapport || {
q: [],
consent: function (v) { this.q.push(['consent', !!v]); }
};
</script>
Шаг 2. Добавьте загрузчик ячейки вашего сайта (пример для RU; EN — https://wfacademy.org, ID — https://wfacademy.id):
<script async src="https://formula-cream.pro/api/v1/connector/loader.js?k=0123456789abcdef0123456789abcdef"></script>
Параметры запроса:
| Параметр | Тип | Обязателен | Ограничения | Пример |
|---|---|---|---|---|
k | string | да | 32 hex-символа, публичный ключ сайта | 0123456789abcdef0123456789abcdef |
Шаг 3. Разместите тег на всех страницах, которые нужно учитывать (обычно — в общем шаблоне, в <head> перед </head>).
#Согласие посетителя
Режим задаётся настройкой consent_mode.
| Режим | Поведение |
|---|---|
immediate | части загрузчика стартуют сразу после загрузки |
wait | части ждут вызова window.sapport.consent(true) или события sapport:consent |
#API на странице
// согласие дано
window.sapport.consent(true);
// согласие отозвано: остановит сбор поведения
window.sapport.consent(false);
// то же событием
window.dispatchEvent(new CustomEvent('sapport:consent', { detail: true }));
// допустима и форма { granted: true }
window.dispatchEvent(new CustomEvent('sapport:consent', { detail: { granted: true } }));
| Элемент | Описание |
|---|---|
window.sapport.q | очередь вызовов до загрузки скрипта; загрузчик разбирает её по порядку |
window.sapport.consent(bool) | выдать или отозвать согласие |
событие sapport:consent | detail === true либо detail.granted === true — согласие дано |
#Что именно зависит от согласия
| Часть | Без согласия (режим wait) | После consent(false) |
|---|---|---|
| Счётчик посещений | стартует по правилам режима | уже отправленный хит вернуть нельзя |
| Сбор поведения | не запускается | останавливается |
| Чат | пузырь загружается сразу, независимо от согласия | — |
| Данные чата | виджет не записывает первое касание (first-touch) и не передаёт во фрейм query-строку, заголовок и реферер | — |
#Интеграция с баннером cookie
Подключите вызов к кнопкам вашего баннера согласия:
document.querySelector('#cookie-accept').addEventListener('click', function () {
window.sapport.consent(true);
});
document.querySelector('#cookie-reject').addEventListener('click', function () {
window.sapport.consent(false);
});
// сохранённый выбор при следующем визите
if (localStorage.getItem('cookie-consent') === 'granted') {
window.sapport.consent(true);
}
Если баннер даёт выбор по категориям, привязывайте consent(true) к категории «аналитика» (статистика), а не к «маркетингу».
#Как проверить установку
- Откройте страницу сайта с инструментами разработчика → вкладка «Сеть». Должен быть запрос
loader.js?k=…со статусом200. - Убедитесь, что ответ — не заглушка: тело не равно
/* Sapport connector: off */. - В консоли выполните
typeof window.sapport.consent— ожидаетсяfunction. - Проверьте запрос посещения: после загрузки страницы уходит
POST /api/v1/track/visit, ответ204. - В кабинете «Продвижение → Система → Сайты (модуль)» у сайта должно быть состояние «привязан», включены «Счётчик посещений» и нужные части.
- Если на странице подключены и модуль, и ручной тег, посещения удвоятся — оставьте один.
#Ответ сервера и кэширование
| Метод и адрес | GET /api/v1/connector/loader.js?k=<ключ> |
| Успех | 200, application/javascript |
| Выключен или неизвестный ключ | 200 с заглушкой /* Sapport connector: off */ |
Cache-Control | public, max-age=300 |
| Заголовки | Access-Control-Allow-Origin: *, Cross-Origin-Resource-Policy: cross-origin, X-Content-Type-Options: nosniff, HSTS |
Выключив сайт или часть в кабинете, учтите кэш: загрузчик опустеет на страницах в пределах 5 минут.
#Заметки
- Повторное подключение безопасно: загрузчик защищён от двойного запуска (метка
__sapportConnector). - Для политики
Content-Security-Policyразрешите скрипты и соединения с доменом вашей ячейки. - Загрузчик не поддерживает SPA-переходы счётчика: учитывается загрузка страницы, не смена адреса через History API (сбор поведения следит за
history.pushState).
#Открытые вопросы
- К владельцу. Где взять публичный ключ без модуля. Поле
public_keyесть в ответе привязки, но интерфейс кабинета его не показывает и готовый тег не выдаёт. Ручная установка поэтому поддерживается как сценарий протокола, а не как кнопка в кабинете. Нужно решение: показывать ключ и готовый тег в карточке сайта. - Техническое. Тот же ключ служит токеном трекера: стоит ли предупредить, что он публичен и допускает запись хитов с чужих страниц (защита — лимиты и квота, см. JS-трекер).