Complemento de recordatorios resuelto

:discourse2: Resumen El Solved Reminders Plugin extiende la funcionalidad del Solved plugin ofreciendo capacidades adicionales de recordatorio para temas marcados como resueltos.
:hammer_and_wrench: Enlace al repositorio https://github.com/discourse/discourse-solved-reminders-plugin
:open_book: Guía de instalación Cómo instalar plugins en Discourse

:warning: 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:

  1. Edita la configuración de tu contenedor: Añade el enlace al repositorio del plugin a tu archivo app.yml bajo la sección hooks.
hooks:
  after_code:
    - exec:
        cd: $home/plugins
        cmd:
          - git clone https://github.com/discourse/discourse-solved-reminders-plugin.git
  1. 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
17 Me gusta

¿Podría el primer ministro felicitador indicar el título del tema en su título? Si el usuario recibe varias soluciones a la vez, podría ser confuso para el usuario si no sabe a qué solución se refiere el primer ministro.
¿Podría haber una configuración para controlar después de cuántas publicaciones se enviará el recordatorio?

4 Me gusta

Solo para verificar dos cosas:

  1. ¿Solo envía mensajes a los autores de temas que recibieron al menos una respuesta?
  2. ¿Funciona junto con la configuración del complemento de solución por categoría, lo que significa que si desea deshabilitarlo para algunas categorías, debe deshabilitar el interruptor del complemento de soluciones en todo el sitio y, en cambio, habilitarlo para las categorías donde desea usarlo?
3 Me gusta

¿Los temas sugeridos son temas aleatorios sin resolver o conversaciones relacionadas con el tema original resuelto? Si están relacionados, ¿cómo se identifican?

1 me gusta

2 publicaciones se dividieron en un nuevo tema: Cómo convertir código fuente en un plugin

Esto podría ser extremadamente útil, especialmente en nuestro foro, donde la gente tiende a olvidar marcar una respuesta como solución después de recibir una, y luego nuestro equipo tiene que recordárselo manualmente :weary:

Otras preguntas que tengo son:

  • ¿Podemos configurar quién envía el mensaje privado de recordatorio, o siempre es por defecto Discobot?
  • ¿Podemos también modificar los textos de los mensajes privados si quisiéramos?

Gracias

1 me gusta

¡Gracias por este plugin, muy útil!

Según entiendo, el notificador de esto se ejecuta solo cada 14 días. Eso significa que, independientemente de cuántos temas haya iniciado en 14 días (y no haya marcado como solución), se generarán mensajes directos + correos electrónicos.

Lo acabo de ejecutar manualmente, 5 días después de instalar el plugin y recibí 7 mensajes directos (y correos electrónicos):

Esto parece un poco excesivo. Sé que soy un caso un poco atípico como administrador que crea activamente muchos temas en este momento, pero bastantes de nuestros usuarios crean muchos temas (genial).

¿Sería posible crear una opción donde esta notificación se combine en 1? ¿Por ejemplo, “Marcar 7 de tus publicaciones como solución” en 1 mensaje en lugar de un mensaje por hilo?

5 Me gusta