| 摘要 | 已解决提醒插件(Solved Reminders Plugin)通过为已解决的主题提供额外的提醒功能,扩展了 已解决插件 的功能。 | |
| 仓库链接 | https://github.com/discourse/discourse-solved-reminders-plugin | |
| 安装指南 | 如何在 Discourse 中安装插件 |
请注意,本插件正处于积极开发中,尚未完全完成。
已解决提醒插件通过为需要关闭的主题添加提醒和通知功能,扩展了 Discourse 已解决插件 的功能。该插件不仅通过鼓励用户将主题标记为已解决来帮助用户高效管理主题,还通过祝贺消息让用户参与其中。
功能特性
- 自动提醒:向用户发送通知,提示他们重新访问并将主题标记为已解决。
- 互动消息:祝贺成功解决主题的用户,并建议他们可能帮助解决的其他主题。
- 无缝集成:与 Discourse 已解决插件 协同工作,确保流畅的用户体验。
安装
要安装已解决提醒插件,请按照 Discourse Meta 指南 中描述的一般插件安装流程操作:
- 编辑容器配置:在
app.yml文件的hooks部分添加插件的仓库链接。
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/discourse-solved-reminders-plugin.git
- 重建 Discourse 容器:通过重建应用程序来应用插件。
./launcher rebuild app
配置
安装后,您可以通过 Discourse 管理面板微调插件设置。考虑调整以下内容:
使用方法
配置完成后,插件将根据管理员设置的配置自动运行。它积极参与确保主题得到解决,通过向相关用户发送提醒和消息。
发送给用户的私信,提醒他们将帖子标记为解决方案:
发送给已将帖子标记为解决方案的用户的私信:
用户可以在其偏好设置中禁用推荐类似主题作为解决方案的私信:
管理员可以根据社区需求调整配置。
自定义消息文本
发送给用户的提醒消息可以在您网站的「外观 → 站点文本」页面下的 mark_as_solution.message 中找到。
报告与数据分析
本插件不会向 Discourse 添加任何特定的数据库表,但您可以结合使用数据探索插件(Data Explorer)来跟踪和分析提醒消息的有效性。
以下是您可以使用本插件的两个数据探索 SQL 查询示例。
已解决提醒消息计数
此查询提供关于已解决提醒消息的月度聚合统计信息。它:
- 识别包含文本「您的主题已有回复」的私信
- 按月份分组数据并计算:
- 发送的提醒消息数量
- 收到这些提醒的用户总数
- 阅读这些提醒的用户数量
- 阅读率百分比(阅读者/接收者)
- 结果显示提醒消息活动的月度趋势和有效性
SQL 详情
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-12-31
-- text :reminder_text = %您的主题已有回复%
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
已解决提醒个人消息
此查询提供每个收到提醒消息的用户的详细个人级别数据。它:
- 识别包含文本「您的主题已有回复」的私信
- 列出每位个人接收者,包括:
- 用户信息(ID、用户名、姓名、邮箱)
- 消息详情(标题、链接)
- 是否已阅读消息(是/否)
- 阅读时间(如果适用)
- 查看消息的秒数
- 结果按发送日期和用户名排序,清晰显示谁收到了并阅读了每条消息
SQL 详情
-- [params]
-- date :start_date = 2024-01-01
-- date :end_date = 2025-12-31
-- text :reminder_text = %您的主题已有回复%
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





