Madurez del usuario
La madurez del usuario es una clasificacion automatica de los usuarios en segmentos de comportamiento. En lugar de segmentar manualmente a los usuarios, Presage calcula la madurez a partir de las senales de comportamiento.
Segmentos de madurez
Sección titulada «Segmentos de madurez»| Segmento | Descripcion | Umbral por defecto |
|---|---|---|
new | Recien comenzando | 3 sesiones o menos |
onboarding | Aprendiendo a usar la aplicacion | 4-10 sesiones |
active | Usuario regular mas alla de la incorporacion | Mas de 10 sesiones, menos de 5 funcionalidades usadas |
power | Gran adoptante de funcionalidades | 5+ funcionalidades distintas usadas |
dormant | Se ha quedado inactivo | 14+ dias desde la ultima visita |
Como se calcula la madurez
Sección titulada «Como se calcula la madurez»El calculo sigue este orden de prioridad:
- Verificacion de inactividad — Si el usuario no ha sido visto durante
dormantDaysInactivedias, esdormant(independientemente de otras senales) - Verificacion de nuevo — Si
sessionCountes igual o menor anewMaxSessions, esnew - Verificacion de poder — Si la cantidad de funcionalidades distintas usadas es igual o mayor a
powerMinFeatures, espower - Verificacion de incorporacion — Si
sessionCountes igual o menor aonboardingMaxSessions, esonboarding - Respaldo — De lo contrario, es
active
// Simplified version of the actual computationfunction computeMaturity(signals: BehavioralSignals, config: MaturityConfig): Maturity { const daysSinceLastSeen = daysBetween(new Date(signals.lastSeenAt), new Date())
if (daysSinceLastSeen >= config.dormantDaysInactive) return 'dormant' if (signals.sessionCount <= config.newMaxSessions) return 'new'
const featuresUsed = Object.keys(signals.featureUsage).length if (featuresUsed >= config.powerMinFeatures) return 'power' if (signals.sessionCount <= config.onboardingMaxSessions) return 'onboarding'
return 'active'}Configuracion de umbrales
Sección titulada «Configuracion de umbrales»Sobreescriba cualquier umbral mediante la configuracion maturity:
const client = createAdaptiveClient({ maturity: { newMaxSessions: 5, // Consider "new" for 5 sessions instead of 3 onboardingMaxSessions: 15, // Extend onboarding period powerMinFeatures: 8, // Require more features for "power" status dormantDaysInactive: 30, // Wait longer before marking as dormant }, // ...rules, persistence})La interfaz de configuracion completa:
interface MaturityConfig { newMaxSessions: number // Default: 3 onboardingMaxSessions: number // Default: 10 powerMinFeatures: number // Default: 5 dormantDaysInactive: number // Default: 14}Uso de la madurez en reglas
Sección titulada «Uso de la madurez en reglas»La madurez es accesible en el nivel superior del contexto (no anidada bajo traits o signals):
{ id: 'new-user-onboarding', adaptationId: 'onboarding', priority: 10, conditions: { all: [ { field: 'maturity', operator: 'eq', value: 'new' }, ], }, action: { type: 'show', variantId: 'guided-tour' },}Puede combinar la madurez con otras condiciones:
{ id: 'dormant-enterprise-reactivation', adaptationId: 'banner', priority: 20, conditions: { all: [ { field: 'maturity', operator: 'eq', value: 'dormant' }, { field: 'traits.plan', operator: 'eq', value: 'enterprise' }, ], }, action: { type: 'show', variantId: 'reactivation-offer' },}Ejemplo: Diferente incorporacion para cada nivel de madurez
Sección titulada «Ejemplo: Diferente incorporacion para cada nivel de madurez»import { createAdaptiveClient, createLocalStorageDriver } from '@presage-kit/core'
const client = createAdaptiveClient({ rules: [ { id: 'new-guided-tour', adaptationId: 'onboarding', priority: 50, conditions: { all: [{ field: 'maturity', operator: 'eq', value: 'new' }], }, action: { type: 'show', variantId: 'guided-tour' }, }, { id: 'onboarding-tips', adaptationId: 'onboarding', priority: 40, conditions: { all: [{ field: 'maturity', operator: 'eq', value: 'onboarding' }], }, action: { type: 'show', variantId: 'contextual-tips' }, }, { id: 'active-whats-new', adaptationId: 'onboarding', priority: 30, conditions: { all: [{ field: 'maturity', operator: 'eq', value: 'active' }], }, action: { type: 'show', variantId: 'whats-new' }, }, { id: 'power-changelog', adaptationId: 'onboarding', priority: 20, conditions: { all: [{ field: 'maturity', operator: 'eq', value: 'power' }], }, action: { type: 'show', variantId: 'changelog-only' }, }, { id: 'dormant-reengagement', adaptationId: 'onboarding', priority: 60, conditions: { all: [{ field: 'maturity', operator: 'eq', value: 'dormant' }], }, action: { type: 'show', variantId: 'welcome-back' }, }, ], persistence: { driver: createLocalStorageDriver('my-app'), },})Luego en su componente React:
import { Adaptive, Variant } from '@presage-kit/react'
function OnboardingFlow() { return ( <Adaptive id="onboarding" defaultVariant="contextual-tips"> <Variant id="guided-tour"> <GuidedTour /> </Variant> <Variant id="contextual-tips"> <ContextualTips /> </Variant> <Variant id="whats-new"> <WhatsNew /> </Variant> <Variant id="changelog-only"> <Changelog /> </Variant> <Variant id="welcome-back"> <WelcomeBack /> </Variant> </Adaptive> )}Transicion de madurez
Sección titulada «Transicion de madurez»La madurez se recalcula cada vez que las senales cambian (despues de cada llamada a track()). Esto significa que un usuario puede transicionar entre segmentos dentro de una misma sesion:
- El usuario llega (sesion 1) →
new - El usuario regresa para la sesion 4 →
onboarding - El usuario usa 5 funcionalidades distintas →
power - El usuario desaparece por 14 dias →
dormant
Su interfaz se adapta en cada transicion sin ninguna intervencion manual.