--- title: Fraud Prevention — Web SDK --- # Fraud Prevention Web SDK Web SDK сервиса Fraud Prevention работает на **вашей странице** — это может быть лендинг, экран регистрации или входа либо любой защищаемый ресурс. Он запрашивает вердикт для текущего визита и возвращает его вашему коду, чтобы вы могли решить, что делать с этим трафиком: записать его, отметить или попросить посетителя пройти одну дополнительную проверку. ## Быстрый старт ```html ``` `BotSignal.init()` также возвращает `Promise`, поэтому вместо `onVerdict` вы можете использовать `await` — оба способа получают один и тот же объект вердикта. ```js const verdict = await BotSignal.init({ appKey: 'YOUR_APP_KEY' }); ``` ## Опции | Опция | Тип | По умолчанию | Описание | | --- | --- | --- | --- | | `appKey` | string | — | Ключ вашего приложения Fraud Prevention (обязательно). | | `domain` | string | значение по умолчанию | Эндпоинт сервиса вердиктов. Оставьте без изменений, если только вам не выдали выделенный домен. | | `escalate` | boolean | `false` | Разрешить Fraud Prevention запросить у посетителя **одну дополнительную проверку**, когда визит выглядит высокорисковым. См. [Эскалацию](#escalation). | | `collectWindowMs` | number | `1200` | Как долго (мс) SDK наблюдает за визитом, прежде чем запросить вердикт. Более длинное окно даёт более уверенный вердикт ценой небольшой задержки. | | `onVerdict` | `(v) => void` | — | Вызывается один раз с итоговым вердиктом. Основная точка интеграции. | | `onError` | `(err) => void` | — | Вызывается, если что-то пошло не так. SDK никогда не выбрасывает исключение в вашу страницу. | | `onEscalate` | `(displayType) => void` | — | Вызывается при показе дополнительной проверки (только при `escalate: true`). | | `onEscalateDone` | `(passed) => void` | — | Вызывается после завершения дополнительной проверки; `passed` равно `true`, если посетитель её прошёл. | ::: tip Сценарии с источником трафика Если посетителей вам доставляет третья сторона и обеим сторонам нужно свериться на основе вывода по каждому клику, SDK также может прочитать click-токен из URL страницы. Это специфично для сценариев платного трафика — см. руководство [Рекламный фрод](./scenarios/ad-fraud). ::: ## Использование вердикта `onVerdict` получает объект `BotVerdict`. Два поля, которые вы будете использовать чаще всего: - **`verdict.is_bot`** — `true`, когда визит признан автоматизированным/недействительным. - **`verdict.action`** — что мы рекомендуем сделать: `record_only`, `challenge` или `flag`. ```js BotSignal.init({ appKey: 'YOUR_APP_KEY', onVerdict: function (verdict) { switch (verdict.action) { case 'record_only': // трафик выглядит нормально — продолжаем, просто логируем вердикт break; case 'flag': // подозрительно — продолжаем показывать страницу, но помечаем визит как низкокачественный markLowQuality(verdict); break; case 'challenge': // высокий риск — обрабатывается эскалацией, если она включена (см. ниже) break; } }, }); ``` Полный список полей и рекомендуемую обработку см. в [Справочнике по вердиктам](./verdict-reference). ## Эскалация {#escalation} Когда визит выглядит высокорисковым, Fraud Prevention может попросить посетителя выполнить **одну дополнительную проверку**, прежде чем вы будете относиться к нему как к реальному пользователю. Это опционально. Включите её через `escalate: true`: ```js BotSignal.init({ appKey: 'YOUR_APP_KEY', escalate: true, onEscalate: function (displayType) { // посетителю показывается дополнительная проверка }, onEscalateDone: function (passed) { if (passed) { // посетитель прошёл дополнительную проверку — относимся как к человеку } else { // не прошёл — сохраняем рекомендацию исходного вердикта } }, onVerdict: function (verdict) { // если посетитель прошёл эскалацию, verdict.is_bot обновляется на false }, }); ``` Примечания: - Эскалация срабатывает, только когда `action` вердикта равно `challenge`. Для всех остальных визитов ничего не показывается, и опыт посетителя остаётся нетронутым. - Если посетитель проходит дополнительную проверку, вердикт, переданный в `onVerdict`, отражает это (визит считается человеком). - Эскалация **работает по принципу fail open**: если дополнительную проверку не удаётся загрузить или показать, SDK сохраняет исходный вердикт, а не блокирует вашу страницу. ::: info Fraud Prevention никогда не принимает решение *за* вас. Даже при `challenge`/`flag` ваш код остаётся хозяином того, продолжится ли визит, — SDK лишь предоставляет вердикт и, опционально, запускает дополнительную проверку. ::: ## Отказоустойчивость Если сервис вердиктов недоступен или возникает любая ошибка, SDK возвращает **деградированный (degraded)** вердикт (`degraded: true`), а не ломает вашу страницу. Деградированный вердикт консервативен (`is_bot: false`, `action: record_only`), поэтому никогда не блокирует реальных пользователей. Проверяйте `verdict.degraded`, если хотите обрабатывать такие визиты особым образом. ## Дальнейшие шаги - [Справочник по вердиктам](./verdict-reference) — каждое поле и как на него реагировать - [Data API](./data-api) — получение и сверка вердиктов на стороне сервера