Listando convidados de evento com endereços de e-mail

:bookmark: Esta é uma consulta SQL do Data Explorer que recupera uma lista de todos os usuários que confirmaram presença em um evento específico, juntamente com seus endereços de e-mail primários. É útil para coordenadores de eventos que precisam de informações de contato dos participantes para acompanhamentos, lembretes ou comunicações externas.

:person_raising_hand: Nível de usuário necessário: Administrador

:discourse2: Esta consulta requer que o plugin Calendar (and Event) esteja ativado.

O que esta consulta faz

Se você realiza eventos em seu site Discourse usando o plugin Calendar (and Event), talvez precise de uma maneira de obter uma lista completa de participantes com endereços de e-mail — por exemplo, para enviar um resumo pré-evento, compartilhar informações logísticas ou fazer um acompanhamento pós-evento.

O recurso integrado “Exportar evento” no menu do evento baixa uma lista de confirmações de presença (RSVP), mas é entregue como um arquivo compactado via mensagem pessoal. Esta consulta do Data Explorer oferece uma alternativa mais rápida, na tela, que inclui o endereço de e-mail primário de cada participante e permite exportar os resultados diretamente para CSV ou JSON.

A consulta retorna todos os usuários que responderam a um determinado evento (independentemente de terem escolhido “Confirmado”, “Interessado” ou “Não irei”), ordenados alfabeticamente por nome de usuário.

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 Descrição
:event_topic_id Inteiro O ID do tópico do evento do qual você deseja extrair os convidados. Você pode encontrá-lo na URL do tópico do evento — por exemplo, em discourse.example.com/t/my-event-topic/23338, o ID do tópico é 23338.

Como a consulta funciona

Esta consulta extrai dados de quatro tabelas de banco de dados e os combina para produzir uma única lista:

  1. users — Contém informações básicas do perfil do usuário, como nome de usuário e nome de exibição.
  2. user_emails — Armazena endereços de e-mail associados a cada usuário. Um usuário pode ter vários endereços de e-mail, portanto, a consulta filtra para incluir apenas o e-mail primário usando e.primary = true.
  3. discourse_post_event_invitees — Registra cada usuário que respondeu a um evento (ao clicar em “Confirmado”, “Interessado” ou “Não irei”). Cada registro vincula um usuário à postagem que contém o evento.
  4. posts — Conecta a postagem do evento ao seu tópico pai, permitindo que você pesquise convidados pelo ID do tópico em vez de precisar saber o ID interno da postagem.

As instruções JOIN vinculam essas tabelas para que apenas os usuários que aparecem na lista de convidados para o tópico de evento especificado sejam incluídos. Os resultados são ordenados alfabeticamente por nome de usuário.

Resultados de exemplo

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

Filtragem por status de RSVP

A consulta acima retorna todos os convidados, independentemente do status de confirmação de presença. Se você deseja apenas os usuários que se marcaram como “Confirmado”, pode adicionar um filtro de status à cláusula WHERE. A coluna status na tabela discourse_post_event_invitees usa estes valores:

Código de Status Significado
0 Confirmado (Going)
1 Interessado (Interested)
2 Não Irei (Not Going)

Por exemplo, para retornar apenas os usuários que estão “Confirmados”, adicione AND invitees.status = 0 à 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

Você também pode exibir o status de RSVP como um rótulo legível em vez de um número adicionando uma expressão 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

Executando a consulta

  1. Vá para Admin > Plugins > Data Explorer (ou navegue até /admin/plugins/discourse-data-explorer).
  2. Clique no botão + para criar uma nova consulta.
  3. Dê um nome à consulta (por exemplo, “Convidados do evento com e-mails”).
  4. Cole o SQL no editor de consultas.
  5. Clique em Run (Executar) e, em seguida, insira o ID do tópico do seu evento quando solicitado.
  6. Para baixar os resultados, clique no botão CSV ou JSON após a consulta terminar de ser executada.

:information_source: A coluna de e-mail contém dados pessoais sensíveis. Tenha cuidado ao exportar ou compartilhar os resultados e certifique-se de que seu uso desses dados esteja em conformidade com a política de privacidade de sua comunidade e com quaisquer regulamentos de proteção de dados aplicáveis.

Problemas comuns e soluções

Problema Solução
A consulta retorna zero resultados Verifique se o ID do tópico está correto e se os usuários realmente confirmaram presença no evento. Você pode verificar visitando o tópico do evento e olhando a lista de participantes.
Erro “relação discourse_post_event_invitees não existe” O plugin Calendar (and Event) não está instalado ou ativado. Esta consulta requer que o plugin esteja ativo.
Linhas duplicadas aparecem nos resultados Se um usuário tiver vários registros de e-mail marcados como primários (incomum, mas possível), você poderá ver duplicatas. Adicionar DISTINCT após SELECT pode resolver isso.