Smart Signals — це серверні сигнали збагачення, обчислені на основі відбитків браузера, IP-аналітики та поведінкового аналізу. Вони дають глибокий контекст про кожного відвідувача, не збираючи жодних персональних даних.
Smart Signals — збагачені сигнали рішення, ризику, мережі та ботів — потрапляють на ваш сервер двома шляхами: надходять до вас як webhooks (див. Webhooks) і читаються на вимогу через Data API. Вони також відображаються в дашборді. Приклади нижче обробляють форму payload'а webhook'а; ті самі поля надходять при читанні сесії з API.
Візит перетворюється на 35+ smart signals щодо мережі, браузера, пристрою та поведінки. Довідник нижче перелічує ті, до яких ви звертатиметеся найчастіше, зокрема:
| Сигнал | Опис | Відповідь | Платформа |
|---|---|---|---|
| VPN Detection | Позначає використання VPN на основі IP-аналітики | network.vpn: boolean | Web |
| Proxy Detection | Виявляє використання датацентрових і резидентних проксі | network.proxy: boolean | Web |
| Tor Detection | Звіряє IP з відомими вихідними вузлами Tor | network.tor: boolean | Web |
| Datacenter | Позначає IP відомих хмарних/хостингових провайдерів | network.datacenter: boolean | Web |
| IP Geolocation | Геолокація на рівні міста + ISP і ASN за IP-адресою | geo.{ country, city, timezone }, network.{ isp, asn } | Web |
| Сигнал | Опис | Відповідь | Доступність |
|---|---|---|---|
| Browser Tampering | Виявляє підроблений User-Agent, модифікований navigator, ін'єкцію розширень | { result: boolean, anomalyScore: number } | Web |
| Antidetect Browsers | Оцінює складання браузера, що підробляють відбиток, через CSS- і property-проби | bot.antidetectScore: number (0–100, Pro+) | Web |
| Privacy Settings | Виявляє орієнтовані на приватність конфігурації браузера (Tor Browser, Brave, Firefox ETP, Safari ITP) | { result: boolean } | Web |
| Developer Tools | Виявляє, коли відкрито браузерні DevTools | { result: boolean } | Web — Business & Enterprise |
| Incognito | Визначає приватний перегляд у Chromium, Firefox і Safari | identification.incognito: boolean | Web |
| Сигнал | Опис | Доступність |
|---|---|---|
| Emulator | Виявляє Android-емулятори (BlueStacks, Genymotion, Nox, Android SDK) через GPU renderer і UA-маркери | Web — усі тарифи |
Нативні детекції. Виявлення root, jailbreak, клонованих/подвійних застосунків та інструментування Frida залежить від сигналів, які може зібрати лише нативний мобільний SDK. TRACIO постачає браузерні SDK, тож у веб-агенті вони неефективні — покладайтеся натомість на вердикти автоматизації, headless, антидетекту, емулятора та поведінки.
| Сигнал | Опис | Відповідь | Платформа |
|---|---|---|---|
| Bot Detection | Виявляє фреймворки автоматизації та headless-браузери | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web |
| Risk Score | Агрегований ризик запиту, в об'єкті webhook'а decision | decision.riskScore: number, decision.suspectScore: number, decision.action: "real"|"fake"|"suspicious" | Web |
Прапорці VPN, proxy, Tor і datacenter визначаються серверно за IP-адресою
відвідувача з використанням комерційних баз IP-аналітики (IP2Location /
MaxMind). Публічний payload webhook'а надає комбіновані результати як булеві значення
в об'єкті network — network.vpn, network.proxy, network.tor,
network.datacenter — без розбивки за методами чи рядка впевненості. Докладніше див.
IP Intelligence.
Приватний перегляд визначається в Chromium, Firefox і Safari та надходить до вас як
identification.incognito. Браузерного API, який би про це повідомляв, не існує,
тож вердикт формується зваженим голосуванням за тим, як поводиться сховище в
приватному вікні: свій внесок дають помилки origin private file system, стійкість
сховища та платформні особливості.
Це ймовірнісний сигнал, а не факт: розглядайте його як один із кількох вхідних
сигналів, а не як підставу для дії саму по собі. Оскільки в приватному вікні не
встановлюється cookie _vid_t, візит в інкогніто розпізнається лише за сигналами,
і його identification.confidence відповідно нижча.
Детектор tampering виявляє відвідувачів, які модифікували свій браузер, щоб спотворити свою ідентичність:
navigator, порівнюючи прототипи гетерівPluginArray.prototype та MimeType.prototypeFunction.prototype.toString, Object.getOwnPropertyDescriptor та інші критичні функції не замінено на ProxyanomalyScore (0.0-1.0) кількісно оцінює ступінь неузгодженості. Значення понад 0.5 вказують на суттєву підробку.
Об'єкт webhook'а decision несе агрегований ризик запиту:
decision.riskScore (ціле 0-100), decision.suspectScore (число) та
decision.action (рекомендована дія). Score агрегує виходи smart-сигналів;
діапазони нижче описують, як riskScore відображається на рівні ризику:
| Діапазон Score | Рівень ризику | Типові індикатори |
|---|---|---|
| 0-10 | Normal | Чисті сигнали, відомий відвідувач, резидентний IP |
| 11-30 | Low | Незначні неузгодженості, датацентровий IP або перший візит |
| 31-60 | Medium | Виявлено VPN, підробку браузера або незвичну швидкість |
| 61-80 | High | Кілька сигналів ризику, proxy + підробка, висока активність |
| 81-100 | Critical | Виявлено бота, вихідний вузол Tor або серйозні аномалії |
Score агрегує активні виходи smart-сигналів — насамперед IP-аналітику (VPN/proxy/Tor/datacenter), вердикт бота та підробку браузера. Підтверджена людська взаємодія (миша/клавіатура) знижує score.
Виявляються чотири орієнтовані на приватність конфігурації браузера:
| Браузер | Метод виявлення | Поріг |
|---|---|---|
| Tor Browser | Canvas заблоковано + WebGL заблоковано + часовий пояс UTC + обмежені шрифти + округлений розмір екрана | 3+ маркери |
| Brave | Brave UA чи navigator.brave чи бренд "Brave" у Client Hints | 1+ маркер |
| Firefox ETP (strict) | Розділене сховище чи опір canvas (потрібен Firefox UA) | 1+ маркер |
| Safari ITP | Cookies заблоковано чи IndexedDB обмежено (потрібен Safari UA) | 1+ маркер |
Smart Signals надходять на ваш сервер через payload webhook'а (див. Webhooks для повної форми та перевірки підпису) і при читанні сесії через Data API. Приклади нижче читають поля безпосередньо з payload'а webhook'а; імена полів однакові в обох випадках.
// `payload` is the webhook delivery body (/docs/webhooks)const score = payload.decision.riskScoreconst isVPN = payload.network.vpnconst isBot = payload.bot.result === "bot"
if (isBot) { return block("Automated access")}
if (score > 60) { return requireMFA()}
if (isVPN && score > 30) { return requireCaptcha()}
return allow()// `payload` is the webhook delivery body (/docs/webhooks)function computeFraudRisk(payload: WebhookPayload): string { let risk = "low"
if (payload.decision.riskScore > 60) risk = "high" else if (payload.decision.riskScore > 30) risk = "medium"
// Escalate when multiple network signals agree if (payload.network.vpn && payload.network.proxy) risk = "high" if (payload.network.tor) risk = "high" if (payload.bot.result === "bot") risk = "high"
return risk}