Estou pensando na ideia de construir um serviço de ponte webhook+API para conectar categorias específicas em dois fóruns Discourse diferentes. A ideia geral seria:
Um webhook em cada servidor para eventos de Tópico e Postagem[1]
Um listener que recebe esses eventos e os replica no servidor oposto via API
Verificar se um usuário com o mesmo endereço de e-mail existe no servidor oposto[3]
Se nenhum usuário existir, criar um usuário “staged” (preparado)
Alterar as configurações de notificação do usuário “staged” para que ele não receba notificações por e-mail[4]
Criar ou atualizar a postagem sob o usuário real ou “staged” apropriado
Provavelmente uma rotina programada para percorrer os tópicos e garantir que nada foi perdido, e possivelmente reordenar para que ambos os lados concordem.
Do Understanding user statuses, roles, and permissions, acho que os usuários “staged” fariam basicamente o que queremos – se alguém criasse uma conta com esse endereço de e-mail mais tarde, ele poderia “reivindicá-la” e interagir com todas as suas postagens como se estivesse lá o tempo todo.
Mas, existe uma maneira de criar um usuário “staged” a partir da API? Não vejo isso em Discourse API Docs.
e possivelmente também eventos de Curtir e Resolvido, mas não na primeira versão ↩︎
Eu definitivamente pensei sobre isso antes de escrever esta lista ↩︎
usando endereços de e-mail como chave porque os sistemas de contas podem não ter os mesmos nomes de usuário ↩︎
Vi uma postagem sobre isso ser possível em algum lugar por aqui… ↩︎
Bem, mais ou menos. Como o OP naquele tópico diz, em resposta a isso…
… e lá, a resposta é basicamente injetar um e-mail e deixar o código de tratamento de e-mail cuidar disso. Mas isso não funciona para este caso, porque preciso intervir e desativar as notificações por e-mail para o usuário antes de criar a postagem.
Acontece que temos SSO-overrides-username ativado para um lado da ponte proposta, então acho que apenas criar algo como ‘othersite-user’ pode ser uma solução alternativa… mas isso não funcionará necessariamente sem essa configuração de SSO.
Com essa abordagem, parecerá que os usuários criaram tópicos e respostas por e-mail. Usuários em estágio só podem criar postagens por e-mail. Você receberá um erro de acesso inválido se tentar criar uma postagem não por e-mail para um usuário em estágio por meio da API.
Algo sobre a abordagem de usuário em estágio não me parece certo. Pode valer a pena consultar seus usuários para ver se eles têm alguma preocupação. Se você pudesse obter permissão de seus usuários, poderia simplesmente criar usuários ativos não em estágio no site espelhado e, em seguida, postar seus tópicos e comentários por meio da API.
Passar staged: true cria um usuário em estágio. Presumo que um usuário criado dessa forma poderá postar por e-mail. Meu site de desenvolvimento local não está configurado para enviar e-mails para o Discourse, então não posso testar isso no momento.
Eu tenho pensado em usar o Discourse como um processador genérico de formulários para lidar com formulários de contato. Eu odeio formulários de contato, mas alguns usuários preferem usar um formulário de contato do que enviar um e-mail. Mesmo que eu ache que essas pessoas tomam decisões ruins, eu gostaria de facilitar o contato delas comigo para que possam me dar dinheiro.
Seria muito útil poder criar uma mensagem que crie um usuário em estágio sem ter que recorrer a algum outro sistema para processar o formulário e enviar um e-mail.
Eu presumo que precisarei criar um plugin para fazer isso, mas esse é o meu plano.
Esta é uma das únicas coisas que me restam para descobrir para me livrar do WordPress.
Então, talvez o que eu faça no plugin seja criar a postagem como se fosse um e-mail. Isso pode não ser muito difícil em um plugin. E isso provavelmente tornaria possível via API.
Eu acho que você poderia usar um Wizard ( Custom Wizard Plugin) para conseguir isso sem muito incômodo. Você pode fazer wizards anônimos agora. Ficarei feliz em te ajudar se precisar!
Ah! Claro. É assim que o receptor de e-mail entrega o e-mail. Acho que quero um endpoint que aceite campos arbitrários de qualquer formulário, os coloque em um tópico e os entregue para mim. Isso me impediria de ter que expor uma chave de API (com escopo apenas para entregar e-mail, não parece tão ruim, ter javascript processando o formulário e depois entregando-o ao endpoint existente).