Skip to main content

GTM — User Email Hashed in Cookie

Script que captura el email y teléfono del usuario durante el checkout, los hashea con dos algoritmos distintos y los almacena en cookies de dominio. Si el hash del email ha cambiado respecto al valor guardado, empuja eventos al dataLayer con los identificadores hasheados — nunca en claro.


Dependencia externa​

<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>

CryptoJS se usa activamente en este script (a diferencia de Tooltip CTA Login que lo importa sin usarlo).


Detección del tipo de usuario​

El script lee el mismo input que Abandoned Cart para determinar si el usuario está logado:

[name="gtmAbandonedCartUserIsLogged"] → value: "true" / "false"

El resultado condiciona los selectores del email y teléfono:

CampoUsuario logadoUsuario guest
Email[name="gtmAbandonedCartShippingDataEmail"]#email
Prefijo teléfono(no se lee)#phonePrefix
Teléfono[name="gtmAbandonedCartShippingDataPhone"]#phone
Prefijo telefónico

El prefijo (#phonePrefix) solo se lee para usuarios guest. El valor se normaliza eliminando el + antes de concatenarlo con el número. Para usuarios logados se asume que el campo de teléfono ya incluye el prefijo o que no es necesario.


Algoritmos de hash​

FunciónAlgoritmoClaveInputUso
hashEmail(email)HmacSHA512"fuckyouga360"Email normalizadoCookie custom-user-id + evento user-id
hashEmailSHA256(email)SHA256(ninguna)Email normalizadoCookie custom-user-id-256 + evento user-id-256
hashEmailSHA256(phone)SHA256(ninguna)Prefijo + númeroCookie custom-user-ph-256

Ambas funciones normalizan el input con .trim().toLowerCase() antes de hashear. La función hashEmailSHA256 se reutiliza para hashear el teléfono.


Cookies​

Las tres cookies se escriben con dominio de nivel superior y duración de 400 días:

Nombre cookieContenidoCuándo se escribe
custom-user-idHmacSHA512 del emailSolo si el hash difiere del valor guardado
custom-user-id-256SHA256 del emailSiempre que el email exista
custom-user-ph-256SHA256 del teléfono (prefijo + número)Solo si el hash difiere del valor guardado

Formato de la cookie:

nombre=valor; path=/; domain=.hawkersco.com; expires=<GMT+400días>

El dominio se calcula como "." + hostname.replace("www.", ""), lo que permite que la cookie sea accesible desde todos los subdominios.


Eventos GTM​

Se emite solo si el hash del email ha cambiado respecto al guardado en custom-user-id:

{
event: "user-id",
user_id: "<HmacSHA512 del email>",
user_id256: "<SHA256 del email>"
}

El teléfono no se incluye en ningún evento GTM — solo se almacena en cookie.


Comportamiento idempotente​

DatoEvento GTMCookie
Email (hash HmacSHA512 igual al guardado)No se emite user-idNo se sobreescribe custom-user-id
Email (hash HmacSHA512 diferente o nuevo)Se emite user-idSe actualiza custom-user-id
Email (siempre que exista)Se emite user-id-256Se actualiza custom-user-id-256
Teléfono (hash igual al guardado)No hay eventoNo se sobreescribe custom-user-ph-256
Teléfono (hash diferente o nuevo)No hay eventoSe actualiza custom-user-ph-256

Flujo de ejecución​

(al cargar el tag)
│
├─ Lee [name="gtmAbandonedCartUserIsLogged"] → inputUserIsLogged (bool)
├─ Selecciona inputEmailSelector según inputUserIsLogged
├─ Lee $userEmail, $userPhonePrefix (solo guest), $userPhone
│
├─ userPhoneNumber = prefix.replace("+","") + phone
│
├─ hashEmail(email) → userEmailHashed (HmacSHA512)
├─ hashEmailSHA256(email) → userEmailSHA256Hashed
├─ hashEmailSHA256(phoneNumber) → userPhoneSHA256Hashed
│
├─ getCookie("custom-user-id") → currentUserEmailHashedSaved
├─ getCookie("custom-user-ph-256") → currentUserPhoneSHA256HashedSaved
│
├─ Si userEmailHashed && userEmailHashed ≠ currentUserEmailHashedSaved:
│ ├─ setCookie("custom-user-id", userEmailHashed)
│ └─ dataLayer.push({ event: "user-id", user_id: ..., user_id256: ... })
│
├─ Si userEmailSHA256Hashed:
│ ├─ setCookie("custom-user-id-256", userEmailSHA256Hashed)
│ └─ dataLayer.push({ event: "user-id-256", user_id256: ... })
│
└─ Si userPhoneSHA256Hashed && userPhoneSHA256Hashed ≠ currentUserPhoneSHA256HashedSaved:
└─ setCookie("custom-user-ph-256", userPhoneSHA256Hashed)