Criando usuários sem senhas via API

Estou migrando meu fórum de suporte do YouTrack (um sistema de helpdesk) para o Discourse.
Gostaria de usar a API para fazer o seguinte:

  1. Extrair usuários (nome, nome de usuário, e-mail) do YouTrack e criar usuários equivalentes no Discourse. Não definir senhas para eles!
  2. Enviar um convite a todos esses usuários para se cadastrarem no Discourse, usando os mesmos nomes de usuário e e-mails (para que criem novas senhas).
  3. Extrair certos tópicos, anexos e comentários do YouTrack e criá-los no Discourse.
    Para isso, será necessário que os mesmos usuários existam no Discourse, de modo que possam ser definidos como autores de tópicos e comentários. Isso deve ser feito, independentemente de esses usuários terem se cadastrado no Discourse após receber o convite ou não.

Problemas:
a) A documentação da API indica que o campo “password” é obrigatório ao criar um usuário. Como posso contornar isso?
b) Qual deve ser o estado desse usuário (criado via API, já possui alguns tópicos em seu nome, mas ainda não confirmado, nem com senha definida)?

Eu criaria os usuários, categorias, tópicos e posts usando um script de importação, em vez da API.

Não tenho certeza de qual é a melhor maneira de enviar e-mail para cada usuário individualmente, mas uma opção seria fazer com que o script de importação deixe os usuários ativados e permita que recebam uma mensagem de resumo por e-mail, de modo que o e-mail de resumo inclua instruções para acessar o novo fórum.

Com o que tal script funcionaria? Diretamente com o banco de dados?

Dê uma olhada nos scripts de importação em scripts/import.

Tentei usar este script seu, que parece estar funcionando, mas continuo recebendo uma mensagem de erro:

 ./create-user 'Test User Four' me@[domain] test4 41 default
Criando usuário: test4 usuário test4 criado. .  . Adicionando ao grupo 41. . . {"errors":["Você forneceu parâmetros inválidos para a solicitação: usernames"],"error_type":"invalid_parameters"}

Não consigo entender o que fiz de errado. Além disso, é possível não definir o grupo e a senha aqui?

Eu não sei muito bem, mas parece que você tem um número de grupo inválido e está recebendo um erro? Se estiver adicionando o usuário, então parece que não está definindo um grupo já existente. :wink:

Você poderia alterar o script para que ele não defina uma senha, eu acho, mas definir uma senha aleatória que ninguém conhece é praticamente a mesma coisa que não ter senha.

Se precisar de personalização e tiver um orçamento, posso provavelmente fazer isso ainda hoje.

O número do grupo está correto, eu o peguei de /groups.json. De qualquer forma, meu objetivo atual é descobrir a solução com as ferramentas disponíveis. Obrigado, mesmo assim, pela oferta e ajuda!

Hmm. Talvez essa API tenha mudado. Acho que agora ela aceita um nome de grupo. Sinta-se à vontade para enviar um PR se você conseguir algo.

Tenho várias coisas na minha lista antes de poder dar uma olhada mais de perto nisso.

Não. Se eu usar o nome do grupo em vez do ID, recebo
{"status":404,"error":"Not Found"}

Também é estranho que, embora a mensagem de erro apareça após user test6 created. . . Adding to group, o usuário na verdade não seja criado.

Hmm. Bem, o script definitivamente precisa ser atualizado para enviar o usuário e a chave da API em um cabeçalho, em vez de na URL. Embora eu tenha quase certeza de que funcionava há dois anos, parece que foi escrito por alguém com dois anos menos de experiência do que eu tenho agora. :wink:

Ele não faz nenhuma verificação de erro para ver se o usuário foi realmente criado, então isso é algo que eu mudaria se fosse trabalhar nele.

Parece que, se você não tiver nenhum grupo, ele pulará a tentativa de adicionar o usuário ao grupo.

Olá Dmitry @dm.linov!

Encontrei este tópico ao pesquisar por alguma abordagem para migrar entre Confluence, YouTrack e Discourse.

Você poderia compartilhar seus principais pontos sobre a migração do YouTrack para o Discourse? O motivo foi custo, desempenho ou problemas de busca?

Olá Ivan,

Ambas as razões são verdadeiras. Queríamos oferecer suporte aos nossos clientes em um fórum aberto, para que o mundo inteiro pudesse ver o quão bons somos :slight_smile: E o YouTrack não era uma boa ferramenta para isso por vários motivos, e o fato de cobrar por usuário está entre eles.

Nossa configuração atual é a seguinte:

  • Discourse para suporte, solicitações de recursos e discussões. Os formulários de “Fale Conosco” em nossos sites também vão para lá (novos tópicos e usuários “em estágio” são criados automaticamente via API)
  • YouTrack para desenvolvimento — tarefas, bugs e outros problemas
  • Confluence para documentação geral. Alguns artigos, descrevendo casos de uso específicos, também são publicados no Discourse (manualmente)

Também tentamos usar o Discourse como nosso blog corporativo, mas depois preferimos o Hashnode.

Obrigado, Dmitry. Essa experiência será útil para nós.

Estamos prestes a migrar a documentação do Confluence. Ele possui uma função de busca fraca e pagamentos caros. O YouTrack tem um recurso de base de conhecimento com suporte a Markdown. Além disso, possui uma importação fácil e a função de busca é aceitável. O YouTrack é nosso sistema de rastreamento de bugs e continuaremos a utilizá-lo.

Se você puder confirmar que a base de conhecimento do YT é lenta em produção, poderíamos considerar não usá-la.

O Discourse é usado como sistema de suporte de terceiro nível. A função principal é salvar soluções dos clientes e compartilhar as melhores práticas. Infelizmente, usar o Discourse para clientes é difícil. Porque a equipe de suporte ao cliente usa um Service Desk. Além disso, é muito difícil criar centenas de categorias privadas para cada cliente.

De qualquer forma, o Discourse é ótimo em tudo :slight_smile:.

Até onde sei, nunca utilizamos a base de conhecimento do YT, então não posso dizer nada sobre ela.

Quanto ao Confluence, também estamos buscando uma alternativa agora :slight_smile: mas sem pressa.

Você já conferiu o Discourse for teams?

@blake Ainda não, vou dar uma olhada, obrigado!

Pode valer a pena considerar o uso do Discourse for Teams em combinação com o Google Currents. :speech_balloon: