解決済み リマインダー プラグイン

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

:warning: このプラグインは現在活発に開発中であり、まだ完全な状態ではないことに注意してください。

Solved Reminders Plugin は、Discourse Solved Plugin の機能を拡張し、終了が必要なトピックに対するリマインダーと通知機能を追加します。このプラグインは、ユーザーがトピックを解決済みとしてマークすることを促すことで効率的なトピック管理を維持するのに役立ちますが、お祝いメッセージを通じてユーザーのエンゲージメントも高めます。

機能

  • 自動リマインダー: ユーザーに通知を送信し、トピックを再確認して解決済みとしてマークするよう促します。
  • エンゲージメントメッセージ: トピックを正常に解決したユーザーをお祝いし、解決に協力できる可能性のある他のトピックを提案します。
  • シームレスな統合: Discourse Solved プラグイン と連携して、スムーズなユーザー体験を実現します。

インストール

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

  1. コンテナ構成を編集する: hooks セクションの app.yml ファイルにプラグインのリポジトリリンクを追加します。
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 クエリの例です。

解決リマインダーメッセージのカウント

このクエリは、解決リマインダーメッセージに関する月次集計統計を提供します。それは:

  • 「There has been a reply on topic you posted」というテキストを含むプライベートメッセージを特定します
  • 月ごとにデータをグループ化し、以下を計算します:
    • 送信されたリマインダーメッセージの数
    • これらのリマインダーを受信したユーザーの総数
    • これらのリマインダーを読んだユーザーの数
    • 読解率パーセンテージ(読者/受信者)
  • 結果は、リマインダーメッセージのアクティビティと有効性の月次トレンドを示します
SQL Details
-- [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

解決リマインダー個別メッセージ

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

  • 「There has been a reply on topic you posted」というテキストを含むプライベートメッセージを特定します
  • 各個別受信者をリストします:
    • ユーザー情報(ID、ユーザー名、名前、メール)
    • メッセージの詳細(タイトル、リンク)
    • メッセージを読んだかどうか(TRUE/FALSE)
    • 読んだ日時(該当する場合)
    • 閲覧に費やした秒数
  • 結果は送信日とユーザー名でソートされ、誰がどのメッセージを受信し、読んだかを正確に示します
SQL Details
-- [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,  -- Renders as link to user
  u.username,
  u.name,
  ue.email,
  r.topic_id,       -- Renders as link to topic
  r.message_title,
  -- Link to the message (manually constructed for reference)
  '/t/' || r.message_slug || '/' || r.topic_id AS message_link,
  r.sent_at,
  -- Check if user has read the message
  CASE 
    WHEN tu.last_read_post_number > 0 THEN TRUE
    ELSE FALSE
  END AS message_read,
  -- When they read it (if they did)
  CASE 
    WHEN tu.last_read_post_number > 0 THEN tu.last_visited_at
    ELSE NULL
  END AS read_at,
  -- How much time spent viewing (in seconds)
  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 
  -- Exclude the sender (system/bot) from the recipients list
  tu.user_id != r.sender_id
ORDER BY 
  r.sent_at DESC,
  u.username
「いいね!」 17

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

「いいね!」 4

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

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

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

「いいね!」 1

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

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

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

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

よろしくお願いします。

「いいね!」 1

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

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

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

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

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

「いいね!」 5