Automatiser l'envoi d'e-mails d'invitation Discourse avec Zapier

L’API Discourse peut être utilisée pour automatiser l’envoi d’e-mails d’invitation depuis votre forum lorsqu’une action est effectuée sur une application externe. Pour de nombreuses applications, vous pouvez utiliser Zapier pour configurer cela sans avoir à écrire de code.

Un cas d’utilisation courant est d’inviter des utilisateurs sur votre forum lorsqu’ils achètent un produit ou s’inscrivent sur un service externe. Pour l’exemple dans ce sujet, j’utiliserai l’intégration Zapier WordPress pour déclencher l’envoi d’une invitation depuis Discourse lorsqu’un nouvel utilisateur s’inscrit sur un site WordPress.

Configuration d’une étape de déclenchement sur Zapier

Rendez-vous sur votre tableau de bord Zapier et recherchez l’application que vous souhaitez utiliser pour déclencher l’e-mail d’invitation. Dans les captures d’écran ci-dessous, j’ai sélectionné WordPress comme déclencheur.

La seule configuration requise est de connecter le Zap WordPress à un compte WordPress et de sélectionner l’événement Nouvel Utilisateur pour déclencher le Zap.

Configuration d’une étape d’action pour envoyer l’invitation

Cliquez sur le bouton Ajouter une étape, puis cliquez sur Action/Recherche dans le menu déroulant.

Entrez ‘webhook’ dans le menu de recherche, puis sélectionnez Webhooks par Zapier dans le menu des actions. L’étape d’action Webhook sera ajoutée à la barre latérale de votre Zap, et un formulaire s’ouvrira vous permettant de choisir le type de requête que le webhook doit effectuer.

Sélectionnez POST dans le formulaire, puis cliquez sur Continuer.

Le formulaire qui s’ouvre vous permet de configurer la requête POST effectuée vers Discourse. Dans le champ URL, entrez l’URL de base de votre forum, suivie de /invites. Par exemple, l’URL de base de mon forum est https://demo.scossar.com, donc le lien complet vers la route des invitations est https://demo.scossar.com/invites

Vous devez maintenant configurer les sections Type de Charge Utile, Données, et En-têtes du formulaire. Toutes les autres sections du formulaire peuvent conserver leurs valeurs par défaut.

Le Type de Charge Utile indique à Zapier dans quel format envoyer la charge utile. Il doit être défini sur Json.

La section Données est utilisée pour indiquer à Discourse quelle adresse e-mail envoyer l’invitation, et pour définir une liste facultative de noms de groupes et un message personnalisé. Pour inviter un utilisateur sans l’ajouter à des groupes ou inclure un message personnalisé, entrez le texte email comme Clé de données, puis cliquez sur l’icône ‘Insérer un Champ’ pour ouvrir le menu déroulant du champ. Faites défiler la liste jusqu’à ce que vous trouviez la valeur qui a été transmise depuis votre application de déclenchement et qui contient l’e-mail de l’utilisateur. Lors de l’utilisation de WordPress comme application de déclenchement, la section Données complétée devrait ressembler à ceci :

Pour ajouter automatiquement des utilisateurs à des groupes lorsqu’ils acceptent l’invitation, cliquez sur l’icône :heavy_plus_sign: de la section Données pour ajouter un nouveau champ. Définissez la Clé du champ sur group_names. Définissez la Valeur du champ sur une liste de noms de groupes séparés par des virgules que vous souhaitez attribuer aux utilisateurs. Pour inclure un message personnalisé dans l’e-mail d’invitation, créez un autre champ avec sa Clé définie sur custom_message et sa valeur définie sur le message que vous souhaitez envoyer.

Note : en ajoutant une étape de Code après l’étape de déclenchement de votre Zap, il devrait être possible de définir dynamiquement des noms de groupes et un message personnalisé pour des utilisateurs spécifiques.

La section En-têtes est utilisée pour authentifier votre requête. Pour configurer le champ En-têtes, vous devrez générer une clé d’API sur votre site Discourse. Pour ce faire, accédez à la page Admin / API de votre site Discourse et cliquez sur le bouton “Nouvelle clé d’API”. Lors de la création de la clé, attribuez-la à un utilisateur du personnel et définissez la portée sur Global, ou utilisez une portée Granulaire avec la case Invitations > Créer cochée.

Maintenant, dans la section En-têtes du Zap, entrez les paires clé/valeur suivantes. Remplacez toutes les valeurs que j’ai incluses entre crochets par des valeurs appropriées pour votre site. La casse des noms de clés est importante.

Api-Username: <le nom d'utilisateur du personnel que vous souhaitez utiliser pour envoyer les invitations>
Api-Key: <la clé d'API que vous avez générée>
Content-Type: application/json

Le formulaire devrait maintenant ressembler à la capture d’écran ci-dessous, mais avec votre Api-Username et Api-Key :

Cliquez sur le bouton Continuer.

Vous pourrez maintenant tester l’intégration en cliquant sur le bouton ‘Envoyer un Test à Webhooks par Zapier’. Le test sera effectué avec les données que vous avez configurées dans votre étape de déclenchement. Vous verrez un message de succès si tout est correctement configuré, et si l’utilisateur que vous avez configuré dans votre étape de déclenchement n’existe pas encore sur votre forum Discourse, un e-mail d’invitation sera envoyé et vous verrez un message de Succès sur Zapier. Une fois que l’étape de test passe, cliquez sur le bouton Terminer et activez votre Zap.

Pour plus de détails sur la manière d’effectuer d’autres types de requêtes à l’API Discourse avec Zapier, consultez Make requests to the Discourse API with Zapier.

25 « J'aime »

This is awesome thank you for the feature and clear instructions!

Is it possible to also set the custom group when generating an invite, like you can from within the app?

That can be done by adding a group_names key to the Headers field. Its value should be set to a comma separated list of group names. I’ll add an example of this to the topic.

The basic approach that’s used in this topic will work for any API request to Discourse.

3 « J'aime »

Awesome!! I think the dialog accepts a custom message too, guessing that can be done the same way?

1 « J'aime »

I tried setting this up this AM and was running into a 400 error. With a little bit of debugging, I found that the auth-related steps need to go in the headers section as instructed, but the actual form values (email, group name, and custom message) need to go in the data section as key/value sets.

Once I made that change, though, it worked perfectly!

1 « J'aime »

Thanks for that, @simon!

Are there any descriptions on meta about alternative ways to create an automated process for sending an invite email after the reader signed up to an offering and to which you could link here?

Thanks for testing that! What I’m finding is that when no custom_message or group_names are included in the request, passing the email in the Headers works. It’s not the correct way to pass the email address though. I’ve updated the guide to use the Data section for setting the email address, and have included examples for adding users to groups and including a custom message.

4 « J'aime »

I’m not aware of other services that are similar to Zapier, but I’m sure there are some out there. You can make requests directly to the Discourse API without using a third party service. The main requirement for doing this is that you have an application to make the requests from. This can be something a simple as a WordPress site.

A good resource on Meta for getting started with the API is Reverse engineer the Discourse API. You can test API requests with CURL from your computer’s terminal, or with a service like Postman.

2 « J'aime »

Thank you! Most of what you write I have no idea about… but I’ll check I’ll out your links and see if so can understand anything :smiley:

2 « J'aime »

@simon

Quick question:

When I send an automated invite through Zapier, would this then be an already personalized link, or a link to the general login page to my forum (where someone can log in and also create an account)?

I would like to avoid that everybody and their dog who knows the login page creates an account. How can that best be avoided?

When you send an invite link through Zapier you are triggering exactly the same action as if you had clicked the ‘Send an Invite’ link from your account’s Invite page.

Creating an invite will send an email to invited user’s email address. That email contains a link to a page where the invited user can set their name and password, and login to their new account. The email address for the new account is set by the email address that you used for the invite.

Only users who have been sent an invite can create an account through this page. If you would like to only allow invited users to register for your site, go to the Login section of your Site Settings and select the invite only site setting.

The best way to get a sense of how invites work is to invite yourself to your site. You can use a throw-away gmail address for this. You will need to log out of the site before you will be able to accept your invite.

3 « J'aime »

Ah, awesome info. Thanks!!

1 « J'aime »

Thanks for the great tutorial! Is there a way to add a topic id that the user gets redirected to after signing up like in the bulk invite feature?

It is possible to invite a new user to a topic with a similar approach to what is outlined above, but the URL that you setup in the Action step needs to point to the topic. For example, to invite a user to a topic with the id 123 you would add the URL https://forum.example.com/t/123/invite to the Action step. You would then add the email and the optional custom_message and group_names parameters in the same way as they are outlined in the guide.

3 « J'aime »

Salut Simon,

Merci pour ton message !

J’ai deux questions ; si tu pouvais m’aider, ce serait super :slight_smile:

Question 1/
De mon côté, l’invitation + le message fonctionnent bien, mais peu importe les group_names que j’ajoute, je n’ai accès qu’au groupe public par défaut lorsque je rejoins le forum.

Sais-tu si quelque chose pourrait « bloquer » l’invitation à un groupe privé spécifique ?

L’URL du nom du groupe est comme ceci : https://forum.[monsite].com/c/cercle/33

Donc j’ai : group_names /// PUBLIC,cercle

J’ai aussi essayé d’utiliser un « nombre » à la place du nom du groupe (33) pour ce groupe, mais cela ne fonctionne toujours pas.

Peut-être y a-t-il une sorte de « restriction » dans les paramètres d’administration du forum qui bloque l’invitation aux groupes privés ?

Question 2/

J’aimerais pouvoir inviter des personnes non seulement dans un « groupe privé », mais aussi dans un « sous-groupe privé » (je ne connais pas le bon terme pour cela).

Ici, tu peux voir que j’ai le groupe « RÉSERVÉ… »
Et tous les petits sous-groupes en dessous.

J’aimerais inviter des utilisateurs à des sous-groupes spécifiques.

Sais-tu comment faire ?

Merci beaucoup si tu peux prendre un peu de temps pour m’aider là-dessus ! :slight_smile:

1 « J'aime »

Assurez-vous d’utiliser le nom du groupe et non le nom de la catégorie à laquelle vous autorisez le groupe à accéder. Vous pouvez trouver le nom du groupe dans l’URL du groupe ou dans le champ Nom du groupe :

Si cela ne résout pas le problème, assurez-vous que la clé API Discourse que vous ajoutez à Zapier est une clé API globale « Tous les utilisateurs ». Vérifiez également que le nom d’utilisateur API défini dans Zapier a l’autorisation d’ajouter des utilisateurs au groupe. N’importe quel nom d’utilisateur administrateur de votre site fonctionnera pour cela.

Faites-moi savoir si cela ne résout pas le problème pour vous.

Vous pouvez inviter l’utilisateur à plusieurs groupes en ajoutant une liste de noms de groupes séparés par des virgules dans le champ group_names sur Zapier. Discourse ne dispose pas du concept de sous-groupes, vous devrez donc ajouter le nom de chaque groupe auquel vous souhaitez inviter l’utilisateur.

D’après la capture d’écran que vous avez fournie, il semble que vous essayiez d’accorder à l’utilisateur l’accès à une catégorie et à toutes ses sous-catégories. Au lieu de créer un groupe pour chaque sous-catégorie, vous pouvez simplement autoriser un seul groupe à accéder à la catégorie et à toutes ses sous-catégories. Cela se configure dans la section Sécurité de la page d’édition de la catégorie.

2 « J'aime »

Merci pour votre réponse, Simon !

Donc, concernant l’API :

J’avais accordé l’accès à un seul utilisateur (l’administrateur), pensant que cela suffirait. J’ai donc créé une nouvelle API pour donner accès à tous les utilisateurs.

Mais cela ne fonctionne toujours pas. Cependant, je pense avoir compris le problème :slight_smile:

J’essaie d’ajouter un nom de « catégorie » dans le champ « group_names ». Je suppose donc que cela ne peut pas fonctionner :).

J’ai mal compris la différence entre les noms de groupes, catégories et sujets…

Sur la capture d’écran, vous pouvez voir une liste d’environ 15 sous-catégories : TB, MT, RD, MA, etc.

Par exemple, l’URL de la première sous-catégorie est : https://forum.MYWEBSITE.com/c/question-formactions/TBD/14

Je suppose donc que je souhaite inviter automatiquement de nouveaux membres vers certaines sous-catégories privées, et non pas vers certains groupes.

Sur l’URL que je vous ai donnée, je voudrais par exemple accorder l’accès uniquement à la sous-catégorie « TBD ».

Et un autre utilisateur n’aurait accès qu’à une autre sous-catégorie.

Savez-vous si c’est possible ?

Peut-être dois-je simplement remplacer le champ « group_names » dans Zapier par celui correspondant aux catégories ?

1 « J'aime »

Les groupes et les catégories sont une source de confusion dans Discourse !

  1. Les groupes sont des collections de personnes.
  2. Les catégories sont des collections de sujets. Vous ne pouvez pas inviter des personnes directement à elles. Mais l’accès à celles-ci est contrôlé par des groupes.

Pour réaliser ce que vous souhaitez, créez un groupe. Dans les paramètres de sécurité de la catégorie concernée, ajoutez l’accès pour ce groupe. Utilisez ce groupe pour l’API d’invitation. C’est fait.

3 « J'aime »

Merci pour votre réponse, Nathan !

Je vais essayer cela et publier mon résultat ici :wink:

2 « J'aime »

Votre solution fonctionne parfaitement, merci ! :smiley:

J’ai une autre question, peut-être que vous (ou @simon) pourriez m’aider :

Avec Zapier, est-il possible d’accorder l’accès à un nouveau groupe à des personnes qui sont déjà membres de Discourse ?

Voici essentiellement mon flux de travail :

1/ Un membre s’inscrit à l’un de mes cours

2/ Zapier récupère son email depuis ma plateforme d’apprentissage, lui envoie une invitation à rejoindre mon Discourse et l’ajoute automatiquement au bon groupe, lié au cours auquel il vient de s’inscrire.

3/ Parfois, quelques mois plus tard, ce même membre s’inscrit à un autre cours : ainsi, avec mon processus actuel, mon Zapier lui enverra une nouvelle invitation à rejoindre Discourse, alors qu’il est déjà membre, donc l’invitation ne fonctionnera pas.

J’aurais besoin que Zapier lui accède l’accès à un nouveau groupe s’il est déjà membre de mon Discourse.

Voyez-vous un moyen de faire cela ?

1 « J'aime »