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

Seit der Einführung von Discourse Gamification vor einem Jahr gehört die Möglichkeit, Discourse Gamification mit externen Gamification-Systemen zu integrieren, zu den am häufigsten angefragten Funktionen auf unserer Roadmap. Beispiele hierfür sind zahlreich:

  • Integration in bestehende Gamification-Programme von Unternehmen
  • Möglichkeit, Punkte für Ereignisse zu vergeben, die außerhalb von Discourse stattfinden, z. B. reale Veranstaltungen (IRL) oder andere Online-Aktivitäten wie der Status als Kunde in einer Community oder der Kauf eines Produkts
  • Möglichkeit, Nutzern zu erlauben, ihre Punkte gegen Werbegeschenke, Produkte oder Vorteile einzutauschen

Heute, passend zum ersten Jahrestag des Plugins, haben wir all dies mit einer vollständigen API zur Verarbeitung benutzerdefinierter Scoring-Ereignisse ermöglicht :tada:.

Dieses neue System ermöglicht es Administratoren:

  • Nutzern benutzerdefinierte Scoring-Ereignisse zu vergeben
  • Nutzern negative Scoring-Ereignisse zu vergeben, um Einlösungen oder Sanktionen abzubilden
  • Benutzerdefinierte, zuvor erstellte Ereignisse zu aktualisieren und aufzulisten

API

:warning: Über die API vergabene Punkte können bis zu 1 Stunde dauern, um sich im Gesamtscore eines Nutzers für Ereignisse mit dem aktuellen Datum widerzuspiegeln, und bis zu 24 Stunden für Ereignisse, die in den letzten 10 Tagen erstellt wurden. Für Ereignisse, die mit einem Datum älter als 10 Tage erstellt wurden, können Sie die Schaltfläche Scores neu berechnen in der Gamification-Admin-Oberfläche verwenden oder den Backfill-Rake-Task ausführen: rake gamification_scores:backfill_scores_from[YYYY-MM-DD].

Derzeit gibt es drei verschiedene API-Endpunkte.

Ereignisse auflisten

Gibt bis zu 100 Ereignisse zurück. Sie können nach id, user_id und/oder date filtern.

curl https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>'

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

curl https://<example_url>/admin/plugins/gamification/score_events.json?user_id=1&date=2023-05-01 \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>'

Ereignis erstellen

curl -X POST https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>' \
-H "Content-Type: application/json" \
-d '{
  "user_id": 13,
  "date": "2023-04-14",
  "points": 15,
  "description": "May 2023 Karaoke attendee"
}'

Alternative Syntax mit jo:

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

Der Update-Endpunkt erfordert id und points. Sie können optional description aktualisieren. Beachten Sie, dass user_id und date nach der Erstellung nicht geändert werden können.

curl -L -X PUT https://<example_url>/admin/plugins/gamification/score_events.json \
-H 'API-Key: <api_key_here>' \
-H 'API-Username: <api_username_here>' \
-H "Content-Type: application/json" \
-d '{
  "id": 6,
  "points": 25,
  "description": "May 2023 keynote attendee"
}'

Alternative Syntax mit jo:

jo -p id="11" points="25" description="May 2023 Karaoke attendee" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
29 „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“