---
title: Fraud Prevention — Reklam Dolandırıcılığı
---
# Reklam dolandırıcılığı
Bu bir **senaryo kılavuzudur**. Temel entegrasyon değişmez — o sayfalarda anlatıldığı
gibi tam olarak [Web SDK](../web-sdk)'yı yükler, bir [karar](../verdict-reference)
okur ve [Data API](../data-api)'den veri çekersiniz. Bu sayfa, yalnızca reklam
dolandırıcılığı senaryosunun ihtiyaç duyduğu birkaç özel ayrıntıyı ekler.
Reklam dolandırıcılığı koruması, bot ve geçersiz trafiği ücretli kampanyalardan
süzer; böylece reklam verenler ve reklam platformları sahte hacim için değil, gerçek
tıklamalar ve gösterimler için ödeme yapar. Onu diğer kullanım senaryolarından farklı
kılan şey şudur: **ziyaretçiyi bir üçüncü taraf getirir** ve her iki tarafın bağımsız,
tıklama başına bir insan / bot sonucu üzerinde mutabık kalması gerekir.
## Kaynağında gerçek zamanlı engelleme
Fraud Prevention, giriş noktasında inline çalışır ve bir kararı gerçek zamanlı döndürür — olaydan sonraki bir rapor değildir. Ziyaretçinin indiği sayfanın sahibi kim ise, bu karara göre anında işlem yapabilir:
- **Reklam verenler** SDK'yı açılış sayfasında çalıştırır: geçersiz trafik, geldiği anda yakalanır — ve isteğe bağlı olarak bir challenge gösterilir — funnel'a girmeden veya raporlamayı bozmadan önce.
- **Trafik platformları** SDK'yı kendi pre-lander veya yönlendirme sayfasında çalıştırır: bir tıklama, iletilmeden *önce* doğrulanır; böylece botlar girişte durdurulur ve hiçbir zaman teslim edilen trafik hâline gelmez.
Tek gereksinim, SDK'yı çalıştırabilen bir sayfadır: bir karar tarayıcı sinyallerine ihtiyaç duyar, dolayısıyla yalnızca sunucu tarafında bir 302'nin bunları toplayacağı bir yer yoktur — hafif bir ara sayfa ekleyin, aynı gerçek zamanlı engelleme geçerli olur.
İmzalı click token ve Data API, her iki tarafın mutabakatı için bunun üzerine oturur; gerçek zamanlı inline engelleme birincil mekanizmadır ve sonradan yapılan API temizliği, ara sayfası olmayan trafik için yedek seçenektir.
## İki rol
- **Reklam veren (Advertiser)** — ziyaretçinin ulaştığı açılış sayfasının sahibidir. O
sayfada Web SDK'yı çalıştırarak gelen her ziyaret için bir karar alır ve faturalandırıldığı
şeyi mutabık kılmak üzere Data API'den kararları çeker.
- **Sağlayıcı (Provider) (trafik / reklam kaynağı)** — tıklamayı teslim eder.
**Gönderdiği şeyin kalitesini kanıtlaması** gerekir; bu yüzden tıklama başına bir
tıklama token'ı üretir ve daha sonra teslimat raporunu bağımsız kararlarla birleştirir.
Her iki taraf da [Data API](../data-api)'ye kendi uygulama kimlik bilgileriyle kimlik
doğrular ve aynı tıklama başına kararı okur; birbirlerinin ham günlüklerine güvenmeden
mutabık kalmalarını sağlayan şey budur.
## Uçtan uca akış
Aşağıdaki sıra, bir tıklamanın sağlayıcının teslimatından, ziyaretçi ve reklam verenin
açılış sayfası üzerinden, **her iki hesabın daha sonra kendi tarafından okuduğu** tek
bir karara nasıl gittiğini gösterir.
```mermaid
sequenceDiagram
autonumber
participant P as Sağlayıcı (hesap B)
participant V as Ziyaretçi
participant A as Reklam veren sayfası + SDK
participant F as Fraud Prevention API
P->>P: click_token imzala (bot_kid + secret, pkid taşır)
P->>V: Bağlantıyı ?_ctk=click_token ile teslim et
V->>A: Tıkla → reklam veren sayfasına in (URL _ctk taşır)
A->>A: SDK, URL'den _ctk okur
A->>F: Şifreli POST /bot/verify
(app_key = reklam veren, click_token = sağlayıcı imzalı)
F->>F: app_key → advertiser_app_id,
pkid doğrula → provider_app_id, karara ulaş,
her iki app_id'yi taşıyan tek satır yaz
F-->>A: verdict → onVerdict
A->>A: verdict.action'a göre işle (kaydet / engelle / challenge)
Note over P,F: Mutabakat (hesaplar arası)
A->>F: Reklam veren App-Key ile GET /v1/bot
F-->>A: Aynı satır (advertiser_app_id ile eşleşti)
P->>F: Sağlayıcı App-Key ile GET /v1/bot
F-->>P: Aynı satır (provider_app_id ile eşleşti)
```
Belirleyici özellik: **her iki app_id aynı satırda yer alır.** Reklam veren onu
`advertiser_app_id` ile eşleşmiş olarak okur, sağlayıcı `provider_app_id` ile eşleşmiş
olarak okur — iki farklı hesap, her biri kendi App-Key'iyle sorgular ve her biri aynı
bağımsız karara ulaşır. Belirli bir tıklamada ne olduğu konusunda mutabık kalmak için
hiçbir tarafın diğerinin ham günlüklerini açığa çıkarması veya ona güvenmesi gerekmez.
## Tıklama token'ları
Bir **tıklama token'ı (click token)**, sağlayıcının teslim ettiği bir tıklamayı,
ziyaretin nihayetinde aldığı kararla ilişkilendirir. Her iki tarafın da üzerinde
mutabık kaldığı tıklama başına tanımlayıcıdır. Diğer Fraud Prevention kullanım
senaryolarının tıklama token'larına ihtiyacı yoktur — kararları onlarsız mutabık kılarlar.
Akış:
1. **Üretim (Issue)** — sağlayıcı, bir ziyaretçiyi reklam verenin açılış sayfasına
yönlendirirken imzalı bir tıklama token'ı edinir (tıklama başına bir tane).
2. **Hedef URL'de taşı** — üretilen token'ı, açılış URL'sine bir sorgu parametresi
olarak ekleyin:
```
https://advertiser.example/lp?click_token=ct_xxxxxxxx
```
3. **Sayfada oku** — [Web SDK](../web-sdk) token'ı URL'den otomatik olarak okur.
Farklı bir parametre adı kullanırsanız `tokenParam` ayarlayın:
```js
BotSignal.init({ appKey: 'YOUR_APP_KEY', tokenParam: 'click_token' });
```
4. **Mutabakat** — tıklamayı daha sonra Data API üzerinden arayın ve sağlayıcının
teslimat raporuna geri birleştirin.
::: info
Token size üretildiğinde zaten imzalanmıştır — yalnızca onu **açılış URL'sine
taşımanız** yeterlidir. Sizin tarafınızda imzalanacak veya hesaplanacak hiçbir şey
yoktur.
:::
### `tokenParam` seçeneği
Bu senaryoda Web SDK fazladan bir seçenek kazanır:
| Seçenek | Tür | Varsayılan | Açıklama |
| --- | --- | --- | --- |
| `tokenParam` | string | otomatik algılanır | Sağlayıcı tıklama token'ını taşıyan URL sorgu parametresinin adı (ör. `click_token`). SDK bunu sayfa URL'sinden okur ve kararı o tıklamayla ilişkilendirir. Tıklama token'ı kullanmıyorsanız ayarlamadan bırakın. |
## Mutabakat ve uzlaşma
Ziyaretler bir tıklama token'ı taşımaya başladığında, her iki taraf da aynı bağımsız
kararlar üzerinde uzlaşır:
- **Tek bir tıklamanın kararını getir** — örneğin bir tıklamaya itiraz etmek veya onu
doğrulamak için:
```bash
GET /v1/bot/verdict?click_token=ct_xxx
X-App-Key: YOUR_APP_KEY
X-App-Secret: YOUR_APP_SECRET
```
- **Tıklama başına satırları dışa aktar** — bir zaman aralığını çekin ve her satırın
`click_token` değerini kendi tıklama günlüklerinizle birleştirin:
```bash
GET /v1/bot/export?from=2026-06-01&to=2026-06-30&format=csv
X-App-Key: YOUR_APP_KEY
X-App-Secret: YOUR_APP_SECRET
```
Her satır, ziyaretin `click_token` değerini (varsa), zaman damgasını ve karar
alanlarını (`is_bot`, `score`, `level`, `action`) taşır.
Reklam veren, işaretlenmiş ve bot tıklamaları ödeme yaptığı şeyden hariç tutar;
sağlayıcı teslimat raporunu aynı sonuçlarla mutabık kılar. Her iki taraf da **aynı
bağımsız kararı** okuduğu için uzlaşma, hiçbir tarafın ham günlüklerine bağlı değildir.
## Güvenlik modeli
`cid` ve tıklama token'ı URL içinde taşınır; bu nedenle onları kimlik bilgisi değil, tanımlayıcı olarak ele alın:
- **Bir kararı okumak App-Key + App-Secret gerektirir.** Data API her çağrıyı app secret'ınızla doğrular (sabit zamanlı karşılaştırma) ve yalnızca uygulamanızın advertiser veya provider olduğu satırları döndürür. Tek başına bir `cid` hiçbir şey getirmez — onu URL'den kopyalayan üçüncü bir tarafın secret'ı yoktur ve o satırın tarafı değildir.
- **provider imza ile bağlanır.** Tıklama token'ı, provider'ın secret'ı ile HMAC imzalanır ve provider'ın `pkid` değerini taşır; sahtelenemez ve bir `cid` yalnızca bir kez talep edilebilir (yeniden oynatmaya karşı korumalı).
- **İsteğe bağlı olarak advertiser'ı da bağlayın.** Hedef advertiser'ın `app_key` değerini token'a `aud` olarak imzalayın. Doğrulama o zaman sayfanın app_key değerinin `aud` ile eşleşmesini gerektirir; böylece advertiser A için verilen bir token, advertiser B üzerinde bir kararı atfedemez. `aud` değerini çıkarırsanız herhangi bir advertiser sayfası token'ı kabul edebilir.
Net etki: bir `cid` için verilen karar yalnızca ona bağlı iki uygulama tarafından okunabilir — sayfası SDK'yı çalıştıran advertiser ve token'ı sunulan provider — her biri kendi App-Secret'ı ile kimlik doğrular.
## Sonraki adımlar
- [Web SDK](../web-sdk) — kararları açılış sayfasında toplayın
- [Karar Referansı](../verdict-reference) — her alan ve buna göre nasıl hareket edilir
- [Data API](../data-api) — kararları sunucu tarafında çekin ve mutabık kalın