| Краткое описание | Плагин Solved Reminders расширяет функциональность плагина Solved, предоставляя дополнительные возможности напоминаний для решённых тем. | |
| Ссылка на репозиторий | https://github.com/discourse/discourse-solved-reminders-plugin | |
| Руководство по установке | Как установить плагины в Discourse |
Обратите внимание, что этот плагин находится в активной разработке и ещё не полностью завершён.
Плагин Solved Reminders расширяет функциональность плагина Discourse Solved, добавляя возможности напоминаний и уведомлений для тем, требующих закрытия. Этот плагин не только помогает поддерживать эффективное управление темами, побуждая пользователей помечать их как решённые, но и вовлекает пользователей с помощью поздравительных сообщений.
Возможности
- Автоматические напоминания: Отправляет уведомления пользователям, побуждая их вернуться и пометить свои темы как решённые.
- Сообщения о вовлечённости: Поздравляет пользователей, успешно решивших темы, и предлагает дополнительные темы, которые они могли бы помочь решить.
- Бесшовная интеграция: Работает в связке с плагинам Discourse Solved, обеспечивая плавный пользовательский опыт.
Установка
Для установки плагина Solved Reminders следуйте общему процессу установки плагинов, описанному в руководстве 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. Рекомендуется изменить:
Использование
После настройки плагин будет автоматически работать в соответствии с параметрами, заданными администратором. Он активно участвует в обеспечении решения тем, напоминая соответствующим пользователям о необходимости действий.
Частное сообщение (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





