Automatize o envio de e-mails de convite do Discourse com Zapier

A API do Discourse pode ser usada para automatizar o envio de e-mails de convite do seu fórum quando uma ação é realizada em uma aplicação externa. Para muitas aplicações, você pode usar o Zapier para configurar isso sem ter que escrever nenhum código.

Um caso de uso comum para isso é convidar usuários para o seu fórum quando eles compram um produto ou se inscrevem em um serviço externo. Para o exemplo neste tópico, usarei a integração Zapier WordPress para acionar o envio de um convite do Discourse quando um novo usuário se inscreve em um site WordPress.

Configurar uma etapa de gatilho (trigger) no Zapier

Vá para o seu painel do Zapier e pesquise pela aplicação que você gostaria que acionasse o e-mail de convite. Nas capturas de tela abaixo, selecionei o WordPress como o gatilho.

A única configuração necessária para isso é conectar o Zap do WordPress a uma conta do WordPress e selecionar o evento New User (Novo Usuário) para acionar o Zap.

Configurar uma etapa de ação (action) para enviar o convite

Clique no botão Add a Step (Adicionar uma Etapa) e, em seguida, clique em Action/Search (Ação/Pesquisa) no menu suspenso.

Digite ‘webhook’ no menu de pesquisa e selecione Webhooks by Zapier no menu de ações. A etapa de ação Webhook será adicionada à barra lateral do seu Zap, e um formulário será aberto que permite escolher que tipo de requisição você gostaria que o webhook executasse.

Selecione POST no formulário e clique em Continue (Continuar).

O formulário que se abre permite configurar a requisição POST feita para o Discourse. No campo URL, insira a URL base do seu fórum, seguida por /invites. Por exemplo, a URL base do meu fórum é https://demo.scossar.com, então o link completo para a rota de convites é https://demo.scossar.com/invites.

Agora você precisa configurar as seções Payload Type (Tipo de Carga Útil), Data (Dados) e Headers (Cabeçalhos) do formulário. Todas as outras seções do formulário podem ser deixadas com seus valores padrão.

O Payload Type informa ao Zapier em qual formato enviar a carga útil. Ele deve ser definido como Json.

A seção Data é usada para informar ao Discourse qual endereço de e-mail enviar o convite, e para definir uma lista opcional de nomes de grupos e uma mensagem personalizada. Para convidar um usuário sem adicioná-lo a grupos ou incluir uma mensagem personalizada, insira o texto email como uma Chave de dados (Key) e, em seguida, clique no ícone ‘Insert a Field’ (Inserir um Campo) para abrir o menu suspenso do campo. Role para baixo na lista até ver o valor que foi passado do seu aplicativo de gatilho que contém o e-mail do usuário. Ao usar o WordPress como aplicativo de gatilho, a seção Data completa deve ser parecida com esta:

Para adicionar automaticamente usuários a grupos quando eles aceitarem o convite, clique no ícone :heavy_plus_sign: da seção Data para adicionar um novo campo. Defina a Chave (Key) do campo como group_names. Defina o Valor (Value) do campo como uma lista de nomes de grupos separados por vírgulas para os quais você gostaria que os usuários fossem adicionados. Para incluir uma mensagem personalizada no e-mail de convite, crie outro campo com sua Chave definida como custom_message e seu valor definido como a mensagem que você gostaria de enviar.

Nota: adicionando uma etapa de Código após a etapa de gatilho do seu Zap, deve ser possível definir dinamicamente nomes de grupos e uma mensagem personalizada para usuários específicos.

A seção Headers é usada para autenticar sua requisição. Para configurar o campo Headers, você precisará gerar uma chave de API no seu site Discourse. Para fazer isso, vá para a página Admin / API do seu site Discourse e clique no botão “New API Key” (Nova Chave de API). Ao criar a chave, atribua-a a um usuário da equipe (staff user) e defina o escopo como Global, ou use um escopo Granular com a caixa Invites > Create (Convites > Criar) marcada.

Agora, na seção Headers do Zap, insira os seguintes pares de chave/valor. Substitua quaisquer valores que incluí entre colchetes por valores apropriados para o seu site. A capitalização dos nomes das chaves é importante.

Api-Username: <o nome de usuário da equipe que você deseja enviar os convites>
Api-Key: <a Chave de API que você gerou>
Content-Type: application/json

O formulário agora deve se parecer com a captura de tela abaixo, mas com seu Api-Username e Api-Key:

Clique no botão Continue (Continuar).

Agora você poderá testar a integração clicando no botão ‘Send Test To Webhooks by Zapier’ (Enviar Teste para Webhooks por Zapier). O teste será realizado com os dados que você configurou na etapa de gatilho. Você verá uma mensagem de sucesso se tudo estiver configurado corretamente, e se o usuário que você configurou na etapa de gatilho ainda não existir no seu fórum Discourse, um e-mail de convite será enviado e você verá uma mensagem de Sucesso no Zapier. Assim que a etapa de teste estiver passando, clique no botão Finish (Finalizar) e ative seu Zap.

Para detalhes sobre como fazer outros tipos de requisições à API do Discourse com o Zapier, veja Make requests to the Discourse API with Zapier.

25 curtidas

Isso é incrível, obrigado pela funcionalidade e pelas instruções claras!

Será que também é possível definir o grupo personalizado ao gerar um convite, como se faz dentro do aplicativo?

Isso pode ser feito adicionando uma chave group_names ao campo Headers. Seu valor deve ser definido como uma lista de nomes de grupo separada por vírgulas. Vou adicionar um exemplo disso ao tópico.

A abordagem básica usada neste tópico funcionará para qualquer solicitação de API ao Discourse.

3 curtidas

Incrível!! Acredito que o diálogo também aceita uma mensagem personalizada. Aposto que pode ser feito da mesma maneira?

1 curtida

Tentei configurar isso esta manhã e estava recebendo um erro 400. Com um pouco de depuração, descobri que as etapas relacionadas à autenticação precisam ser incluídas na seção de cabeçalhos, conforme instruído, mas os valores reais do formulário (e-mail, nome do grupo e mensagem personalizada) precisam ser incluídos na seção data como pares de chave/valor.

Depois de fazer essa alteração, no entanto, funcionou perfeitamente!

1 curtida

Obrigado por isso, @simon!

Há alguma descrição no meta sobre formas alternativas de criar um processo automatizado para enviar um e-mail de convite após o leitor se inscrever em uma oferta e para o qual você possa vincular aqui?

Obrigado por testar isso! O que estou percebendo é que, quando nenhum custom_message ou group_names é incluído na solicitação, passar o email nos cabeçalhos funciona. No entanto, não é a maneira correta de enviar o endereço de e-mail. Atualizei o guia para usar a seção de Dados para definir o endereço de e-mail e incluí exemplos para adicionar usuários a grupos e incluir uma mensagem personalizada.

4 curtidas

Não tenho conhecimento de outros serviços semelhantes ao Zapier, mas tenho certeza de que existem alguns por aí. Você pode fazer solicitações diretamente para a API do Discourse sem usar um serviço de terceiros. O principal requisito para fazer isso é ter um aplicativo para fazer as solicitações. Isso pode ser algo tão simples quanto um site WordPress.

Um bom recurso no Meta para começar com a API é Reverse engineer the Discourse API. Você pode testar solicitações de API com CURL do terminal do seu computador ou com um serviço como Postman.

2 curtidas

Obrigado! A maioria do que você escreve é um mistério para mim… mas vou verificar seus links e ver se consigo entender alguma coisa :smiley:

2 curtidas

@simon

Uma pergunta rápida:

Quando eu envio um convite automatizado pelo Zapier, esse link já seria personalizado ou seria um link para a página de login geral do meu fórum (onde alguém pode fazer login e também criar uma conta)?

Gostaria de evitar que qualquer pessoa que saiba a página de login crie uma conta. Como posso evitar isso da melhor forma?

Ao enviar um link de convite pelo Zapier, você está acionando exatamente a mesma ação que se tivesse clicado no link ‘Enviar um Convite’ na página de Convites da sua conta.

A criação de um convite enviará um e-mail para o endereço de e-mail do usuário convidado. Esse e-mail contém um link para uma página onde o usuário convidado pode definir seu nome e senha e fazer login na nova conta. O endereço de e-mail da nova conta é definido pelo endereço de e-mail que você usou para o convite.

Apenas usuários que receberam um convite podem criar uma conta por meio desta página. Se desejar permitir apenas que usuários convidados se registrem no seu site, vá até a seção Login nas Configurações do Site e selecione a configuração de site apenas por convite.

A melhor maneira de entender como os convites funcionam é convidar você mesmo para o seu site. Você pode usar um endereço Gmail descartável para isso. Será necessário fazer logout do site antes de poder aceitar seu convite.

3 curtidas

Ah, ótimas informações. Obrigado!!

1 curtida

Obrigado pelo ótimo tutorial! Existe uma maneira de adicionar um ID de tópico para o qual o usuário será redirecionado após se inscrever, como na funcionalidade de convite em massa?

É possível convidar um novo usuário para um tópico com uma abordagem semelhante à descrita acima, mas a URL que você configurar na etapa de Ação precisa apontar para o tópico. Por exemplo, para convidar um usuário para um tópico com o ID 123, você adicionaria a URL https://forum.example.com/t/123/invite na etapa de Ação. Em seguida, você adicionaria os parâmetros email e, opcionalmente, custom_message e group_names da mesma forma descrita no guia.

3 curtidas

Oi Simon,

Obrigado pelo seu post!

Tenho 2 perguntas; se você puder me ajudar, seria ótimo :slight_smile:

Pergunta 1/
Do meu lado, o convite + mensagem está funcionando bem, mas, independentemente dos group_names que eu adiciono, tenho acesso apenas ao grupo público padrão quando entro no fórum.

Você sabe se algo pode “bloquear” o convite para um grupo privado específico?

A URL do nome do grupo é assim: https://forum.[mywebsite].com/c/cercle/33

Então eu tenho: group_names /// PUBLIC,cercle

Também tentei usar o “número” em vez do nome do grupo (33) para este grupo, mas ainda não funciona.

Talvez haja algum tipo de “restrição” nas configurações de administrador do fórum que bloqueie o convite para grupos privados?

Pergunta 2/

Gostaria de poder convidar pessoas não apenas para um “grupo privado”, mas para um “subgrupo privado” (não sei o nome correto para isso).

Aqui você pode ver que tenho o grupo “RÉSERVÉ…”
E todos os pequenos subgrupos abaixo dele.

Gostaria de convidar usuários para subgrupos específicos.

Você sabe como posso fazer isso?

Muito obrigado se puder dedicar um tempo para me ajudar com isso! :slight_smile:

1 curtida

Certifique-se de estar usando o nome do grupo e não o nome da categoria à qual você permite que o grupo acesse. Você pode encontrar o nome do grupo na URL do grupo ou no campo Nome do grupo:

Se isso não resolver o problema, verifique se a chave da API do Discourse que você adicionou ao Zapier é uma chave global “Todos os Usuários”. Além disso, certifique-se de que o nome de usuário da API definido no Zapier tenha permissão para adicionar usuários ao grupo. Qualquer nome de usuário de administrador do seu site funcionará para isso.

Me avise se isso não resolver o problema para você.

Você pode convidar o usuário para vários grupos adicionando uma lista de nomes de grupos separados por vírgula ao campo group_names no Zapier. O Discourse não possui o conceito de subgrupos, então você precisará adicionar o nome de cada grupo ao qual deseja convidar o usuário.

Pela captura de tela que você forneceu, parece que você está tentando conceder ao usuário acesso a uma categoria e a todas as suas subcategorias. Em vez de criar um grupo para cada subcategoria, você pode simplesmente permitir que um único grupo acesse a categoria e todas as suas subcategorias. Isso é configurado na seção Segurança da página de edição da categoria.

2 curtidas

Obrigado pela sua resposta, Simon!

Então, em relação à API:

Eu havia concedido acesso apenas a um usuário (o administrador), achando que isso estava correto. Agora, criei uma nova API para dar acesso a todos os usuários.

Mas, ainda não funcionou. No entanto, acho que entendi o problema :slight_smile:

Estou tentando adicionar um nome de “categoria” no campo “group_names”. Então, imagino que isso não funcione :).

Eu entendi mal os nomes de grupos/categorias/tópicos…

Na captura de tela, você pode ver uma lista de talvez 15 subcategorias: TB, MT, RD, MA…

Por exemplo, a URL da primeira subcategoria é: https://forum.MYWEBSITE.com/c/question-formactions/TBD/14

Então, imagino que eu queira convidar novos membros automaticamente para algumas subcategorias privadas, e não para algum Grupo.

Na URL que forneci, eu gostaria de conceder acesso apenas à subcategoria “TBD”, por exemplo.

E outro usuário teria acesso apenas a outra.

Você sabe se é possível fazer isso?

Talvez eu precise apenas substituir o campo “group_names” no Zapier pelo campo correspondente às Categorias?

1 curtida

Grupos e Categorias são uma fonte de muita confusão no Discourse!

  1. Grupos são coleções de pessoas.
  2. Categorias são coleções de tópicos. Você não pode convidar pessoas para elas diretamente. Mas o acesso a essas categorias é controlado por grupos.

Para alcançar o que você deseja, crie um grupo. Nas configurações de segurança da categoria relevante, adicione acesso para esse grupo. Use esse grupo para a API de convites. Pronto.

3 curtidas

Obrigado pela sua resposta, Nathan!

Vou tentar isso e postar meu resultado aqui :wink:

2 curtidas

Sua solução funciona perfeitamente, obrigado! :smiley:

Tenho outra pergunta, talvez você (ou @simon) possa me ajudar nisso:

Com o Zapier, existe alguma maneira de conceder acesso a um novo grupo para pessoas que já são membros do Discourse?

Basicamente, este é meu fluxo de trabalho:

1/ Um membro se inscreve em um dos meus cursos

2/ O Zapier pega o e-mail dele da minha plataforma de ensino e envia um convite para meu Discourse + o adiciona automaticamente ao grupo correto, relacionado ao curso que ele acabou de entrar.

3/ Às vezes, alguns meses depois, esse mesmo membro se inscreve em outro curso: então, com meu processo atual, meu Zapier enviará um novo convite para o Discourse, embora ele já seja membro, de modo que o convite não funcionará.

Preciso que o Zapier conceda a ele acesso a um novo grupo, caso ele já seja membro do meu Discourse.

Você vê alguma maneira de fazer isso?

1 curtida