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.
Niveau utilisateur requis : Administrateur
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 :
- Badges qui ciblent des messages
- Badges qui ne ciblent pas de messages
Toutes les définitions SQL de badge nécessitent que vous sélectionniez les colonnes
user_idetgranted_at. Si votre badge cible des messages, vous devez également sélectionner une colonne nomméepost_id.
Si ces colonnes ne sont pas directement disponibles, vous pouvez les renommer. Par exemple :
u.id as user_idContraintes 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.
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
:backfillet 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,:backfillest vrai, de sorte que l’ensemble complet est analysé. Lorsque les travaux delta s’exécutent,:backfillest faux et:post_idsest 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.
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 »
