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“

Das ist großartig, danke für das Feature und die klaren Anweisungen!

Ist es möglich, beim Erstellen einer Einladung auch eine benutzerdefinierte Gruppe festzulegen, wie es in der App möglich ist?

Das lässt sich erreichen, indem man im Feld „Headers“ einen group_names-Schlüssel hinzufügt. Der Wert sollte als durch Kommas getrennte Liste von Gruppennamen angegeben werden. Ich werde ein Beispiel hierfür zum Thema hinzufügen.

Der grundlegende Ansatz, der in diesem Thema verwendet wird, funktioniert für jede API-Anfrage an Discourse.

3 „Gefällt mir“

Toll!! Ich denke, der Dialog akzeptiert auch eine benutzerdefinierte Nachricht. Vermutlich lässt sich das auf die gleiche Weise umsetzen?

1 „Gefällt mir“

Ich habe heute Morgen versucht, dies einzurichten, und dabei einen 400-Fehler erhalten. Nach etwas Fehlersuche stellte ich fest, dass die auth-bezogenen Schritte wie angegeben im Abschnitt „Headers

1 „Gefällt mir“

Danke dafür, @simon!

Gibt es auf Meta Beschreibungen zu alternativen Möglichkeiten, einen automatisierten Prozess zum Senden einer Einladungs-E-Mail nach der Anmeldung des Lesers zu einem Angebot zu erstellen, auf die du hier verlinken könntest?

Danke für den Test! Ich habe festgestellt, dass das Übergeben der email in den Headers funktioniert, wenn weder custom_message noch group_names in der Anfrage enthalten sind. Dies ist jedoch nicht der richtige Weg, um die E-Mail-Adresse zu übermitteln. Ich habe den Leitfaden aktualisiert, um den Datenabschnitt für die Festlegung der E-Mail-Adresse zu verwenden, und Beispiele für das Hinzufügen von Benutzern zu Gruppen sowie das Einfügen einer benutzerdefinierten Nachricht hinzugefügt.

4 „Gefällt mir“

Mir sind keine anderen Dienste bekannt, die Zapier ähnlich sind, aber ich bin sicher, dass es welche gibt. Sie können Anfragen direkt an die Discourse-API stellen, ohne einen Drittanbieterdienst zu verwenden. Die Hauptvoraussetzung dafür ist, dass Sie eine Anwendung haben, von der aus die Anfragen gestellt werden können. Dies kann so einfach sein wie eine WordPress-Website.

Eine gute Ressource auf Meta zum Einstieg in die API ist Reverse engineer the Discourse API. Sie können API-Anfragen mit CURL vom Terminal Ihres Computers aus testen oder einen Dienst wie Postman verwenden.

2 „Gefällt mir“

Vielen Dank! Bei den meisten Dingen, die du schreibst, habe ich keine Ahnung… aber ich werde deine Links prüfen und schauen, ob ich etwas verstehen kann :smiley:

2 „Gefällt mir“

@simon

Kurze Frage:

Wenn ich über Zapier eine automatisierte Einladung versende, handelt es sich dann bereits um einen personalisierten Link oder um einen Link zur allgemeinen Login-Seite meines Forums (wo sich jemand einloggen und auch ein Konto erstellen kann)?

Ich möchte vermeiden, dass jeder und sein Hund, der die Login-Seite kennt, ein Konto erstellt. Wie kann man das am besten verhindern?

Wenn Sie über Zapier einen Einladungslink senden, lösen Sie exakt dieselbe Aktion aus, als hätten Sie auf Ihrer Kontoseite unter „Einladungen

3 „Gefällt mir“

Ah, tolle Infos. Danke!!

1 „Gefällt mir“

Vielen Dank für das großartige Tutorial! Gibt es eine Möglichkeit, eine Topic-ID hinzuzufügen, zu der der Benutzer nach der Anmeldung weitergeleitet wird, wie bei der Masseneinladungs-Funktion?

Es ist möglich, einen neuen Benutzer mit einem ähnlichen Ansatz wie oben beschrieben zu einem Thema einzuladen, wobei die URL, die du im Schritt „Aktion“ einrichtest, auf das Thema verweisen muss. Um beispielsweise einen Benutzer zu einem Thema mit der ID 123 einzuladen, fügst du im Schritt „Aktion“ die URL https://forum.example.com/t/123/invite hinzu. Anschließend fügst du die Parameter email sowie die optionalen Parameter custom_message und group_names auf dieselbe Weise hinzu, wie sie in der Anleitung beschrieben sind.

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“