| 概要 | Solved Reminders Plugin は、解決済みのトピックに対するリマインダー機能を提供することで、Solved プラグイン の機能を拡張します。 | |
| リポジトリリンク | https://github.com/discourse/discourse-solved-reminders-plugin | |
| インストールガイド | Discourse へのプラグインインストール方法 |
このプラグインは現在活発に開発中であり、まだ完全な状態ではないことに注意してください。
Solved Reminders Plugin は、Discourse Solved Plugin の機能を拡張し、終了が必要なトピックに対するリマインダーと通知機能を追加します。このプラグインは、ユーザーがトピックを解決済みとしてマークすることを促すことで効率的なトピック管理を維持するのに役立ちますが、お祝いメッセージを通じてユーザーのエンゲージメントも高めます。
機能
- 自動リマインダー: ユーザーに通知を送信し、トピックを再確認して解決済みとしてマークするよう促します。
- エンゲージメントメッセージ: トピックを正常に解決したユーザーをお祝いし、解決に協力できる可能性のある他のトピックを提案します。
- シームレスな統合: Discourse Solved プラグイン と連携して、スムーズなユーザー体験を実現します。
インストール
Solved Reminders Plugin をインストールするには、Discourse Meta ガイド に記載されている一般的なプラグインインストール手順に従ってください。
- コンテナ構成を編集する:
hooksセクションのapp.ymlファイルにプラグインのリポジトリリンクを追加します。
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/discourse-solved-reminders-plugin.git
- 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





