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

Ich habe eine verrückte Idee, es passiert, dass ich in WooCommerce eine virtuelle Geldbörse (basierend auf Punkten) verwende, die ich mit den Gamification-Punkten von Discourse synchronisieren möchte… aber ich habe das Gefühl, dass nur eine API sehr aufwändig ist (sei es, dass sie alle x Cron abfragt oder wenn der Benutzer eine Aktion in WC ausführt)… könnten Sie einen Webhook erstellen, damit die virtuelle Geldbörse in WooCommerce mit den in Discourse erhaltenen Punkten aktualisiert wird?.. Ich füge ein Leitbild bei

Ich weiß, dass es komplexer sein kann, als es scheint, besonders da die Discourse-API relativ neu ist (und es auch keinen Webhook gibt), aber ich stelle nur einen Anwendungsfall vor, validieren Sie die Idee

Gamification wird alle 5 Minuten neu berechnet, daher halte ich eine Synchronisierung im Stil von Crontab für sehr passend.

1 „Gefällt mir“

Oh, daran habe ich nicht gedacht… dh ich kann n8n benutzen (eigener Hoster zur Kostenreduktion); ich erstelle einen Cron-Trigger alle 5 oder vielleicht 10 Minuten, der die Discourse API nach neuen Punkten abfragt (Wie würde ich alle Benutzer abfragen? Oder würdest du es für Ereignisse tun?)… Obwohl es natürlich ein konstantes kleines Zeitfenster geben wird, in dem du den Punktestand nicht auf beiden Plattformen synchronisiert siehst…

Ich habe darüber nachgedacht und glaube, dass, wenn ein Webhook für das Gamification-Plugin erstellt werden könnte, der die Informationen ereignisbasiert sendet (ohne über die API abfragen zu müssen), dies vermieden werden könnte, z. B. 200 aktive Benutzer 200 Mal pro API alle 5 Minuten abzufragen (auch standardmäßig erlaubt Discourse Webhooks)…es ist wichtig, weil Discourse die Hauptquelle für Punkte ist (und häufiger aktualisiert) und dies eine Aktualisierung wäre, die eine sofortige Hintergrundsynchronisierung gemäß den Änderungen in Discourse ermöglicht…

@Falco
Planen Sie, eine API zum Löschen von Ereignissen hinzuzufügen? Danke.

1 „Gefällt mir“

Ich möchte es hinzufügen, aber es ist noch nicht geplant. Im Moment können Sie seinen Wert auf 0 aktualisieren.

2 „Gefällt mir“

Danke @Falco
Ich schätze, für ein Event könnte die ID einen negativen Punkt bekommen, oder?
Sagen wir, wenn man in einem Wettkampf verliert.

1 „Gefällt mir“

Ja, Sie können auch negative Punkte vergeben. Dies ist nützlich für Ereignisse wie das Austauschen von Punkten gegen Geschenke, das Anwenden von Strafen usw.

1 „Gefällt mir“

Zu spät dran hier – Gibt es eine Möglichkeit, bestimmte Punktetransaktionen zu kennzeichnen, damit sie nicht als „Ausgaben“ für die Rangliste zählen? Ich möchte, dass andere echte Minuspunkte für die Rangliste zählen (Stimmen/Markierungen dagegen, API-Ereignisse, wie oben vorgeschlagen, um ein Leiter-Ereignis zu „verlieren“ usw.).
z. B.

  • 10.000 Punkte durch Aktivitäten sammeln, in Führung liegen. Yay!
  • 10.000 Punkte für schicke Tauschwaren ausgeben, bei „ausgebbar“ 0 Punkte sein, da eine Abfrage 10.000 - 10.000 summieren würde.
    • aber immer noch an der Spitze der Rangliste stehen.
  • 2.000 Punkte in einem Leiter-Spiel verlieren, auf der Rangliste mit 8.000 angezeigt werden. Die Führung verlieren… Ausgebbarer Saldo negativ 2.000.
1 „Gefällt mir“

Hallo @Falco
Nachdem der Punkt eines Ereignisses bearbeitet wurde, wird der Gesamtpunkt für eine ID neu berechnet?
Scheint nicht so zu sein. Ist das zu erwarten?

Das ist es, was die Warnung in der OP abdeckt. Da wir die Gesamtpunktzahl überall in der Benutzeroberfläche zwischenspeichern, wird sie nach Ihrer Bearbeitung erst nach einem Cache-Update angezeigt. Bei aktuellen Ereignissen wird der Cache automatisch aktualisiert, aber bei Ereignissen, die über 10 Tage zurückliegen, müssen Sie eine Aktualisierung der Punktzahl für den Zeitraum auslösen.

2 „Gefällt mir“

7 Beiträge wurden in ein neues Thema aufgeteilt: Add bulk_create to Gamification external event API

Haben wir die Möglichkeit, den Geltungsbereich des API-Schlüssels auf das Gamification-Plugin zu beschränken?

Ich sehe in unserer API-Schlüssel-Admin-Ansicht keine Option, den Schlüssel auf ...admin/plugins/gamification/score_events zu beschränken.

Und unsere Führungskräfte sind skeptisch, ob wir dafür einen wirklich globalen API-Schlüssel benötigen.

1 „Gefällt mir“

Ich vermute, Sie haben Recht. Es scheint, dass weitere Scopes hinzugefügt werden, wenn sie angefordert werden. Sie könnten dies mit einem benutzerdefinierten Plugin tun, wenn Sie selbst gehostet sind. Sie könnten einen PR einreichen und/oder als Feature request posten. Wenn Sie ein Enterprise-Kunde sind, könnten Sie Ihre Führungskräfte bitten, dies zu tun. :wink:

Hmm. Jetzt frage ich mich, ob das Hinzufügen eines benutzerdefinierten API-Scopes in einem Plugin möglich ist (insbesondere, wenn ein Plugin einen API-Scope für ein anderes Plugin hinzufügt). Ich vermute, dass es möglich ist, habe es aber noch nicht gesehen.

Erstellen Sie vielleicht einfach einen Benutzer nur für die API, damit Sie ihn zumindest auf diese Weise verfolgen können.

1 „Gefällt mir“

Ist das jemals passiert?

CC: @Falco

Als Programmier-Neuling habe ich mich sehr bemüht, den Inhalt des Beitrags zu verstehen, aber es ist immer noch ziemlich schwierig für mich…… Ich wollte fragen, ob diese Funktion ähnlich wie „Pay to See“ ist? Dies ist eine sehr verbreitete Funktion in traditionellen Foren, bei der Benutzer durch Ereignisse (wie tägliches Einchecken, Posten, Antworten usw.) Punkte sammeln und dann einige Beiträge im Forum erfordern, dass Benutzer Punkte bezahlen, um den vollständigen Inhalt anzuzeigen. In traditionellen Foren (wie Discuz) werden sowohl das Sammeln von Punkten als auch das Abziehen von Punkten automatisch durchgeführt. Soweit ich das jetzt überblicke, kann Gamification den Teil des „Punkte Sammelns“ übernehmen, aber erfordert der Vorgang des „Punkte Abziehens“ manuelle API-Aufrufe durch Administratoren? Das wäre für ein persönliches Forum zu schwierig. Soweit ich weiß, kann das rücksichtslose Bedienen von APIs ohne viel Programmierkenntnisse gefährlich sein und sogar dazu führen, dass die gesamte Community zusammenbricht……:sob:

Wäre es möglich, diese „Pay to See“-Funktion als eigenständiges Plugin zu implementieren? Oder wenn ich jemanden beauftragen würde, es anzupassen, wie hoch wären ungefähr die Kosten?