Listado de invitados al evento con direcciones de correo electrónico

:bookmark: Esta es una consulta SQL de Data Explorer que recupera una lista de todos los usuarios que han confirmado asistencia a un evento específico, junto con sus direcciones de correo electrónico principales. Es útil para los coordinadores de eventos que necesitan información de contacto de los asistentes para seguimientos, recordatorios o comunicaciones externas.

:person_raising_hand: Nivel de usuario requerido: Administrador

:discourse2: Esta consulta requiere que el complemento Calendar (and Event) esté habilitado.

Qué hace esta consulta

Si organizas eventos en tu sitio de Discourse usando el complemento Calendar (and Event), es posible que necesites una forma de obtener una lista completa de asistentes con direcciones de correo electrónico, por ejemplo, para enviar un resumen previo al evento, compartir detalles logísticos o hacer un seguimiento posterior al evento.

La función incorporada “Exportar evento” en el menú del evento descarga una lista de confirmaciones de asistencia, pero se entrega como un archivo comprimido a través de un mensaje privado. Esta consulta de Data Explorer te proporciona una alternativa más rápida, en pantalla, que incluye la dirección de correo electrónico principal de cada asistente y te permite exportar los resultados directamente a CSV o JSON.

La consulta devuelve a todos los usuarios que han respondido a un evento determinado (independientemente de si eligieron “Asistiré”, “Interesado” o “No asistiré”), ordenados alfabéticamente por nombre de usuario.

Consulta SQL

-- [params]
-- integer :event_topic_id = 23338

SELECT 
  u.id AS user_id,
  u.username,
  u.name,
  e.email
FROM users u
JOIN user_emails e ON u.id = e.user_id
JOIN discourse_post_event_invitees invitees ON u.id = invitees.user_id
JOIN posts p ON p.id = invitees.post_id
WHERE e.primary = true
AND p.topic_id = :event_topic_id
ORDER BY u.username

Parámetro

Parámetro Tipo Descripción
:event_topic_id Entero El ID del tema del evento del que deseas obtener los invitados. Puedes encontrarlo en la URL del tema del evento; por ejemplo, en discourse.example.com/t/my-event-topic/23338, el ID del tema es 23338.

Cómo funciona la consulta

Esta consulta extrae datos de cuatro tablas de la base de datos y las combina para producir una única lista:

  1. users — Contiene información básica del perfil del usuario, como el nombre de usuario y el nombre para mostrar.
  2. user_emails — Almacena las direcciones de correo electrónico asociadas a cada usuario. Un usuario puede tener varias direcciones de correo electrónico, por lo que la consulta filtra para incluir solo el correo electrónico principal usando e.primary = true.
  3. discourse_post_event_invitees — Registra a cada usuario que ha respondido a un evento (al hacer clic en “Asistiré”, “Interesado” o “No asistiré”). Cada registro vincula a un usuario con la publicación que contiene el evento.
  4. posts — Conecta la publicación del evento con su tema principal, lo que te permite buscar invitados por ID de tema en lugar de tener que conocer el ID de publicación interno.

Las sentencias JOIN vinculan estas tablas para que solo se incluyan los usuarios que aparecen en la lista de invitados para el tema del evento especificado. Los resultados se ordenan alfabéticamente por nombre de usuario.

Resultados de ejemplo

user_id username name email
42 alice_m Alice Martinez alice@example.com
87 bob_jones Bob Jones bob@example.com
15 carol_w Carol Wu carol@example.com
63 david_k David Kim david@example.com

Filtrado por estado de confirmación de asistencia

La consulta anterior devuelve todos los invitados independientemente de su estado de confirmación de asistencia. Si solo deseas los usuarios que se marcaron como “Asistiré”, puedes agregar un filtro de estado a la cláusula WHERE. La columna status en la tabla discourse_post_event_invitees utiliza estos valores:

Código de estado Significado
0 Asistiré
1 Interesado
2 No asistiré

Por ejemplo, para devolver solo los usuarios que “Asistirán”, agrega AND invitees.status = 0 a la cláusula WHERE:

-- [params]
-- integer :event_topic_id = 23338

SELECT 
  u.id AS user_id,
  u.username,
  u.name,
  e.email
FROM users u
JOIN user_emails e ON u.id = e.user_id
JOIN discourse_post_event_invitees invitees ON u.id = invitees.user_id
JOIN posts p ON p.id = invitees.post_id
WHERE e.primary = true
AND p.topic_id = :event_topic_id
AND invitees.status = 0
ORDER BY u.username

También puedes mostrar el estado de confirmación de asistencia como una etiqueta legible en lugar de un número agregando una expresión CASE:

CASE 
  WHEN invitees.status = 0 THEN 'Going'
  WHEN invitees.status = 1 THEN 'Interested'
  WHEN invitees.status = 2 THEN 'Not Going'
END AS rsvp_status

Ejecución de la consulta

  1. Ve a Admin > Plugins > Data Explorer (o navega a /admin/plugins/discourse-data-explorer).
  2. Haz clic en el botón + para crear una nueva consulta.
  3. Asígnale un nombre a la consulta (por ejemplo, “Invitados al evento con correos electrónicos”).
  4. Pega el SQL en el editor de consultas.
  5. Haz clic en Run (Ejecutar) e introduce el ID del tema de tu evento cuando se te solicite.
  6. Para descargar los resultados, haz clic en el botón CSV o JSON después de que la consulta haya terminado de ejecutarse.

:information_source: La columna de correo electrónico contiene datos personales confidenciales. Ten cuidado al exportar o compartir los resultados y asegúrate de que tu uso de estos datos cumpla con la política de privacidad de tu comunidad y con cualquier regulación aplicable de protección de datos.

Problemas comunes y soluciones

Problema Solución
La consulta devuelve cero resultados Verifica que el ID del tema sea correcto y que los usuarios realmente hayan confirmado asistencia al evento. Puedes verificarlo visitando el tema del evento y revisando la lista de asistentes.
Error de “relation discourse_post_event_invitees does not exist” El complemento Calendar (and Event) no está instalado o no está habilitado. Esta consulta requiere que el complemento esté activo.
Aparecen filas duplicadas en los resultados Si un usuario tiene varios registros de correo electrónico marcados como principales (poco común, pero posible), es posible que veas duplicados. Agregar DISTINCT después de SELECT puede resolver esto.