Plugin de rappels résolu

| |
|-|-|
:discourse2: | Résumé | Le plugin Solved Reminders étend les fonctionnalités du plugin Solved en offrant des capacités de rappel supplémentaires pour les sujets résolus.
:hammer_and_wrench: | Lien vers le dépôt | https://github.com/discourse/discourse-solved-reminders-plugin
:open_book: | Guide d’installation | Comment installer des plugins dans Discourse

:warning: Notez que ce plugin est en développement actif et n’est pas encore totalement abouti.

Le plugin Solved Reminders étend les fonctionnalités du plugin Discourse Solved en ajoutant des capacités de rappel et de notification pour les sujets nécessitant une clôture. Ce plugin aide non seulement à maintenir une gestion efficace des sujets en encourageant les utilisateurs à marquer les sujets comme résolus, mais engage également les utilisateurs grâce à des messages de félicitations.

Fonctionnalités

  • Rappels automatisés : Envoie des notifications aux utilisateurs pour les inciter à revenir sur leurs sujets et à les marquer comme résolus.
  • Messages d’engagement : Félicite les utilisateurs qui ont résolu avec succès des sujets et suggère d’autres sujets qu’ils pourraient aider à résoudre.
  • Intégration transparente : Fonctionne en conjonction avec le plugin Discourse Solved pour assurer une expérience utilisateur fluide.

Installation

Pour installer le plugin Solved Reminders, veuillez suivre le processus général d’installation des plugins décrit dans le guide de Discourse Meta :

  1. Modifiez votre configuration de conteneur : Ajoutez le lien du dépôt du plugin à votre fichier app.yml dans la section hooks.
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/discourse-solved-reminders-plugin.git
  1. Reconstruisez le conteneur Discourse : Appliquez le plugin en reconstruisant votre application.
./launcher rebuild app

Configuration

Après l’installation, vous pouvez affiner les paramètres du plugin via le panneau d’administration de Discourse. Pensez à ajuster :

Utilisation

Une fois configuré, le plugin fonctionnera automatiquement selon les paramètres définis par l’administrateur. Il participe activement à garantir que les sujets parviennent à une résolution en incitant les utilisateurs concernés par des rappels et des messages.

MP envoyé à l’utilisateur pour le rappeler de marquer un message comme solution :

MP envoyé à l’utilisateur qui a marqué le message comme solution :

Les utilisateurs peuvent désactiver le MP recommandant des sujets similaires à marquer comme solution depuis leurs préférences :

Les administrateurs peuvent ajuster les configurations selon les besoins de la communauté.

Personnalisation du texte des messages

Le message de rappel envoyé aux utilisateurs se trouve sur la page Apparence → Texte du site de votre site, sous mark_as_solution.message.

Rapports et analyse des données

Ce plugin n’ajoute aucune table de base de données spécifique à Discourse. Cependant, vous pouvez l’utiliser en combinaison avec le plugin Data Explorer pour suivre et analyser l’efficacité de vos messages de rappel.

Voici deux exemples de requêtes SQL Data Explorer que vous pouvez utiliser avec ce plugin.

Comptage des messages de rappel de résolution

Cette requête fournit des statistiques mensuelles agrégées sur les messages de rappel de résolution. Elle :

  • Identifie les messages privés contenant le texte « Il y a eu une réponse sur un sujet que vous avez publié »
  • Regroupe les données par mois et calcule :
    • Le nombre de messages de rappel envoyés
    • Le nombre total d’utilisateurs ayant reçu ces rappels
    • Le nombre d’utilisateurs ayant lu ces rappels
    • Le pourcentage de taux de lecture (lecteurs/bénéficiaires)
  • Les résultats montrent les tendances mensuelles de l’activité et de l’efficacité des messages de rappel
Détails SQL
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-12-31
-- text :reminder_text = %Il y a eu une réponse sur un sujet que vous avez publié%

WITH reminder_pms AS (
  SELECT 
    t.id AS topic_id,
    t.created_at,
    p.id AS post_id,
    p.user_id AS sender_id,
    DATE_TRUNC('month', t.created_at) AS month
  FROM topics t
  JOIN posts p ON p.topic_id = t.id AND p.post_number = 1
  WHERE 
    t.archetype = 'private_message'
    AND t.created_at BETWEEN :start_date AND :end_date
    AND p.raw LIKE :reminder_text
),

recipient_stats AS (
  SELECT
    r.topic_id,
    r.month,
    COUNT(DISTINCT tu.user_id) AS total_recipients,
    COUNT(DISTINCT CASE WHEN tu.last_read_post_number > 0 THEN tu.user_id END) AS read_recipients
  FROM reminder_pms r
  JOIN topic_users tu ON tu.topic_id = r.topic_id AND tu.user_id != r.sender_id
  GROUP BY r.topic_id, r.month
)

SELECT 
  TO_CHAR(month, 'YYYY-MM') AS month,
  COUNT(DISTINCT topic_id) AS reminder_pms_sent,
  SUM(total_recipients) AS total_users_received,
  SUM(read_recipients) AS users_who_read,
  ROUND(100.0 * SUM(read_recipients) / NULLIF(SUM(total_recipients), 0), 2) AS read_rate_percentage
FROM recipient_stats
GROUP BY month
ORDER BY month

Messages individuels de rappel de résolution

Cette requête fournit des données détaillées au niveau individuel pour chaque utilisateur ayant reçu un message de rappel. Elle :

  • Identifie les messages privés contenant le texte « Il y a eu une réponse sur un sujet que vous avez publié »
  • Liste chaque bénéficiaire individuel avec :
    • Les informations de l’utilisateur (ID, nom d’utilisateur, nom, email)
    • Les détails du message (titre, lien)
    • S’ils ont lu le message (VRAI/FAUX)
    • Quand ils l’ont lu (le cas échéant)
    • Combien de secondes ils ont passées à le consulter
  • Les résultats sont ordonnés par date d’envoi et nom d’utilisateur, montrant exactement qui a reçu et lu chaque message
Détails SQL
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-12-31
-- text :reminder_text = %Il y a eu une réponse sur un sujet que vous avez publié%

WITH reminder_pms AS (
  SELECT 
    t.id AS topic_id,
    t.title AS message_title,
    t.slug AS message_slug,
    t.created_at AS sent_at,
    p.id AS post_id,
    p.user_id AS sender_id,
    p.raw AS message_content
  FROM topics t
  JOIN posts p ON p.topic_id = t.id AND p.post_number = 1
  WHERE 
    t.archetype = 'private_message'
    AND t.created_at BETWEEN :start_date AND :end_date
    AND p.raw LIKE :reminder_text
)

SELECT 
  u.id AS user_id,  -- Affiché sous forme de lien vers l'utilisateur
  u.username,
  u.name,
  ue.email,
  r.topic_id,       -- Affiché sous forme de lien vers le sujet
  r.message_title,
  -- Lien vers le message (construit manuellement pour référence)
  '/t/' || r.message_slug || '/' || r.topic_id AS message_link,
  r.sent_at,
  -- Vérifier si l'utilisateur a lu le message
  CASE 
    WHEN tu.last_read_post_number > 0 THEN TRUE
    ELSE FALSE
  END AS message_read,
  -- Quand ils l'ont lu (si c'est le cas)
  CASE 
    WHEN tu.last_read_post_number > 0 THEN tu.last_visited_at
    ELSE NULL
  END AS read_at,
  -- Temps passé à consulter (en secondes)
  ROUND(tu.total_msecs_viewed / 1000.0, 1) AS time_viewed_seconds
FROM reminder_pms r
JOIN topic_users tu ON tu.topic_id = r.topic_id
JOIN users u ON u.id = tu.user_id
LEFT JOIN user_emails ue ON ue.user_id = u.id AND ue.primary = TRUE
WHERE 
  -- Exclure l'expéditeur (système/bot) de la liste des destinataires
  tu.user_id != r.sender_id
ORDER BY 
  r.sent_at DESC,
  u.username
17 « J'aime »

Le PM congratulatoire pourrait-il indiquer le titre du sujet dans son titre ? Si l’utilisateur obtient plusieurs solutions en même temps, cela pourrait être déroutant pour l’utilisateur s’il ne sait pas à quelle solution le PM fait référence.
Pourrait-il y avoir un paramètre pour contrôler après combien de publications le rappel sera envoyé ?

4 « J'aime »

Juste pour vérifier deux choses :

  1. Envoie-t-il uniquement des messages aux auteurs des sujets qui ont reçu au moins une réponse ?
  2. Fonctionne-t-il avec le paramètre du plugin de solution par catégorie, c’est-à-dire que si vous souhaitez le désactiver pour certaines catégories, vous devez désactiver le bouton du plugin de solutions sur l’ensemble du site et l’activer pour les catégories où vous souhaitez l’utiliser ?
3 « J'aime »

Les sujets suggérés sont-ils des sujets aléatoires non résolus, ou des conversations liées au sujet original résolu ? S’ils sont liés, comment sont-ils identifiés ?

1 « J'aime »

2 messages ont été divisés dans un nouveau sujet : Comment transformer du code source en plugin

Je vois que cela pourrait être extrêmement utile, en particulier sur notre forum où les gens ont tendance à oublier de marquer une réponse comme solution après en avoir reçu une, et notre équipe devrait alors intervenir pour leur rappeler manuellement :weary:

D’autres questions que j’ai sont :

  • Pouvons-nous configurer qui envoie le message privé de rappel, ou est-ce toujours Discobot par défaut ?
  • Pouvons-nous également modifier le texte des messages privés si nous le souhaitions ?

Merci

1 « J'aime »

Merci pour ce plugin, très utile !

Si je comprends bien, le notificateur ne s’exécute que tous les 14 jours. Cela signifie que tous les sujets que j’ai créés en 14 jours (et que je n’ai pas marqués comme solution) généreront un message privé + un e-mail.

Je viens de l’exécuter manuellement, 5 jours après l’installation du plugin et j’ai reçu 7 messages privés (et e-mails) :

Cela semble un peu excessif. Je sais que je suis un cas un peu particulier en tant qu’administrateur qui crée activement beaucoup de sujets en ce moment, mais pas mal de nos utilisateurs créent beaucoup de sujets (hourra).

Serait-il possible de créer une option où cette notification est combinée en une seule ? Donc “Marquer 7 de vos messages comme solution” en 1 message au lieu d’un message par fil de discussion ?

5 « J'aime »