Création de requêtes de badges personnalisés déclenchés

:bookmark: Ce guide explique comment créer des requêtes de badges personnalisés déclenchés dans Discourse, y compris les types de badges, les contraintes pour les badges déclenchés et une requête d’exemple.

:person_raising_hand: Niveau utilisateur requis : Administrateur

:warning: Cette fonctionnalité est désactivée par défaut. Pour l’activer, suivez ce guide.

Lors de la définition des badges dans Discourse, vous rencontrerez une option « Déclencheur » avec les choix suivants :

  • Mise à jour quotidienne
  • Quand un utilisateur agit sur un message
  • Quand un utilisateur modifie ou crée un message
  • Quand un utilisateur change de niveau de confiance
  • Quand un utilisateur est modifié ou créé

Ces déclencheurs forcent l’exécution des badges à des intervalles plus fréquents que quotidiens, garantissant que les utilisateurs sont informés des nouveaux badges plus près du moment où l’action a eu lieu.

Types de badges

Il existe deux types de badges que vous pouvez définir :

  1. Badges qui ciblent des messages
  2. Badges qui ne ciblent pas de messages

Toutes les définitions SQL de badge nécessitent que vous sélectionniez les colonnes user_id et granted_at. Si votre badge cible des messages, vous devez également sélectionner une colonne nommée post_id.

:information_source: Si ces colonnes ne sont pas directement disponibles, vous pouvez les renommer. Par exemple : u.id as user_id

Contraintes pour les badges déclenchés

Étant donné que les badges déclenchés peuvent s’exécuter une fois par minute, vous devez fournir plus d’« indications » dans la définition du badge. Il ne suffit pas de renvoyer l’ensemble complet des badges ; vous devez également fournir des indications sur la manière d’exécuter le badge sur un sous-ensemble.

Déclencheurs basés sur l’utilisateur

Si votre déclencheur est basé sur l’utilisateur, fournissez une clause sur la façon de le filtrer en fonction de :user_ids.

Déclencheurs basés sur les messages

Si votre déclencheur est basé sur les messages, fournissez des informations sur la façon de le déclencher en fonction de :post_ids.

:exclamation: N’oubliez pas qu’un remplissage complet s’exécute quotidiennement quoi qu’il arrive, vous devez donc en tenir compte et inclure la gestion du paramètre :backfill.

Votre requête de badge déclenché inclura toujours le paramètre :backfill et soit le paramètre :post_ids, soit le paramètre :user_ids.

Exemple de requête de badge déclenché

Voici un exemple de badge déclenché « quand un utilisateur agit sur un message ». Dans ce cas, les applications « delta » recevront le paramètre :post_ids :

SELECT p.user_id, p.id post_id, p.updated_at granted_at
FROM badge_posts p
WHERE p.like_count >= 25
AND (:backfill OR p.id IN (:post_ids) )

La clause (:backfill OR p.id IN (:post_ids) ) permet de filtrer les résultats. Lorsque le travail quotidien s’exécute, :backfill est vrai, de sorte que l’ensemble complet est analysé. Lorsque les travaux delta s’exécutent, :backfill est faux et :post_ids est défini.

Pourquoi l’indication manuelle est nécessaire

La requête d’attribution de badge exécute votre requête de badge dans une « sous-requête ». Souvent, l’optimiseur PostgreSQL a des difficultés lors de l’analyse de l’ensemble complet lorsque la clause se trouve sur la requête principale. Bien qu’il puisse gérer correctement les requêtes triviales, il peut échouer avec des agrégats plus complexes.

Pour éviter les problèmes potentiels, cette contrainte a été ajoutée, vous permettant d’appliquer des filtres à l’emplacement le plus approprié.

Besoin d’aide ?

Si vous rencontrez des difficultés pour écrire une requête de badge, publiez une question dans Support - décrivez ce que vous essayez d’accomplir et incluez votre travail en cours. La communauté essaiera de vous aider.

:information_source: Les déclencheurs de badge peuvent être complexes. Souvent, les mises à jour « quotidiennes » suffisent, et vous pouvez ignorer les aspects les plus complexes des requêtes déclenchées.

38 « J'aime »
Creating Custom Badges and Triggers
Creating custom badge with custom rules
How to grant badges using Automation?
Two custom badges on moderation
Pre approval email in the dashboard waiting to go
Help me get Discourse set up for the first time
Grant badges based on gender profile field?
Badges for X Number of Solutions Created?
Discourse-Math badge
Assigned a badge based on multiple badge assignment
Problem testing Badge Query from Data Explorer
Understanding and using badges
First Post badge
Grant Badge when user visits link
Custom Icons for admins and moderators (and other groups)
A silver badge for _each_ 5 bronze badges
Automatically set active members to follow a category
A silver badge for _each_ 5 bronze badges
A silver badge for _each_ 5 bronze badges
About Badges
What is the 'backfill`?
Query to create some groups based on activity
Are badges customizable?
Badge query working in explorer but not in badge SQL?
Badges for posting
Plugin or other option to require a post and a like?
Gamification beyond Leaderboard
Bulk Award a badge to a set of users
What does admin_js.admin.badges.trigger_type.user_change mean in Discourse?
Grant Custom Badge Upon Reading ToS
Set badges to be auto granted?
Access to category after 10 posts (automatic group membership)
Add badge for adding profile picture
How do you assign a badge automatically as soon as someone is added to a group?
Moderator - Badges, Stars, etc. - Positive Feedback?
Hidden Settings on Discourse Hosted Sites
Require LinkedIn or GitHub account to advance from TL0 to TL1. Possible?
Need some Help with my Triggered Custom Badge Query
Exclude certain categories from the Trust Levels
How does Meta handle the bug reporter badge?
Restricting users to join any one private group
An automatic group of group owners
Is it possible to have a badge for 100 solutions?
Grant a badge for all members of a group
Can I change the threshold of the Solved badges?
Grant badges through Automation
What is the 'backfill`?