Accorder un badge personnalisé via l'API

Custom badges that you have created on your forum can be granted through the API. This is a great way to award badges without having to use custom badge SQL.

To grant a badge through the API, you need to know the username of the user that you wish to grant the badge to, and the ID of the badge you wish to grant. You also need to make sure you have generated an All Users API Key from your site’s Admin/API section.

Finding your API Key

This screenshot is from my local development site. Generally, you need to be very careful about sharing your API keys:

Finding the Badge ID

You can get the Badge ID from the badge’s URL. Go to your Admin/Badges section and then click on the badge that you wish to grant. The URL will look something like this: https://forum.example.com/admin/badges/102. The last number in the URL is the badge ID.

Making the API call

To test an API call, you can try granting a badge using curl or Postman. Here is how I grant a badge from my computer’s terminal with curl.

First, to make things easier, set an api_key variable:

 api_key=yourallusersapikey

Then to grant a badge with the ID of 102 to the user bobby:

curl -X POST "https://forum.example.com/user_badges" \
-H "Content-Type: multipart/form-data;" \
-H "Api-Key: $api_key" \
-H "Api-Username: system" \
-F "username=bobby" \
-F "badge_id=102" \
-F "reason=https://forum.example.com/t/whats-the-best-photo-youve-ever-taken/160/2"

The reason parameter is optional. If you supply it, it must be set to the URL of a topic or a post on your site.

You should get a JSON response with details about the badge and when it was granted.

26 « J'aime »

Has anybody added a badge (or flair) via Zapier to Discourse API like outlined here?

Also, seems like a great candidate for an action via the official integration, @HAWK.

3 « J'aime »

Voir aussi Create a custom badge with an image through the API, qui montre comment téléverser, et contient également un autre exemple d’attribution du badge (en python).

1 « J'aime »

Quelle est la raison pour laquelle cette méthode n’est pas décrite dans la documentation de l’API sur https://docs.discourse.org/ ?

Je n’ai pas pu la trouver là-bas.

2 « J'aime »

Parce qu’il ne semble pas y avoir de personne responsable de la mise à jour complète ou à jour de ces documents et qu’une âme charitable a publié ces instructions ici. En général, la documentation de l’API consiste à Ingénierie inverse de l’API Discourse et à examiner le code source.

7 « J'aime »

Bien, il n’y a donc aucun moyen d’automatiser l’attribution de tels badges via une API ?

Par exemple, une personne qui reçoit 5 000 mentions « J’aime » sur ses réponses se voit attribuer un badge.

1 « J'aime »

Si vous êtes auto-hébergé ou sur Enterprise, vous voulez Activer le SQL de badge.

2 « J'aime »

Si vous ne pouvez pas activer le badge SQL, il serait techniquement possible d’automatiser cela, mais ce serait un processus en deux étapes. Tout d’abord, effectuez une requête API pour exécuter une requête Data Explorer qui renvoie les noms d’utilisateur des utilisateurs qui répondent à vos critères et qui n’ont pas encore reçu le badge : Exécuter des requêtes Data Explorer avec l’API Discourse. Ensuite, utilisez les noms d’utilisateur renvoyés par cette requête pour attribuer le badge via l’API.

Cela semble un peu inefficace cependant. D’après ce que je peux dire, il n’y a pas de route qui puisse être utilisée pour attribuer un badge à plusieurs utilisateurs en un seul appel API, donc en fonction du nombre d’utilisateurs éligibles au badge, vous pourriez finir par effectuer de nombreuses requêtes API.

En fin de compte, cela ressemble au genre de chose qui pourrait être gérée par le plugin Automation. Il pourrait y avoir un déclencheur récurrent qui exécute une requête Data Explorer avec un identifiant de requête donné. En fonction des champs renvoyés par la requête, les résultats pourraient être utilisés pour déclencher divers scripts. Par exemple, si un champ username était renvoyé par la requête, il pourrait être utilisé pour exécuter des scripts qui attribuent des badges, ajoutent des utilisateurs à des groupes, etc.

2 « J'aime »

Cela n’aura pas les mêmes problèmes qui ont entraîné la désactivation du SQL des badges en premier lieu ?

1 « J'aime »

Je ne pense pas. Les requêtes de l’Explorateur de données sont exécutées dans un bloc de transaction qui expire après 10 secondes. Je pense que le but est d’éviter le type de problème que les requêtes de badges peuvent déclencher. Si les choses n’étaient pas configurées ainsi, une requête inefficace de l’Explorateur de données pourrait planter le site.

En y réfléchissant maintenant, je me demande si le SQL de badge personnalisé pourrait avoir le même type de protection.

4 « J'aime »