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“

Can this workflow be used to automatically create an account for a new user and add them to a specific discourse group?

The use case here is someone buys a training product, I want to automatically then add them to the relevant discourse sub forum for that product.

I can get the new customer data into Zapier but the regular discourse zap doesn’t have create account capabilities - just wondering if I can do this via the API and webhook link as you describe in this example.

Thanks!

2 „Gefällt mir“

The easiest approach would be to send an invite email to the person after they make a purchase. You can setup the invite so that the user is automatically added to a Discourse group when they accept the invitation. See Automate sending Discourse invite emails with Zapier for details.

If sending invites is not an option for you, it should be possible to use a Zapier webhook to create a Discourse user. The Discourse API Docs give details about the request to create a user.

8 „Gefällt mir“

Thanks @simon I’ll try the email invite. No doubt some people won’t get it/find it/open it but it’s the easier option for sure.

Appreciate the speedy response too!

It’s often easier to have whatever is selling the thing make the discourse api calls directly.

1 „Gefällt mir“

Is there a reason why this works for me when I do it in Zapier, but I get an empty response when I try to do my own fetch request?

I’m using ObservableHQ, but the idea is the same. Shouldn’t this work?:

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"
})

Are you able to get any API requests to Discourse working with calls in that format with ObservableHQ? It seems that there must be something wrong with the format of the request.

You can also double check requests by making curl calls from your terminal, or by using Postman.

1 „Gefällt mir“

OK, I figured out what I needed to do:

  1. Install cors-anywhere locally and run the server
  2. Modify the request to include the reverse proxy before the API endpoint and call the json method in the Fetch Response object:
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“

Just going to leave this here, might be worth checking out:

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“