| Краткое описание | Solved Reminders Plugin расширяет функциональность плагина 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. Рекомендуется изменить:
Использование
После настройки плагин будет автоматически работать в соответствии с параметрами, установленными администратором. Он активно участвует в обеспечении разрешения тем, направляя соответствующим пользователям напоминания и сообщения.
ЛС, отправленная пользователю для напоминания отметить пост как решение:
ЛС, отправленная пользователю, который отметил пост как решение:
Пользователи могут отключить ЛС с рекомендацией похожих тем для отметки как решенные в своих настройках:
Администраторы могут изменять конфигурацию по мере необходимости для удовлетворения потребностей сообщества.
Настройка текста сообщений
Текст напоминания, отправляемого пользователям, можно найти на странице Внешний вид → Тексты сайта вашего сайта в разделе mark_as_solution.message.
Отчетность и анализ данных
Этот плагин не добавляет в Discourse никаких специфических таблиц базы данных, однако вы можете использовать его в сочетании с плагином Data Explorer для отслеживания и анализа эффективности ваших напоминаний.
Ниже приведены два примера SQL-запросов Data Explorer, которые можно использовать с этим плагином.
Количество сообщений напоминаний о решении
Этот запрос предоставляет ежемесячную сводную статистику по сообщениям напоминаний Solved Reminders. Он:
- Определяет личные сообщения, содержащие текст “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, имя пользователя, имя, email)
- Детали сообщения (заголовок, ссылка)
- Прочитал ли он сообщение (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, -- Отображается как ссылка на пользователя
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





