Esta consulta devuelve todos los usuarios (incluidos sus correos electrónicos) que envían un mensaje / correo electrónico a una bandeja de entrada de grupo, excluyendo a los miembros del grupo.
El caso de uso es una forma de baja fricción para permitir que las personas en un evento físico creen un usuario provisional para mi sitio.
He descubierto que en un evento presencial, muchos usuarios potenciales tienen dificultades para completar el proceso de registro (que incluye escribir su dirección de correo electrónico (correctamente), elegir un nombre de usuario y generar una contraseña como mínimo. También requiere la validación del correo electrónico y el posterior inicio de sesión. Esto es pedir mucho cuando estás de pie charlando con la gente / escuchando a un orador / comiendo / etc.
Esto se puede mitigar un poco con OAuth2, pero todavía hay cosas que hacer y a los menos expertos en tecnología también les parece difícil.
Mi Solución
-
Crear un grupo semiprivado con una dirección de correo electrónico atractiva (es decir, join@mycommunity.url)
-
Presentar un código QR que codifique un enlace mailto: a esa dirección
-
Poner a las buenas personas que gestionarán la incorporación posterior de estas personas al grupo
-
Añadir la siguiente consulta a Data Explorer y dar acceso al grupo:
-- [params]
-- string :group_name
WITH group_members AS (
SELECT gu.user_id
FROM group_users gu
JOIN groups g ON g.id = gu.group_id
WHERE g.name = :group_name
),
non_group_users AS (
SELECT u.id, u.username, ue.email, u.created_at
FROM users u
JOIN user_emails ue ON ue.user_id = u.id
WHERE NOT EXISTS (
SELECT 1
FROM group_members gm
WHERE u.id = gm.user_id
) AND ue.primary = TRUE
),
group_messages AS (
SELECT tg.topic_id
FROM topic_allowed_groups tg
JOIN groups g ON g.id = tg.group_id
WHERE g.name = :group_name
),
group_message_participants AS (
SELECT gm.topic_id, tau.user_id AS tau_user_id FROM group_messages gm
JOIN topic_allowed_users tau ON tau.topic_id = gm.topic_id
JOIN non_group_users ngu ON ngu.id = tau.user_id
)
SELECT ngu.username, ngu.email, ngu.created_at FROM group_message_participants gmp
JOIN non_group_users ngu ON ngu.id = gmp.tau_user_id
GROUP BY ngu.username, ngu.email, ngu.created_at
ORDER BY ngu.username
Hay un poco de seguimiento que hacer después, ¡pero al menos capturas sus direcciones de correo electrónico de manera confiable de una manera que solo requiere dos o tres clics / toques del usuario!