Comment intégrer Discourse Gamification avec un système externe (réclamer et attribuer des 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 des programmes de gamification existants dans les entreprises

  • Capacité à attribuer des points pour des événements se produisant en dehors de Discourse, tels que des événements en présentiel (IRL) ou ailleurs en ligne, comme être un client dans une communauté ou acheter un produit.

  • La possibilité de permettre aux utilisateurs d’échanger leurs points contre des articles promotionnels, des produits ou des avantages

Aujourd’hui, juste à temps pour le premier anniversaire du plugin, nous avons rendu tout cela possible grâce à 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 gérer les échanges ou les pénalités

  • Mettre à jour et lister les événements personnalisés créés précédemment

API

\u003e :warning: Les points attribués via l’API peuvent prendre jusqu’à 1 heure pour se refléter dans le score global d’un utilisateur pour les événements créés avec la date actuelle, et jusqu’à 24 heures pour les événements créés au cours des 10 derniers jours. Pour les événements créés avec une date antérieure à 10 jours, vous pouvez utiliser le bouton Recalculer les scores dans l’interface d’administration de la gamification, ou exécuter la tâche rake de remplissage : rake gamification_scores:backfill_scores_from[AAAA-MM-JJ].

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

Liste des événements

Retourne jusqu’à 100 événements. Vous pouvez filtrer par id, user_id et/ou date.

curl https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e'

Vous pouvez également lister les événements spécifiques à un utilisateur ou à une date :

curl https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json?user_id=1\u0026date=2023-05-01 \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e'

Créer un événement

curl -X POST https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-H "Content-Type: application/json" \
-d '{
  "user_id": 13,
  "date": "2023-04-14",
  "points": 15,
  "description": "Participant au karaoké de mai 2023"
}'

Syntaxe alternative utilisant jo :

jo -p user_id="13" date="2023-04-14" points="15" description="Participant au karaoké de mai 2023" | curl --json @- -XPOST http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"

Mettre à jour un événement

Le point de terminaison de mise à jour nécessite id et points. Vous pouvez optionnellement mettre à jour description. Notez que user_id et date ne peuvent pas être modifiés après la création.

curl -L -X PUT https://\u003cexample_url\u003e/admin/plugins/gamification/score_events.json \
-H 'API-Key: \u003capi_key_here\u003e' \
-H 'API-Username: \u003capi_username_here\u003e' \
-H "Content-Type: application/json" \
-d '{
  "id": 6,
  "points": 25,
  "description": "Participant à la conférence de mai 2023"
}'

Syntaxe alternative utilisant jo :

jo -p id="11" points="25" description="Participant au karaoké de mai 2023" | curl --json @- -XPUT http://example/admin/plugins/gamification/score_events -H "Api-Key: apikeyhere" -H "Api-Username: system"
29 « 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 »