Comment intégrer la gamification Discourse avec un système externe (échange et attribution de points)

Depuis le lancement de Discourse Gamification il y a un an, l’une des fonctionnalités les plus demandées de notre feuille de route a été la possibilité d’intégrer Discourse Gamification avec un système de gamification externe. Les exemples sont nombreux :

  • Intégration avec les programmes de gamification existants dans les entreprises
  • Possibilité d’attribuer des points pour des événements qui se produisent en dehors de Discourse, comme des événements IRL, ou ailleurs en ligne, comme être un client dans une communauté, ou acheter un produit.
  • Possibilité de permettre aux utilisateurs d’échanger leurs points contre des produits dérivés, des produits ou des avantages.

Aujourd’hui, juste à temps pour le premier anniversaire du plugin, nous avons rendu tout cela possible avec une API complète pour gérer les événements de score personnalisés :tada:.

Ce nouveau système permet aux administrateurs de :

  • Attribuer aux utilisateurs un événement de score personnalisé
  • Attribuer aux utilisateurs des événements de score négatifs, pour prendre en compte les échanges ou les pénalités
  • Mettre à jour et lister les événements personnalisés précédemment créés

API

:warning: Les points attribués via l’API mettront jusqu’à 10 minutes à se refléter sur le score global d’un utilisateur pour les événements créés avec la date actuelle, et jusqu’à 24h pour les événements créés dans les 10 derniers jours. Pour les événements créés avec une date antérieure aux 10 derniers jours, vous devez exécuter la tâche rake de remplissage.

Il existe actuellement 3 points de terminaison d’API différents.

Lister les événements

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

Vous pouvez également lister les événements d’un utilisateur spécifique ou par date :

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

Créer un événement

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"

Mettre à jour un événement

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 « J'aime »

Y aura-t-il un moyen de le faire via l’interface utilisateur ?

9 « J'aime »

C’est quelque chose que j’envisagerais si un client d’entreprise souhaitait le parrainer.

10 « J'aime »

C’est incroyable. Nous sommes en train de lancer et de piloter un programme d’ambassadeurs/champions, et nous utilisons Airtable pour surveiller les webhooks de nos différentes sources (Discourse, GitHub, Ghost) et y agréger notre programme de champions. Je suis impatient de découvrir cela et de voir si cela pourrait nous servir à gérer/surveiller notre programme et nos contributions.

Il serait formidable de pouvoir attribuer des points à un groupe d’utilisateurs plutôt qu’à un utilisateur. Le cas d’utilisation pour nous en tant que client d’entreprise serait que nous voulons essentiellement attribuer des points à l’entreprise pour laquelle les utilisateurs travaillent et agréger leurs points pour chaque entreprise. Quelle est la faisabilité de quelque chose comme ça ?

9 « J'aime »

Ah, je ne sais pas comment utiliser ceci :joyful:
Nous utilisons un plan d’entreprise.

J’aimerais que nous puissions opérer ceci via l’interface utilisateur.

Mais quand même, merci d’avoir créé cette équipe ! Continuez votre bon travail.

5 « J'aime »

Cela pourrait aider à donner des points ponctuels dans Discourse avec le plugin Automation ?

1 « J'aime »

Comment fonctionne le rachat de points ? Je vois qu’il existe un événement de mise à jour qui pourrait être utilisé pour soustraire des points d’événements individuels, mais cela semble être une façon inefficace de racheter des points.

De plus, lorsque j’essaie de lister les événements dans mon instance Discourse, j’obtiens un 404.

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

404 Not Found
« L’URL ou la ressource demandée est introuvable. »

J’ai activé le plugin et je peux le configurer via l’interface utilisateur. Est-ce que quelque chose m’échappe pour activer l’API du système externe ?

1 « J'aime »

C’est peut-être ma décennie d’expérience dans les banques, mais la façon dont j’imagine le rachat de points est d’émettre des événements personnalisés de valeur négative.

Par exemple, disons que vous avez un utilisateur qui souhaite échanger des points contre un T-shirt, et que ce T-shirt coûte 10 000 points. Le flux sur votre système d’échange serait le suivant :

  1. Vérifiez si l’utilisateur a suffisamment de points :

    curl https://meta.discourse.org/u/falco.json -s | jq . | grep score
        "gamification_score": 89386,
    
  2. Émettez un événement de « retrait de points »

    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"
    

Vous voudrez encapsuler cela dans un sémaphore quelconque, car c’est l’exemple classique d’utilisation de ceux-ci, mais c’est l’essentiel du flux de travail proposé.

C’est une fonctionnalité très récente, alors faites-moi savoir si le flux de travail proposé ne fonctionne pas correctement.

Cela fonctionne bien pour moi, à la fois dans le navigateur et via l’API. C’est un point d’accès administrateur, vous devez donc être un administrateur connecté via le navigateur, ou passer des clés API comme expliqué dans l’OP.

3 « J'aime »

Ok, c’est ce qui me manquait. Je ne savais pas que l’on pouvait émettre des points négatifs. Cela devrait fonctionner parfaitement alors.

:man_facepalming: J’utilisais des identifiants expirés. Merci de confirmer de toute façon.

2 « J'aime »

@Falco

Y a-t-il des projets pour ajouter des scopes à cette API ? Il semble que la seule façon pour moi de créer ou de mettre à jour des scores est d’avoir une clé API d’administrateur qui a un accès global. J’aimerais avoir un scope qui restreint une clé à la seule capacité de mettre à jour des scores. Cela me donnerait plus de confiance dans l’utilisation de cette API dans des outils d’automatisation car je n’aurais pas une clé d’administrateur qui peut faire bien plus que de simplement mettre à jour des scores.

3 « J'aime »

C’est une bonne idée, mais personnellement, je n’ai pas la bande passante pour travailler sur cela dans un avenir proche.

Si vous souhaitez parrainer cette fonctionnalité, veuillez contacter notre canal de support afin que nous puissions vous fournir un devis.

3 « J'aime »

Je rencontre le même problème ici :

{"errors":["L'URL ou la ressource demandée est introuvable."],"error_type":"not_found"}

Cette erreur a été causée par

Alors vous voulez vérifier les vôtres :wink:

1 « J'aime »

Merci, je vais aussi faire la mise à jour vers la dernière version au cas où

La mise à jour vers la dernière version a fonctionné ! Merci.

1 « J'aime »

J’ai testé cela un peu aujourd’hui. Je vois les événements que je peux suivre, bien que je ne sache pas s’il existe une requête directe pour afficher uniquement les événements par identifiant d’utilisateur. Je cherche un moyen d’avoir un journal d’audit ou de présenter aux utilisateurs comment ils ont gagné/perdu des points.

1 « J'aime »

Une notification s’affiche dans l’interface utilisateur lorsqu’un appel API réussit à ajouter des points ?

Génial ! Et j’ai une autre suggestion, est-il possible d’ajouter une fonctionnalité qui permet aux utilisateurs d’échanger des points contre des abonnements dans l’interface utilisateur ? Et la possibilité d’ajouter une limite au nombre de points qu’un utilisateur peut gagner par jour lors d’un événement (comme la création de sujets).

Merci !

Non, la fonctionnalité est 100 % basée sur l’API. Vous pouvez appeler le point de terminaison « Lister les événements » pour vérifier les événements, comme décrit dans le message d’origine.

3 « J'aime »