Sondaggi Discourse

:discourse2: Riepilogo Il plugin Discourse Surveys ti consente di creare sondaggi direttamente nei tuoi post del forum Discourse utilizzando una semplice sintassi Markdown.
:hammer_and_wrench: Link al Repository https://github.com/discourse/discourse-surveys
:open_book: Guida all’Installazione Come installare i plugin in Discourse

Il Plugin Discourse Surveys ti consente di creare sondaggi direttamente all’interno dei tuoi post del forum Discourse utilizzando una semplice sintassi Markdown. Il plugin attualmente supporta una varietà di tipi di domande come pulsanti di opzione (radio button), caselle di controllo (checkbox), menu a discesa (dropdown), input numerici, aree di testo (textarea), valutazioni a stelle e valutazioni pollice su/giù.

Funzionalità

  • 7 Diversi Tipi di Campo: Pulsanti di opzione, caselle di controllo, menu a discesa, aree di testo, selezione numerica, valutazioni a stelle e pollice su/giù

  • Campi Obbligatori/Opzionali: Contrassegna i campi come obbligatori per garantirne il completamento

  • Supporto Emoji: Utilizza emoji nelle opzioni del tuo sondaggio

  • Supporto Markdown: Formattazione di testo ricco in domande e opzioni

  • Autenticazione Utente: Prompt di accesso automatico per utenti anonimi

  • Tracciamento Risposte: Impedisce invii duplicati dallo stesso utente

  • Consapevolezza dei Permessi: Rispetta i permessi di topic e categoria

  • Mobile Responsive: Funziona perfettamente su tutti i dispositivi

Utilizzo

Struttura Base del Sondaggio

Tutti i sondaggi devono essere racchiusi tra tag [survey]:


[survey name="my-survey" title="Sondaggio di Feedback del Cliente"]

<!-- I campi del sondaggio vanno qui -->

[/survey]

Attributi del Sondaggio

  • name: Identificatore univoco per il sondaggio (predefinito su “survey”)

  • title: Titolo opzionale visualizzato in cima al sondaggio

  • public: Imposta la visibilità (funzionalità futura)

  • status: Stato del sondaggio (funzionalità futura)

Tipi di Campo

1. Pulsanti di Opzione (Scelta Singola)


[radio question="Qual è il tuo colore preferito?"]

- Rosso

- Blu

- Verde

- Giallo

[/radio]

2. Caselle di Controllo (Scelta Multipla)


[checkbox question="Quali funzionalità utilizzi? (Seleziona tutte quelle applicabili)"]

- Notifiche via email

- App mobile

- Notifiche desktop

- Accesso API

[/checkbox]

3. Selezione a Discesa


[dropdown question="Qual è la tua fascia d'età?"]

- Sotto i 18

- 18-24

- 25-34

- 35-44

- 45-54

- 55+

[/dropdown]

4. Area di Testo (Testo in Forma Lunga)


[textarea question="Fornisci un feedback dettagliato:" required="false"]

[/textarea]

5. Selezione Numerica


[number question="Valuta questa funzionalità da 1 a 10:" min="1" max="10"]

[/number]

6. Valutazione a Stelle


[star question="Come valuteresti la tua esperienza complessiva?"]

[/star]

7. Pollice Su/Giù


[thumbs question="Lo consiglieresti ad altri?"]

[/thumbs]

Attributi dei Campi

Tutti i tipi di campo supportano questi attributi:

  • question: Il testo della domanda (obbligatorio)

  • required: Se il campo deve essere compilato (true/false, predefinito su true)

  • min: Valore minimo per i campi numerici

  • max: Valore massimo per i campi numerici

Esempio Completo

Markdown Base del Sondaggio

Ecco un esempio base di Markdown per il sondaggio che include tutti i campi disponibili:

[survey name="awesome-survey-thumbs" title="Sondaggio Fantastico"]

[radio question="Scegli una sola opzione:"]
- gatto
- cane
[/radio]

[checkbox question="Scegli più opzioni:"]
- rosso
- blu
- verde
[/checkbox]

[dropdown question="Genere:"]
- Maschio
- Femmina
[/dropdown]

[number question="Valuta questo sondaggio da 1 a 10:"]
[/number]

[textarea question="Qual è il tuo feedback su xyz?" required="false"]
[/textarea]

[star question="Come valuti l'esperienza complessiva?"]
[/star]

[thumbs question="Sei rimasto soddisfatto dei nostri servizi?"]
[/thumbs]

[/survey]

Rendering del Sondaggio

Di seguito è riportato un esempio di come viene renderizzato il Markdown sopra in Discourse:

Utilizzo Avanzato

Utilizzo di Emoji nelle Opzioni


[radio question="Scegli il tuo animale preferito:"]

- 🐈 Gatto

- 🐶 Cane

- 🐦 Uccello

- 🐠 Pesce

[/radio]

Formattazione Markdown nelle Domande


[radio question="Quale **linguaggio di programmazione** preferisci?"]
- JavaScript
- Python
- Ruby
- Go
[/radio]

[checkbox question="Seleziona le tue funzionalità *preferite*:"]
- Velocità
- Sicurezza
- Facilità d'uso
[/checkbox]

[textarea question="Si prega di leggere le nostre [linee guida](https://example.com) e fornire un feedback:"]
[/textarea]

Formattazione supportata:

  • Grassetto: **testo**
  • Corsivo: *testo*
  • Barrato: ~~testo~~
  • Codice inline: `codice`
  • Link: [testo](url)

Campi Obbligatori e Opzionali Misti


[survey name="mixed-survey"]

[radio question="Qual è il tuo ruolo?" required="true"]

- Sviluppatore

- Designer

- Manager

- Altro

[/radio]

[textarea question="Qualsiasi pensiero aggiuntivo?" required="false"]

[/textarea]

[/survey]

Risultati del Sondaggio

Attualmente, questo plugin non dispone di un’interfaccia utente backend per visualizzare direttamente i risultati del sondaggio. Invece, puoi fare affidamento sulle query di Data Explorer per recuperare e analizzare le risposte al sondaggio. Ecco un esempio di query:

-- [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

Permessi e Sicurezza

  • Accesso Richiesto: Gli utenti anonimi devono accedere prima di inviare risposte

  • Una Risposta per Utente: Ogni utente può inviare solo una risposta per sondaggio

  • Permessi Topic: Gli utenti devono avere accesso in lettura al topic per visualizzare i sondaggi

  • Permessi di Pubblicazione: Gli utenti devono avere i permessi di pubblicazione nel topic per inviare risposte

  • Topic Archiviati: I sondaggi nei topic archiviati non possono accettare nuove risposte

  • Post Eliminati: I sondaggi nei post eliminati non sono più accessibili

Limitazioni

  • È consentito un solo sondaggio per post

  • La struttura del sondaggio non può essere modificata dopo aver ricevuto risposte

  • Tutte le domande dei campi del sondaggio devono essere univoche all’interno di un singolo sondaggio

  • Le domande dei campi del sondaggio non possono essere vuote

Dettagli Tecnici

Schema del Database

Il plugin crea quattro tabelle di database principali:

  • surveys: Registrazioni principali del sondaggio

  • survey_fields: Campi individuali all’interno dei sondaggi

  • survey_field_options: Opzioni per i campi basati sulla scelta

  • survey_responses: Risposte degli utenti ai campi del sondaggio

Stile

Il plugin include CSS responsive che si adatta al tuo tema. Stili personalizzati possono essere aggiunti selezionando queste classi CSS:

  • .survey - Contenitore principale del sondaggio

  • .survey-field - Involucro del campo individuale

  • .field-[type] - Contenitori specifici per tipo di campo

  • .submit-response - Pulsante di invio

32 Mi Piace

Quindi gli utenti non possono vedere i risultati (a meno che non abbiano i diritti per utilizzare la query) e questo è totalmente per amministratori/personale di back-office?

3 Mi Piace

Sì, è corretto.

7 Mi Piace

Non sembra molto pratico :pianto:

3 Mi Piace

Necessaria opzione per pubblicare i risultati del sondaggio. Altrimenti è meglio usare più sondaggi.

3 Mi Piace

Ciao

Il Markdown di esempio viene visualizzato in un nuovo argomento come di seguito. Il mio Discourse è aggiornato all’ultima versione.

Quale potrebbe essere il problema?

Saluti

Ciao @ppcole,

Quanto sopra è ciò che viene mostrato nell’anteprima della composizione durante la creazione del sondaggio. Una volta creato l’argomento, verrà visualizzato correttamente come previsto.

Grazie Arpit. Ha funzionato. Attendo miglioramenti.

1 Mi Piace

Posso sapere se ci state lavorando ma senza reale priorità?

Sarebbe fantastico se questo progetto continuasse a essere sviluppato, ha un potenziale enorme.

Ho scoperto che la SQL sopra estraeva i risultati, ma non era in un formato facile da usare; in pratica richiederebbe una tonnellata di trasformazioni a livello di foglio di calcolo per consentire un’analisi utile.

Tuttavia, con un po’ di aiuto dall’IA generativa, sono stato in grado di produrre una query molto valida per Data Explorer. A causa di alcune limitazioni di Data Explorer, non è possibile renderla abbastanza dinamica da gestire una varietà di sondaggi; in pratica è necessaria una query su misura per ogni sondaggio.

Fortunatamente, l’IA generativa può renderlo piuttosto semplice. Ecco un prompt di esempio che probabilmente funzionerà nella maggior parte dei servizi di IA generativa (se non hai il plugin AI attivo) - basta inserire il tuo markdown del sondaggio e dovresti essere a posto:

Prompt IA Generativa per Produrre una Query SQL Personalizzata per un Sondaggio Specifico

Ho un sondaggio definito in formato markdown e ho bisogno di una query SQL per estrarre i risultati del sondaggio da un database Discourse utilizzando il plugin Data Explorer. Il sondaggio include vari tipi di domande come radio, dropdown, stella, checkbox, textarea, pollici e numero. Voglio che la query restituisca i risultati con ogni utente che ha una singola riga e ogni domanda che ha la propria colonna. Per le domande a scelta multipla, le risposte multiple devono essere concatenate in un’unica stringa.

Ecco il markdown del sondaggio:

Incolla qui il tuo markdown del sondaggio

Ecco la query originale utilizzata per ottenere i risultati del sondaggio:

-- [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

Si prega di generare una query SQL che:

  • Codifichi in modo fisso il nome del sondaggio.
  • Utilizzi l’aggregazione condizionale per ruotare i dati, con ogni domanda come colonna.
  • Utilizzi STRING_AGG per le domande a scelta multipla per gestire risposte multiple.
  • Assicuri che l’output sia raggruppato per user_id e ordinato per user_id.
  • Sia formattato per leggibilità e includa commenti che spieghino la logica dove necessario.

Guida aggiuntiva per il plugin Data Explorer:

  • La query deve essere compatibile con il plugin Discourse Data Explorer, il che significa che non deve terminare con un punto e virgola.
  • Utilizza nomi di colonna come user_id per sfruttare le funzionalità di collegamento automatico all’interno di Data Explorer.
  • Evita l’uso di SQL dinamico, poiché il plugin non lo supporta.
  • Assicurati che la query sia efficiente e ottimizzata per le prestazioni, poiché potrebbe essere eseguita su grandi set di dati.
8 Mi Piace

Questo è un piccolo plugin eccellente che offre sorprendentemente molte funzionalità. Grazie per averlo creato.

@nathank ottimo lavoro sulla guida per costruire rapidamente query di risultati.

4 Mi Piace

L’ho installato sul mio sito self-hosted per provarlo, ed è davvero carino!

Mi rendo conto che questo è un anatema per Discourse, ma sarebbe utile se fosse possibile creare sondaggi che possano essere completati in modo anonimo, senza effettuare l’accesso. O almeno anonimizzare i risultati in modo che non siano associati a utenti specifici.

E naturalmente sì, la possibilità di visualizzare i risultati come si fa con i sondaggi senza dover ricorrere a Data Explorer sarebbe fantastica.

5 Mi Piace

Sì, ho riscontrato lo stesso problema. Speriamo ci sia una soluzione.

3 Mi Piace