Wie man Discourse-Gamification mit einem externen System integriert (Punkte einlösen und vergeben)

Seit der Einführung von Discourse Gamification vor einem Jahr war eine der am häufigsten nachgefragten Funktionen auf unserer Roadmap die Möglichkeit, Discourse Gamification mit externen Gamification-Systemen zu integrieren. Beispiele gibt es viele:

  • Integration in bestehende Gamification-Programme in Unternehmen

  • Möglichkeit, Punkte für Ereignisse zu vergeben, die außerhalb von Discourse stattfinden, wie z. B. IRL-Events oder anderswo online, wie z. B. die Rolle als Kunde in einer Community oder der Kauf eines Produkts.

  • die Möglichkeit, Benutzern zu gestatten, ihre Punkte gegen Swag, Produkte oder Vorteile einzulösen

Heute, pünktlich zum ersten Jahrestag des Plugins, haben wir all dies mit einer vollständigen API zur Verwaltung benutzerdefinierter Scoring-Ereignisse möglich gemacht :tada:.

Dieses neue System ermöglicht es Administratoren:

  • Benutzern ein benutzerdefiniertes Score-Ereignis zuzuweisen

  • Benutzern negative Score-Ereignisse zuzuweisen, um Einlösungs- oder Strafereignisse zu ermöglichen

  • Zuvor erstellte benutzerdefinierte Ereignisse zu aktualisieren und aufzulisten

API

:warning: Punkte, die über die API vergeben werden, benötigen bis zu 10 Minuten, um sich auf die Gesamtpunktzahl eines Benutzers auszuwirken, wenn die Ereignisse mit dem aktuellen Datum erstellt wurden, und bis zu 24 Stunden für Ereignisse, die in den letzten 10 Tagen erstellt wurden. Für Ereignisse, die mit einem Datum erstellt wurden, das weiter als 10 Tage zurückliegt, müssen Sie den Backfill-Rake-Task ausführen.

Derzeit gibt es 3 verschiedene API-Endpunkte.

Ereignisse auflisten

curl http://example/admin/plugins/gamification/score_events.json -H "Api-Key: apikeyhere" -H "Api-Username: system"

Sie können auch spezifische Benutzer- oder Datumsereignisse auflisten:

curl http://example/admin/plugins/gamification/score_events.json?user_id=1&date=2023-05-01 -H "Api-Key: apikeyhere" -H "Api-Username: system"

Ereignis erstellen

jo -p user_id="13" date="2023-04-14" points="15" description="May 2023 Karaoke atendee" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"

Ereignis aktualisieren

jo -p id="1" points="25" description="May 2023 Karaoke atendee" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
28 „Gefällt mir“

Wird es eine Möglichkeit geben, dies über die Benutzeroberfläche zu tun?

9 „Gefällt mir“

Das wäre etwas, das ich in Betracht ziehen würde, wenn ein Unternehmenskunde es sponsern möchte.

10 „Gefällt mir“

Das ist unglaublich. Wir sind gerade dabei, ein Botschafter-/Champions-Programm zu starten und zu pilotieren, und wir haben Airtable verwendet, um Webhooks von unseren verschiedenen Quellen (Discourse, GitHub, Ghost) zu überwachen und unser Champions-Programm dort zu aggregieren. Ich bin gespannt, mir das anzusehen und zu sehen, ob es für uns zur Verwaltung/Überwachung unseres Programms und unserer Beiträge genutzt werden könnte.

Es wäre großartig, wenn Sie Punkte für eine Benutzergruppe anstelle eines Benutzers vergeben könnten. Der Anwendungsfall für uns als Unternehmenskunde wäre, dass wir im Wesentlichen Punkte für das Unternehmen vergeben möchten, für das die Benutzer arbeiten, und deren Punkte für jedes Unternehmen aggregieren möchten. Wie realistisch ist so etwas?

9 „Gefällt mir“

Ach, ich weiß nicht, wie ich das benutzen soll :smiling_face_with_tear:
Wir nutzen einen Business-Plan.

Ich wünschte, wir könnten das über die Benutzeroberfläche bedienen.

Aber trotzdem, danke, dass du dieses Team aufgebaut hast! Mach weiter so.

5 „Gefällt mir“

Das könnte helfen, einmalige Punkte innerhalb von Discourse mit dem Automatisierungs-Plugin zu vergeben?

1 „Gefällt mir“

Wie funktioniert das Einlösen von Punkten? Ich sehe, dass es ein Update-Ereignis gibt, das verwendet werden könnte, um Punkte von einzelnen Ereignissen abzuziehen, aber das scheint eine ineffiziente Methode zum Einlösen von Punkten zu sein.

Außerdem erhalte ich beim Versuch, Ereignisse in meiner Discourse-Instanz aufzulisten, eine 404-Meldung.

GET https://developer.sailpoint.com/discuss/admin/plugins/gamification/score_events.json

404 Nicht gefunden
„Die angeforderte URL oder Ressource konnte nicht gefunden werden.“

Ich habe das Plugin aktiviert und kann es über die Benutzeroberfläche konfigurieren. Fehlt mir etwas, um die externe System-API zu aktivieren?

1 „Gefällt mir“

Vielleicht liegt es an meinem jahrzehntelangen Bankenerfahrung, aber so stelle ich mir das Einlösen von Punkten vor: die Ausgabe von benutzerdefinierten Ereignissen mit negativem Wert.

Nehmen wir zum Beispiel an, Sie haben einen Benutzer, der Punkte für ein T-Shirt einlösen möchte und dieses T-Shirt 10.000 Punkte kostet. Der Ablauf in Ihrem Einlösesystem wäre:

  1. Überprüfen Sie, ob der Benutzer genügend Punkte hat:
curl https://meta.discourse.org/u/falco.json -s | jq . | grep score
        "gamification_score": 89386,
  1. Geben Sie ein “Punkteabhebungs”-Ereignis aus
jo -p user_id="13" date="2023-04-14" points="-10000" description="T-Shirt Redeem - order #123" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"

Sie sollten dies in ein Semaphor oder Ähnliches einpacken, da dies das Lehrbuchbeispiel für deren Verwendung ist, aber das ist der Kern des vorgeschlagenen Workflows.

Dies ist eine sehr neue Funktion, lassen Sie mich also wissen, wenn der vorgeschlagene Workflow nicht korrekt funktioniert.

Bei mir funktioniert es sowohl im Browser als auch über die API. Es ist ein Admin-Endpunkt, daher müssen Sie als Administrator im Browser angemeldet sein oder API-Schlüssel übergeben, wie in der OP erklärt.

3 „Gefällt mir“

Ok, das hat mir gefehlt. Ich wusste nicht, dass man negative Punkte vergeben kann. Das sollte dann perfekt funktionieren.

:man_facepalming: Ich habe abgelaufene Anmeldeinformationen verwendet. Danke für die Bestätigung trotzdem.

2 „Gefällt mir“

@Falco

Gibt es Pläne, dieser API Scopes hinzuzufügen? Es scheint, dass der einzige Weg, wie ich Scores erstellen oder aktualisieren kann, darin besteht, einen Admin-API-Schlüssel mit globalem Zugriff zu haben. Ich würde gerne einen Scope haben, der einen Schlüssel auf die Möglichkeit beschränkt, nur Scores zu aktualisieren. Dies würde mir mehr Vertrauen geben, diese API in Automatisierungstools zu verwenden, da ich keinen Admin-Schlüssel hätte, der viel mehr tun kann, als nur Scores zu aktualisieren.

3 „Gefällt mir“

Das ist eine gute Idee, aber ich persönlich habe in naher Zukunft nicht die Bandbreite, um daran zu arbeiten.

Wenn Sie daran interessiert sind, diese Funktion zu sponsern, kontaktieren Sie bitte unseren Support-Kanal, damit wir Ihnen ein Angebot unterbreiten können.

3 „Gefällt mir“

Hier tritt dasselbe Problem auf:

{"errors":["Die angeforderte URL oder Ressource konnte nicht gefunden werden."],"error_type":"not_found"}

Dieser Fehler wurde verursacht durch

Du willst also deine überprüfen :wink:

1 „Gefällt mir“

Danke, ich werde zur Sicherheit auch auf die neueste Version aktualisieren.

Das Update auf die neueste Version hat funktioniert! Danke.

1 „Gefällt mir“

Ich habe das heute ein wenig getestet. Ich sehe die Ereignisse, die ich verfolgen kann, bin mir aber nicht sicher, ob es eine direkte Abfrage gibt, um nur Ereignisse nach Benutzer-ID anzuzeigen. Ich suche nach einer Möglichkeit, vielleicht ein Audit-Protokoll zu haben oder den Benutzern zu präsentieren, wie sie Punkte gewonnen/verloren haben.

1 „Gefällt mir“

Gibt es etwas, das in der Benutzeroberfläche protokolliert wird, wenn ein API-Aufruf erfolgreich ist und Punkte hinzufügt?

Großartig! Und ich habe noch einen Vorschlag: Wäre es möglich, eine Funktion hinzuzufügen, die es Benutzern ermöglicht, Punkte für Abonnements in der Benutzeroberfläche einzulösen? Und die Möglichkeit, die Anzahl der Punkte, die ein Benutzer pro Tag bei einer Veranstaltung (wie z. B. dem Erstellen von Themen) verdienen kann, zu begrenzen.

Danke!

Nein, das Feature ist zu 100 % API-basiert. Sie können den Endpunkt „Events auflisten“ aufrufen, um nach Events zu suchen, wie in der OP beschrieben.

3 „Gefällt mir“