Skip to main content
Flujo de integración
Language

Events API

Integre cside Device Intelligence en su aplicación. Recopile señales del navegador, genere tokens de sesión y obtenga inteligencia detallada sobre los visitantes desde su backend.

Esta guía le explica cómo integrar la Events API de cside Device Intelligence de principio a fin: cargar el script del cliente, generar un token de sesión, enviarlo a su backend e interpretar la respuesta.

Flujo de integración

Agregue el script a su página

Incluya el bootstrap del navegador tolerante a fallos en la parte superior del <head>, antes de otros scripts. Reemplace su valor script.src por la URL de su equipo del panel de cside. Carga client.js de forma asíncrona y rechaza las llamadas si cside falla o agota el tiempo, para que la página siga funcionando.

Envíe la telemetría y reciba un token de sesión

Una vez que el script se haya cargado, la función global sendClientTelemetry estará disponible. Cargar el script no crea un fingerprint de sesión por sí solo. Llame a sendClientTelemetry(externalIds?) para enviar telemetría a /client y recibir un token de sesión. Pase un objeto externalIds opcional si quiere adjuntar sus propios identificadores.

const result = await sendClientTelemetry({
  email: "user@example.com",
  accountId: "1234567890",
});

// O llamarla sin argumentos
// const result = await sendClientTelemetry();

if (result.errors) {
  console.error(result.errors);
  throw new Error("La solicitud de telemetría falló.");
}

const token = result.token;

Parámetros

ParámetroTipoRequeridoDescripción
externalIdsRecord<string, string>NoIdentificadores opcionales que quiere adjuntar al fingerprint, como accountId, orderId o email.

Para recibir la señal throwawayEmail, pase la dirección de correo electrónico en este objeto usando la clave email.

Valor de retorno

La función devuelve un objeto JSON (ya analizado, por lo que no necesita llamar a .json() sobre él):

{
  "token": "eyJhbGciOiJIUzI1NiIs..."
}

El campo token contiene el token de sesión de fingerprint. Si la recopilación de telemetría encuentra problemas, el objeto también incluye un array opcional errors que puede registrar. Extraiga result.token y envíe solo esa cadena del token de sesión a su backend.

Recupere datos de fingerprint desde su backend

Genere una clave API de Device Intelligence solo para backend en el dashboard de cside, guárdela como secreto del servidor y úsela para intercambiar el token de sesión con cside. La clave API se muestra solo una vez y no debe exponerse en código de navegador.

if (!token) {
  throw new Error("No se devolvió un token de sesión de fingerprint.");
}

const response = await fetch("https://api.cside.com/token/v2/verify", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CSIDE_FINGERPRINT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ token }),
});

const data = await response.json();

Cuerpo de la solicitud

Envíe JSON con la forma { "token": "<token de sesión>" }, donde el valor es result.token del paso anterior.

Opciones de lookup del token

Use el endpoint autenticado para intercambios server-to-server de producción. Los endpoints públicos siguen disponibles cuando una integración necesita específicamente el flujo de lookup no autenticado.

EndpointRespuestaÚselo cuando
/token/v2/verifyJSONNecesite recuperación backend autenticada con una clave API de Device Intelligence.
/token/v2/device/entriesJSONNecesite evaluaciones completadas para el mismo ID de dispositivo que un token de sesión.
/token/v1/clientJSONNecesite el payload público de respuesta de fingerprinting.
/token/v1/clientIdTexto planoSolo necesite el fingerprint ID estable del flujo público de lookup.

/token/v2/verify devuelve 202 Accepted con { "status": "pending" } mientras procesa, luego 200 OK con el payload completado. /token/v2/device/entries acepta { "token": "...", "limit": 100, "offset": 0 } y devuelve { "device_id": "...", "entries": [...], "next_offset": 100, "has_more": true }, donde cada entrada usa la forma de respuesta de /token/v2/verify. limit es opcional, su valor predeterminado es 500 y el máximo permitido es 500. El endpoint clientId devuelve solo el identificador único del fingerprint como texto plano. Si no existe un identificador único del fingerprint para el token de sesión, devuelve 404.

Ejemplo de solicitud backend

const csideResponse = await fetch("https://api.cside.com/token/v2/verify", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.CSIDE_FINGERPRINT_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({ token }),
});

const data = await csideResponse.json();

Interprete la respuesta del backend

Su backend devuelve una respuesta JSON que contiene el resultado de identificación y las señales asociadas. Consulte la referencia completa de la respuesta a continuación.

Referencia de la respuesta

Esta referencia de respuesta se aplica a /token/v1/client. El endpoint autenticado /token/v2/verify devuelve un payload JSON plano con status, created_at, updated_at y los campos de enriquecimiento disponibles, como vpn_evaluation, fingerprint, geo_data, ip_enrichment, bot, network_client_metrics y fingerprint_enrichment. El endpoint autenticado /token/v2/device/entries devuelve un device_id, un array entries con esos mismos payloads planos para evaluaciones completadas asociadas a ese ID de dispositivo y campos de paginación como limit, offset, next_offset y has_more.

La respuesta del backend incluye identificación del visitante, detalles del navegador, inteligencia IP y un conjunto de señales de detección de fraude.

Campos de nivel superior

CampoTipoDescripción
linked_idstringUn identificador que usted asoció con este visitante.
tagsobjectMetadatos personalizados adjuntos al evento.
timestampnumberMarca de tiempo Unix (milisegundos) del evento.
event_idstringIdentificador único para este evento de fingerprinting.
urlstringLa URL de la página donde se recopiló el fingerprint.
ip_addressstringLa dirección IP del visitante.
user_agentstringLa cadena User-Agent sin procesar del navegador del visitante.
client_referrerstringLa URL de referencia de la página.

browser_details

Detalles sobre el navegador y el sistema operativo del visitante.

CampoTipoDescripción
browser_namestringNombre del navegador (por ejemplo, "Chrome").
browser_major_versionstringNúmero de versión principal.
browser_full_versionstringCadena de versión completa.
osstringNombre del sistema operativo.
os_versionstringVersión del sistema operativo.
devicestringTipo de dispositivo (por ejemplo, "Other", "Mobile").

identification

El resultado de identificación principal del visitante.

CampoTipoDescripción
visitor_idstringUn identificador único y estable para este visitante.
confidence.scorenumberPuntuación de confianza entre 0 y 1.
confidence.versionstringVersión del modelo de confianza utilizado.
visitor_foundbooleanSi este visitante ha sido visto antes.
first_seen_atnumberMarca de tiempo Unix (ms) de la primera identificación del visitante.
last_seen_atnumberMarca de tiempo Unix (ms) de la identificación más reciente del visitante.

supplementary_id_high_recall

Una identificación secundaria optimizada para mayor recall (menos falsos negativos) a costa de una precisión ligeramente menor.

CampoTipoDescripción
visitor_idstringIdentificador del visitante bajo el modelo de alto recall.
visitor_foundbooleanSi se encontró al visitante.
confidence.scorenumberPuntuación de confianza entre 0 y 1.
confidence.versionstringVersión del modelo de confianza utilizado.
first_seen_atnumberMarca de tiempo Unix (ms) de la primera identificación.
last_seen_atnumberMarca de tiempo Unix (ms) de la identificación más reciente.

proximity

Datos de proximidad geográfica del visitante.

CampoTipoDescripción
idstringIdentificador de ubicación de proximidad.
precision_radiusnumberRadio de precisión en kilómetros.
confidencenumberPuntuación de confianza para la estimación de proximidad.

ip_info

Información de la dirección IP del visitante.

CampoTipoDescripción
v4.addressstringDirección IPv4.
v6.addressstringDirección IPv6.

ip_blocklist

Si la IP del visitante aparece en listas de bloqueo conocidas.

CampoTipoDescripción
email_spambooleanLa IP está asociada con spam de correo electrónico.
attack_sourcebooleanLa IP es una fuente de ataque conocida.
tor_nodebooleanLa IP es un nodo de salida de Tor.

Señales de fraude y entorno

Señales que indican atributos sospechosos o notables del visitante.

CampoTipoDescripción
bot.resultstringEstado de detección de bot. Use "detected" o "not_detected".
bot.scorenumberPuntuación numérica de bot.
bot.signalstring[]Señales que contribuyeron a la detección de bot.
root_appsbooleanEl dispositivo tiene aplicaciones root/superusuario instaladas.
emulatorbooleanEl dispositivo es un emulador.
proxybooleanEl visitante está usando un proxy.
proxy_confidencestringNivel de confianza: "low", "medium" o "high".
vpnbooleanEl visitante está usando una VPN.
vpn_confidencestringNivel de confianza: "low", "medium" o "high".
vpn_origin_timezonestringZona horaria IANA indicada por el navegador.
vpn_origin_countrystringPaís inferido a partir del enriquecimiento de IP o "unknown".
vpn_methodsobjectSeñales a nivel de método relacionadas con el uso de VPN y el tráfico anonimizado. Consulte la subsección a continuación.
incognitobooleanEl navegador está en modo incógnito/privado.
tamperingbooleanLos atributos del navegador han sido manipulados.
jailbrokenbooleanEl dispositivo tiene jailbreak.
fridabooleanSe detectó el toolkit de instrumentación Frida.
virtual_machinebooleanEl visitante está ejecutando en una máquina virtual.
developer_toolsbooleanLas herramientas de desarrollo del navegador están abiertas.
mitm_attackbooleanSe detectó un ataque man-in-the-middle.
replayedbooleanLa solicitud es una repetición de una solicitud anterior.
high_activity_devicebooleanNúmero inusualmente alto de identificaciones desde este dispositivo.
throwawayEmailbooleantrue cuando el identificador email enviado es una dirección de correo electrónico desechable o temporal.

vpn_methods

vpn_methods contiene señales a nivel de método relacionadas con el uso de VPN y el tráfico anonimizado. Use el campo de nivel superior vpn como veredicto general. El valor de un método puede ser true cuando vpn es false, por ejemplo, cuando cside detecta tráfico de proxy o relay que el modelo de VPN no clasifica como VPN.

CampoTipoDescripción
timezone_mismatchbooleanLa zona horaria del navegador no coincide con la geolocalización de la IP.
public_vpnbooleanLa IP coincide con una señal conocida de VPN pública o de centro de datos.
auxiliary_mobilebooleanReservado para la detección específica de dispositivos móviles. Actualmente es false en los eventos del navegador.
os_mismatchbooleanEl sistema operativo indicado por el navegador no coincide con la firma de red.
relaybooleancside detectó un relay que anonimiza el tráfico, un proxy o tráfico similar al de un relay.
Nombres de campos aplanados

Algunos pipelines de datos añaden prefijos y aplanan los campos anidados. En esos conjuntos de datos, vpn_methods.relay puede aparecer como cside_fingerprint_vpn_methods_relay.

raw_device_attributes

Componentes de bajo nivel del fingerprint del navegador.

CampoTipoDescripción
mathstringHash de la salida del motor matemático.
vendorstringCadena del proveedor de GPU/gráficos.

Ejemplo completo de respuesta

{
  "linked_id": "somelinkedId",
  "tags": {},
  "timestamp": 1708102555327,
  "event_id": "1708102555327.NLOjmg",
  "url": "http://www.example.com/login",
  "ip_address": "61.127.217.15",
  "user_agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) ...",
  "client_referrer": "https://example.com/blog/my-article",
  "browser_details": {
    "browser_name": "Chrome",
    "browser_major_version": "74",
    "browser_full_version": "74.0.3729",
    "os": "Windows",
    "os_version": "7",
    "device": "Other"
  },
  "identification": {
    "visitor_id": "Ibk1527CUFmcnjLwIs4A9",
    "confidence": { "score": 0.97, "version": "1.1" },
    "visitor_found": false,
    "first_seen_at": 1708102555327,
    "last_seen_at": 1708102555327
  },
  "supplementary_id_high_recall": {
    "visitor_id": "3HNey93AkBW6CRbxV6xP",
    "visitor_found": true,
    "confidence": { "score": 0.97, "version": "1.1" },
    "first_seen_at": 1708102555327,
    "last_seen_at": 1708102555327
  },
  "proximity": {
    "id": "w1aTfd4MCvl",
    "precision_radius": 10,
    "confidence": 0.95
  },
  "bot": {
    "result": "not_detected",
    "score": 0,
    "signal": []
  },
  "root_apps": false,
  "emulator": false,
  "ip_info": {
    "v4": { "address": "94.142.239.124" },
    "v6": { "address": "2001:db8:3333:4444:5555:6666:7777:8888" }
  },
  "ip_blocklist": {
    "email_spam": false,
    "attack_source": false,
    "tor_node": false
  },
  "proxy": true,
  "proxy_confidence": "low",
  "vpn": false,
  "vpn_confidence": "high",
  "vpn_origin_timezone": "Europe/Amsterdam",
  "vpn_origin_country": "NL",
  "vpn_methods": {
    "timezone_mismatch": false,
    "public_vpn": false,
    "auxiliary_mobile": false,
    "os_mismatch": false,
    "relay": true
  },
  "incognito": false,
  "tampering": false,
  "jailbroken": false,
  "frida": false,
  "virtual_machine": false,
  "developer_tools": false,
  "mitm_attack": false,
  "replayed": false,
  "high_activity_device": false,
  "throwawayEmail": false,
  "raw_device_attributes": {
    "math": "5f030fa7d2e5f9f757bfaf81642eb1a6",
    "vendor": "Google Inc."
  }
}
Was this page helpful?