Endpoint de Conversión
El endpoint /api/experiments/convert registra cuando un visitante que ha sido expuesto a un experimento realiza una acción definida como meta u objetivo. Estas conversiones son fundamentales para analizar el rendimiento de las diferentes variantes de un experimento.
Especificación de la API
- URL:
/api/experiments/convert - Método:
POST - Formato de datos: JSON
- Autenticación: API Key en encabezado
X-SA-API-KEY
Parámetros del Request
| Parámetro | Tipo | Requerido | Descripción |
|---|---|---|---|
site_id | string | Sí | Identificador único del sitio |
visitor_id | string | Sí | ID del visitante que realizó la conversión |
session_id | string | No | ID de la sesión actual |
experiment_id | string | Sí | ID del experimento |
goal_id | string | Sí | ID del objetivo alcanzado |
url | string | Sí | URL donde ocurrió la conversión |
value | number | No | Valor asociado a la conversión (ej: valor de compra) |
timestamp | number | No | Marca de tiempo en milisegundos |
metadata | object | No | Datos adicionales sobre la conversión |
Ejemplo de payload
{
"site_id": "site_123abc",
"visitor_id": "vis_abcd1234",
"session_id": "sess_xyz789",
"experiment_id": "exp_12345",
"goal_id": "goal_1",
"url": "https://ejemplo.com/gracias-por-su-compra",
"value": 99.95,
"timestamp": 1646123789456,
"metadata": {
"order_id": "ord_98765",
"products": [
{
"id": "prod_123",
"name": "Zapato Casual Negro",
"price": 49.95,
"quantity": 2
}
],
"coupon_applied": "WELCOME10"
}
}Respuesta
{
"success": true,
"conversion_id": "conv_12345abcde",
"timestamp": 1646123789460
}Códigos de estado HTTP
200 OK: Conversión registrada correctamente400 Bad Request: Parámetros inválidos o faltantes401 Unauthorized: API key inválida o faltante403 Forbidden: El sitio no tiene permisos para usar experimentos404 Not Found: Experimento o meta no encontrados409 Conflict: Conversión duplicada429 Too Many Requests: Se ha excedido el límite de peticiones500 Internal Server Error: Error en el servidor
Gestión de errores
En caso de error, la respuesta incluirá detalles sobre el problema:
{
"success": false,
"error": {
"code": "no_exposure",
"message": "No hay registro de exposición a este experimento para el visitante",
"details": {
"experiment_id": "exp_12345",
"visitor_id": "vis_abcd1234"
}
}
}Tipos de conversión
El sistema soporta diferentes modelos de atribución para las conversiones:
- Directa: Se atribuye al último experimento visto
- First touch: Se atribuye al primer experimento visto
- Linear: Se distribuye equitativamente entre todos los experimentos vistos
- Time decay: Se atribuye de forma ponderada, dando más peso a exposiciones recientes
- Position based: Se da más peso al primer y último experimento visto
El modelo de atribución por defecto es “Directa”, pero se puede especificar usando el campo attribution_model:
{
"site_id": "site_123abc",
"visitor_id": "vis_abcd1234",
"experiment_id": "exp_12345",
"goal_id": "goal_1",
"url": "https://ejemplo.com/gracias-por-su-compra",
"value": 99.95,
"attribution_model": "linear"
}Conversiones de múltiples experimentos
En entornos donde un visitante puede estar expuesto a múltiples experimentos, se puede registrar una conversión para varios experimentos simultáneamente:
{
"site_id": "site_123abc",
"visitor_id": "vis_abcd1234",
"session_id": "sess_xyz789",
"url": "https://ejemplo.com/gracias-por-su-compra",
"value": 99.95,
"timestamp": 1646123789456,
"conversions": [
{
"experiment_id": "exp_12345",
"goal_id": "goal_1"
},
{
"experiment_id": "exp_67890",
"goal_id": "goal_3"
}
]
}Conversiones automáticas
Algunos tipos de eventos pueden convertirse automáticamente sin necesidad de llamar explícitamente a este endpoint:
- Clics: Si una meta está definida como un clic en un selector específico
- Pageviews: Si una meta está definida como una visita a una URL específica
- Formularios: Si una meta está definida como un envío de formulario
Para estas conversiones automáticas, el script de tracking se encarga de registrarlas.
Ventana de conversión
Por defecto, las conversiones se atribuyen a experimentos vistos dentro de una ventana de 30 días. Este valor se puede configurar en el panel de control.
Deduplicación de conversiones
Para evitar contar múltiples veces la misma conversión, el sistema implementa las siguientes reglas:
-
Mismo objetivo en la misma sesión: Solo se cuenta una vez por experimento y sesión.
-
Objetivos repetibles: Algunos objetivos pueden marcarse como “repetibles”, lo que permite contabilizar múltiples conversiones (ej: compras recurrentes).
Buenas prácticas
-
Conversión precisa: Asegúrate de que el evento de conversión se dispare en el momento exacto en que se completa la acción deseada.
-
Incluir valor: Para objetivos relacionados con compras o ingresos, incluye siempre el campo
valuepara calcular el valor monetario de cada variante. -
Datos contextuales: Incluye información relevante en el campo
metadatapara análisis más detallados. -
Reintentos: Implementa un mecanismo de reintentos para casos de error de red, ya que es crucial no perder conversiones.
Implementación en el script de tracking
// Función para registrar conversiones de experimentos
siteAnalyzer.trackConversion = function(experimentId, goalId, value = null, metadata = {}) {
return fetch('/api/experiments/convert', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'X-SA-API-KEY': this.apiKey
},
body: JSON.stringify({
site_id: this.siteId,
visitor_id: this.visitorId,
session_id: this.sessionId,
experiment_id: experimentId,
goal_id: goalId,
url: window.location.href,
value: value,
timestamp: Date.now(),
metadata: metadata
})
})
.then(response => response.json())
.catch(error => {
// Guardar en cola para reintento posterior
this.retryQueue.push({
type: 'convert',
payload: {
experiment_id: experimentId,
goal_id: goalId,
value: value,
metadata: metadata
}
});
console.error('Error registrando conversión:', error);
});
};
// Ejemplo de uso
siteAnalyzer.trackConversion('exp_12345', 'goal_1', 99.95, {
order_id: 'ord_98765',
coupon_applied: 'WELCOME10'
});Límites y cuotas
- Máximo de conversiones por minuto: 100 por IP
- Tamaño máximo de payload: 50KB
- Tamaño máximo de metadata: 10KB