🌐
Prueba técnica · Carlos García-Blanco

API · Inteligencia de Red

API REST de solo lectura que expone la inteligencia de red de ONEtoONE: contactos, puntuaciones y estadísticas de actividad por empresa y asesor.

Base URL /api.php
GET /api.php?domain={domain}

Devuelve los contactos de red para una empresa identificada por dominio, junto con el score de relación de cada asesor y el desglose de puntuación.

Parámetros

NombreTipoRequeridoDescripción
domain string Dominio de la empresa (ej. acme.com). Solo caracteres alfanuméricos, . y -. Máx. 253 caracteres.

Ejemplo

curl Probar →
curl "http://localhost/api.php?domain=acme.com"

Respuesta

JSON
{
  "company": "Acme Ltd",
  "domain":  "acme.com",
  "company_meta": {
    "sector":   "Tecnología",
    "city":     "Madrid",
    "country":  "España",
    "employees": 320,
    "ebitda_m":  4.2,
    "stage":    "mandato",
    "web":      "https://acme.com",
    "notes":    "Empresa objetivo clave para Q1."
  },
  "network_contacts": [
    {
      "user_id":    1,
      "user_name":  "Ana Martínez",
      "user_email": "ana@onetoone.es",
      "user_phone": "+34 600 111 222",
      "score":      68,
      "score_label": "high",
      "interaction_count": 3,
      "first_contact_at":  "2023-03-10",
      "last_contact_at":   "2025-01-15",
      "identified_contact":      "John Smith",
      "identified_contact_role": "CFO",
      "score_breakdown": [
        {
          "type":   "interaction",
          "points": 15,
          "date":   "2025-01-15",
          "itype":  "reunion",
          "label":  "Interacción registrada"
        },
        {
          "type":   "bonus",
          "points": 20,
          "date":   "2025-01-15",
          "label":  "Relación activa: último contacto el 2025-01-15 (menos de 12 meses)"
        }
      ]
    }
  ]
}
GET /api.php?id={id}

Igual que ?domain= pero identifica la empresa por su ID numérico interno.

Parámetros

NombreTipoRequeridoDescripción
id integer ID interno de la empresa. Entero positivo (≥ 1).

Ejemplo

curl Probar →
curl "http://localhost/api.php?id=1"
GET /api.php?stats=top_users

Devuelve el ranking de asesores ordenados por número total de interacciones registradas.

Parámetros

NombreTipoRequeridoDescripción
stats string Debe ser top_users.
limit integer no Número de resultados a devolver. Rango: 1–50. Por defecto: 5.

Ejemplo

curl Probar →
curl "http://localhost/api.php?stats=top_users&limit=3"

Respuesta

JSON
{
  "stats": "top_users",
  "limit": 3,
  "data": [
    { "user_id": 2, "user_name": "Carlos López",   "total_interactions": 9 },
    { "user_id": 1, "user_name": "Ana Martínez",    "total_interactions": 7 },
    { "user_id": 4, "user_name": "María Fernández", "total_interactions": 5 }
  ]
}

Reglas de puntuación

El campo score se calcula sumando puntos por cada interacción más bonificaciones por calidad de la relación.

Puntos por tipo de interacción

Tipo (itype)PuntosDescripción
reunion+15Reunión presencial o videoconferencia
llamada+10Llamada telefónica
email+7Intercambio de correo electrónico
evento+5Contacto en evento o conferencia
+10Tipo desconocido o no informado (fallback)

Bonificaciones por calidad de la relación

ReglaPuntosCondición
Relación activa+20Al menos una interacción en los últimos 12 meses
Relación continuada+15Interacciones registradas en más de un año natural distinto
Relación de profundidad+10El mismo contacto de empresa aparece en 2 o más interacciones
Contacto identificado+5Se conoce el nombre del contacto concreto en la empresa

Etiquetas de score

Campo score_labelRango de puntuación
high≥ 50 puntos
medium25 – 49 puntos
low0 – 24 puntos

Modelo de datos

Tipos de interacción (itype)

Valores posibles para el campo itype en el desglose de puntuación.

Enum
"reunion" | "llamada" | "email" | "evento"

Estados de la relación (stage)

Valores posibles para el campo stage en company_meta.

ValorEtiqueta
prospectandoProspectando
en_conversacionEn conversación
mandatoMandato activo
cerradoCerrado
descartadoDescartado

Errores

HTTPCondiciónCuerpo de respuesta
400 Parámetros ausentes o inválidos {"error": "Missing or invalid parameter.", "routes": {...}}
404 Empresa no encontrada {"error": "Company not found."}
500 Error interno del servidor {"error": "An internal error occurred."}