||||\n-|-|-|\n:discourse2: | Resumen | Solved Reminders Plugin extiende la funcionalidad del Solved plugin al ofrecer capacidades adicionales de recordatorio para temas resueltos.\n:hammer_and_wrench: | Enlace al Repositorio | \u003chttps://github.com/discourse/discourse-solved-reminders-plugin\u003e\n:open_book: | Guía de Instalación | Cómo instalar plugins en Discourse\n\n[quote]\n\n:discourse2: Dado que este es un plugin #oficial mantenido por el equipo de Discourse, las solicitudes de #soporte, #errores, UX y #características se pueden realizar en las categorías correspondientes aquí en Meta, y etiquetarse con la etiqueta del plugin apropiada. Haz clic en un enlace a continuación para comenzar una.
\n\n\u003ckbd\u003e [
\u0026nbsp;Soporte](Discourse Meta "Solicita soporte para configurar y usar Solved Reminders") \u003c/kbd\u003e \u003ckbd\u003e [
\u0026nbsp;Error](Discourse Meta "Un informe de error significa que algo está roto, impidiendo el uso normal/típico del plugin") \u003c/kbd\u003e \u003ckbd\u003e [
\u0026nbsp;UX](Discourse Meta "Discusión sobre la interfaz de usuario de Solved Reminders y cómo se presentan las funciones (incluyendo elementos de lenguaje e interfaz de usuario)") \u003c/kbd\u003e \u003ckbd\u003e [
\u0026nbsp;Característica](Discourse Meta "Discusión sobre cómo se pueden mejorar o ampliar las funciones existentes de Solved Reminders y cómo funcionarían las nuevas funciones propuestas")\u003c/kbd\u003e\n\n[/quote]\n\n\u003e
Ten en cuenta que este plugin está en desarrollo activo y aún no está completo.\n\nEl Solved Reminders Plugin extiende la funcionalidad del Discourse Solved Plugin al agregar capacidades de recordatorio y notificación para temas que requieren cierre. Este plugin no solo ayuda a mantener una gestión eficiente de temas al alentar a los usuarios a marcar los temas como resueltos, sino que también involucra a los usuarios a través de mensajes de felicitación.\n\n## Características\n\n* Recordatorios Automáticos: Envía notificaciones a los usuarios, instándoles a revisar y marcar sus temas como resueltos.\n* Mensajes de Interacción: Felicita a los usuarios que han resuelto temas con éxito y sugiere temas adicionales en los que podrían ayudar a resolver.\n* Integración Transparente: Funciona en conjunto con el Discourse Solved plugin para garantizar una experiencia de usuario fluida.\n\n## Instalación\n\nPara instalar el Solved Reminders Plugin, sigue el proceso general de instalación de plugins descrito en la guía de Discourse Meta:\n\n1. Edita la configuración de tu contenedor: Agrega el enlace del repositorio del plugin a tu archivo app.yml en la sección hooks.\n\n\nhooks:\n after_code:\n - exec:\n cd: $home/plugins\n cmd:\n - git clone https://github.com/discourse/discourse-solved-reminders-plugin.git\n\n\n2. Reconstruye el Contenedor de Discourse: Aplica el plugin reconstruyendo tu aplicación.\n\n\n./launcher rebuild app\n\n\n## Configuración\n\nDespués de la instalación, puedes ajustar la configuración del plugin a través del panel de administración de Discourse. Considera ajustar:\n\n
mark_as_solution.message.\n\n\n\n## Informes y Análisis de Datos\n\nEste plugin no agrega 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.\n\nA continuación, se presentan dos ejemplos de consultas SQL de Data Explorer que podrías usar con este plugin.\n\n### Conteo de Mensajes de Recordatorio de Solución\n\nEsta consulta proporciona estadísticas agregadas mensuales sobre los mensajes de Solved Reminder. \n\n* Identifica mensajes privados que contienen el texto "There has been a reply on topic you posted"\n* Agrupa los datos por mes y calcula:\n * Número de mensajes de recordatorio enviados\n * Número total de usuarios que recibieron estos recordatorios\n * Número de usuarios que leyeron estos recordatorios\n * Porcentaje de tasa de lectura (lectores/destinatarios)\n* Los resultados muestran las tendencias mensuales en la actividad y efectividad de los mensajes de recordatorio\n\n\n[details="Detalles SQL"]\n\n\nsql\n-- [params]\n-- date :start_date = 2024-01-01\n-- date :end_date = 2025-12-31\n-- text :reminder_text = %There has been a reply on topic you posted%\n\nWITH reminder_pms AS (\n SELECT \n t.id AS topic_id,\n t.created_at,\n p.id AS post_id,\n p.user_id AS sender_id,\n DATE_TRUNC('month', t.created_at) AS month\n FROM topics t\n JOIN posts p ON p.topic_id = t.id AND p.post_number = 1\n WHERE \n t.archetype = 'private_message'\n AND t.created_at BETWEEN :start_date AND :end_date\n AND p.raw LIKE :reminder_text\n),\n\nrecipient_stats AS (\n SELECT\n r.topic_id,\n r.month,\n COUNT(DISTINCT tu.user_id) AS total_recipients,\n COUNT(DISTINCT CASE WHEN tu.last_read_post_number \u003e 0 THEN tu.user_id END) AS read_recipients\n FROM reminder_pms r\n JOIN topic_users tu ON tu.topic_id = r.topic_id AND tu.user_id != r.sender_id\n GROUP BY r.topic_id, r.month\n)\n\nSELECT \n TO_CHAR(month, 'YYYY-MM') AS month,\n COUNT(DISTINCT topic_id) AS reminder_pms_sent,\n SUM(total_recipients) AS total_users_received,\n SUM(read_recipients) AS users_who_read,\n ROUND(100.0 * SUM(read_recipients) / NULLIF(SUM(total_recipients), 0), 2) AS read_rate_percentage\nFROM recipient_stats\nGROUP BY month\nORDER BY month\n\n[/details]\n\n### Mensajes Individuales de Recordatorio de Solución\n\nEsta consulta proporciona datos detallados a nivel individual para cada usuario que recibió un mensaje de recordatorio. \n\n* Identifica mensajes privados que contienen el texto "There has been a reply on topic you posted"\n* Enumera a cada destinatario individual con:\n * Información del usuario (ID, nombre de usuario, nombre, correo electrónico)\n * Detalles del mensaje (título, enlace)\n * Si leyeron el mensaje (VERDADERO/FALSO)\n * Cuándo lo leyeron (si corresponde)\n * Cuántos segundos pasaron viéndolo\n* Los resultados se ordenan por fecha de envío y nombre de usuario, mostrando exactamente quién recibió y leyó cada mensaje\n\n[details="Detalles SQL"]\n\n\nsql\n-- [params]\n-- date :start_date = 2024-01-01\n-- date :end_date = 2025-12-31\n-- text :reminder_text = %There has been a reply on topic you posted%\n\nWITH reminder_pms AS (\n SELECT \n t.id AS topic_id,\n t.title AS message_title,\n t.slug AS message_slug,\n t.created_at AS sent_at,\n p.id AS post_id,\n p.user_id AS sender_id,\n p.raw AS message_content\n FROM topics t\n JOIN posts p ON p.topic_id = t.id AND p.post_number = 1\n WHERE \n t.archetype = 'private_message'\n AND t.created_at BETWEEN :start_date AND :end_date\n AND p.raw LIKE :reminder_text\n)\n\nSELECT \n u.id AS user_id, -- Se renderiza como enlace al usuario\n u.username,\n u.name,\n ue.email,\n r.topic_id, -- Se renderiza como enlace al tema\n r.message_title,\n -- Enlace al mensaje (construido manualmente como referencia)\n '/t/' || r.message_slug || '/' || r.topic_id AS message_link,\n r.sent_at,\n -- Comprueba si el usuario ha leído el mensaje\n CASE \n WHEN tu.last_read_post_number \u003e 0 THEN TRUE\n ELSE FALSE\n END AS message_read,\n -- Cuándo lo leyó (si lo hizo)\n CASE \n WHEN tu.last_read_post_number \u003e 0 THEN tu.last_visited_at\n ELSE NULL\n END AS read_at,\n -- Tiempo dedicado a la visualización (en segundos)\n ROUND(tu.total_msecs_viewed / 1000.0, 1) AS time_viewed_seconds\nFROM reminder_pms r\nJOIN topic_users tu ON tu.topic_id = r.topic_id\nJOIN users u ON u.id = tu.user_id\nLEFT JOIN user_emails ue ON ue.user_id = u.id AND ue.primary = TRUE\nWHERE \n -- Excluye al remitente (sistema/bot) de la lista de destinatarios\n tu.user_id != r.sender_id\nORDER BY \n r.sent_at DESC,\n u.username\n\n\n[/details]",“target_locale”:“es”}





