解決したリマインダー・プラグイン

|||
-|-|-
:discourse2: | 概要 | Solved Reminders Plugin は、Solved plugin の機能を拡張し、解決済みのトピックに追加のリマインダー機能を提供します。
:hammer_and_wrench: | リポジトリリンク | https://github.com/discourse/discourse-solved-reminders-plugin
:open_book: | インストールガイド | Discourseでプラグインをインストールする方法

:warning: このプラグインは活発に開発されており、まだ完全ではありません。

Solved Reminders Pluginは、解決が必要なトピックのクロージャーを促すためのリマインダーおよび通知機能を追加することにより、Discourse Solved Pluginの機能を拡張します。このプラグインは、ユーザーがトピックを解決済みとしてマークすることを奨励することで効率的なトピック管理を維持するのに役立つだけでなく、称賛メッセージを通じてユーザーをエンゲージします。

機能

  • 自動リマインダー: ユーザーに通知を送信し、トピックを再確認して解決済みとしてマークするように促します。
  • エンゲージメントメッセージ: トピックを正常に解決したユーザーを祝福し、解決に役立つ可能性のある追加のトピックを提案します。
  • シームレスな統合: Discourse Solved pluginと連携して、スムーズなユーザーエクスペリエンスを保証します。

インストール

Solved Reminders Pluginをインストールするには、Discourse Metaガイドに記載されている一般的なプラグインインストールプロセスに従ってください。

  1. コンテナ設定の編集: app.ymlファイルのhooksセクションにプラグインのリポジトリリンクを追加します。
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/discourse-solved-reminders-plugin.git
  1. Discourseコンテナの再構築: アプリケーションを再構築してプラグインを適用します。
./launcher rebuild app

設定

インストール後、Discourse管理者パネルを通じてプラグイン設定を微調整できます。調整を検討してください。

使用方法

設定が完了すると、プラグインは管理者が設定した設定に基づいて自動的に機能します。リマインダーやメッセージで関連ユーザーにプロンプトを表示することで、トピックが解決に至ることを積極的に保証します。

投稿を解決済みとしてマークするようにユーザーにリマインドするためのPM送信:

投稿を解決済みとしてマークしたユーザーに送信されるPM:

ユーザーは、設定から、解決済みとしてマークする同様のトピックを推奨するPMを無効にできます。

管理者は、コミュニティのニーズに合わせて必要に応じて設定を調整できます。

メッセージテキストのカスタマイズ

ユーザーに送信されるリマインダーメッセージは、サイトの「外観」→「サイトテキスト」ページで mark_as_solution.message の下にあります。

レポートとデータ分析

このプラグインはDiscourseに特定のデータベーステーブルを追加しませんが、Data Explorerプラグインと組み合わせてリマインダーメッセージの効果を追跡および分析することができます。

以下は、このプラグインで使用できる2つのサンプルData Explorer SQLクエリです。

Solved Reminderメッセージカウント

このクエリは、Solved Reminderメッセージに関する月次集計統計を提供します。

  • 「トピックに返信がありました」というテキストを含むプライベートメッセージを識別します。
  • データを月ごとにグループ化し、以下を計算します。
  • 送信されたリマインダーメッセージの数
  • これらのリマインダーを受信したユーザーの総数
  • これらのリマインダーを読んだユーザーの数
  • 既読率(読者/受信者)
  • 結果は、リマインダーメッセージのアクティビティと効果の月次トレンドを示します。
SQL詳細
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-12-31
-- text :reminder_text = %There has been a reply on topic you posted%

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

Solved Reminder個別メッセージ

このクエリは、リマインダーメッセージを受信した各ユーザーの詳細な個別データを提供します。

  • 「トピックに返信がありました」というテキストを含むプライベートメッセージを識別します。
  • 各個々の受信者をリストします。
  • ユーザー情報(ID、ユーザー名、名前、メールアドレス)
  • メッセージの詳細(タイトル、リンク)
  • メッセージを読んだかどうか(TRUE/FALSE)
  • いつ読んだか(該当する場合)
  • 表示に費やした時間(秒単位)
  • 結果は送信日とユーザー名で並べ替えられ、各メッセージを受信して読んだユーザーが正確に表示されます。
SQL詳細
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-12-31
-- text :reminder_text = %There has been a reply on topic you posted%

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,  -- ユーザーへのリンクとしてレンダリング
  u.username,
  u.name,
  ue.email,
  r.topic_id,       -- トピックへのリンクとしてレンダリング
  r.message_title,
  -- メッセージへのリンク(参照用に手動で構築)
  '/t/' || r.message_slug || '/' || r.topic_id AS message_link,
  r.sent_at,
  -- ユーザーがメッセージを読んだかどうかを確認
  CASE
    WHEN tu.last_read_post_number > 0 THEN TRUE
    ELSE FALSE
  END AS message_read,
  -- いつ読んだか(読んだ場合)
  CASE
    WHEN tu.last_read_post_number > 0 THEN tu.last_visited_at
    ELSE NULL
  END AS read_at,
  -- 表示に費やした時間(秒単位)
  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
  -- 送信者(システム/ボット)を受信者リストから除外
  tu.user_id != r.sender_id
ORDER BY
  r.sent_at DESC,
  u.username
「いいね!」 15

PMは、トピックタイトルをそのタイトルで表示できますか?ユーザーが一度に複数のソリューションを取得した場合、PMがどのソリューションを参照しているのかユーザーが知らないと混乱する可能性があります。
リマインダーが送信される投稿数を制御する設定はありますか?

「いいね!」 3

念のため、2点確認させてください。

  1. 返信が少なくとも1件あったトピックの作成者だけにメッセージを送信しますか?
  2. カテゴリごとのソリューションプラグイン設定と連携しますか?つまり、一部のカテゴリで無効にしたい場合は、サイト全体のソリューションプラグイントグルを無効にして、使用したいカテゴリで有効にする必要がありますか?
「いいね!」 3

提案されたトピックは、ランダムな未解決トピックですか、それとも元の解決済みトピックに関連する会話ですか?関連している場合、どのように特定されますか?

「いいね!」 1

2件の投稿が新しいトピックに分割されました: ソースコードをプラグインに変換する方法

これが非常に役立つと感じました。特に、フォーラムでは解決策を受け取った後に返信を解決済みとしてマークすることを忘れがちで、その後、チームが手動でリマインダーを送る必要がありました :weary:

他にいくつか質問があります。

  • リマインダーのプライベートメッセージ(PM)を誰が送信するか設定できますか、それとも常にDiscobotにデフォルト設定されますか?
  • PMのテキストも、必要に応じて調整できますか?

よろしくお願いします。

「いいね!」 1

このプラグインは非常に役立ちます。ありがとうございます!

私の理解では、この通知機能は14日に一度しか実行されないとのことです。つまり、14日間に開始した(解決済みとマークしていない)トピックの数だけ、DMとメールが送信されることになります。

プラグインをインストールしてから5日後に手動で実行したところ、7件のDM(およびメール)を受け取りました。

これは少し過剰なように思えます。現在積極的に多くのトピックを作成している管理者としては少し特殊なケースかもしれませんが、多くのユーザーが多くのトピックを作成しています(素晴らしいことです)。

この通知を1つにまとめるオプションを実装することは可能でしょうか?つまり、「7件の投稿を解決済みとしてマークしました」というメッセージを、スレッドごとのメッセージではなく、1つのメッセージで送信するということです。

「いいね!」 4