Erteilen Sie ein benutzerdefiniertes Abzeichen über die API

Benutzerdefinierte Abzeichen, die Sie auf Ihrem Forum erstellt haben, können über die API vergeben werden. Dies ist eine großartige Möglichkeit, Abzeichen zu verleihen, ohne benutzerdefinierte SQL-Abfragen für Abzeichen verwenden zu müssen.

Um ein Abzeichen über die API zu vergeben, benötigen Sie den Benutzernamen des Empfängers sowie die ID (oder den Namen) des zu vergebenden Abzeichens. Stellen Sie außerdem sicher, dass Sie einen API-Schlüssel im Bereich „Admin > API > Keys" (/admin/api/keys) Ihrer Site generiert haben.

Ermitteln der Abzeichen-ID

Die Abzeichen-ID finden Sie in der URL des Abzeichens. Gehen Sie zu Ihrem Bereich „Admin/Abzeichen" und klicken Sie auf das zu vergebende Abzeichen. Die URL sieht dann etwa so aus: https://forum.example.com/admin/badges/102. Die letzte Zahl in der URL ist die Abzeichen-ID.

API-Aufruf durchführen

Um einen API-Aufruf zu testen, können Sie versuchen, ein Abzeichen mit curl oder Postman zu vergeben. So vergeben Sie ein Abzeichen von Ihrem Computer-Terminal aus mit curl.

Zunächst setzen Sie zur Vereinfachung eine Variable api_key:

api_key=yourapikey

Anschließend vergeben Sie ein Abzeichen mit der ID 102 an den Benutzer bobby:

curl -X POST "https://forum.example.com/user_badges" \
-H "Api-Key: $api_key" \
-H "Api-Username: system" \
-F "username=bobby" \
-F "badge_id=102" \
-F "reason=https://forum.example.com/t/whats-the-best-photo-youve-ever-taken/160/2"

Anstelle von badge_id können Sie auch badge_name verwenden, um das Abzeichen anhand seines Namens zu identifizieren:

-F "badge_name=My Custom Badge"

Der Parameter reason ist optional. Falls Sie ihn angeben, muss er auf die URL eines Themas oder eines Beitrags auf Ihrer Site gesetzt werden.

Sie sollten eine JSON-Antwort mit Details zum Abzeichen und dem Zeitpunkt der Vergabe erhalten.

27 „Gefällt mir“

Has anybody added a badge (or flair) via Zapier to Discourse API like outlined here?

Also, seems like a great candidate for an action via the official integration, @HAWK.

3 „Gefällt mir“

Siehe auch Create a custom badge with an image through the API, das zeigt, wie man hochlädt, und auch ein weiteres Beispiel für die Verleihung des Abzeichens (in Python) enthält.

1 „Gefällt mir“

Was ist der Grund, dass diese Methode nicht in den API-Dokumenten unter https://docs.discourse.org/ beschrieben wird?

Ich konnte sie dort nicht finden.

2 „Gefällt mir“

Weil es anscheinend niemandes Aufgabe ist, diese Dokumente vollständig oder aktuell zu halten, und irgendeine gute Seele diese Anweisungen hier gepostet hat. Im Allgemeinen ist die Dokumentation für die API Reverse-Engineering der Discourse-API und ein Blick in den Quellcode.

7 „Gefällt mir“

Schön, gibt es also keine Möglichkeit, die Vergabe solcher Abzeichen über eine API zu automatisieren?

Beispiel: Jemand, der 5.000 Likes für seine Antworten erhält, erhält ein Abzeichen.

1 „Gefällt mir“

Wenn Sie selbst gehostet sind oder Enterprise nutzen, möchten Sie Badge SQL aktivieren.

2 „Gefällt mir“

Wenn Sie die Badge-SQL nicht aktivieren können, wäre es technisch möglich, dies zu automatisieren, aber es wäre ein zweistufiger Prozess. Machen Sie zuerst eine API-Anfrage, um eine Data Explorer-Abfrage auszuführen, die die Benutzernamen der Benutzer zurückgibt, die Ihre Kriterien erfüllen und denen die Auszeichnung noch nicht verliehen wurde: Data Explorer-Abfragen mit der Discourse-API ausführen. Verwenden Sie dann die von dieser Abfrage zurückgegebenen Benutzernamen, um die Auszeichnung über die API zu verleihen.

Das erscheint jedoch etwas ineffizient. Soweit ich weiß, gibt es keine Route, mit der eine Auszeichnung an mehrere Benutzer mit einem einzigen API-Aufruf verliehen werden kann. Je nachdem, wie viele Benutzer für die Auszeichnung in Frage kommen, könnten Sie also viele API-Aufrufe tätigen.

Letztendlich scheint dies eine Aufgabe für das Automatisierungs-Plugin zu sein. Es könnte einen wiederkehrenden Trigger geben, der eine Data Explorer-Abfrage mit einer bestimmten Abfrage-ID ausführt. Basierend auf den von der Abfrage zurückgegebenen Feldern könnten die Ergebnisse verwendet werden, um verschiedene Skripte auszulösen. Wenn beispielsweise ein Feld username von der Abfrage zurückgegeben würde, könnte es verwendet werden, um Skripte auszuführen, die Auszeichnungen verleihen, Benutzer zu Gruppen hinzufügen usw.

2 „Gefällt mir“

Wird das nicht die gleichen Probleme haben, die dazu geführt haben, dass die Badge-SQL-Abfrage überhaupt deaktiviert wurde?

1 „Gefällt mir“

Ich glaube nicht. Data Explorer-Abfragen werden in einem Transaktionsblock ausgeführt, der nach 10 Sekunden abläuft. Ich denke, der Sinn dahinter ist, die Art von Problemen zu vermeiden, die Badge-Abfragen auslösen können. Wenn die Dinge nicht so konfiguriert wären, könnte eine ineffiziente Data Explorer-Abfrage die Website zum Absturz bringen.

Wenn ich jetzt darüber nachdenke, frage ich mich, ob benutzerdefinierte Badge-SQL die gleiche Art von Schutzmechanismus haben könnte.

4 „Gefällt mir“