This theme component allows you to send data about your site’s usage to Segment.
The component supports calling segment.identify when a user first logs on to the site. For site’s using SSO, you can either send the user’s Discourse ID, or their external_id to Segment. The component allow you to track views of the Discourse latest, categories, category, tag, and topic pages. It also allows you to track topic and post creation, likes, flags, and bookmarks.
Installation
Follow the Installing a theme or theme component guide to install the component. Use https://github.com/scossar/discourse-segment-theme-component to install it directly from its Git repository. You can also download it from here.
Configuration
Add your Segment Write Key to the segment write key setting. Then select which events you would like to track:
Las llamadas al método page de Segment se realizan para usuarios anónimos, pero el método identify de Segment solo se llama para usuarios con sesión iniciada.
Sé que llego extremadamente tarde a esta conversación, pero tengo una solicitud que espero que puedan atender.
¿Podrían agregar, además del ID de usuario, la dirección de correo electrónico del usuario cuando estos inicien sesión en Discourse?
En Segment, estoy intentando combinar los datos de Discourse con los datos de usuario para lo que podría ser el mismo usuario en el sitio web de mi empresa, con el fin de entender qué usuarios están consultando Discourse y visitando el sitio web, pero por ahora no puedo relacionar a los usuarios porque el ID de usuario de Discourse no coincide con el ID de usuario del sitio web.
Si pudiera relacionarlos cuando la dirección de correo electrónico sea la misma tanto en Discourse como en el sitio, sería de gran ayuda.
¡Plugin increíble, gracias @simon! Lo he estado usando durante unos meses y noto que de vez en cuando no detecta los eventos topic_created. No logro identificar ningún patrón en estos fallos, así que pensé en escribir por aquí. ¿Alguna idea? ¿Hay algún registro que pueda revisar para buscar errores?
Esto es técnicamente posible. Sin embargo, tengo algunas preocupaciones de seguridad y privacidad sobre agregar la dirección de correo electrónico al payload. Lo pensaré un poco y consultaré al equipo de Discourse para ver qué opinan. Si se agrega la dirección de correo electrónico al payload, habrá una configuración de tema para ello que, por defecto, no incluirá la dirección de correo electrónico.
Lo investigaré. Si llegas a encontrar un patrón, por favor avísame.
Intentaré encontrar tiempo la próxima semana para probar el componente y realizar algunas actualizaciones. Una vez hecho esto, lo moveré de mi repositorio personal de GitHub al repositorio de Discourse en GitHub.
@simon Te entiendo y comparto tus preocupaciones sobre la seguridad. Sin embargo, soy administrador del Discourse del que estoy extrayendo estos datos, por lo que podría obtener los mismos correos electrónicos de los usuarios simplemente tomando el ID proporcionado y consultando los registros de usuarios para vincular ese ID con la dirección de correo electrónico correspondiente. La información ya está disponible, aunque de forma manual.
Además, tras hablar con otras personas de mi organización, es posible que simplemente esperemos a configurar OAuth, de modo que nuestros usuarios deban utilizar el mismo ID para iniciar sesión tanto en nuestro sistema como en el de Discourse.
De todos modos, creo que seguiría siendo una función interesante tenerla, por si una solución como esa no está disponible para alguien más en la comunidad.
Esto parece ser el enfoque ideal. El componente de tema Segment podría actualizarse para añadir una opción que incluya el provider_uid proporcionado por tu proveedor de autenticación.
Me alegra que hayas planteado esto. El componente de seguimiento de Segment actualmente tiene una opción para añadir el external_id del usuario para sitios que utilizan DiscourseConnect. Al revisarlo ahora, veo que está utilizando el nombre antiguo de la configuración para DiscourseConnect: está comprobando si la configuración enable_sso está habilitada. Eso debe cambiarse a enable_discourse_connect. Lo corregiré mañana.
¡Muchas gracias! Un campo provider_uid sería fantástico; eso debería permitirnos asociar las acciones de un usuario en nuestro sitio y en Discourse, una vez que se envíen a Segment.
He solucionado el problema con el seguimiento de usuarios basado en su external_id para el caso en que DiscourseConnect está habilitado como proveedor de autenticación para el sitio de Discourse.
Hasta ahora no he podido determinar qué podría estar causando que la creación de temas a veces no se registre. En mi caso, funciona sin ningún problema.
He actualizado el nombre que se utiliza para el evento “Topic Bookmarked”. Anteriormente, el nombre del evento que se enviaba a Segment era “Thread Bookmarked”. No recuerdo la razón de ello. Espero que cambiar el nombre del evento a “Topic Bookmarked” no cause problemas en las analíticas de nadie.
Cuando revisé la pantalla del depurador en Segment, lo único que se envió en la llamada de identificación fue un ID de usuario y una dirección IP. ¿Se puede pasar también una dirección de correo electrónico con la llamada de identificación?
Cuando está habilitada, la dirección de correo electrónico del usuario se enviará junto con la llamada identify. Si actualizas el componente de tema en tu sitio de Discourse a su versión más reciente, esa configuración estará disponible para ti.
Un problema menor que encontré al probar esto es que, si la configuración está deshabilitada, la dirección de correo electrónico del usuario actual seguirá apareciendo en Segment durante toda su sesión. Esto está relacionado con la forma en que Segment maneja estas cosas de su lado. Cuando la configuración está deshabilitada, Discourse deja de enviar inmediatamente las direcciones de correo electrónico de los usuarios a Segment.
No he olvidado la solicitud de pasar el provider_uid a Segment, pero mientras revisaba esto me preguntaba si sería útil pasar otros identificadores a Segment. Me preguntaba específicamente sobre pasar el name y el username del usuario a la llamada a identify.
En cuanto al Nombre y el Nombre de usuario, sí, también serían útiles. Una solución a largo plazo sería implementar una forma de enviar todo lo incluido en la base y también cualquier Campo de Usuario adicional creado en Discourse.
La razón es que algunos destinos requieren un dato específico para funcionar. Sería muy útil tener una interfaz de usuario para construir el payload dentro de Discourse. Incluso si se limita a los campos estándar en la documentación de Segment https://segment.com/docs/connections/spec/identify/.
Disculpa la demora en la respuesta. He investigado un poco más. Actualmente no es posible establecer el provider_uid a través de un componente de tema porque Discourse no envía el provider_uid al cliente. Es posible que esto se pueda habilitar a través de una configuración del sitio en el futuro, pero para que funcione, se deberán realizar algunos cambios en el código principal de Discourse.
No hay problema. Gracias por dar seguimiento y por investigar esto. Esperamos poder encontrar otra forma de conectar a nuestros usuarios de Discourse en Discourse y en nuestro sitio.