Отримуйте та перевіряйте вебхуки ідентифікації у Node.js та Express. Додайте ідентифікацію відвідувачів, виявлення ботів і smart signals до вашого застосунку Node.js за лічені хвилини.
Додайте SDK до свого проєкту за допомогою улюбленого менеджера пакетів.
npm install expressyarn add expresspnpm add expressЗапустіться з мінімальним налаштуванням.
import express from 'express'const app = express()// Capture the raw body so the signature can be verified byte-for-byte.app.use(express.json({ verify: (req, _res, buf) => ((req as any).rawBody = buf) }))// Identification events are pushed here in real timeapp.post('/webhook/tracio', (req, res) => { const event = req.body console.log(event.visitorId, event.bot.result) res.status(200).send('OK')})app.listen(3000)Production-ready патерни з обробкою помилок, станами завантаження та розширеним налаштуванням.
import express from 'express'import crypto from 'crypto'const app = express()app.use(express.json({ verify: (req, _res, buf) => ((req as any).rawBody = buf) }))// Recompute the HMAC-SHA256 over "<t>.<rawBody>" and compare it.function verify(rawBody: Buffer, header: string, secret: string): boolean { const p = Object.fromEntries(header.split(',').map((kv) => kv.split('=') as [string, string])) const signed = Buffer.concat([Buffer.from(`${p.t}.`), rawBody]) const expected = crypto.createHmac('sha256', secret).update(signed).digest('hex') const a = Buffer.from(p.v1, 'hex') const b = Buffer.from(expected, 'hex') return a.length === b.length && crypto.timingSafeEqual(a, b)}app.post('/webhook/tracio', (req, res) => { const sig = req.headers['x-tracio-signature'] as string if (!verify((req as any).rawBody, sig, process.env.TRACIO_WEBHOOK_SECRET!)) { return res.status(401).json({ error: 'Invalid signature' }) } const event = req.body if (event.bot.result === 'bot') { return res.status(200).json({ action: 'blocked', visitorId: event.visitorId }) } if (event.decision.riskScore > 50) { return res.status(200).json({ action: 'review', visitorId: event.visitorId }) } res.status(200).json({ action: 'allow', visitorId: event.visitorId })})app.listen(3000)Усі доступні параметри для ініціалізації та налаштування SDK.
publicKeystringВаш публічний ключ із панелі керування — його безпечно віддавати в браузерendpointstringВласний URL ендпоінта для розгортань із проксі-маршрутизацією — явний URL важливіший за regionregionstringРегіон даних: us або eutimeoutMsnumberЧас очікування всього виклику getResult(), у мілісекундахlinkedIdstringВаш внутрішній ID акаунта авторизованого користувача, щоб пов’язувати відвідування з одного пристроюtagstringДовільна мітка, що додається до запиту ідентифікації, наприклад checkout або logindebugbooleanПише життєвий цикл скрипта та мережеву активність у консоль браузераscriptUrlstringПовна заміна URL скрипта агента — для self-hosting або Subresource IntegrityЗанурюйтесь глибше з повним довідником API, налаштуванням webhook і просунутими посібниками.
Повний довідник API, посібники з інтеграції та найкращі практики.
Доставка подій у реальному часі, схема корисного навантаження і перевірка підпису.
Налаштуйте сповіщення про події в реальному часі для кожної ідентифікації пристрою.
Додайте фінгерпринтинг пристроїв до вашого застосунку Node.js менш ніж за 5 хвилин.