Запрос на поддержку регистрации без лишних шагов на очном мероприятии через mailto и поэтапное создание пользователей

Этот запрос возвращает всех пользователей (включая их электронные адреса), которые отправили личные сообщения или письма в групповой ящик, исключая участников этой группы.

Сценарий использования: создание упрощённого способа регистрации пользователей на физическом мероприятии для моего сайта.

Я обнаружил, что на очных мероприятиях многие потенциальные пользователи испытывают трудности с завершением процесса регистрации (который включает ввод правильного адреса электронной почты, выбор имени пользователя и создание пароля как минимум). Кроме того, требуется подтверждение адреса электронной почты и последующий вход в систему. Это серьёзное требование, когда люди стоят, общаются, слушают докладчика, едят и так далее!

Частично это можно смягчить с помощью OAuth2, но всё равно остаётся ряд действий, и менее технически подкованные пользователи всё равно с трудом справляются.

Моё решение

  1. Создать полуприватную группу с запоминающимся адресом для входящей почты (например, join@mycommunity.url).

  2. Предоставить QR-код, содержащий ссылку mailto: на этот адрес.

  3. Включить в группу людей, которые будут заниматься последующей регистрацией этих пользователей.

  4. Добавить следующий запрос в 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

После этого потребуется немного дообработки, но как минимум вы надёжно получаете адреса электронной почты пользователей, для чего им достаточно сделать всего два-три клика или касания!

3 лайка