已解决的提醒插件

|||
-|-|-
:discourse2: | 摘要 | 已解决提醒插件 通过提供已解决主题的附加提醒功能,扩展了 已解决插件 的功能。
:hammer_and_wrench: | 存储库链接 | https://github.com/discourse/discourse-solved-reminders-plugin
:open_book: | 安装指南 | 如何在 Discourse 中安装插件

:warning: 请注意,此插件正在积极开发中,尚未完全完成。

已解决提醒插件通过添加主题的提醒和通知功能来扩展 Discourse 已解决插件 的功能,以促使其得到解决。此插件不仅通过鼓励用户将主题标记为已解决来帮助维护高效的主题管理,还通过祝贺消息来吸引用户。

功能

  • 自动提醒: 向用户发送通知,提示他们重新访问并将其主题标记为已解决。
  • 互动消息: 祝贺成功解决主题的用户,并建议他们可能可以帮助解决的其他主题。
  • 无缝集成:Discourse 已解决插件 协同工作,以确保流畅的用户体验。

安装

要安装已解决提醒插件,请遵循 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 插件结合使用来跟踪和分析提醒消息的有效性。

以下是您可以使用此插件的两个示例 Data Explorer SQL 查询。

已解决提醒消息计数

此查询提供有关已解决提醒消息的每月汇总统计信息。它:

  • 识别包含文本“您发帖的主题有新回复”的私人消息
  • 按月分组数据并计算:
  • 发送的提醒消息数量
  • 收到这些提醒的总用户数
  • 阅读这些提醒的用户数
  • 阅读率百分比(阅读者/接收者)
  • 结果显示提醒消息活动和有效性的月度趋势
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

已解决提醒个人消息

此查询提供有关每个收到提醒消息的用户的详细个人级别数据。它:

  • 识别包含文本“您发帖的主题有新回复”的私人消息
  • 列出每个个人接收者,包括:
  • 用户信息(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 个赞

总理能否在其标题中说明主题标题?如果用户一次获得多个解决方案,如果用户不知道总理指的是哪个解决方案,可能会感到困惑。

是否可以设置一个控件,在发送提醒之前发送多少帖子?

3 个赞

为了再次确认两件事:

  1. 它是否只向至少收到一条回复的主题的作者发送消息?
  2. 它是否与每个类别的解决方案插件设置协同工作,这意味着如果您想在某些类别中禁用它,则必须禁用全站解决方案插件开关,而改为在您想使用它的类别中启用它?
3 个赞

建议的主题是随机的未解决主题,还是与原始已解决主题相关的对话?如果它们相关,它们是如何识别的?

1 个赞

2 篇帖子已拆分为新主题:如何将源代码转换为插件

这可能会非常有帮助,尤其是在我们的论坛上,人们往往会忘记在收到回复后将其标记为解决方案,然后我们的团队就必须手动进去提醒他们 :weary:

我还有一些其他问题:

  • 我们可以配置发送提醒私信的人,还是总是默认为 Discobot?
  • 如果我们愿意,我们也可以调整私信的文本吗?

谢谢

1 个赞

感谢这个插件,非常有帮助!

据我所知,这个插件的通知程序每 14 天运行一次。这意味着在 14 天内,无论我(未标记为解决方案的)主题有多少,都会产生私信 + 电子邮件。

我刚在安装插件 5 天后手动运行了一次,收到了 7 条私信(和电子邮件):

这似乎有点过度。我知道我作为管理员,目前积极创建了大量主题,这有点不寻常,但我们有不少用户创建了大量主题(太棒了)。

是否可以构建一个选项,将此通知合并为一条?例如,“将 7 个帖子标记为解决方案”合并为一条消息,而不是每个主题一条消息?

4 个赞