Inicio de sesión

Potenciar los análisis de usuarios con la identidad

Descubre cómo Auth0 ayuda en tu proceso de toma de decisiones y facilita la recopilación de datos sobre tus usuarios. Explora un ejemplo específico de análisis de usuarios, que incluya fragmentos de código.

powering-user-analytics-identity

El problema

InnovaShoes es un fabricante de calzado que vende sus productos a través de una tienda en línea. La empresa tiene previsto lanzar una nueva línea de zapatillas para correr masculinas con tecnología de punta. Como parte de este lanzamiento, InnovaShoes pondrá en marcha una campaña de marketing dirigida a los clientes masculinos existentes que hayan mostrado interés por el fitness. La campaña tiene tres objetivos:

  • Enviar un correo electrónico de pedido previo sobre las nuevas zapatillas para correr a los clientes masculinos de su tienda en línea. Además, quieren segmentar a estos usuarios por edad y por interés en el fitness, ya que los hombres de entre 20 y 40 años tienen más probabilidades de tener tanto el interés como el ingreso adecuado para comprar un producto premium de fitness.
  • Quieren saber qué usuarios registrados no han vuelto tras registrarse, para ofrecerles un descuento especial que los atraiga de nuevo.
  • Por último, como saben que muchos de sus clientes utilizan Twitter, InnovaShoes quiere entender mejor qué opinan de la empresa los clientes que utilizan esta red social.

InnovaShoes quiere recopilar la información necesaria sobre los usuarios de su tienda en línea para ejecutar su campaña de marketing, y razonan que el mejor momento para recopilar estos datos será a la hora de registrarse e iniciar sesión. Ahí es donde la gestión de identidades y, en particular, Auth0 pueden ayudar.

La solución

Cuanto mejor conozca InnovaShoes a sus clientes, más podrá personalizar su experiencia, aportándoles más valor. Los inicios de sesión con credenciales de redes sociales permiten a la empresa aprovechar los datos recopilados por Facebook, Twitter y otras redes sociales para mejorar el conocimiento de los clientes y tratarlos como individuos. Añadir inicios de sesión con credenciales de redes sociales a las aplicaciones es muy sencillo con Auth0, y es un buen punto de partida para obtener datos de clientes. Los inicios de sesión con credenciales de redes sociales tienen varias ventajas:

  • Direcciones de correo electrónico de mejor calidad: El proveedor de la red social se encarga de verificar el correo electrónico del usuario. Si el proveedor comparte esta información, obtendrás una dirección de correo electrónico real en lugar de las direcciones falsas que proporcionan algunos usuarios cuando se registran en las aplicaciones web.
  • Acceso a perfiles de usuario más ricos: Los proveedores de redes sociales a menudo pueden proporcionar información adicional sobre los usuarios, como su ubicación, intereses y fecha de nacimiento. Con estos datos, puedes dirigir contenidos personalizados y pertinentes a los usuarios.
  • Perfiles actualizados: Los usuarios no suelen mantener actualizados sus perfiles en los sitios web menos visitados, pero sí los de sus redes sociales. Los inicios de sesión con credenciales de redes sociales pueden proporcionarte información más precisa sobre tus clientes.
  • Mayor seguridad en el inicio de sesión: Cuando los usuarios no tienen que crear otro nombre de usuario y contraseña, es más probable que apliquen buenas prácticas a la hora de elegir contraseñas difíciles de adivinar y que utilicen la autenticación multifactor para los pocos sitios, como las redes sociales, que guardan su información de identidad. Tus clientes están cansados de la gran cantidad de nombres de usuario y contraseñas; por eso, van a “Iniciar sesión con Facebook”.

Esta información es muy útil para obtener datos y datos demográficos sobre tus usuarios, lo que a su vez es útil para campañas de marketing dirigidas o en las decisiones de gestión de productos.

¿Cómo se obtienen los análisis de usuarios?

Auth0 incluye una potente función llamada “reglas” (pequeños fragmentos de código Javascript que se ejecutan como parte de cada autenticación) que te permiten ampliar la plataforma como necesites e implementar funciones avanzadas. Esta extensibilidad será el secreto de la implementación de InnovaShoes.

Cuando los usuarios se registran en la tienda en línea utilizando un inicio de sesión con credenciales de redes social, InnovaShoes puede utilizar una regla que llame a una API de un servicio como FullContact para ampliar la información del usuario: ubicación, edad, sexo, nivel de ingresos, pertenencia a redes sociales, etc., y además llama a la API de la red social para ampliar el perfil del usuario con intereses, gustos, gráfico social, etc. Crea una regla para acceder a potentes API de análisis social de terceros; por ejemplo, invocar un servicio de análisis de sentimientos para evaluar los tweets de los usuarios que mencionan @InnovaShoes. Crea otra regla que guarde la información del usuario en la plataforma de análisis que elijas, ya sea guardada en un almacén de datos y analizada con un paquete de productos de BI, transmitida a una plataforma de análisis de Big Data basada en Hadoop, cargada en un servicio de indexación de texto completo, extraída a un producto de análisis SaaS… lo que sea que necesiten tus científicos de datos y tu equipo de marketing.

El siguiente fragmento muestra la información básica de un perfil de usuario de Auth0:

{
    'email': 'johndoe@gmail.com',
    'email_verified': false,
    'updated_at': '2016-01-18T19:42:13.322Z',
    'picture': 'https://s.gravatar.com/avatar/1fda90f0e712deed531294cd044a2d05?s=480&r=pg&d=https%3A%2F%2Fcdn.auth0.com%2Favatars%2Fkl.png',
    'user_id': 'auth0|569d401336afe17803eba2ba',
    'name': 'johndoe@gmail.com',
    'nickname': 'johndoe',
    'identities': [
        {
            'user_id': '569d401336afe17803eba2ba',
            'provider': 'auth0',
            'connection': 'Username-Password-Authentication',
            'isSocial': false
        }
    ],
    'created_at': '2016-01-18T19:42:11.846Z',
    'last_ip': '174.66.196.104',
    'last_login': '2016-01-18T19:42:13.322Z',
    'logins_count': 1,
    'blocked_for': []
}

Observa cómo parte de esta información es directamente útil para la campaña. Por ejemplo, utilizando la propiedad `last_login`, Innovashoes puede determinar si un usuario lleva un tiempo sin conectarse y enviarle una oferta si vuelve a la tienda.

Puedes utilizar la API de FullContact para obtener información ampliada sobre tus usuarios, como las redes sociales asociadas a su dirección de correo electrónico. Para ello, puedes utilizar la plantilla FullContact al crear una nueva regla en el panel de gestión de Auth0.

Combinada, esta información puede ayudarte a realizar análisis más complejos necesarios para la campaña, como averiguar quiénes de tus clientes son los hombres de 20 a 40 años (FullContact) que están interesados en el fitness (Facebook). Con este perfil ampliado puedes conectarte a una base de datos o a un servicio de indexación/búsqueda, como ElasticSearch, para almacenar los datos de los usuarios registrados. Esto se puede hacer utilizando una regla, o en un proceso diferente utilizando un cron job, como se muestra en este ejemplo. Si decides guardar la información del usuario a partir de una regla, obtendrás un análisis en tiempo real. Por otro lado, si utilizas un cron job, obtendrás los análisis solo con la frecuencia con la que se ejecute la tarea. Debes decidir cuál es el mejor enfoque para tu caso/necesidades, teniendo en cuenta la posibilidad de que si tienes millones de usuarios, guardar información en tiempo real podría suponer una carga enorme y tu servicio podría no ser capaz de gestionarlo.

Incluso puedes enviar esta información directamente a un proveedor de análisis de SaaS como Azure Stream Analytics, RapidMiner, una instancia de Hadoop o a donde desees.

Cada vez que un usuario inicia sesión, ese acontecimiento es una fuerte señal de compromiso. Puedes obtener aún más información sobre tus preferencias e intereses utilizando reglas de Auth0 para registrar cada evento de autenticación en tu sistema de análisis y, a continuación, correlacionar estos eventos con otras señales, como los artículos colocados en tu carrito de compras, las páginas visitadas, los comentarios dejados, etc. Esta idea de “descubrimiento progresivo” es una poderosa forma de construir un perfil completo de un usuario a lo largo del tiempo, tanto pidiéndole información como observando su comportamiento.

Una vez almacenada la información necesaria, puedes crear un panel de control con widgets que den forma a tus análisis en un formato fácil de leer. El siguiente repositorio contiene el código fuente de un sencillo panel de control que accede directamente a los perfiles de usuario en Auth0, y que puedes tomar como punto de partida para crear el tuyo.

Tus científicos de datos o expertos en métricas de marketing pueden tener su propio método preferido para visualizar los datos de los usuarios y los análisis derivados, en función de tus necesidades específicas. La plataforma de Auth0, basada en API y fácilmente ampliable, se adapta a cualquier plataforma de análisis, por más sencilla o compleja que sea. Auth0 no te carga con análisis y visualizaciones preconstruidos e inflexibles como parte de tu plataforma de identidad; dejamos los análisis y las herramientas de apoyo a la toma de decisiones a los expertos en esos campos, pero nos integramos con las mejores soluciones con solo unas pocas líneas de Javascript.

Ejemplo de panel de control de análisis

Ejemplo de panel de control de análisis

Por último, puedes añadir otra regla que envíe el identificador de Twitter de un usuario, si está disponible, a una API que busque los tweets del usuario que mencionan @InnovaShoes y evalúe su sentimiento. Con esta información, el departamento de marketing puede enviar un correo electrónico a los usuarios que tuitearon un sentimiento negativo sobre la empresa para intentar arreglar o neutralizar la situación.

Para obtener estadísticas casi en tiempo real, podrías almacenar en búfer los eventos de autenticación de alta frecuencia utilizando un componente de cola como RabbitMQ, de código abierto, y tener una regla que envíe la información de inicio de sesión: la cola enviará entonces la información al almacén de datos, la plataforma de análisis o la solución de análisis de SaaS. Esto se muestra en el siguiente diagrama.

Arquitectura de casos de uso con análisis en tiempo real

Arquitectura de casos de uso con análisis en tiempo real

Conclusión

Auth0 es una potente plataforma de autenticación, no un motor de análisis, por lo que no proporciona análisis elaborados de forma inmediata. Sin embargo, el motor de reglas de Auth0 le da la flexibilidad para extraer fácilmente cualquier dato que necesites de los eventos de autenticación, y mejorar los datos del perfil del usuario a través de API web a medida que los usuarios se registran y autentican. Con esta potente capacidad en tiempo real, puedes implementar cualquier situación analítica que puedas imaginar. Auth0 incluye una lista cada vez mayor de plantillas de reglas divididas por categorías. El poder está ahí para que lo utilices en la entrega de una experiencia aún más personalizada para tus clientes a través de análisis de usuarios avanzados. Añadir el inicio de sesión con credenciales de redes sociales a tus aplicaciones solo te llevará unos minutos, y te proporcionará información rica y actualizada sobre tus usuarios. Al combinar ambas capacidades, se te presenta un infinito abanico de posibilidades para descubrir nuevas formas de captar la atención de tus usuarios.

Crear una nueva regla utilizando plantillas

Crear una nueva regla utilizando plantillas

¡Pruébalo hoy mismo! Auth0 tiene planes para todas las necesidades, incluido un plan gratuito para siempre que admite hasta 7000 usuarios activos y dos proveedores de identidad social. Para obtener más información, consulta la página de Precios, o contacta al equipo de ventas de Auth0 si tienes alguna pregunta o necesidad personalizada.

Apéndice A: Código del prototipo

A continuación, se muestran algunos fragmentos de código de ejemplo útiles para implementar la lógica descrita en este caso de uso.

Regla de enriquecimiento del perfil

La regla que llama a la API de FullContact para enriquecer el perfil del usuario se puede ver en el siguiente código:

function (user, context, callback) {
  const FULLCONTACT_KEY = configuration.FULLCONTACT_KEY;

  // skip if no email
  if (!user.email) return callback(null, user, context);

  // skip if fullcontact metadata is already there
  if (user.user_metadata && user.user_metadata.fullcontact) return callback(null, user, context);

  request.get('https://api.fullcontact.com/v2/person.json', {
    qs: {
      email:  user.email,
      apiKey: FULLCONTACT_KEY
    },
    json: true
  }, (error, response, body) => {
    if (error || (response && response.statusCode !== 200)) {
      // swallow fullcontact api errors and just continue login
      return callback(null, user, context);
    }

    // si llegamos aquí, significa que fullcontact devolvió información y la añadiremos a los metadatos
    user.user_metadata = user.user_metadata || {};
    user.user_metadata.fullcontact = body;

    auth0.users.updateUserMetadata(user.user_id, user.user_metadata);
    context.idToken['https://example.com/fullcontact'] = user.user_metadata.fullcontact;
    return callback(null, user, context);
  });
}

Esta es una versión simplificada de la plantilla de FullContact proporcionada por Auth0. Esta versión no tiene integración con Slack para registrar errores.

Como se ve en el código anterior, cuando se encuentre información sobre el usuario, se añadirá a la propiedad user.user_metadata.fullcontact.

Cómo crear una función que obtenga la edad del usuario a partir de un perfil de usuario enriquecido

El siguiente código muestra cómo crear un método que obtenga la edad del usuario a partir de su perfil enriquecido. Puedes obtener otra información sobre el usuario de forma similar.

function getAge(user) {
    if (user.age) {
        return user.age;
    }

    var fullContactInfo = user.user_metadata.fullContactInfo || user.app_metadata.fullContactInfo;

    if (fullContactInfo && fullContactInfo.age) {
        return fullContactInfo.age;
    }
    if (fullContactInfo && fullContactInfo.demographics && fullContactInfo.demographics.age) {
        return fullContactInfo.demographics.age;
    }
    if (fullContactInfo && fullContactInfo.demographics && fullContactInfo.demographics.birthDate) {
        return moment().diff(fullContactInfo.demographics.birthDate, 'years');
    }

    if (user.dateOfBirth) {
        return moment().diff(user.dateOfBirth, 'years');
    }

    if (user.birthday) {
        return moment().diff(user.birthday, 'years');
    }

    return null;
}

Regla para obtener el identificador de Twitter del usuario y enviarlo a la API de Sentiment

La siguiente regla muestra cómo se puede obtener el identificador de Twitter de un usuario y enviar los datos a la API de Sentiment. Este proceso debe realizarse solo una vez por usuario; por esa razón estamos estableciendo la variable sentiment_initialized a true (verdad) cuando se procesa el usuario.

function (user, context, callback) {
  user.app_metadata = user.app_metadata || {};
  if (user.app_metadata.sentiment_initialized) {
    return callback(null, user, context);
  }

  var twitterHandle = getTwitterHandle(user);

  if (!twitterHandle) {
    return callback(null, user, context);
  }

  // Deberías hacer tus peticiones sobre SSL para proteger los secretos de tu aplicación.
  request.post({
    url: 'https://innovashoes.com/twittersentiment',
    json: {
      twitterHandle: twitterHandle,
      secretToken: configuration.TWITTER_SECRET_TOKEN
    },
    timeout: 15000
  }, function(err, response, body){
    if (err) return callback(new Error(err));
    user.app_metadata.sentiment_initialized = true;
    auth0.users.updateAppMetadata(user.user_id, user.app_metadata)
      .then(function(){
        callback(null, user, context);
      })
      .catch(function(err){
        callback(err);
      });
  });
}

function getTwitterHandle(user) {
    var fullContactInfo = user.user_metadata.fullContactInfo || user.app_metadata.fullContactInfo;
    if (fullContactInfo && fullContactInfo.socialProfiles) {
      for (var key in fullContactInfo.socialProfiles) {
        if (fullContactInfo.socialProfiles[key].type === 'twitter'){
          return fullContactInfo.socialProfiles[key].username;
        }
       }
    }
    return null;
}

Código de ejemplo del panel de control

Puedes encontrar el código de ejemplo del panel de control en este repositorio. Puedes utilizarlo como punto de partida y construir el tuyo. El archivo readme te proporcionará información para ejecutar el ejemplo. Puedes ver una versión en directo aquí.

Regístrese gratis

Empiece a construir hoy mismo y proteja sus aplicaciones con la plataforma de identidad Auth0.

3D login box