Gerenciamento de associações canceladas

Estou usando o SSO do WordPress para autorizar pessoas que adquiriram uma assinatura (implementei lógica personalizada no WordPress para determinar se elas são membros). Tudo está funcionando bem, mas estou me perguntando como lidar com membros cancelados.

Obviamente, o cancelamento da assinatura significa que eles não poderão mais fazer login. Infelizmente, preciso desconectá-los manualmente quando eles cancelarem, caso continuem acessando o fórum e mantendo a sessão ativa (fazer qualquer coisa manualmente era algo que pensei ter deixado para trás quando migrei do meu grupo do Facebook).

Mas tenho duas questões adicionais em mente:

  • O que acontece com os tópicos/postagens que eles publicaram no fórum? Quero que eles permaneçam, o que presumivelmente significa que não posso excluir o usuário.
  • Quero garantir que e-mails de resumo (digest) não sejam enviados para membros cancelados. O Discourse permanece alheio ao fato de que a conta foi cancelada até que eu faça “algo”. O que é isso, considerando que não quero remover o conteúdo deles?

Tudo isso é resolvido pela supressão de usuários? Existem melhores práticas para automatizar esse processo? Estou assumindo que será necessário algum tipo de código personalizado, mas estou verificando caso possa evitá-lo.

Obrigado.

Você pode anonimizá-los. Dessa forma, as informações permanecem, mas não o usuário.

Outra coisa que você pode fazer é implementar lógica personalizada para, em vez de criar o usuário, adicioná-lo a um novo grupo. Dessa forma, o resumo deve ser acessível apenas a quem tem permissão para acessar a categoria.

Outra coisa que você pode fazer é executar algum tipo de cronjob que force o logout (ou a remoção da conta) em todos os usuários que foram cancelados.

Obrigado, @marianord. Receio não ter entendido completamente o segundo parágrafo. Quando você diz “em vez de criar o usuário”, em qual etapa do ciclo de vida do usuário você se refere? Provavelmente estou perdendo um ponto simples, mas a sugestão não está clara para mim. Você poderia esclarecer?

Além disso, vou analisar o recurso de anonimização, mas tenho algumas perguntas sobre isso.

  • Como o conteúdo deles aparecerá em termos do nome de usuário exibido ao lado de suas publicações?
  • Se eu conseguir fazê-los reassinar minha associação (mesmo e-mail, etc.), isso “anonymizará” de alguma forma? Ou seja, as publicações antigas deles serão exibidas novamente com o nome de usuário?

Obrigado novamente.

A propósito, a maior preocupação que tenho com tudo isso é o e-mail de resumo, já que é algo voltado para o cliente (envio de e-mails). Suponho que outra opção seja alterar manualmente a configuração do resumo para nunca enviá-lo, certo (embora isso seja novamente um passo manual e, com sorte, possa ser feito via API em algum momento).

Se isso for viável, então tecnicamente não preciso fazer nada com o usuário. Eles podem permanecer como usuários válidos no Discourse, os e-mails serão interrompidos (veja acima), mas não poderão mais fazer login.

Talvez isso funcione. O que vocês acham disso?

Suspender o usuário por meio da API do Discourse pode ser uma boa maneira de automatizar isso. Quando um usuário é suspenso, ele é desconectado do Discourse e não receberá mais e-mails de resumo. Se uma mensagem for fornecida ao suspender o usuário, essa mensagem será enviada por e-mail ao usuário. Isso pode ser usado para incentivá-los a renovar sua assinatura.

Uma coisa a notar é que a suspensão foi projetada para lidar com usuários problemáticos; não foi projetada para lidar com o caso de uma assinatura expirada que possa ser renovada no futuro. Você pode descobrir que precisa personalizar o texto user_notifications.account_suspended.text_body_template do seu site para ajustar o modelo do e-mail enviado aos usuários suspensos.

Publicações criadas por um usuário anonimizado aparecem assim:

Não há uma maneira fácil de desanonimizar um usuário. A única abordagem que conheço é mesclar o usuário anônimo com um novo usuário pelo console do Rails. Como a anonimização de um usuário remove todos os dados identificadores, pode ser difícil saber quais contas mesclar. Se houver uma chance de os usuários renovarem suas assinaturas, suspender o usuário é provavelmente uma abordagem melhor.

Obrigado, @simon — isso é muito útil.

Sim, pelo que você disse, a suspensão parece ser a abordagem correta aqui. Mas tenho uma dúvida sobre os e-mails enviados. Tenho e-mails baseados no CRM que são enviados quando as pessoas cancelam, então não quero que o Discourse envie nada.

Você menciona: “Se uma mensagem for fornecida quando o usuário for suspenso, essa mensagem será enviada por e-mail ao usuário”.

Se eu NÃO fornecer uma mensagem, isso significa que nada será enviado e não preciso me preocupar em atualizar o modelo (já que ele nunca será enviado)?

Apenas analisando a suspensão, talvez eu não esteja muito claro sobre como os campos “Motivo da Suspensão” e e-mail são utilizados.

Basicamente, meu objetivo é suspender o usuário e não fazer absolutamente nada mais :slight_smile:

Obrigado novamente.

Isso está correto. A maneira mais fácil de testar é criar um usuário com um endereço de e-mail descartável e tentar suspender e reativá-lo através da interface.

Quando um usuário é suspenso, um suspended_until e um reason devem ser definidos. Esses campos são exibidos ao usuário suspenso quando ele tenta fazer login no site. Você pode personalizar esse texto pesquisando por login.suspended_with_reason na sua página de Admin / Personalizar / Texto.

A menos que você ative a configuração do site hide suspension reasons, haverá um aviso de que o usuário foi suspenso exibido no cartão do usuário e na página de perfil do usuário suspenso. Se você ativar a configuração do site hide suspension reasons, o aviso só será visto pela equipe.