Encuestas de Discourse

:discourse2: Resumen El plugin Discourse Surveys le permite crear encuestas directamente dentro de sus publicaciones del foro de Discourse utilizando una sintaxis Markdown simple.
:hammer_and_wrench: Enlace al Repositorio \u003chttps://github.com/discourse/discourse-surveys\u003e
:open_book: Guía de Instalación Cómo instalar plugins en Discourse

El Plugin Discourse Surveys le permite crear encuestas directamente dentro de sus publicaciones del foro de Discourse utilizando una sintaxis Markdown simple. El plugin actualmente soporta una variedad de tipos de preguntas como botones de radio, casillas de verificación, menús desplegables, entradas numéricas, áreas de texto, calificaciones con estrellas y calificaciones de pulgar arriba/abajo.

Características

  • 7 Tipos de Campos Diferentes: Botones de radio, casillas de verificación, menús desplegables, áreas de texto, selección numérica, calificaciones con estrellas y pulgar arriba/abajo

  • Campos Requeridos/Opcionales: Marque los campos como requeridos para asegurar su cumplimentación

  • Soporte de Emojis: Use emojis en sus opciones de encuesta

  • Soporte HTML: Formato de texto enriquecido en preguntas y opciones

  • Autenticación de Usuario: Indicaciones automáticas de inicio de sesión para usuarios anónimos

  • Seguimiento de Respuestas: Previene envíos duplicados del mismo usuario

  • Consciente de Permisos: Respeta los permisos de temas y categorías

  • Diseño Responsivo Móvil: Funciona perfectamente en todos los dispositivos

Uso

Estructura Básica de la Encuesta

Todas las encuestas deben estar envueltas en etiquetas [survey]:


[survey name="mi-encuesta" title="Encuesta de Opinión del Cliente"]

<!-- Van aquí los campos de la encuesta -->

[/survey]

Atributos de la Encuesta

  • name: Identificador único para la encuesta (por defecto es “survey”)

  • title: Título opcional mostrado en la parte superior de la encuesta

  • public: Establecer visibilidad (característica futura)

  • status: Estado de la encuesta (característica futura)

Tipos de Campos

1. Botones de Radio (Opción Única)


[radio question="¿Cuál es tu color favorito?"]

- Rojo

- Azul

- Verde

- Amarillo

[/radio]

2. Casillas de Verificación (Opción Múltiple)


[checkbox question="¿Qué características utilizas? (Selecciona todas las que apliquen)"]

- Notificaciones por correo electrónico

- Aplicación móvil

- Notificaciones de escritorio

- Acceso a API

[/checkbox]

3. Selección Desplegable


[dropdown question="¿Cuál es tu grupo de edad?"]

- Menos de 18

- 18-24

- 25-34

- 35-44

- 45-54

- 55+

[/dropdown]

4. Área de Texto (Texto de Formato Largo)


[textarea question="Por favor, proporcione comentarios detallados:" required="false"]

[/textarea]

5. Selección Numérica


[number question="Califica esta característica del 1 al 10:" min="1" max="10"]

[/number]

6. Calificación con Estrellas


[star question="¿Cómo calificarías tu experiencia general?"]

[/star]

7. Pulgar Arriba/Abajo


[thumbs question="¿Recomendarías esto a otros?"]

[/thumbs]

Atributos de Campo

Todos los tipos de campo soportan estos atributos:

  • question: El texto de la pregunta (requerido)

  • required: Si el campo debe ser rellenado (true/false, por defecto es true)

  • min: Valor mínimo para campos numéricos

  • max: Valor máximo para campos numéricos

Ejemplo Completo

Markdown Básico de la Encuesta

Aquí hay un ejemplo básico de Markdown de encuesta que incluye todos los campos disponibles:

[survey name="awesome-survey-thumbs" title="Encuesta Genial"]

[radio question="Elige solo una opción:"]
- gato
- perro
[/radio]

[checkbox question="Elige múltiples opciones:"]
- rojo
- azul
- verde
[/checkbox]

[dropdown question="Género:"]
- Masculino
- Femenino
[/dropdown]

[number question="Califica esta encuesta del 1 al 10:"]
[/number]

[textarea question="¿Cuál es tu opinión sobre xyz?" required="false"]
[/textarea]

[star question="¿Cómo calificarías la experiencia general?"]
[/star]

[thumbs question="¿Estuviste satisfecho con nuestros servicios?"]
[/thumbs]

[/survey]

Renderizado de la Encuesta

A continuación se muestra un ejemplo de cómo se renderiza el Markdown anterior en Discourse:

Uso Avanzado

Uso de Emojis en Opciones


[radio question="Elige tu animal favorito:"]

- 🐈 Gato

- 🐶 Perro

- 🐦 Pájaro

- 🐠 Pez

[/radio]

Formato HTML en Preguntas


[radio question="¿Qué \u003cstrong\u003elenguaje de programación\u003c/strong\u003e prefieres?"]

- JavaScript

- Python

- Ruby

- Go

[/radio]

Campos Requeridos y Opcionales Mixtos


[survey name="mixed-survey"]

[radio question="¿Cuál es tu rol?" required="true"]

- Desarrollador

- Diseñador

- Gerente

- Otro

[/radio]

[textarea question="¿Algún pensamiento adicional?" required="false"]

[/textarea]

[/survey]

Resultados de la Encuesta

Actualmente, este plugin no tiene una experiencia de usuario (UX) de backend para ver los resultados de la encuesta directamente. En su lugar, puede confiar en las consultas de Data Explorer para obtener y analizar las respuestas de la encuesta. Aquí hay un ejemplo de consulta:

-- [params]
-- text :survey_name = survey

SELECT
  s.id,
  s.name,
  s.post_id,
  sf.question,
  COALESCE(sr.value, sfo.html) AS value,
  sr.user_id,
  sr.created_at AS responded_at
FROM
  surveys s
  JOIN survey_fields sf ON sf.survey_id = s.id
  JOIN survey_responses sr ON sr.survey_field_id = sf.id
  LEFT JOIN survey_field_options sfo ON sfo.id = sr.survey_field_option_id
WHERE
  s.name = :survey_name
ORDER BY
  s.id DESC

Permisos y Seguridad

  • Inicio de Sesión Requerido: Los usuarios anónimos deben iniciar sesión antes de enviar respuestas

  • Una Respuesta por Usuario: Cada usuario solo puede enviar una respuesta por encuesta

  • Permisos de Tema: Los usuarios deben tener acceso de lectura al tema para ver las encuestas

  • Permisos de Publicación: Los usuarios deben tener permisos de publicación en el tema para enviar respuestas

  • Temas Archivado: Las encuestas en temas archivados no pueden aceptar nuevas respuestas

  • Publicaciones Eliminadas: Las encuestas en publicaciones eliminadas ya no son accesibles

Limitaciones

  • Solo se permite una encuesta por publicación

  • La estructura de la encuesta no se puede modificar después de recibir respuestas

  • Todas las preguntas de los campos de la encuesta deben ser únicas dentro de una sola encuesta

  • Las preguntas de los campos de la encuesta no pueden estar en blanco

Detalles Técnicos

Esquema de la Base de Datos

El plugin crea cuatro tablas principales en la base de datos:

  • surveys: Registros principales de la encuesta

  • survey_fields: Campos individuales dentro de las encuestas

  • survey_field_options: Opciones para campos basados en selección

  • survey_responses: Respuestas de los usuarios a los campos de la encuesta

Estilo

El plugin incluye CSS responsivo que se adapta a su tema. Se puede agregar estilo personalizado apuntando a estas clases CSS:

  • .survey - Contenedor principal de la encuesta

  • .survey-field - Envoltorio de campo individual

  • .field-[type] - Contenedores de tipos de campo específicos

  • .submit-response - Botón de envío

32 Me gusta

¿Así que los usuarios no pueden ver los resultados (a menos que tengan derecho a usar la consulta) y esto es totalmente para administradores/personal de apoyo?

3 Me gusta

Sí, es correcto.

7 Me gusta

No parece muy práctico :cry:

3 Me gusta

Necesita una opción para publicar los resultados de la encuesta. De lo contrario, es mejor usar varias encuestas.

3 Me gusta

Hola

La siguiente muestra de Markdown se renderiza en un nuevo Tema como se muestra a continuación. Mi Discourse está actualizado a la última versión.

¿Cuál podría ser el problema?

Saludos

Hola @ppcole,

Lo anterior es lo que se muestra en la vista previa del editor al crear la encuesta. Una vez que crees el tema, se mostrará correctamente como se espera.

Gracias Arpit. Funcionó. Esperando mejoras.

1 me gusta

¿Puedo saber si ustedes están trabajando en esto pero sin prioridad real?

Sería genial que esto siguiera desarrollándose, tiene un gran potencial.

Descubrí que la SQL anterior extraía los resultados, pero no en un formato fácil de trabajar; básicamente, requeriría una tonelada de transformación a nivel de hoja de cálculo para permitir un análisis útil.

Sin embargo, con un poco de ayuda de IA generativa, pude producir una consulta de Data Explorer muy buena. Debido a algunas limitaciones de Data Explorer, no es posible hacerla lo suficientemente dinámica como para hacer frente a una variedad de encuestas; básicamente, necesita una consulta a medida por encuesta.

Afortunadamente, la IA generativa puede hacer que eso sea bastante sencillo. Aquí hay un ejemplo de prompt que probablemente funcionará en la mayoría de los servicios de IA generativa (si no tiene el plugin de IA activo): simplemente ingrese su markdown de encuesta y debería estar listo:

Prompt de IA generativa para producir una consulta SQL personalizada para una encuesta específica

Tengo una encuesta definida en formato markdown y necesito una consulta SQL para extraer los resultados de la encuesta de una base de datos de Discourse utilizando el plugin Data Explorer. La encuesta incluye varios tipos de preguntas como radio, desplegable, estrella, casilla de verificación, área de texto, pulgares y número. Quiero que la consulta genere resultados con cada usuario en una sola fila y cada pregunta en su propia columna. Para las preguntas de casilla de verificación, las respuestas múltiples deben concatenarse en una sola cadena.

Aquí está el markdown de la encuesta:

Pega aquí tu markdown de encuesta

Aquí está la consulta original utilizada para obtener los resultados de la encuesta:

-- [params]
-- text :survey_name = survey

SELECT s.id, s.name, s.post_id, sf.question, COALESCE(sr.value, sfo.html) AS value, sr.user_id, sr.created_at as responded_at
FROM surveys s
JOIN survey_fields sf ON sf.survey_id = s.id
JOIN survey_responses sr ON sr.survey_field_id = sf.id
LEFT JOIN survey_field_options sfo ON sfo.id = sr.survey_field_option_id
WHERE s.name = :survey_name
ORDER BY s.id DESC

Por favor, genere una consulta SQL que:

  • Codifique de forma fija el nombre de la encuesta.
  • Utilice agregación condicional para pivotar los datos, con cada pregunta como una columna.
  • Utilice STRING_AGG para las preguntas de casilla de verificación para manejar respuestas múltiples.
  • Asegure que la salida se agrupe por user_id y se ordene por user_id.
  • Esté formateada para facilitar la lectura e incluya comentarios que expliquen la lógica cuando sea necesario.

Guía adicional para el plugin Data Explorer:

  • La consulta debe ser compatible con el plugin Discourse Data Explorer, lo que significa que no debe terminar con un punto y coma.
  • Utilice nombres de columna como user_id para aprovechar las funciones de enlace automático dentro de Data Explorer.
  • Evite el uso de SQL dinámico, ya que el plugin no lo admite.
  • Asegúrese de que la consulta sea eficiente y esté optimizada para el rendimiento, ya que puede ejecutarse en grandes conjuntos de datos.
8 Me gusta

Este es un excelente pequeño plugin que tiene sorprendentemente muchas funciones. Gracias por crearlo.

@nathank gran trabajo en la guía para construir rápidamente consultas de resultados.

4 Me gusta

¡Lo instalé en mi sitio autoalojado para probarlo, y es realmente agradable!

Me doy cuenta de que esto es un anatema para el discurso, pero sería útil si fuera posible crear encuestas que se puedan completar de forma anónima, sin iniciar sesión. O al menos anonimizar los resultados para que no se asocien con usuarios específicos.

Y, por supuesto, sí, la capacidad de ver los resultados como se puede hacer con las encuestas sin tener que recurrir al explorador de datos sería fantástica.

5 Me gusta

Sí, me encontré con el mismo problema. Espero que haya una solución.

3 Me gusta