Smart Signals คือสัญญาณเสริม (enrichment signals) ฝั่งเซิร์ฟเวอร์ที่คำนวณจากลายนิ้วมือเบราว์เซอร์ (browser fingerprints), IP intelligence และการวิเคราะห์พฤติกรรม สัญญาณเหล่านี้ให้บริบทเชิงลึกเกี่ยวกับผู้เยี่ยมชมทุกคนโดยไม่เก็บข้อมูลที่ระบุตัวบุคคลได้ (personally identifiable information) ใด ๆ
Smart Signals — สัญญาณ decision, risk, network และ bot ที่ผ่านการเสริมข้อมูลแล้ว — เข้าถึงเซิร์ฟเวอร์ของคุณได้สองทาง: ถูกส่งมาหาคุณในรูปแบบ webhooks (ดู Webhooks) และอ่านได้ตามต้องการผ่าน Data API นอกจากนี้ยังแสดงบนแดชบอร์ดด้วย ตัวอย่างด้านล่างนี้ใช้งานรูปแบบของ webhook payload ฟิลด์เดียวกันนี้จะปรากฏเมื่ออ่านเซสชันจาก API
การเข้าชมหนึ่งครั้งจะถูกแปลงเป็น 35+ smart signals ครอบคลุมเครือข่าย เบราว์เซอร์ อุปกรณ์ และพฤติกรรม ข้อมูลอ้างอิงด้านล่างระบุสัญญาณที่คุณจะใช้บ่อยที่สุด ซึ่งรวมถึง:
| Signal | คำอธิบาย | Response | แพลตฟอร์ม |
|---|---|---|---|
| VPN Detection | ตั้งค่าสถานะการใช้ VPN จาก IP intelligence | network.vpn: boolean | Web |
| Proxy Detection | ระบุการใช้ proxy แบบ datacenter และ residential | network.proxy: boolean | Web |
| Tor Detection | จับคู่ IP กับ Tor exit node ที่รู้จัก | network.tor: boolean | Web |
| Datacenter | ตั้งค่าสถานะ IP ที่เป็นของผู้ให้บริการ cloud/hosting ที่รู้จัก | network.datacenter: boolean | Web |
| IP Geolocation | การระบุตำแหน่งระดับเมือง + ISP และ ASN จากที่อยู่ IP | geo.{ country, city, timezone }, network.{ isp, asn } | Web |
| Signal | คำอธิบาย | Response | ความพร้อมใช้งาน |
|---|---|---|---|
| Browser Tampering | ตรวจจับ User-Agent ปลอม, navigator ที่ถูกดัดแปลง, การฉีดส่วนขยาย (extension injection) | { 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 |
| Signal | คำอธิบาย | ความพร้อมใช้งาน |
|---|---|---|
| Emulator | ตรวจจับ Android emulator (BlueStacks, Genymotion, Nox, Android SDK) ผ่าน GPU renderer และ UA marker | Web — ทุกแพ็กเกจ |
การตรวจจับเฉพาะบน native การตรวจจับ root, jailbreak, แอปที่ถูกโคลน/dual-app และ การ instrument ด้วย Frida ต้องพึ่งพาสัญญาณที่มีเพียง native mobile SDK เท่านั้นที่เก็บได้ TRACIO ให้บริการ SDK สำหรับเบราว์เซอร์ ดังนั้นสิ่งเหล่านี้จึง ไม่มีผล ในเอเจนต์บนเว็บ — ให้พึ่งพา verdict ของระบบอัตโนมัติ, headless, antidetect, emulator และพฤติกรรมแทน
| Signal | คำอธิบาย | Response | แพลตฟอร์ม |
|---|---|---|---|
| Bot Detection | ระบุเฟรมเวิร์กอัตโนมัติและเบราว์เซอร์แบบ headless | bot.result: "human"|"bot"|"uncertain", bot.type: string, bot.score: number | Web |
| Risk Score | ความเสี่ยงรวมของคำขอ อยู่บนอ็อบเจกต์ decision ของ webhook | decision.riskScore: number, decision.suspectScore: number, decision.action: "real"|"fake"|"suspicious" | Web |
แฟล็ก VPN, proxy, Tor และ datacenter จะถูกแปลงค่าฝั่งเซิร์ฟเวอร์จาก IP ของ
ผู้เยี่ยมชม โดยใช้ฐานข้อมูล IP intelligence เชิงพาณิชย์ (IP2Location /
MaxMind) webhook payload สาธารณะจะแสดงผลลัพธ์ที่รวมกันเป็น boolean บน
อ็อบเจกต์ network — network.vpn, network.proxy, network.tor,
network.datacenter — โดยไม่มีการแยกย่อยตามวิธีหรือสตริงความเชื่อมั่น ดู
IP Intelligence สำหรับรายละเอียด
การเรียกดูแบบส่วนตัวถูกอนุมานใน Chromium, Firefox และ Safari และส่งถึงคุณในชื่อ
identification.incognito ไม่มี API ของเบราว์เซอร์ที่รายงานเรื่องนี้ ดังนั้น verdict
จึงมาจากการโหวตแบบถ่วงน้ำหนักว่าที่เก็บข้อมูล (storage) มีพฤติกรรมอย่างไรในหน้าต่างส่วนตัว —
ข้อผิดพลาดของ origin private file system, ความคงทนของที่เก็บข้อมูล
และลักษณะเฉพาะของแต่ละแพลตฟอร์ม ต่างก็มีส่วนร่วมทั้งสิ้น
นี่เป็นสัญญาณเชิงความน่าจะเป็น ไม่ใช่ความแน่นอน ให้ถือเป็นหนึ่งในหลายอินพุต
ไม่ใช่ข้อเท็จจริงที่จะใช้ตัดสินใจเพียงลำพัง เนื่องจากหน้าต่างส่วนตัวยังระงับคุกกี้ _vid_t ด้วย
การเข้าชมแบบ incognito จึงถูกระบุจากสัญญาณเท่านั้น และค่า identification.confidence
จึงต่ำลงตามไปด้วย
ตัวตรวจจับการ tampering จะระบุผู้เยี่ยมชมที่ได้ดัดแปลงเบราว์เซอร์ของตนเพื่อบิดเบือนตัวตน:
navigator โดยเปรียบเทียบ getter prototypePluginArray.prototype และ MimeType.prototypeFunction.prototype.toString, Object.getOwnPropertyDescriptor และฟังก์ชันสำคัญอื่น ๆ ถูกแทนที่ด้วย Proxy หรือไม่anomalyScore (0.0-1.0) วัดปริมาณระดับความไม่สอดคล้อง ค่าที่สูงกว่า 0.5 บ่งชี้ถึงการ tampering ที่มีนัยสำคัญ
อ็อบเจกต์ decision ของ webhook นำพาความเสี่ยงรวมของคำขอ:
decision.riskScore (จำนวนเต็ม 0-100), decision.suspectScore (ตัวเลข) และ
decision.action (การกระทำที่แนะนำ) คะแนนนี้รวมผลลัพธ์ของ smart
signal เข้าด้วยกัน แถบด้านล่างอธิบายว่า riskScore แมปกับระดับความเสี่ยงอย่างไร:
| ช่วงคะแนน | ระดับความเสี่ยง | ตัวบ่งชี้ทั่วไป |
|---|---|---|
| 0-10 | ปกติ | สัญญาณสะอาด, ผู้เยี่ยมชมที่รู้จัก, residential IP |
| 11-30 | ต่ำ | ความไม่สอดคล้องเล็กน้อย, datacenter IP หรือการเยี่ยมชมครั้งแรก |
| 31-60 | ปานกลาง | ตรวจพบ VPN, การ tampering เบราว์เซอร์ หรือ velocity ที่ผิดปกติ |
| 61-80 | สูง | สัญญาณเสี่ยงหลายรายการ, proxy + tampering, กิจกรรมสูง |
| 81-100 | วิกฤต | ตรวจพบบอต, Tor exit node หรือความผิดปกติรุนแรง |
คะแนนนี้รวมผลลัพธ์ของ smart signal ที่ทำงานอยู่ — โดยหลักคือ IP intelligence (VPN/proxy/Tor/datacenter), verdict ของบอต และการ tampering เบราว์เซอร์ การโต้ตอบของมนุษย์ที่ยืนยันแล้ว (เมาส์/คีย์บอร์ด) จะลดคะแนนลง
มีการตรวจจับการตั้งค่าเบราว์เซอร์ที่เน้นความเป็นส่วนตัวสี่รูปแบบ:
| เบราว์เซอร์ | วิธีการตรวจจับ | เกณฑ์ |
|---|---|---|
| Tor Browser | Canvas ถูกบล็อก + WebGL ถูกบล็อก + timezone UTC + ฟอนต์จำกัด + ขนาดหน้าจอที่ปัดเศษ | 3+ marker |
| Brave | Brave UA หรือ navigator.brave หรือแบรนด์ "Brave" ใน Client Hints | 1+ marker |
| Firefox ETP (strict) | Storage ถูกแบ่งพาร์ทิชัน หรือ canvas ถูกต้านทาน (ต้องมี Firefox UA) | 1+ marker |
| Safari ITP | Cookies ถูกบล็อก หรือ IndexedDB ถูกจำกัด (ต้องมี Safari UA) | 1+ marker |
Smart Signals เข้าถึงเซิร์ฟเวอร์ของคุณผ่าน webhook payload (ดู Webhooks สำหรับรูปแบบเต็มและการตรวจสอบลายเซ็น) และเมื่ออ่านเซสชันผ่าน Data API ตัวอย่างด้านล่างนี้อ่านฟิลด์ต่าง ๆ โดยตรงจาก webhook payload ชื่อฟิลด์เหมือนกันทั้งสองทาง
// `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}