Saltar a contenido

Identidad y fusión de perfiles

Identificadores

Identificador Quién lo asigna Regla
profileId El origen (Jitsu / n8n). Web: web-<id anónimo estable>; SAP: sap-<código de cliente> Siempre el mismo para la misma persona; nunca uno por evento. Si no existe, Unomi crea el perfil.
sessionId El origen. Web: sesión de Jitsu; SAP: sap-<código>-<fecha> Nunca reutilizar entre personas: una sesión ya ligada a un perfil atribuye los eventos a ese perfil aunque llegue otro profileId.
Correo electrónico Se envía en el evento login (target.properties.email), normalizado (minúsculas, sin espacios) Clave de fusión entre orígenes.
Alias Unomi, al fusionar El id del perfil absorbido apunta al maestro; GET /cxs/profiles/<alias> devuelve el maestro.

El evento login

Es un evento protegido: solo lo aceptan las peticiones con la cabecera X-Unomi-Peer igual a la clave configurada y desde una IP autorizada. Lo envían Jitsu o n8n (nunca el navegador). Formato:

{
  "sessionId": "web-sesion-123",
  "profileId": "web-a1b2c3",
  "events": [{
    "eventType": "login",
    "scope": "tienda-web",
    "target": {"itemId": "cliente-42", "itemType": "user", "scope": "tienda-web",
               "properties": {"email": "ana@ejemplo.com", "firstName": "Ana", "lastName": "Pérez", "sapCustomerId": "C000042"}}
  }]
}

La regla de fusión

Validada en el banco de pruebas (eval-login-merge), a registrar en producción con el nombre definitivo:

{
  "metadata": {"id": "login-fusion-por-correo", "name": "login: fusiona perfiles por correo y copia datos"},
  "condition": {"type": "eventTypeCondition", "parameterValues": {"eventTypeId": "login"}},
  "actions": [
    {"type": "mergeProfilesOnPropertyAction", "parameterValues": {"mergeProfilePropertyName": "mergeIdentifier", "mergeProfilePropertyValue": "eventProperty::target.properties(email)"}},
    {"type": "copyPropertiesAction", "parameterValues": {"singleValueStrategy": "alwaysSet"}}
  ]
}

Comportamiento, verificado:

  1. En el primer login de un perfil, Unomi guarda el correo en systemProperties.mergeIdentifier (no en properties) y copyPropertiesAction copia target.properties al perfil.
  2. Si ya existe otro perfil con el mismo mergeIdentifier, se fusionan. El maestro es el primer perfil que devuelve la búsqueda (en la práctica, el que declaró el correo antes), salvo forceEventProfileAsMaster: true.
  3. El perfil absorbido se borra y su id queda como alias del maestro; sus sesiones y eventos se reasignan al maestro de forma asíncrona (menos de 1 s medido).
  4. Un evento posterior enviado con el id absorbido (cookie vieja, id de SAP) se atribuye al maestro.

Qué se conserva y qué se pierde en una fusión

Dato Resultado
Propiedades que solo tenía uno de los dos Se conservan en el maestro
Propiedades en conflicto (ambos con valor) Gana el perfil absorbido (defaultMergeStrategy sobrescribe el valor del maestro)
Segmentos Unión
Consentimientos Se conservan los vigentes
systemProperties Se fusionan
Eventos y sesiones Se reasignan al maestro
scores (scoring) del absorbido Se pierden (no se fusionan)
Id del absorbido Queda como alias; el documento de perfil desaparece

Consecuencia para el diseño: si SAP es la fuente de verdad de un dato (nombre, categoría de cliente) y el perfil SAP se fusiona en uno web, ese dato pisa al de la web. Si el orden es el inverso, la web pisa a SAP. Decidir por propiedad qué fuente debe ganar y, si hace falta, reenviar un updateProperties desde SAP tras la fusión.

Aliases por API

Operación Endpoint
Listar aliases de un perfil GET /cxs/profiles/{id}/aliases
Agregar un alias a mano (por ejemplo un id de otro sistema) POST /cxs/profiles/{id}/aliases/{aliasId}
Quitar un alias DELETE /cxs/profiles/{id}/aliases/{aliasId}
Leer un perfil por id o alias GET /cxs/profiles/{idOAlias}

Errores frecuentes

  • login ignorado sin rastro: falta X-Unomi-Peer, o la IP de origen no está en la lista autorizada (UNOMI_THIRDPARTY_PROVIDER1_IPADDRESSES; en producción incluye la subred de la VPC).
  • Dos perfiles con el mismo correo que no se fusionan: el correo llegó con distinta normalización, o el login se envió antes de que la regla estuviera activa.
  • Eventos atribuidos al perfil equivocado: sessionId reutilizado.