Формула ИИ для разработчиков Справочник API Каталог ошибок OpenAPI
Разделы

#JS и PHP трекер по токену

Статус: Доступно.

Назначение: минимальный способ учитывать посещения на любом сайте без модуля: один тег <script> либо серверная отправка из PHP. Передаются путь, источник и UTM; роботов видит только серверный вариант.

#Содержание

  1. Когда использовать
  2. Доступ
  3. JS-тег
  4. Серверный вариант (PHP)
  5. Запрос POST /api/v1/track/visit
  6. Ответы
  7. Пределы
  8. Что записывается
  9. Чего трекер не делает
  10. Проверка
  11. Открытые вопросы

#Когда использовать

НужноПуть
Счётчик посещений на произвольном сайтеJS-тег
Видеть заходы роботов и ИИ-краулеров на PHP-сайтеPHP-вариант
Чат, поведение, согласиеЗагрузчик или модуль
События, формы, SPA, мобильное приложениеAPI событий — Планируется

#Доступ

Токен32 hex-символа; в таблице токенов бывает двух видов: tracker (обычный) и connector (создан привязкой модуля)
Выдачакабинет, право seo.manage
Платнонет
Персональные данныехеши IP и User-Agent; значения не хранятся (см. Обзор)
Секретностьтокен публичен: он стоит в теге на странице. От злоупотреблений защищают пределы и суточная квота

#JS-тег

<script async src="https://formula-cream.pro/api/v1/track/js?t=0123456789abcdef0123456789abcdef"></script>

Замените домен на адрес вашей ячейки: RU https://formula-cream.pro, EN https://wfacademy.org, ID https://wfacademy.id. Токен выдаёт кабинет.

#Параметры GET /api/v1/track/js

ПараметрТипОбязателенОграниченияПример
tstringда32 hex-символа0123456789abcdef0123456789abcdef

#Ответ

УсловиеКодТело
Токен имеет неверный вид400/* bad token */
Иначе200скрипт, Cache-Control: public, max-age=3600, Access-Control-Allow-Origin: *

Наличие токена в базе при отдаче скрипта не проверяется: проверяет приёмник хитов.

#Что отправляет скрипт

Один запрос на загрузку страницы через navigator.sendBeacon (Blob text/plain), запасной путь — fetch в режиме no-cors с keepalive.

{
  "t": "0123456789abcdef0123456789abcdef",
  "kind": "js",
  "path": "/blog/emulsions",
  "host": "example.ru",
  "ref": "https://www.google.com/",
  "utm": { "source": "newsletter", "medium": "email", "campaign": "october" }
}

#Серверный вариант (PHP)

Вставляется в init.php Bitrix (или начало любого PHP-приложения). Исходник выдаёт GET /api/v1/track/php?t=<токен>.

Что делает фрагмент: после обработки запроса отправляет хит с параметрами и не задерживает страницу — неблокирующий curl_multi с подключением 150 мс и общим таймаутом 200 мс.

Хит не отправляется, если:

Отключить на время: добавьте define('SAPPORT_TRACKER_DISABLED', true); выше вставленного блока.

IP посетителя берётся из первого элемента X-Forwarded-For (если заголовок есть), иначе из REMOTE_ADDR. Если сайт доступен напрямую, заголовок может подделать посетитель: ставьте сервер за доверенным прокси.

#Запрос POST /api/v1/track/visit

Приёмник общий для JS-тега, PHP-кода и подписанного маячка модулей. Подпись для модулей описана в протоколе коннектора; для токена подпись не нужна.

Заголовки: Content-Type: application/json (допустим и text/plain, как у sendBeacon). CORS: *.

#Тело запроса

ПолеТипОбязательноОграниченияПример
tstringдатокен трекера, 32 hex0123456789abcdef0123456789abcdef
kindstringнетjs (по умолчанию) или server. server доверяется только если host входит в домены арендатора; иначе хит считается JS-хитомserver
pathstringдапуть страницы; query отбрасывается, итог ≤ 512 символов (PHP присылает до 600, с query: UTM берутся из неё)/blog/emulsions
hoststringдахост страницыexample.ru
refstringнетреферер, ≤ 600https://www.google.com/
utmobjectнетsource, medium, campaign, каждое ≤ 100 символов{"source":"newsletter"}
uastringтолько serverUser-Agent, ≤ 1000Mozilla/5.0 …
ipstringтолько serverIP посетителя203.0.113.7
countrystringнетдвухбуквенный код; для JS страна берётся из заголовка cf-ipcountryRU
statusintegerнет100–599, HTTP-код ответа страницы200

Тело — не более 8192 байт; больше — ответ 204 без записи.

curl -i -X POST 'https://formula-cream.pro/api/v1/track/visit' \
  -H 'Content-Type: application/json' \
  -d '{"t":"0123456789abcdef0123456789abcdef","kind":"js","path":"/blog/emulsions","host":"example.ru","ref":"","utm":{"source":"newsletter"}}'

#Ответы

Успешный приём и большинство отказов выглядят одинаково — 204 без тела, чтобы нельзя было подбирать токены.

КодКогда
204принято; либо тело не JSON; либо токен неверный, неизвестный или отозван; либо превышена суточная квота; либо тело больше 8192 байт
403ключ загрузчика (connector) использован для kind: server; либо сайт не привязан, счётчик выключен или нет доступа у арендатора
429превышен предел частоты по адресу или по токену
500ошибка базы данных (запись не выполнена)

Ошибки не возвращают application/problem+json: это отдельный приёмник счётчика, а не часть публичного API (см. Соглашения API для серверного API).

#Пределы

ПределЗначение
По адресу отправителя (без подписи)1 запрос в секунду, всплеск до 60
По токену10 запросов в секунду, всплеск до 100
Суточная квота токена200 000 хитов за сутки (UTC); сверх квоты 204 без записи
Размер тела8192 байт
Подписанный маячок модуля1200 запросов в минуту с адреса

Квота и пределы считаются в памяти процесса: при нескольких процессах эффективный предел мягче номинального.

Хиты хранятся 180 дней.

#Что записывается

Поле хитаОткуда
kindbot или human — по User-Agent
bot_familyсемейство бота из закрытого списка
path, hostиз запроса
referrer_hostхост реферера
ai_referrerметка ИИ-ассистента по хосту реферера
utm_source, utm_medium, utm_campaignиз utm или из query пути
ua_hash, ip_hashsha256(соль | значение), обрезанный до 32 hex
countryиз cf-ipcountry или из тела доверенного серверного хита
statusHTTP-код
sample_uaобразец User-Agent, только для ботов, до 300 символов
beaconjs или server

#Классификация

МеткаХосты реферера
chatgptchatgpt.com, chat.openai.com
perplexityperplexity.ai
geminigemini.google.com, bard.google.com
copilotcopilot.microsoft.com, bing.com/chat
youyou.com
claudeclaude.ai
aliceya.ru/alice, alice.yandex.ru, yandex.ru/alice
duckassistduckduckgo.com/aichat
mistralmistral.ai
deepseekchat.deepseek.com

Просто ya.ru — не Алиса: переход с него не помечается как ИИ.

#Чего трекер не делает

#Проверка

  1. Откройте страницу; во вкладке «Сеть» найдите запрос track/js?t=… (200) и затем track/visit.
  2. Ответ 204 не означает, что хит записан (см. таблицу ответов); проверьте счётчик в кабинете «Продвижение → Обзор».
  3. Для PHP: curl -A "Googlebot" https://ваш-сайт/ — в «ИИ-ассистенты и роботы» появится заход бота.

#Открытые вопросы

  1. Техническое. В комментариях кода приёмника сказано «ответ всегда 204» и приведены пределы «~60/мин по адресу и ~600/мин по токену»; фактические значения иные (токен-бакеты, коды 429/403/500). Страница описывает фактическое поведение; комментарии в коде стоит поправить.
  2. Техническое. Квота и пределы живут в памяти процесса — нужна ли общая (Redis) квота для публичных гарантий.
  3. Техническое. Единица «посетитель» невозможна в режиме anonymous серверного маячка: в публичном API visitors в этом режиме равно null (Чтение аналитики).