Discourse 调查

||||\n-|-|-|\n:discourse2: | 摘要 | Discourse Surveys 插件允许您使用简单的 Markdown 语法直接在您的 Discourse 论坛帖子中创建调查。\n:hammer_and_wrench: | 仓库链接 | \u003chttps://github.com/discourse/discourse-surveys\u003e\n:open_book: | 安装指南 | 如何在 Discourse 中安装插件\n\nDiscourse Surveys 插件允许您使用简单的 Markdown 语法直接在您的 Discourse 论坛帖子中创建调查。该插件目前支持多种问题类型,例如单选按钮、复选框、下拉列表、数字输入、文本区域、星级评分以及赞成/反对评分。\n\n## 功能\n\n- 7 种不同的字段类型:单选按钮、复选框、下拉列表、文本区域、数字选择、星级评分和赞成/反对\n\n- 必填/可选字段:将字段标记为必填以确保完成\n\n- Emoji 支持:在调查选项中使用表情符号\n\n- HTML 支持:问题和选项中的富文本格式\n\n- 用户身份验证:为匿名用户自动提示登录\n\n- 响应跟踪:防止同一用户重复提交\n\n- 权限感知:尊重主题和类别的权限\n\n- 移动响应式:在所有设备上无缝工作\n\n## 用法\n\n### 基本调查结构\n\n所有调查都必须用 [survey] 标签包裹:\n\nmarkdown\n\n[survey name=\"my-survey\" title=\"客户反馈调查\"]\n\n<!-- 在此处放置调查字段 -->\n\n[/survey]\n\n\n\n### 调查属性\n\n- name: 调查的唯一标识符(默认为 “survey”)\n\n- title: 显示在调查顶部的可选标题\n\n- public: 设置可见性(未来功能)\n\n- status: 调查状态(未来功能)\n\n### 字段类型\n\n#### 1. 单选按钮(单选)\n\nmarkdown\n\n[radio question=\"你最喜欢的颜色是什么?\"]\n\n- 红色\n\n- 蓝色\n\n- 绿色\n\n- 黄色\n\n[/radio]\n\n\n\n#### 2. 复选框(多选)\n\nmarkdown\n\n[checkbox question=\"您使用哪些功能?(选择所有适用的)\"]\n\n- 电子邮件通知\n\n- 移动应用\n\n- 桌面通知\n\n- API 访问\n\n[/checkbox]\n\n\n\n#### 3. 下拉选择\n\nmarkdown\n\n[dropdown question=\"您的年龄段是?\"]\n\n- 18 岁以下\n\n- 18-24\n\n- 25-34\n\n- 35-44\n\n- 45-54\n\n- 55 岁以上\n\n[/dropdown]\n\n\n\n#### 4. 文本区域(长文本)\n\nmarkdown\n\n[textarea question=\"请提供详细反馈:\" required=\"false\"]\n\n[/textarea]\n\n\n\n#### 5. 数字选择\n\nmarkdown\n\n[number question=\"请将此功能评为 1-10 分:\" min=\"1\" max=\"10\"]\n\n[/number]\n\n\n\n#### 6. 星级评分\n\nmarkdown\n\n[star question=\"您对整体体验的评价如何?\"]\n\n[/star]\n\n\n\n#### 7. 赞成/反对\n\nmarkdown\n\n[thumbs question=\"您会推荐给其他人吗?\"]\n\n[/thumbs]\n\n\n\n### 字段属性\n\n所有字段类型都支持以下属性:\n\n- question: 问题文本(必填)\n\n- required: 字段是否必须填写(true/false,默认为 true)\n\n- min: 数字字段的最小值\n\n- max: 数字字段的最大值\n\n### 完整示例\n\n### 基本调查 Markdown\n\n下面是一个包含所有可用字段的基本调查 Markdown 示例:\n\n\n[survey name=\"awesome-survey-thumbs\" title=\"超棒的调查\"]\n\n[radio question=\"选择任意一个选项:\"]\n- 猫\n- 狗\n[/radio]\n\n[checkbox question=\"选择多个选项:\"]\n- 红色\n- 蓝色\n- 绿色\n[/checkbox]\n\n[dropdown question=\"性别:\"]\n- 男性\n- 女性\n[/dropdown]\n\n[number question=\"请从 1 到 10 为此调查评分:\"]\n[/number]\n\n[textarea question=\"您对 xyz 的反馈是什么?\" required=\"false\"]\n[/textarea]\n\n[star question=\"您如何评价整体体验?\"]\n[/star]\n\n[thumbs question=\"您对我们的服务满意吗?\"]\n[/thumbs]\n\n[/survey]\n\n\n### 调查渲染\n\n下面是上述 Markdown 在 Discourse 中渲染的示例:\n\n

\n\n## 高级用法\n\n### 在选项中使用 Emoji\n\nmarkdown\n\n[radio question=\"选择你最喜欢的动物:\"]\n\n- 🐈 猫\n\n- 🐶 狗\n\n- 🐦 鸟\n\n- 🐠 鱼\n\n[/radio]\n\n\n\n### 问题中的 HTML 格式\n\nmarkdown\n\n[radio question=\"你更喜欢哪个 \u003cstrong\u003e编程语言\u003c/strong\u003e?\"]\n\n- JavaScript\n\n- Python\n\n- Ruby\n\n- Go\n\n[/radio]\n\n\n\n### 混合必填和可选字段\n\nmarkdown\n\n[survey name=\"mixed-survey\"]\n\n[radio question=\"您的角色是什么?\" required=\"true\"]\n\n- 开发者\n\n- 设计师\n\n- 经理\n\n- 其他\n\n[/radio]\n\n[textarea question=\"任何其他想法?\" required=\"false\"]\n\n[/textarea]\n\n[/survey]\n\n\n\n## 调查结果\n\n目前,此插件没有用于直接查看调查结果的后端用户界面。相反,您可以依赖 Data Explorer 查询来获取和分析调查回复。这是一个示例查询:\n\nsql\n-- [params]\n-- text :survey_name = survey\n\nSELECT 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\nFROM surveys s\nJOIN survey_fields sf ON sf.survey_id = s.id\nJOIN survey_responses sr ON sr.survey_field_id = sf.id\nLEFT JOIN survey_field_options sfo ON sfo.id = sr.survey_field_option_id\nWHERE s.name = :survey_name\nORDER BY s.id DESC\n\n\n## 权限和安全\n\n- 需要登录:匿名用户在提交回复前必须登录\n\n- 每位用户仅限一次回复:每位用户只能对每个调查提交一次回复\n\n- 主题权限:用户必须具有阅读主题的权限才能查看调查\n\n- 发帖权限:用户必须在主题中具有发帖权限才能提交回复\n\n- 已存档主题:已存档主题中的调查不能接受新的回复\n\n- 已删除帖子:位于已删除帖子中的调查将不再可访问\n\n## 限制\n\n- 每个帖子只允许一个调查\n\n- 调查结构在收到回复后无法修改\n\n- 所有调查字段问题在单个调查中必须是唯一的\n\n- 调查字段问题不能为空\n\n## 技术细节\n\n### 数据库架构\n\n该插件创建四个主要的数据库表:\n\n- surveys: 主要调查记录\n\n- survey_fields: 调查中的各个字段\n\n- survey_field_options: 选择类字段的选项\n\n- survey_responses: 用户对调查字段的回复\n\n### 样式\n\n该插件包含适应您主题的响应式 CSS。可以通过定位以下 CSS 类来添加自定义样式:\n\n- .survey - 主调查容器\n\n- .survey-field - 单个字段包装器\n\n- .field-[type] - 特定字段类型的容器\n\n- .submit-response - 提交按钮"

31 个赞

因此,用户无法看到结果(除非他们有权使用查询),而这完全是为了管理员/后台工作人员?

3 个赞

是的,没错。

7 个赞

这感觉不太实用 :cry:

3 个赞

需要提供发布调查结果的选项。否则,最好使用多个投票。

3 个赞

你好

下面的 Markdown 示例在新主题中呈现。我的 Discourse 已更新到最新版本。

可能是什么问题?

此致

@ppcole

上面是您在创建调查时,在编辑器预览中显示的内容。一旦您创建了主题,它就会按预期正常呈现。

谢谢 Arpit。它奏效了。期待增强功能

1 个赞

请问你们是否在处理这件事,但优先级不高?

如果能继续开发这个就太好了 - 它有巨大的潜力。

我发现上面的 SQL 确实可以提取结果,但格式不易处理;基本上需要在电子表格层面进行大量转换才能进行有用的分析。

不过,在一些生成式人工智能的帮助下,我能够生成一个非常出色的 Data Explorer 查询。由于 Data Explorer 的一些限制,它无法足够动态地适应各种调查;基本上,您需要为每个调查定制一个查询。

幸运的是,生成式人工智能可以使这一过程变得相当简单。以下是一个在大多数生成式人工智能服务中都可能有效的示例提示(如果您没有激活 AI 插件),只需插入您的调查 markdown 即可开始:

生成式人工智能提示,用于为特定调查生成定制化 SQL 查询

我有一个以 markdown 格式定义的调查,我需要一个 SQL 查询来使用 Data Explorer 插件从 Discourse 数据库中提取调查结果。该调查包含各种类型的问题,如单选按钮、下拉菜单、星级、复选框、文本区域、拇指和数字。我希望查询的输出是每个用户占一行,每个问题占一列。对于复选框问题,多个响应应合并为单个字符串。

这是调查 markdown:

在此处粘贴您的调查 markdown

这是用于获取调查结果的原始查询:

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

请生成一个 SQL 查询,该查询:

  • 硬编码调查名称。
  • 使用条件聚合进行数据透视,每个问题作为一列。
  • 对复选框问题使用 STRING_AGG 来处理多个响应。
  • 确保按 user_id 分组并按 user_id 排序。
  • 格式化以便阅读,并包含解释逻辑的注释。

Data Explorer 插件的附加指南:

  • 查询应与 Discourse Data Explorer 插件兼容,这意味着它不应以分号结尾。
  • 使用 user_id 等列名来利用 Data Explorer 中的自动链接功能。
  • 避免使用动态 SQL,因为该插件不支持它。
  • 确保查询高效且针对性能进行了优化,因为它可能在大型数据集上运行。
8 个赞

这是一个很棒的小插件,功能异常丰富。感谢您制作它。

@nathank,您关于快速构建结果查询的指南做得非常棒。

4 个赞

我在我的自托管网站上安装了它来试用,确实很不错!

我知道这与讨论的宗旨相悖,但如果能够创建无需登录即可匿名完成的调查,那将非常有帮助。或者至少能够匿名化结果,使其不与特定用户关联。

当然,是的,能够像查看投票一样查看结果,而无需诉诸数据浏览器,那将是极好的。

5 个赞

是的,我也遇到了同样的问题。希望有解决方案。

3 个赞