이 쿼리는 그룹 인박스(group inbox)로 DM이나 이메일을 보낸 모든 사용자(이메일 포함)를 반환하며, 그룹 멤버는 제외합니다.
이 사용 사례는 오프라인 행사에서 사람들이 내 사이트의 임시(staged) 사용자를 생성할 수 있도록 마찰을 최소화하는 방법을 제공하기 위한 것입니다.
대면 행사에서 많은 잠재적 사용자가 가입 프로세스를 완료하는 데 어려움을 겪는 것을 발견했습니다. 가입 프로세스에는 이메일 주소(올바르게) 입력, 사용자 이름 선택, 비밀번호 생성이 최소한으로 포함됩니다. 또한 이메일 인증 및 이후 로그인도 필요합니다. 사람들이 서서 대화를 나누거나, 강연자를 듣거나, 음식을 먹고 있는 상황에서 이것은 큰 부담입니다!
OAuth2를 사용하면 이 부담을 다소 줄일 수 있지만, 여전히 해야 할 일이 있으며 기술에 익숙하지 않은 사용자들도 어려움을 겪는 경향이 있습니다.
제 해결책
-
매력적인 이메일 수신 주소(예: join@mycommunity.url)를 가진 반공개(semi-private) 그룹을 생성합니다.
-
해당 주소로 연결되는 mailto: 링크를 인코딩한 QR 코드를 표시합니다.
-
이후 이러한 사람들의 가입을 관리할 담당자들을 해당 그룹에 추가합니다.
-
다음 쿼리를 Data Explorer에 추가하고 그룹에게 접근 권한을 부여합니다:
-- [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
이후 후속 조치가 필요하지만, 적어도 사용자는 단 두세 번의 클릭/터치만으로 이메일 주소를 신뢰할 수 있는 방식으로 확보할 수 있습니다!