Documéntalo
Relaciónalo

Audiencias

Segmentación de clientes para campañas en Coordinalo

Audiencias

Las audiencias permiten segmentar clientes basándose en criterios como actividad, gasto, tags y comportamiento. Son la base para campañas de marketing y comunicaciones automatizadas.

Modelo de datos

interface Audience {
  id: string;
  name: string;
  description: string;
  criteria: AudienceCriteria[];
  matchCount: number;
  isActive: boolean;
  createdAt: string;
  updatedAt: string;
}

interface AudienceCriteria {
  field: 'lastSession' | 'totalSpent' | 'sessionsCount' | 'tags' |
         'createdAt' | 'provider' | 'service' | 'status';
  operator: 'equals' | 'notEquals' | 'greaterThan' | 'lessThan' |
            'contains' | 'notContains' | 'between' | 'daysAgo';
  value: string | number | string[];
}

interface AudiencePreview {
  matchCount: number;
  sampleClients: Client[];
  criteria: AudienceCriteria[];
}

Operadores disponibles

OperadorCódigoDescripciónCampos compatibles
IgualequalsValor exactoTodos
No igualnotEqualsDiferente deTodos
Mayor quegreaterThanMayor a valorNuméricos, fechas
Menor quelessThanMenor a valorNuméricos, fechas
ContienecontainsIncluye valorTags, texto
No contienenotContainsNo incluyeTags, texto
EntrebetweenRango de valoresNuméricos, fechas
Hace X díasdaysAgoDías desde hoyFechas

Campos de segmentación

CampoCódigoTipoDescripción
Última sesiónlastSessionfechaFecha de última sesión
Total gastadototalSpentnúmeroMonto total pagado
Cantidad sesionessessionsCountnúmeroTotal de sesiones
TagstagsarrayEtiquetas del cliente
Fecha registrocreatedAtfechaCuándo se creó el cliente
ProveedorprovideridProveedor asignado
ServicioserviceidServicio contratado
Estadostatusstringactive, inactive

Listar audiencias

GET /api/v1/audiences

Parámetros de query

ParámetroTipoDescripción
isActivebooleanSolo audiencias activas
searchstringBuscar por nombre
pagenumberPágina (default: 1)
limitnumberResultados por página (default: 20)

Ejemplo de respuesta

{
  "data": [
    {
      "id": "aud_001",
      "name": "Clientes inactivos 30+ días",
      "description": "Clientes sin sesiones en los últimos 30 días",
      "criteria": [
        {
          "field": "lastSession",
          "operator": "daysAgo",
          "value": 30
        },
        {
          "field": "status",
          "operator": "equals",
          "value": "active"
        }
      ],
      "matchCount": 45,
      "isActive": true,
      "createdAt": "2026-01-01T10:00:00Z"
    },
    {
      "id": "aud_002",
      "name": "Clientes VIP",
      "description": "Clientes con más de $500.000 gastados",
      "criteria": [
        {
          "field": "totalSpent",
          "operator": "greaterThan",
          "value": 500000
        }
      ],
      "matchCount": 23,
      "isActive": true,
      "createdAt": "2026-01-05T14:00:00Z"
    }
  ],
  "pagination": {
    "total": 8,
    "page": 1,
    "limit": 20,
    "totalPages": 1
  }
}

Crear audiencia

POST /api/v1/audiences

Body

{
  "name": "Clientes frecuentes",
  "description": "Clientes con 10+ sesiones que no vienen hace 15 días",
  "criteria": [
    {
      "field": "sessionsCount",
      "operator": "greaterThan",
      "value": 10
    },
    {
      "field": "lastSession",
      "operator": "daysAgo",
      "value": 15
    }
  ],
  "isActive": true
}

Respuesta exitosa (201)

{
  "id": "aud_new001",
  "name": "Clientes frecuentes",
  "description": "Clientes con 10+ sesiones que no vienen hace 15 días",
  "criteria": [
    {
      "field": "sessionsCount",
      "operator": "greaterThan",
      "value": 10
    },
    {
      "field": "lastSession",
      "operator": "daysAgo",
      "value": 15
    }
  ],
  "matchCount": 18,
  "isActive": true,
  "createdAt": "2026-01-20T10:00:00Z"
}

Obtener detalle de audiencia

GET /api/v1/audiences/:id

Respuesta

{
  "id": "aud_001",
  "name": "Clientes inactivos 30+ días",
  "description": "Clientes sin sesiones en los últimos 30 días",
  "criteria": [
    {
      "field": "lastSession",
      "operator": "daysAgo",
      "value": 30
    },
    {
      "field": "status",
      "operator": "equals",
      "value": "active"
    }
  ],
  "matchCount": 45,
  "isActive": true,
  "stats": {
    "avgDaysSinceLastSession": 52,
    "avgTotalSpent": 180000,
    "avgSessionsCount": 4.2
  },
  "campaigns": [
    {
      "id": "camp_001",
      "name": "Reactivación enero",
      "status": "sent",
      "sentAt": "2026-01-15T10:00:00Z"
    }
  ],
  "createdAt": "2026-01-01T10:00:00Z",
  "updatedAt": "2026-01-10T15:00:00Z"
}

Preview de audiencia

Obtiene una vista previa de los clientes que coinciden con los criterios.

GET /api/v1/audiences/:id/preview

Parámetros de query

ParámetroTipoDescripción
limitnumberCantidad de clientes a mostrar (default: 10)

Respuesta

{
  "audienceId": "aud_001",
  "matchCount": 45,
  "sampleClients": [
    {
      "id": "cli_001",
      "name": "Juan Pérez",
      "email": "[email protected]",
      "phone": "+56912345678",
      "lastSession": "2025-12-15T10:00:00Z",
      "daysSinceLastSession": 36,
      "totalSpent": 200000,
      "sessionsCount": 4
    },
    {
      "id": "cli_002",
      "name": "Ana López",
      "email": "[email protected]",
      "phone": "+56987654321",
      "lastSession": "2025-12-10T15:00:00Z",
      "daysSinceLastSession": 41,
      "totalSpent": 150000,
      "sessionsCount": 3
    }
  ],
  "criteria": [
    {
      "field": "lastSession",
      "operator": "daysAgo",
      "value": 30,
      "description": "Última sesión hace más de 30 días"
    }
  ]
}

Preview con criterios personalizados

Prueba criterios antes de crear la audiencia.

POST /api/v1/audiences/preview

Body

{
  "criteria": [
    {
      "field": "totalSpent",
      "operator": "between",
      "value": [100000, 300000]
    },
    {
      "field": "tags",
      "operator": "contains",
      "value": "kinesiologia"
    }
  ]
}

Respuesta

{
  "matchCount": 28,
  "sampleClients": [
    {
      "id": "cli_003",
      "name": "Pedro García",
      "email": "[email protected]",
      "totalSpent": 180000,
      "tags": ["kinesiologia", "mensual"]
    }
  ]
}

Actualizar audiencia

PUT /api/v1/audiences/:id

Body

{
  "name": "Clientes inactivos 45+ días",
  "criteria": [
    {
      "field": "lastSession",
      "operator": "daysAgo",
      "value": 45
    }
  ]
}

Respuesta exitosa (200)

{
  "id": "aud_001",
  "name": "Clientes inactivos 45+ días",
  "criteria": [
    {
      "field": "lastSession",
      "operator": "daysAgo",
      "value": 45
    }
  ],
  "matchCount": 32,
  "updatedAt": "2026-01-20T11:00:00Z"
}

El matchCount se recalcula automáticamente al actualizar los criterios.

Eliminar audiencia

DELETE /api/v1/audiences/:id

Respuesta exitosa (204)

No content.

No se pueden eliminar audiencias con campañas activas asociadas.

Listar clientes de audiencia

GET /api/v1/audiences/:id/clients

Parámetros de query

ParámetroTipoDescripción
pagenumberPágina (default: 1)
limitnumberResultados por página (default: 20)
sortBystringCampo de ordenamiento
sortOrderstringasc o desc

Respuesta

{
  "audienceId": "aud_001",
  "data": [
    {
      "id": "cli_001",
      "name": "Juan Pérez",
      "email": "[email protected]",
      "phone": "+56912345678",
      "lastSession": "2025-12-15T10:00:00Z",
      "totalSpent": 200000,
      "sessionsCount": 4,
      "tags": ["kinesiologia"]
    }
  ],
  "pagination": {
    "total": 45,
    "page": 1,
    "limit": 20,
    "totalPages": 3
  }
}

Exportar audiencia

POST /api/v1/audiences/:id/export

Body

{
  "format": "csv",
  "fields": ["name", "email", "phone", "lastSession", "totalSpent"]
}

Respuesta

{
  "downloadUrl": "https://exports.coordinalo.com/audiences/aud_001.csv",
  "clientsCount": 45,
  "expiresAt": "2026-01-21T10:00:00Z"
}

Audiencias predefinidas

Coordinalo incluye audiencias predefinidas que se actualizan automáticamente.

GET /api/v1/audiences/predefined

Respuesta

{
  "predefined": [
    {
      "id": "pred_inactive_30",
      "name": "Inactivos 30 días",
      "description": "Clientes sin sesiones en 30 días",
      "matchCount": 45,
      "canModify": false
    },
    {
      "id": "pred_new_clients",
      "name": "Clientes nuevos",
      "description": "Registrados en los últimos 7 días",
      "matchCount": 8,
      "canModify": false
    },
    {
      "id": "pred_pending_payment",
      "name": "Con saldo pendiente",
      "description": "Clientes con pagos por cobrar",
      "matchCount": 12,
      "canModify": false
    }
  ]
}

Webhooks

EventoDescripción
audience.createdNueva audiencia creada
audience.updatedAudiencia actualizada
audience.match_changedCambio significativo en matchCount

Ejemplo de webhook

{
  "event": "audience.match_changed",
  "data": {
    "audienceId": "aud_001",
    "audienceName": "Clientes inactivos 30+ días",
    "previousCount": 45,
    "newCount": 52,
    "change": 7,
    "changePercentage": 15.5
  },
  "timestamp": "2026-01-20T00:00:01Z"
}

On this page