Automatisches Senden von Discourse-Einladungs-E-Mails mit Zapier

Die Discourse API kann verwendet werden, um das Senden von Einladungs-E-Mails von Ihrem Forum zu automatisieren, wenn in einer externen Anwendung eine Aktion ausgeführt wird. Für viele Anwendungen können Sie Zapier verwenden, um dies einzurichten, ohne Code schreiben zu müssen.

Ein häufiger Anwendungsfall hierfür ist das Einladen von Benutzern zu Ihrem Forum, wenn diese ein Produkt kaufen oder sich auf einem externen Dienst anmelden. Für das Beispiel in diesem Thema verwende ich die Zapier WordPress-Integration, um das Senden einer Einladung von Discourse auszulösen, wenn sich ein neuer Benutzer auf einer WordPress-Website anmeldet.

Eine Trigger-Schritt in Zapier einrichten

Gehen Sie zu Ihrem Zapier-Dashboard und suchen Sie nach der Anwendung, die die Einladungs-E-Mail auslösen soll. In den Screenshots unten habe ich WordPress als Auslöser ausgewählt.

Die einzige erforderliche Konfiguration besteht darin, den WordPress Zap mit einem WordPress-Konto zu verbinden und das Ereignis New User (Neuer Benutzer) auszuwählen, um den Zap auszulösen.

Einen Aktionsschritt zum Senden der Einladung einrichten

Klicken Sie auf die Schaltfläche Add a Step (Einen Schritt hinzufügen) und dann im Dropdown-Menü auf Action/Search (Aktion/Suchen).

Geben Sie „webhook“ in das Suchmenü ein und wählen Sie dann Webhooks by Zapier aus dem Aktionsmenü aus. Der Webhook-Aktionsschritt wird zur Seitenleiste Ihres Zaps hinzugefügt, und es wird ein Formular geöffnet, in dem Sie auswählen können, welche Art von Anforderung der Webhook ausführen soll.

Wählen Sie POST aus dem Formular und klicken Sie dann auf Continue (Weiter).

Das geöffnete Formular ermöglicht es Ihnen, die POST-Anfrage zu konfigurieren, die an Discourse gesendet wird. Geben Sie in das URL-Feld die Basis-URL Ihres Forums gefolgt von /invites ein. Beispielsweise ist die Basis-URL meines Forums https://demo.scossar.com, daher lautet der vollständige Link zur Einladungs-Route https://demo.scossar.com/invites.

Sie müssen nun die Abschnitte Payload Type (Nutzlasttyp), Data (Daten) und Headers (Kopfzeilen) des Formulars konfigurieren. Alle anderen Abschnitte des Formulars können mit ihren Standardwerten belassen werden.

Der Payload Type teilt Zapier mit, in welchem Format die Nutzlast gesendet werden soll. Es sollte auf Json eingestellt sein.

Der Abschnitt Data wird verwendet, um Discourse mitzuteilen, an welche E-Mail-Adresse die Einladung gesendet werden soll, und um eine optionale Liste von Gruppennamen und eine benutzerdefinierte Nachricht festzulegen. Um einen Benutzer einzuladen, ohne ihn zu Gruppen hinzuzufügen oder eine benutzerdefinierte Nachricht einzuschließen, geben Sie den Text email als Daten-Schlüssel ein und klicken Sie dann auf das Symbol „Insert a Field“ (Ein Feld einfügen), um das Dropdown-Menü des Feldes zu öffnen. Scrollen Sie durch die Liste, bis Sie den Wert finden, der von Ihrer Trigger-App übergeben wurde und die E-Mail-Adresse des Benutzers enthält. Bei Verwendung von WordPress als Trigger-App sollte der ausgefüllte Datenabschnitt wie folgt aussehen:

Um Benutzer beim Annehmen der Einladung automatisch zu Gruppen hinzuzufügen, klicken Sie auf das :heavy_plus_sign: Symbol im Data-Abschnitt, um ein neues Feld hinzuzufügen. Setzen Sie den Schlüssel des Feldes auf group_names. Setzen Sie den Wert des Feldes auf eine durch Kommas getrennte Liste von Gruppennamen, zu denen Benutzer hinzugefügt werden sollen. Um eine benutzerdefinierte Nachricht in die Einladungs-E-Mail aufzunehmen, erstellen Sie ein weiteres Feld mit dem Schlüssel custom_message und dem Wert der Nachricht, die Sie senden möchten.

Hinweis: Durch das Hinzufügen eines Code-Schritts nach dem Trigger-Schritt Ihres Zaps sollte es möglich sein, Gruppenamen und eine benutzerdefinierte Nachricht für bestimmte Benutzer dynamisch festzulegen.

Der Abschnitt Headers wird zur Authentifizierung Ihrer Anfrage verwendet. Um das Headers-Feld zu konfigurieren, müssen Sie auf Ihrer Discourse-Website einen API-Schlüssel generieren. Um dies zu tun, gehen Sie auf der Admin / API-Seite Ihrer Discourse-Website und klicken Sie auf die Schaltfläche „New API Key“ (Neuer API-Schlüssel). Weisen Sie beim Erstellen des Schlüssels einem Staff-Benutzer zu und setzen Sie den Geltungsbereich auf Global oder verwenden Sie einen Granular (Granular) Geltungsbereich, bei dem das Feld Invites > Create (Einladungen > Erstellen) aktiviert ist.

Geben Sie nun im Headers-Abschnitt des Zaps die folgenden Schlüssel/Wert-Paare ein. Ersetzen Sie alle Werte, die ich in Klammern angegeben habe, durch für Ihre Website geeignete Werte. Die Groß-/Kleinschreibung der Schlüsselnamen ist wichtig.

Api-Username: <der Staff-Benutzername, von dem aus Sie die Einladungen senden möchten>
Api-Key: <der API-Schlüssel, den Sie generiert haben>
Content-Type: application/json

Das Formular sollte nun dem unten stehenden Screenshot ähneln, jedoch mit Ihrem Api-Username und Api-Key:

Klicken Sie auf die Schaltfläche Continue (Weiter).

Sie können die Integration nun testen, indem Sie auf die Schaltfläche „Send Test To Webhooks by Zapier“ (Test an Webhooks by Zapier senden) klicken. Der Test wird mit den Daten durchgeführt, die Sie in Ihrem Trigger-Schritt eingerichtet haben. Sie sehen eine Erfolgsmeldung, wenn alles korrekt konfiguriert ist, und wenn der Benutzer, den Sie im Trigger-Schritt eingerichtet haben, noch nicht auf Ihrem Discourse-Forum existiert, wird eine Einladungs-E-Mail gesendet, und Sie sehen auf Zapier eine Erfolgsmeldung. Sobald der Testschritt erfolgreich war, klicken Sie auf die Schaltfläche Finish (Fertigstellen) und schalten Sie Ihren Zap ein.

Details zum Durchführen anderer Arten von Anfragen an die Discourse API mit Zapier finden Sie unter Make requests to the Discourse API with Zapier.

25 „Gefällt mir“

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 „Gefällt mir“

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

1 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

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 „Gefällt mir“

@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 „Gefällt mir“

Ah, awesome info. Thanks!!

1 „Gefällt mir“

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 „Gefällt mir“

Hallo Simon,

vielen Dank für deinen Beitrag!

Ich habe zwei Fragen. Wenn du mir helfen könntest, wäre das großartig :slight_smile:

Frage 1/
Bei mir funktioniert die Einladung mit Nachricht einwandfrei, aber egal welche group_names ich hinzufüge, habe ich beim Beitritt zum Forum nur Zugriff auf die standardmäßige öffentliche Gruppe.

Weißt du, ob etwas die Einladung zu einer bestimmten privaten Gruppe „blockieren

1 „Gefällt mir“

Stelle sicher, dass du den Namen der Gruppe und nicht den Namen der Kategorie verwendest, auf die die Gruppe Zugriff haben soll. Den Gruppennamen findest du in der URL der Gruppe oder im Feld „Name“ der Gruppe:

Sollte dies das Problem nicht lösen, stelle sicher, dass der Discourse-API-Schlüssel, den du zu Zapier hinzufügst, ein globaler „All Users“-API-Schlüssel ist. Stelle außerdem sicher, dass der in Zapier festgelegte API-Benutzername die Berechtigung hat, Benutzer zur Gruppe hinzuzufügen. Jeder Admin-Benutzername auf deiner Seite funktioniert dafür.

Lass mich wissen, falls dies das Problem für dich nicht löst.

Du kannst den Benutzer zu mehreren Gruppen einladen, indem du eine durch Kommas getrennte Liste von Gruppennamen in das Feld group_names in Zapier einträgst. Discourse kennt das Konzept der Untergruppen nicht, daher musst du den Namen jeder Gruppe angeben, zu der du den Benutzer einladen möchtest.

Gemäß dem von dir bereitgestellten Screenshot scheint es, als würdest du versuchen, dem Benutzer Zugriff auf eine Kategorie und alle ihre Unterkategorien zu gewähren. Anstatt für jede Unterkategorie eine eigene Gruppe zu erstellen, könntest du einfach eine einzige Gruppe berechtigen, auf die Kategorie und alle ihre Unterkategorien zuzugreifen. Dies wird im Abschnitt „Sicherheit“ der Bearbeitungsseite der Kategorie konfiguriert.

2 „Gefällt mir“

Vielen Dank für deine Antwort, Simon!

Also, bezüglich der API:

Ich hatte den Zugriff nur für einen Benutzer (den Administrator) freigegeben und dachte, das sei in Ordnung. Deshalb habe ich jetzt eine neue API erstellt, um allen Benutzern Zugriff zu gewähren.

Aber es funktioniert immer noch nicht. Allerdings habe ich das Problem vielleicht verstanden :slight_smile:

Ich versuche, einen “Kategorie”-Namen im Feld “group_names” hinzuzufügen. Ich vermute, das wird nicht funktionieren :).

Ich habe die Begriffe Gruppen/Kategorie/Thema missverstanden.

Auf dem Screenshot ist eine Liste von vielleicht 15 Unterkategorien zu sehen: TB, MT, RD, MA usw.

Zum Beispiel lautet die URL der ersten Unterkategorie: https://forum.MYWEBSITE.com/c/frage-formaktionen/TBD/14

Ich vermute, ich möchte neue Mitglieder automatisch zu bestimmten privaten Unterkategorien einladen und nicht zu einer Gruppe.

Bei der URL, die ich dir gegeben habe, möchte ich beispielsweise nur Zugriff auf die Unterkategorie “TBD” gewähren.

Und ein anderer Benutzer soll nur Zugriff auf eine andere haben.

Weißt du, ob das möglich ist?

Muss ich im Feld “group_names” bei Zapier einfach durch das entsprechende Feld für Kategorien ersetzen?

1 „Gefällt mir“

Gruppen und Kategorien sind in Discourse eine häufige Quelle für Verwirrung!

  1. Gruppen sind Sammlungen von Personen.
  2. Kategorien sind Sammlungen von Themen. Man kann Leute nicht direkt zu ihnen einladen. Der Zugriff darauf wird jedoch durch Gruppen gesteuert.

Um das zu erreichen, erstellen Sie eine Gruppe. Fügen Sie in den Sicherheitseinstellungen der relevanten Kategorie den Zugriff für diese Gruppe hinzu. Verwenden Sie diese Gruppe für die Einladungs-API. Fertig.

3 „Gefällt mir“

Vielen Dank für deine Antwort, Nathan!

Ich werde es versuchen und mein Ergebnis hier posten :wink:

2 „Gefällt mir“

Deine Lösung funktioniert gut, danke! :smiley:

Ich habe noch eine Frage, vielleicht kannst du mir dabei helfen (oder @simon):

Gibt es bei Zapier eine Möglichkeit, einem neuen Gruppenzugriff zu gewähren, für Personen, die bereits Mitglieder von Discourse sind?

Im Großen und Ganzen sieht mein Workflow so aus:

1/ Ein Mitglied tritt einem meiner Kurse bei

2/ Zapier holt seine E-Mail-Adresse von meiner Lernplattform, sendet ihm eine Einladung zu meinem Discourse und fügt ihn automatisch der richtigen Gruppe hinzu, die mit dem gerade beigetretenen Kurs verknüpft ist.

3/ Manchmal, einige Monate später, tritt dasselbe Mitglied einem weiteren Kurs bei: Mit meinem aktuellen Prozess sendet mein Zapier ihm also eine neue Einladung zu Discourse, obwohl er bereits Mitglied ist, sodass die Einladung nicht funktioniert.

Ich brauche eine Möglichkeit, dass Zapier ihm Zugang zu einer neuen Gruppe gewährt, falls er bereits Mitglied meines Discourse ist.

Siehst du eine Möglichkeit, das umzusetzen?

1 „Gefällt mir“