# 메일(mailto) 및 단계별 사용자를 통한 오프라인 행사에서의 저마찰 가입 지원 쿼리

**URL:** <https://meta.discourse.org/t/query-to-support-low-friction-signup-at-an-in-person-event-via-mailto-and-staged-users/291587>\
**Category:** Data & reporting\
**Tags:** sql-query\
**Created:** [1월 14, 2024, 9:37오전 UTC](https://meta.discourse.org/t/query-to-support-low-friction-signup-at-an-in-person-event-via-mailto-and-staged-users/291587 "2024-01-14T09:37:41Z")\
**Posts on this page:** 1\
**Showing post:** 1

<div class="post-metadata">

**Author:** ![nathank](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/nathank/32/290039_2.png) [@nathank](https://meta.discourse.org/u/nathank)\
**Post date:** [1월 14, 2024, 9:37오전 UTC](https://meta.discourse.org/t/query-to-support-low-friction-signup-at-an-in-person-event-via-mailto-and-staged-users/291587/1 "2024-01-14T09:37:41Z")

</div>

이 쿼리는 그룹 인박스(group inbox)로 DM이나 이메일을 보낸 모든 사용자(이메일 포함)를 반환하며, 그룹 멤버는 제외합니다.

이 사용 사례는 오프라인 행사에서 사람들이 내 사이트의 임시(staged) 사용자를 생성할 수 있도록 마찰을 최소화하는 방법을 제공하기 위한 것입니다.

대면 행사에서 많은 잠재적 사용자가 가입 프로세스를 완료하는 데 어려움을 겪는 것을 발견했습니다. 가입 프로세스에는 이메일 주소(올바르게) 입력, 사용자 이름 선택, 비밀번호 생성이 최소한으로 포함됩니다. 또한 이메일 인증 및 이후 로그인도 필요합니다. 사람들이 서서 대화를 나누거나, 강연자를 듣거나, 음식을 먹고 있는 상황에서 이것은 큰 부담입니다!

OAuth2를 사용하면 이 부담을 다소 줄일 수 있지만, 여전히 해야 할 일이 있으며 기술에 익숙하지 않은 사용자들도 어려움을 겪는 경향이 있습니다.

### 제 해결책

1. 매력적인 이메일 수신 주소(예: [join@mycommunity.url](mailto:join@mycommunity.url))를 가진 반공개(semi-private) 그룹을 생성합니다.

2. 해당 주소로 연결되는 mailto: 링크를 인코딩한 QR 코드를 표시합니다.

3. 이후 이러한 사람들의 가입을 관리할 담당자들을 해당 그룹에 추가합니다.

4. 다음 쿼리를 [Data Explorer](https://meta.discourse.org/t/32566?silent=true)에 추가하고 그룹에게 접근 권한을 부여합니다:

```sql
-- [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

```

이후 후속 조치가 필요하지만, 적어도 사용자는 단 두세 번의 클릭/터치만으로 이메일 주소를 신뢰할 수 있는 방식으로 확보할 수 있습니다!

---

_[View the full topic](https://meta.discourse.org/t/query-to-support-low-friction-signup-at-an-in-person-event-via-mailto-and-staged-users/291587)._
