Anfragen an die Discourse API mit Zapier stellen

Anfragen an die Discourse-API können automatisiert werden, indem ein Zap erstellt wird, der einen Zapier-Webhook als Aktionsschritt verwendet. Dieses Thema beschreibt, wie Anfragen für folgende Aktionen ausgeführt werden:

  • Benutzer zur Gruppe hinzufügen
  • Eine benutzerdefinierte Auszeichnung vergeben

Um herauszufinden, wie andere Arten von API-Anfragen mit Zapier ausgeführt werden, lesen Sie dieses Thema durch und suchen Sie dann in der Discourse-API-Dokumentation nach der gewünschten Aktion. Sie können auch herausfinden, wie eine API-Anfrage für eine bestimmte Aktion erstellt wird, indem Sie Reverse engineer the Discourse API lesen.

Den Trigger-Schritt einrichten

Jedes Zap muss einen Trigger und einen Aktionsschritt haben. Der Trigger wird verwendet, um Daten von einer Anwendung an den Aktionsschritt des Zaps zu übergeben. In einigen Fällen kann der Trigger auch verwendet werden, um zu verhindern, dass ein Zap seinen Aktionsschritt ausführt, es sei denn, die Daten erfüllen bestimmte Bedingungen.

Um Ihren Aktionsschritt einzurichten, gehen Sie zu Ihrem Zapier-Dashboard und klicken Sie auf die Schaltfläche „Zap erstellen". Ein Suchformular öffnet sich und fragt Sie, eine Trigger-App auszuwählen.

Für die Beispiele in diesem Thema verwende ich das WordPress-Ereignis „Neuer Benutzer" als Aktionsschritt. Dies liegt daran, dass es einfach einzurichten ist, um die API-Aufrufe zu testen.

Der Knoten „Diesen Schritt testen" Ihres Trigger-Schritts ermöglicht es Ihnen, eine Stichprobe von Daten aus Ihrer Trigger-Anwendung auszuwählen, die an den Aktionsschritt Ihres Zaps übergeben wird. Diese Daten sind nützlich für die Einrichtung des Aktionsschritts.

Optionalen Schritt zum Abrufen von Details aus Discourse hinzufügen

Je nachdem, welche Daten von Ihrer Trigger-App übergeben werden, müssen Sie möglicherweise einige Daten aus Discourse abrufen, bevor Sie Ihre endgültige API-Anfrage stellen können. Beispielsweise übergibt der WordPress-Trigger „Neuer Benutzer" den WordPress-Benutzernamen und die E-Mail-Adresse des Benutzers. Ich weiß, dass die E-Mail-Adresse mit der E-Mail-Adresse des Discourse-Benutzers übereinstimmt, aber für die API-Anfragen in diesem Beispiel muss ich den Discourse-Benutzernamen des Benutzers kennen.

Um die Discourse-Details eines Benutzers anhand seiner E-Mail-Adresse abzurufen, fügen Sie einen Aktionsschritt zu Ihrem Zap hinzu. Wählen Sie im Aktionsmenü des Webhooks „GET" aus.

Geben Sie auf dem Schritt „Vorlage bearbeiten" des Webhooks die Basis-URL Ihrer Discourse-Site gefolgt von /admin/users/list/all.json in den URL-Bereich ein. Zum Beispiel ist die Basis-URL meiner Site https://demo.scossar.com, also gebe ich https://demo.scossar.com/admin/users/list/all.json in das URL-Feld ein.

Geben Sie im Bereich „Abfragezeichenfolgen-Parameter" „email" als Schlüssel ein und klicken Sie dann auf das Symbol „Feld einfügen", um das Dropdown-Menü zu öffnen. Wählen Sie den Wert aus, der von Ihrem Trigger-Schritt übergeben wurde und die E-Mail-Adresse des Benutzers enthält.

Die Anfrage authentifizieren

Scrollen Sie im Formular nach unten zum Bereich „Header". Dieser Bereich wird verwendet, um die Anfrage zu authentifizieren. Er erfordert drei Schlüssel-Wert-Paare:

  • Api-Username : Der Benutzername eines Administrators auf Ihrer Site. In den meisten Fällen ist der Benutzer „system" eine gute Wahl dafür.
  • Api-Key : Der API-Schlüssel, der mit dem Benutzernamen verknüpft ist, den Sie im ersten Schlüssel-Wert-Paar verwendet haben.
  • Content-Type : multipart/form-data

Der ausgefüllte Header-Bereich sollte ähnlich wie dieser aussehen, jedoch mit dem API-Schlüssel Ihres Benutzers:

Klicken Sie auf die Schaltfläche „Weiter", um die Daten anzuzeigen, die für diese Anfrage aus Discourse abgerufen wurden.

Den endgültigen Aktionsschritt hinzufügen

Sobald Ihr Trigger und der optionale Schritt zum Abrufen von Daten aus Discourse konfiguriert sind, klicken Sie auf den Link „Schritt hinzufügen" und wählen Sie im Aktionsmenü „Webhooks by Zapier" aus. Ihnen wird dann aufgefordert, die Anfrage-Methode auszuwählen, die Sie in Ihrer API-Anfrage an Discourse verwenden möchten.

Hier sind die für die in diesem Thema verwendeten Beispiele erforderlichen Anfragearten:

  • Benutzer zur Gruppe hinzufügen: PUT
  • Benutzerdefinierte Auszeichnung vergeben: POST

Um andere API-Anfragen als die Beispiele in diesem Thema zu konfigurieren, werfen Sie einen Blick auf die Discourse-API-Dokumentation, um zu sehen, ob ein Beispiel für die gewünschte Anfrage vorhanden ist. Wenn Sie dort kein Beispiel finden, lesen Sie Wie man die Discourse-API reverse-engineert, um zu erfahren, wie Sie die URL und die Anfrage-Methode für die gewünschte Aktion finden. Sobald Sie die Anfrage-Methode gefunden haben, wählen Sie sie im Aktionsmenü aus.

Hinweis: Wenn Ihre Anfrage die DELETE-Methode verwendet, wählen Sie im Aktionsmenü „Benutzerdefinierte Anfrage" aus.

Den endgültigen Aktionsschritt konfigurieren

Der Header-Bereich der Aktion kann für alle API-Anfragen auf die gleiche Weise konfiguriert werden. Weitere Details finden Sie im Abschnitt „Die Anfrage authentifizieren" dieses Themas. Wenn Sie den optionalen Schritt zum Abrufen von Details aus Discourse hinzugefügt haben, können Sie den Header-Bereich des endgültigen Aktionsschritts genau so konfigurieren wie bei diesem Schritt.

Sobald die Header-Schlüssel-Wert-Paare hinzugefügt wurden, müssen Sie die URL- und Datenfelder des Formulars für Ihre API-Anfrage ausfüllen.

Benutzer zur Gruppe hinzufügen

Um einen Benutzer zu einer Gruppe hinzuzufügen, wird eine PUT-Anfrage an /groups/<group_id>/members.json gestellt. Der einfachste Weg, die ID einer Gruppe zu finden, besteht darin, die Seite der Gruppe über die Discourse-Benutzeroberfläche aufzurufen und dann .json in die URL in der Adressleiste Ihres Browsers einzugeben. Zum Beispiel hat meine Site eine „Support"-Gruppe unter https://demo.scossar.com/g/support. Wenn ich zu https://demo.scossar.com/g/support.json gehe, kann ich sehen, dass die Gruppen-ID 41 ist. Die Basis-URL meines Forums ist https://demo.scossar.com. Die URL in meinem endgültigen Aktionsschritt zum Hinzufügen von Benutzern zu einer Gruppe wird auf https://demo.scossar.com/groups/41/members.json gesetzt.

Die Anfrage zum Hinzufügen von Benutzern zu einer Gruppe erfordert einen Parameter – eine durch Kommas getrennte Liste von Benutzernamen. Geben Sie im Datenbereich des Formulars „usernames" als Schlüssel ein. Klicken Sie dann auf das Symbol „Feld einfügen", um nach der Benutzereigenschaft zu suchen, die entweder vom Trigger oder vom optionalen GET-Aktionsschritt übergeben wurde.

In meinem Fall möchte ich den Benutzernamen, der vom GET-Schritt abgerufen wurde, also erweitere ich das Menü „GET" und wähle „Username" aus dem Dropdown-Menü aus.

Alle anderen Bereiche des Formulars können bei ihren Standardwerten belassen werden.

Klicken Sie auf die Schaltfläche „Weiter" und testen Sie dann Ihren Schritt. Wenn der Benutzer, den Sie durch die vorherigen Schritte übergeben haben, auf Ihrer Discourse-Site existiert und noch kein Mitglied der ausgewählten Gruppe ist, sollte er beim Testen des Schritts zur Gruppe hinzugefügt werden.

Wenn alles wie erwartet funktioniert, schalten Sie Ihr Zap ein.

Eine benutzerdefinierte Auszeichnung vergeben

Um einem Benutzer eine benutzerdefinierte Auszeichnung zu vergeben, wird eine POST-Anfrage an die Basis-URL Ihres Forums + /user_badges gestellt. Für meine Site lautet die URL zum Vergeben von Auszeichnungen https://demo.scossar.com/user_badges. Das ausgefüllte URL-Feld in Zapier sieht so aus:

Der Datenbereich des Formulars erfordert zwei Schlüssel-Wert-Paare. Fügen Sie einen Schlüssel „username" hinzu und setzen Sie ihn auf das Feld, das den Benutzernamen des Benutzers zurückgibt. Fügen Sie einen Schlüssel „badge_id" hinzu und setzen Sie ihn auf die ID der Auszeichnung, die Sie vergeben möchten. Sie können die Auszeichnungs-ID finden, indem Sie zur Seite „Admin / Auszeichnungen" gehen und die Auszeichnung im linken Menü auswählen. Sie sehen die Auszeichnungs-ID als letzten Wert der URL in der Adressleiste Ihres Browsers.

Die Auszeichnung, die ich vergabe, hat die ID 105, daher sieht mein ausgefüllter Datenbereich so aus:

Stellen Sie sicher, dass Sie den Header-Bereich des Formulars konfiguriert haben, und klicken Sie dann auf „Weiter". Klicken Sie dann auf die Schaltfläche „Test senden", um Ihr Zap zu testen. Der Benutzer, den Sie durch die vorherigen Schritte übergeben haben, sollte die Auszeichnung erhalten.

Wenn alles korrekt funktioniert, schalten Sie das Zap ein.

15 „Gefällt mir“

Kann dieser Workflow verwendet werden, um automatisch ein Konto für einen neuen Benutzer zu erstellen und ihn einer bestimmten Discourse-Gruppe hinzuzufügen?

Der Anwendungsfall ist hier, dass jemand ein Schulungsprodukt kauft und ich möchte, dass er automatisch dem relevanten Discourse-Subforum für dieses Produkt hinzugefügt wird.

Ich kann die Daten des neuen Kunden in Zapier importieren, aber der reguläre Discourse-Zap verfügt nicht über Funktionen zum Erstellen von Konten – ich frage mich nur, ob ich dies über die API und den Webhook-Link tun kann, wie Sie in diesem Beispiel beschreiben.

Danke!

2 „Gefällt mir“

Der einfachste Ansatz wäre, nach dem Kauf eine Einladungs-E-Mail an die Person zu senden. Sie können die Einladung so einrichten, dass der Benutzer automatisch einer Discourse-Gruppe hinzugefügt wird, sobald er die Einladung annimmt. Weitere Informationen finden Sie unter Automate sending Discourse invite emails with Zapier.

Wenn das Versenden von Einladungen für Sie keine Option ist, sollte es möglich sein, einen Zapier-Webhook zu verwenden, um einen Discourse-Benutzer zu erstellen. Die Discourse API Docs geben Details zur Anfrage zur Erstellung eines Benutzers an.

8 „Gefällt mir“

Danke @simon, ich werde es mit der E-Mail-Einladung versuchen. Zweifellos werden einige Leute sie nicht erhalten/finden/öffnen, aber es ist definitiv die einfachere Option.

Auch für die schnelle Antwort vielen Dank!

Es ist oft einfacher, wenn derjenige, der die Sache verkauft, die Discourse-API-Aufrufe direkt tätigt.

1 „Gefällt mir“

Gibt es einen Grund, warum das bei mir in Zapier funktioniert, ich aber eine leere Antwort erhalte, wenn ich meinen eigenen fetch-Aufruf versuche?

Ich verwende ObservableHQ, aber die Idee ist dieselbe. Sollte das nicht funktionieren?:

fetch("https://mycommunity.com/g.json", {
  headers: {
    "Content-Type": "multipart/form-data",
    "Api-Username": Secret("DISCOURSE_USERNAME"),
    "Api-Key": Secret("DISCOURSE_KEY")
  },
  method: "GET",
  mode: "no-cors"
})

Können Sie API-Anfragen an Discourse mit Aufrufen in diesem Format in ObservableHQ zum Laufen bringen? Es scheint, als ob etwas mit dem Format der Anfrage nicht stimmt.

Sie können die Anfragen auch überprüfen, indem Sie curl-Aufrufe von Ihrem Terminal aus tätigen oder Postman verwenden.

1 „Gefällt mir“

OK, ich habe herausgefunden, was ich tun musste:

  1. cors-anywhere lokal installieren und den Server starten
  2. Die Anfrage so ändern, dass der Reverse-Proxy vor dem API-Endpunkt eingefügt wird, und die json-Methode im Fetch-Response-Objekt aufrufen:
await (fetch("http://localhost:8080/mycommunity.com/g.json", {
  headers: {
    "Api-Username": Secret("DISCOURSE_USERNAME"),
    "Api-Key": Secret("DISCOURSE_KEY")
  },
})).json()
2 „Gefällt mir“

Ich hinterlasse das einfach mal hier, könnte sich lohnen, sich das anzusehen:

2 „Gefällt mir“

Hallo @simon, danke für diese Anleitung. Ich richte dies in Zapier ein, aber mein Forum hat keine solche URL für die Vergabe von Abzeichen.

Ich frage mich, ist dies nicht eine Standard-URL für alle Discourse-Installationen, oder hat sich die URL möglicherweise durch ein aktuelles Update geändert?

Das sollte es tun. Es ist jedoch keine URL, die über die Discourse-Benutzeroberfläche aufgerufen werden kann. Ich habe die Route auf meiner Seite gerade nochmals überprüft, indem ich die Schritte befolgt habe, die hier beschrieben sind: So reverse-engineern Sie die Discourse-API. Danach scheint es, dass die Details im Thema noch aktuell sind.

2 „Gefällt mir“

Es war, nicht überraschend, mein eigener Fehler.

1 „Gefällt mir“