Решено: плагин Reminders

:discourse2: Краткое описание Плагин Solved Reminders расширяет функциональность плагина Solved, предоставляя дополнительные возможности напоминаний для решённых тем.
:hammer_and_wrench: Ссылка на репозиторий https://github.com/discourse/discourse-solved-reminders-plugin
:open_book: Руководство по установке Как установить плагины в Discourse

:warning: Обратите внимание, что этот плагин находится в активной разработке и ещё не полностью завершён.

Плагин Solved Reminders расширяет функциональность плагина Discourse Solved, добавляя возможности напоминаний и уведомлений для тем, требующих закрытия. Этот плагин не только помогает поддерживать эффективное управление темами, побуждая пользователей помечать их как решённые, но и вовлекает пользователей с помощью поздравительных сообщений.

Возможности

  • Автоматические напоминания: Отправляет уведомления пользователям, побуждая их вернуться и пометить свои темы как решённые.
  • Сообщения о вовлечённости: Поздравляет пользователей, успешно решивших темы, и предлагает дополнительные темы, которые они могли бы помочь решить.
  • Бесшовная интеграция: Работает в связке с плагинам Discourse Solved, обеспечивая плавный пользовательский опыт.

Установка

Для установки плагина Solved Reminders следуйте общему процессу установки плагинов, описанному в руководстве 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 для отслеживания и анализа эффективности ваших сообщений-напоминаний.

Ниже приведены два примера SQL-запросов Data Explorer, которые можно использовать с этим плагином.

Количество сообщений-напоминаний о решённых темах

Этот запрос предоставляет ежемесячную сводную статистику по сообщениям-напоминаниям о решённых темах. Он:

  • Определяет частные сообщения, содержащие текст “На вашей теме появился ответ”
  • Группирует данные по месяцам и вычисляет:
    • Количество отправленных сообщений-напоминаний
    • Общее количество пользователей, получивших эти напоминания
    • Количество пользователей, прочитавших эти напоминания
    • Процент прочтения (прочитавшие/получившие)
  • Результаты показывают ежемесячные тенденции активности и эффективности сообщений-напоминаний
Детали 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, имя пользователя, имя, email)
    • Детали сообщения (заголовок, ссылка)
    • Фактом прочтения сообщения (TRUE/FALSE)
    • Датой прочтения (если применимо)
    • Количеством секунд, проведённых на просмотре
  • Результаты отсортированы по дате отправки и имени пользователя, показывая точно, кто получил и прочитал каждое сообщение
Детали 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
17 лайков

Мог бы PM с поздравлениями указывать заголовок темы в своём названии? Если пользователь получает несколько решений одновременно, это может сбить его с толку, если он не понимает, к какому именно решению относится PM.
Можно ли добавить настройку, позволяющую контролировать, через сколько сообщений будет отправлено напоминание?

4 лайка

Просто хочу уточнить два момента:

  1. Сообщает ли он только авторам тем, которые получили хотя бы один ответ?
  2. Работает ли он совместно с настройкой плагина «решения» для конкретных категорий, то есть если вы хотите отключить его для некоторых категорий, вам нужно отключить глобальный переключатель плагина «решения» для всего сайта и вместо этого включить его для тех категорий, где вы хотите его использовать?
3 лайка

Являются ли предложенные темы случайными нерешёнными темами или обсуждениями, связанными с исходной решённой темой? Если они связаны, как они определяются?

1 лайк

2 поста были перенесены в новую тему: Как превратить исходный код в плагин

Я вижу, что это может быть крайне полезным, особенно в нашем форуме, где пользователи часто забывают пометить ответ как решение после получения ответа, и тогда нашей команде приходится вручную напоминать им об этом :weary:

У меня есть ещё несколько вопросов:

  • Можем ли мы настроить, кто отправляет напоминание в личные сообщения, или это всегда по умолчанию делает Discobot?
  • Можем ли мы также изменять текст этих личных сообщений, если захотим?

Спасибо

1 лайк

Спасибо за этот плагин, очень полезен!

Как я понимаю, уведомление для этого работает только раз в 14 дней. Это означает, что любое количество тем, которые я создал за 14 дней (и не отметил как решённые), приведёт к отправке личных сообщений и писем.

Я только что запустил его вручную через 5 дней после установки плагина и получил 7 личных сообщений (и писем):

Это кажется немного излишним. Я знаю, что я немного выбиваюсь из общего ряда как администратор, который в настоящее время активно создаёт много тем, но довольно много наших пользователей также создают множество тем (ура).

Возможно ли добавить опцию, чтобы это уведомление объединялось в одно? Например, «Отметьте 7 ваших постов как решённые» в одном сообщении вместо отдельного сообщения для каждой темы?

5 лайков