| Resumen | El Solved Reminders Plugin extiende la funcionalidad del Solved plugin ofreciendo capacidades adicionales de recordatorio para temas marcados como resueltos. | |
| Enlace al repositorio | https://github.com/discourse/discourse-solved-reminders-plugin | |
| Guía de instalación | Cómo instalar plugins en Discourse |
Ten en cuenta que este plugin está en desarrollo activo y aún no está completamente terminado.
El plugin Solved Reminders extiende la funcionalidad del Discourse Solved Plugin añadiendo capacidades de recordatorio y notificación para temas que requieren cierre. Este plugin no solo ayuda a mantener una gestión eficiente de los temas al fomentar que los usuarios los marquen como resueltos, sino que también interactúa con los usuarios mediante mensajes de felicitación.
Características
- Recordatorios automatizados: Envía notificaciones a los usuarios, instándoles a revisar y marcar sus temas como resueltos.
- Mensajes de interacción: Felicita a los usuarios que han resuelto temas con éxito y sugiere otros temas en los que podrían ayudar a resolver.
- Integración perfecta: Funciona junto con el Discourse Solved plugin para garantizar una experiencia de usuario fluida.
Instalación
Para instalar el Solved Reminders Plugin, sigue el proceso general de instalación de plugins descrito en la guía de Discourse Meta:
- Edita la configuración de tu contenedor: Añade el enlace al repositorio del plugin a tu archivo
app.ymlbajo la secciónhooks.
hooks:
after_code:
- exec:
cd: $home/plugins
cmd:
- git clone https://github.com/discourse/discourse-solved-reminders-plugin.git
- Reconstruye el contenedor de Discourse: Aplica el plugin reconstruyendo tu aplicación.
./launcher rebuild app
Configuración
Después de la instalación, puedes ajustar finamente la configuración del plugin a través del panel de administración de Discourse. Considera ajustar:
Uso
Una vez configurado, el plugin funcionará automáticamente según la configuración realizada por el administrador. Participa activamente en asegurar que los temas lleguen a su resolución al recordar a los usuarios relevantes con recordatorios y mensajes.
MP enviado al usuario para recordarle que marque una publicación como solución:
MP enviado al usuario que marcó la publicación como solución:
Los usuarios pueden desactivar el MP para recomendar temas similares para marcar como solución desde sus preferencias:
Los administradores pueden ajustar la configuración según sea necesario para satisfacer las necesidades de la comunidad.
Personalización del texto del mensaje
El mensaje de recordatorio enviado a los usuarios se encuentra en la página Apariencia → Texto del sitio de tu sitio, bajo mark_as_solution.message.
Informes y análisis de datos
Este plugin no añade tablas de base de datos específicas a Discourse; sin embargo, puedes usar este plugin en combinación con el plugin Data Explorer para rastrear y analizar la efectividad de tus mensajes de recordatorio.
A continuación se muestran dos ejemplos de consultas SQL de Data Explorer que podrías usar con este plugin.
Conteo de mensajes de recordatorio de resueltos
Esta consulta proporciona estadísticas agregadas mensuales sobre los mensajes de recordatorio de Solved. Identifica:
- Mensajes privados que contienen el texto “There has been a reply on topic you posted”
- Agrupa los datos por mes y calcula:
- Número de mensajes de recordatorio enviados
- Número total de usuarios que recibieron estos recordatorios
- Número de usuarios que leyeron estos recordatorios
- Porcentaje de tasa de lectura (lectores/receptores)
- Los resultados muestran las tendencias mensuales en la actividad y efectividad de los mensajes de recordatorio
Detalles 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
Mensajes individuales de recordatorio de resueltos
Esta consulta proporciona datos detallados a nivel individual para cada usuario que recibió un mensaje de recordatorio. Identifica:
- Mensajes privados que contienen el texto “There has been a reply on topic you posted”
- Enumera a cada receptor individual con:
- Información del usuario (ID, nombre de usuario, nombre, correo electrónico)
- Detalles del mensaje (título, enlace)
- Si leyeron el mensaje (VERDADERO/FALSO)
- Cuándo lo leyeron (si aplica)
- Cuántos segundos pasaron viéndolo
- Los resultados están ordenados por fecha de envío y nombre de usuario, mostrando exactamente quién recibió y leyó cada mensaje
Detalles 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, -- Se muestra como enlace al usuario
u.username,
u.name,
ue.email,
r.topic_id, -- Se muestra como enlace al tema
r.message_title,
-- Enlace al mensaje (construido manualmente para referencia)
'/t/' || r.message_slug || '/' || r.topic_id AS message_link,
r.sent_at,
-- Comprobar si el usuario ha leído el mensaje
CASE
WHEN tu.last_read_post_number > 0 THEN TRUE
ELSE FALSE
END AS message_read,
-- Cuándo lo leyeron (si lo hicieron)
CASE
WHEN tu.last_read_post_number > 0 THEN tu.last_visited_at
ELSE NULL
END AS read_at,
-- Cuánto tiempo pasaron viéndolo (en segundos)
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
-- Excluir al remitente (sistema/bot) de la lista de receptores
tu.user_id != r.sender_id
ORDER BY
r.sent_at DESC,
u.username





