Skip to content

Eventos

La plataforma emite CustomEvents del navegador sobre window. Todos los eventos usan el prefijo mindtraining: y su payload siempre está disponible en event.detail.


mindtraining:ready

Se dispara cuando: el script ha terminado de cargar y la API global MindtrainingPlatform está disponible en window.

Cuándo usarlo: es el hook recomendado para llamar a init. Escuchando este evento evitas condiciones de carrera entre la carga del script y la ejecución de tu código de inicialización.

event.detail

CampoTipoDescripción
apiobjectReferencia a window.MindtrainingPlatform
js
window.addEventListener('mindtraining:ready', function (event) {
  // event.detail.api === window.MindtrainingPlatform
  MindtrainingPlatform.init('mindtraining', {
    viewer: { loggedIn: false },
  })
})

¿El script ya estaba cargado? Si registras el listener después de que el script ya se haya ejecutado, el evento no volverá a dispararse. Usa este patrón de guardia:

js
function initializeMindtraining() {
  MindtrainingPlatform.init('mindtraining', {
    viewer: { loggedIn: false },
  })
}

if (window.MindtrainingPlatform) {
  initializeMindtraining()
} else {
  window.addEventListener('mindtraining:ready', initializeMindtraining, { once: true })
}

mindtraining:config

Se dispara cuando: la configuración de la plataforma se actualiza, tanto después del init() inicial como tras cualquier llamada posterior a updateConfig().

Cuándo usarlo: úsalo para reaccionar a cambios de configuración desde fuera de la plataforma, por ejemplo para sincronizar el estado de tu propia UI (como reflejar un cambio de suscripción o de login que la plataforma acaba de recibir).

event.detail

El objeto completo PlatformInitConfig normalizado en el momento del cambio.

CampoTipoDescripción
viewerobjectConfiguración actual del visor/usuario
viewer.userIdstring | nullID del usuario activo
viewer.loggedInbooleanSi el usuario está autenticado
viewer.subscribedbooleanSi el usuario tiene una suscripción activa
uiobjectConfiguración actual de UI
ui.mode'web' | 'app'Modo de renderizado
ui.actionsobjectCallbacks de acciones registradas
accessobjectReglas actuales de acceso por tipo de juego
js
window.addEventListener('mindtraining:config', function (event) {
  const config = event.detail

  console.log('Usuario autenticado:', config.viewer?.loggedIn)
  console.log('Usuario suscrito:', config.viewer?.subscribed)
  console.log('Reglas de acceso activas:', config.access?.games)
})

Eventos de juego y navegación

Los siguientes eventos se emiten durante el juego y la navegación. Úsalos para analítica, tracking, integraciones del host y observabilidad.


mindtraining:game:loaded

Se dispara cuando: una sesión o pantalla de juego está lista para la interacción del usuario.

Cuándo usarlo: úsalo para trackear pageviews internas del juego, medir qué juegos llegan realmente a cargarse o disparar lógica del host en función del tipo de juego.

event.detail

CampoTipoDescripción
gameTypestringTipo de juego (por ejemplo crossword, sudoku)
gameIdstringIdentificador único del juego
variantstringVariante del juego (por ejemplo default, mini)
routestringRuta interna
sourcestringOrigen del juego (por ejemplo today, archive)
js
window.addEventListener('mindtraining:game:loaded', function (event) {
  Analytics.track('mindtraining_game_loaded', event.detail)
})

mindtraining:game:playing

Se dispara cuando: el usuario empieza a interactuar realmente con el juego (por ejemplo, primer movimiento o primera entrada).

Cuándo usarlo: úsalo para distinguir entre un juego cargado y un juego realmente jugado, medir activación o trackear engagement.

event.detail

CampoTipoDescripción
gameTypestringTipo de juego
gameIdstringIdentificador único del juego
variantstringVariante del juego
startedAtstringMarca temporal ISO 8601 del inicio
js
window.addEventListener('mindtraining:game:playing', function (event) {
  Analytics.track('mindtraining_game_playing', event.detail)
})

mindtraining:game:completed

Se dispara cuando: el usuario completa un juego correctamente.

Cuándo usarlo: úsalo para funnels completos, analítica de dificultad o ranking/gamificación del lado host.

event.detail

CampoTipoDescripción
gameTypestringTipo de juego
gameIdstringIdentificador único del juego
variantstringVariante del juego
completedAtstringMarca temporal ISO 8601 de fin
durationMsnumberDuración de la sesión en milisegundos
scorenumberPuntuación final (si aplica)
js
window.addEventListener('mindtraining:game:completed', function (event) {
  Analytics.track('mindtraining_game_completed', event.detail)
})

mindtraining:game:abandoned

Se dispara cuando: el usuario abandona una sesión de juego después de empezar a jugar y antes de completarla.

Cuándo usarlo: úsalo para detectar fricción, medir abandono por juego o variante, o mejorar flujos de retención.

event.detail

CampoTipoDescripción
gameTypestringTipo de juego
gameIdstringIdentificador único del juego
variantstringVariante del juego
durationMsnumberTiempo invertido antes de abandonar
progressnumberProgreso (0–1) en el momento del abandono
js
window.addEventListener('mindtraining:game:abandoned', function (event) {
  Analytics.track('mindtraining_game_abandoned', event.detail)
})

mindtraining:game:state:saved

Se dispara cuando: el estado del juego se persiste (por ejemplo, para la funcionalidad de “continuar jugando”).

Cuándo usarlo: úsalo para trackear retención, flujos de “continuar jugando” o verificar que el estado guardado funciona correctamente.

event.detail

js
window.addEventListener('mindtraining:game:state:saved', function (event) {
  Analytics.track('mindtraining_game_state_saved', event.detail)
})

mindtraining:access:blocked

Se dispara cuando: la plataforma detecta que una superficie (juego de hoy, archivo, etc.) está bloqueada para el usuario.

Cuándo usarlo: úsalo para disparar paywalls contextuales, medir demanda no satisfecha o personalizar mensajes del host según el motivo del bloqueo.

event.detail

js
window.addEventListener('mindtraining:access:blocked', function (event) {
  Analytics.track('mindtraining_access_blocked', event.detail)
  if (event.detail.blockedReason === 'subscription_required') {
    Paywall.show({ context: 'game_archive' })
  }
})

mindtraining:route:changed

Se dispara cuando: cambia la ruta interna de la plataforma (por ejemplo, navegación dentro de la SPA).

Cuándo usarlo: úsalo para pageviews virtuales o para sincronizar analítica con la navegación interna de la plataforma.

event.detail

js
window.addEventListener('mindtraining:route:changed', function (event) {
  Analytics.track('mindtraining_route_changed', event.detail)
})

mindtraining:pageview

Se dispara cuando: la plataforma registra una vista navegable relevante para analítica.

Cuándo usarlo: úsalo para pageview tracking en herramientas analíticas, reporting por sección y tipo de juego o atribución de navegación interna de la SPA.

event.detail

CampoTipoDescripción
pathnamestringRuta actual
titlestringTítulo de la página
gameTypestringTipo de juego, si aplica
gameIdstringIdentificador del juego, si aplica
variantstringVariante del juego, si aplica
sourcestringOrigen de la vista (por ejemplo, today, archive)
js
window.addEventListener('mindtraining:pageview', function (event) {
  Analytics.track('mindtraining_pageview', event.detail)
})

mindtraining:user:action

Se dispara cuando: el usuario realiza una interacción clave (por ejemplo, pulsa archivo o selecciona un juego).

Cuándo usarlo: úsalo para trackear clics relevantes, ejecutar experimentos o instrumentar la UI sin cablear cada botón desde el host.

event.detail

CampoTipoDescripción
actionstringIdentificador de la acción (por ejemplo, click_archive)
locationstringUbicación de la UI (por ejemplo, home_header)
gameTypestringTipo de juego, si aplica
variantstringVariante del juego, si aplica
indexnumberPosición zero-based del bloque/item de juego clicado en la lista renderizada, si aplica
urlstringURL externa seleccionada desde navegación, si aplica

Valores actuales de action:

ValorSignificado
click_playEl usuario pulsa una CTA para jugar o abrir un juego
click_archiveEl usuario pulsa una CTA de archivo o historial
click_startEl usuario empieza un juego desde la pantalla intermedia
click_backEl usuario pulsa una CTA de volver o navegación
click_navEl usuario pulsa un enlace de navegación externo

Valores actuales de location:

ValorSuperficie
home_block_gameCard o bloque de juego en la home
home_block_dynamic_gamesBloque dinámico de juegos en la home
historical_game_blockBloque de juegos históricos o recientes
intermediate_game_screenPantalla intermedia mostrada antes de entrar a un juego
game_navigationCabecera de navegación dentro del juego
site_navMenú de navegación del sitio
game_navigation_menuMenú de navegación dentro del juego
js
window.addEventListener('mindtraining:user:action', function (event) {
  Analytics.track('mindtraining_user_action', event.detail)
})

mindtraining:share:requested

Se dispara cuando: el usuario intenta compartir contenido desde la plataforma.

Cuándo usarlo: úsalo para analítica de intención de compartir o para conectarlo con el flujo nativo de compartir del host.

event.detail

CampoTipoDescripción
gameTypestringTipo de juego
gameIdstringIdentificador del juego
urlstringURL a compartir
titlestringTítulo a compartir
js
window.addEventListener('mindtraining:share:requested', function (event) {
  Analytics.track('mindtraining_share_requested', event.detail)
})

mindtraining:error

Se dispara cuando: ocurre un error de flujo, carga o interacción relevante para el host.

Cuándo usarlo: úsalo para observabilidad, alertas o UI de fallback del lado del host.

event.detail

CampoTipoDescripción
scopestringÁmbito del error (por ejemplo, game-load)
codestringCódigo del error (por ejemplo, GAME_DATA_FETCH_FAILED)
messagestringMensaje legible
recoverablebooleanSi el usuario puede recuperarse del error
js
window.addEventListener('mindtraining:error', function (event) {
  Analytics.track('mindtraining_error', event.detail)
  if (!event.detail.recoverable) {
    ErrorUI.show(event.detail)
  }
})

Eventos recomendados para analítica

Un enfoque práctico para la analítica del host es escuchar:

  1. mindtraining:ready - para saber cuándo es seguro inicializar
  2. mindtraining:config - para trackear cambios de configuración
  3. mindtraining:game:loaded - para medir cargas de juegos
  4. mindtraining:pageview - para trackear pageviews
  5. mindtraining:game:playing - para medir activación
  6. mindtraining:game:completed - para medir juegos completados
  7. mindtraining:access:blocked - para medir demanda bloqueada
  8. mindtraining:error - para monitorizar errores
js
window.addEventListener('mindtraining:game:loaded', function (event) {
  Analytics.track('mindtraining_game_loaded', event.detail)
})
window.addEventListener('mindtraining:game:playing', function (event) {
  Analytics.track('mindtraining_game_playing', event.detail)
})
window.addEventListener('mindtraining:pageview', function (event) {
  Analytics.track('mindtraining_pageview', event.detail)
})
window.addEventListener('mindtraining:access:blocked', function (event) {
  Analytics.track('mindtraining_access_blocked', event.detail)
})

Client integration documentation maintained in-repo.