---
title: Fraud Prevention — Web SDK
---
# Fraud Prevention Web SDK
Fraud Prevention Web SDK berjalan pada **halaman anda** — halaman pendaratan, skrin
pendaftaran atau log masuk, atau mana-mana sumber yang dilindungi. Ia meminta keputusan
untuk lawatan semasa dan menyerahkannya semula kepada kod anda, supaya anda boleh
memutuskan apa yang hendak dilakukan dengan trafik itu — rekodkannya, tandainya, atau
minta pelawat satu pengesahan tambahan.
## Mula pantas
```html
```
`BotSignal.init()` juga mengembalikan `Promise`, jadi anda boleh `await`
ia dan bukannya menggunakan `onVerdict` — kedua-duanya menerima objek keputusan yang
sama.
```js
const verdict = await BotSignal.init({ appKey: 'YOUR_APP_KEY' });
```
## Pilihan
| Pilihan | Jenis | Lalai | Keterangan |
| --- | --- | --- | --- |
| `appKey` | string | — | Kunci aplikasi Fraud Prevention anda (diperlukan). |
| `domain` | string | lalai perkhidmatan | Titik akhir perkhidmatan keputusan. Biarkan tidak ditetapkan melainkan anda diberi domain khusus. |
| `escalate` | boolean | `false` | Benarkan Fraud Prevention meminta pelawat **satu pengesahan tambahan** apabila sesuatu lawatan kelihatan berisiko tinggi. Lihat [Escalation](#escalation). |
| `collectWindowMs` | number | `1200` | Berapa lama (ms) SDK memerhati lawatan sebelum meminta keputusan. Tetingkap yang lebih panjang menghasilkan keputusan yang lebih yakin dengan kos sedikit kelewatan. |
| `onVerdict` | `(v) => void` | — | Dipanggil sekali dengan keputusan akhir. Titik integrasi utama. |
| `onError` | `(err) => void` | — | Dipanggil jika ada apa-apa yang tidak kena. SDK tidak pernah membuang ralat ke halaman anda. |
| `onEscalate` | `(displayType) => void` | — | Dipanggil apabila pengesahan tambahan dipaparkan (hanya apabila `escalate: true`). |
| `onEscalateDone` | `(passed) => void` | — | Dipanggil selepas pengesahan tambahan selesai; `passed` ialah `true` jika pelawat melepasinya. |
::: tip Senario sumber trafik
Jika pihak ketiga menghantar pelawat kepada anda dan kedua-dua belah pihak perlu
menyelaras pada kesimpulan per klik, SDK juga boleh membaca token klik daripada URL
halaman. Itu khusus untuk aliran trafik berbayar — lihat panduan [Ad fraud](./scenarios/ad-fraud).
:::
## Menggunakan keputusan
`onVerdict` menerima objek `BotVerdict`. Dua medan yang paling kerap anda gunakan:
- **`verdict.is_bot`** — `true` apabila lawatan dinilai sebagai automatik/tidak sah.
- **`verdict.action`** — apa yang kami cadangkan anda lakukan: `record_only`,
`challenge`, atau `flag`.
```js
BotSignal.init({
appKey: 'YOUR_APP_KEY',
onVerdict: function (verdict) {
switch (verdict.action) {
case 'record_only':
// normal-looking traffic — proceed, just log the verdict
break;
case 'flag':
// suspicious — keep serving the page but mark this visit as low quality
markLowQuality(verdict);
break;
case 'challenge':
// high risk — handled by escalation if enabled (see below)
break;
}
},
});
```
Lihat senarai medan penuh dan pengendalian yang disyorkan dalam
[Verdict Reference](./verdict-reference).
## Escalation
Apabila sesuatu lawatan kelihatan berisiko tinggi, Fraud Prevention boleh meminta
pelawat melengkapkan **satu pengesahan tambahan** sebelum anda melayan mereka sebagai
pengguna sebenar. Ini bersifat pilihan masuk (opt-in).
Dayakannya dengan `escalate: true`:
```js
BotSignal.init({
appKey: 'YOUR_APP_KEY',
escalate: true,
onEscalate: function (displayType) {
// an extra verification is being shown to the visitor
},
onEscalateDone: function (passed) {
if (passed) {
// visitor cleared the extra check — treat as human
} else {
// not cleared — keep the original verdict's recommendation
}
},
onVerdict: function (verdict) {
// if the visitor cleared escalation, verdict.is_bot is updated to false
},
});
```
Nota:
- Escalation hanya dicetuskan apabila `action` keputusan ialah `challenge`. Untuk semua
lawatan lain, tiada apa yang dipaparkan dan pengalaman pelawat tidak terjejas.
- Jika pelawat melepasi pengesahan tambahan, keputusan yang dihantar ke `onVerdict`
mencerminkan perkara itu (dilayan sebagai manusia).
- Escalation **gagal terbuka** (fails open): jika pengesahan tambahan tidak dapat dimuat
atau dipaparkan, SDK mengekalkan keputusan asal dan bukannya menyekat halaman anda.
::: info
Fraud Prevention tidak pernah membuat keputusan *untuk* anda. Walaupun pada
`challenge`/`flag`, kod anda kekal mengawal sama ada lawatan itu diteruskan — SDK hanya
mengetengahkan keputusan dan, secara pilihan, menjalankan pengesahan tambahan.
:::
## Daya tahan
Jika perkhidmatan keputusan tidak dapat dicapai atau sebarang ralat berlaku, SDK
mengembalikan keputusan **degraded** (`degraded: true`) dan bukannya menggagalkan
halaman anda. Keputusan degraded bersifat konservatif (`is_bot: false`, `action:
record_only`) supaya ia tidak pernah menyekat pengguna sebenar. Semak `verdict.degraded`
jika anda mahu melayan lawatan tersebut secara khas.
## Langkah seterusnya
- [Verdict Reference](./verdict-reference) — setiap medan dan cara bertindak ke atasnya
- [Data API](./data-api) — tarik dan selaras keputusan di bahagian pelayan