当前位置: 首页 > news >正文

Formbricks:开源问卷调查工具,用户研究和产品反馈神器

Formbricks:开源问卷调查工具,用户研究和产品反馈神器

了解用户真实想法是产品迭代的基础,但 Typeform、SurveyMonkey 等公有服务存在数据隐私风险,且按响应数量收费让成本难以控制。Formbricks 是一款完全开源的问卷调查平台,支持链接调查(发 URL)和应用内弹出调查(JavaScript SDK),提供漂亮的问卷构建器、条件逻辑、部分提交、响应分析仪表板、Webhook 以及完整的 API,是 Typeform 的理想自托管替代方案。

本文将带你部署 Formbricks,创建 NPS 调查,配置条件逻辑,并通过 SDK 在 Web 应用中嵌入弹出式调查。


服务器配置

Formbricks 基于 Next.js 全栈开发,搭配 PostgreSQL 作为数据存储,性能稳定,内存占用适中。推荐以下配置:

  • 机型:2 核 4GB(Next.js + PostgreSQL,内存适中)
  • 系统:Ubuntu 22.04 LTS
  • 磁盘:20GB 以上

推荐使用雨云服务器 rainyun-com部署,注册填优惠码2026off领 5 折,2 核 4GB 机型完全满足 Formbricks 的生产部署需求,适合独立开发者和中小团队使用。

安装 Docker 和 Docker Compose:

curl-fsSLhttps://get.docker.com|shsudousermod-aGdocker$USERnewgrpdockerdocker--version&&dockercompose version

环境变量配置

创建工作目录并生成安全密钥:

mkdir-p/opt/formbrickscd/opt/formbricks# 生成 NEXTAUTH_SECRETNEXTAUTH_SECRET=$(openssl rand-base6432)echo"NEXTAUTH_SECRET=$NEXTAUTH_SECRET"# 生成 ENCRYPTION_KEY(必须为 64 位十六进制,即 32 字节)ENCRYPTION_KEY=$(openssl rand-hex32)echo"ENCRYPTION_KEY=$ENCRYPTION_KEY"

创建/opt/formbricks/.env

cat>/opt/formbricks/.env<<EOF # 应用访问地址(必须与实际域名一致) WEBAPP_URL=https://forms.yourdomain.com # NextAuth 密钥 NEXTAUTH_SECRET=your_generated_nextauth_secret_here NEXTAUTH_URL=https://forms.yourdomain.com # 加密密钥(用于加密 Webhook secrets 等敏感数据) ENCRYPTION_KEY=your_generated_encryption_key_here # 数据库连接 DATABASE_URL=postgresql://formbricks:formbricks_password@formbricks-db:5432/formbricks # 邮件配置(可选,用于邀请和通知) MAIL_FROM=noreply@yourdomain.com SMTP_HOST=smtp.youremail.com SMTP_PORT=587 SMTP_USER=noreply@yourdomain.com SMTP_PASSWORD=your_smtp_password SMTP_SECURE_ENABLED=1 # 功能配置 EMAIL_VERIFICATION_DISABLED=0 PASSWORD_RESET_DISABLED=0 SIGNUP_DISABLED=0 EOF

Docker Compose 配置

创建/opt/formbricks/docker-compose.yml

version:"3.8"services:formbricks:image:formbricks/formbricks:latestcontainer_name:formbricksrestart:unless-stoppedenv_file:.envdepends_on:formbricks-db:condition:service_healthyports:-"3000:3000"volumes:-formbricks_uploads:/home/nextjs/apps/web/uploadsformbricks-db:image:postgres:15-alpinecontainer_name:formbricks-dbrestart:unless-stoppedenvironment:-POSTGRES_DB=formbricks-POSTGRES_USER=formbricks-POSTGRES_PASSWORD=formbricks_passwordvolumes:-formbricks_db_data:/var/lib/postgresql/datahealthcheck:test:["CMD-SHELL","pg_isready -U formbricks"]interval:10stimeout:5sretries:5volumes:formbricks_db_data:formbricks_uploads:

Caddy 反向代理配置

mkdir-p/opt/formbricks/caddy

创建/opt/formbricks/caddy/Caddyfile

forms.yourdomain.com { reverse_proxy formbricks:3000 # 允许较大的上传(文件类型问题) request_body { max_size 20MB } }

docker-compose.yml中追加 Caddy 服务:

caddy:image:caddy:2-alpinecontainer_name:formbricks-caddyrestart:unless-stoppedports:-"80:80"-"443:443"volumes:-./caddy/Caddyfile:/etc/caddy/Caddyfile-caddy_data:/data-caddy_config:/configdepends_on:-formbricksvolumes:formbricks_db_data:formbricks_uploads:caddy_data:caddy_config:

启动服务

cd/opt/formbricksdockercompose up-d# 等待数据库初始化和 Next.js 构建(首次启动约 2-3 分钟)dockercompose logs-fformbricks

看到ready - started server on 0.0.0.0:3000后,访问https://forms.yourdomain.com即可。


初始设置

注册管理员账号

首次访问时自动跳转到注册页面:

  1. 填写用户名、邮箱、密码
  2. 填写公司名称(用于团队标识)
  3. 点击「Create account」完成注册
  4. 若启用了邮件验证,检查邮箱并点击验证链接

界面概览

登录后进入主界面:

  • Surveys:所有问卷列表,按产品(Product)分组
  • People:用户画像,记录填写者信息
  • Responses:所有响应数据汇总
  • Integrations:第三方集成(Webhook、Zapier、Slack 等)
  • Settings:产品设置、API Keys、成员管理

创建 NPS 调查

NPS(Net Promoter Score,净推荐值)是衡量用户满意度的经典指标。

新建问卷

  1. 点击「+ New Survey」
  2. 选择类型:
    • Link Survey:生成独立链接,通过邮件/社交媒体分发
    • App Survey:通过 JavaScript SDK 在应用内弹出
    • 本例选择「Link Survey」
  3. 选择模板「NPS Survey」(内置模板,快速开始)

自定义问卷内容

NPS 模板默认包含两个问题:

第一题(NPS 评分题)

问题:您有多大可能向朋友或同事推荐我们的产品? 类型:NPS(0-10 评分,0=完全不推荐,10=极力推荐)

第二题(开放式反馈)
根据评分动态显示不同问题(这就是条件逻辑):

  • 评分 0-6(批评者):「是什么让您不太满意?我们如何改进?」
  • 评分 7-8(中性者):「感谢您的评分!您认为我们哪些方面还可以做得更好?」
  • 评分 9-10(推荐者):「太棒了!您最喜欢我们产品的哪个方面?」

配置条件逻辑

条件逻辑(Conditional Logic)让问卷根据用户的前一个答案动态决定下一个问题,大幅提升问卷的相关性和完成率。

设置跳转逻辑

  1. 选中第二题(开放式反馈),点击「Logic」标签
  2. 点击「+ Add Logic」
  3. 配置规则:
    IF question1.value is less than 7 THEN show question2_critics (批评者专属问题)
  4. 继续添加:
    IF question1.value is between 7 and 8 THEN show question2_neutral (中性者专属问题)
  5. 默认情况(9-10 分)显示推荐者问题

设置结束逻辑

可以根据评分显示不同的感谢语:

  1. 在「Endings」页面添加多个结束页
  2. 为推荐者(9-10)显示:「感谢您的支持!🎉 点击分享给更多朋友」
  3. 为批评者(0-6)显示:「感谢您的反馈,我们会认真改进」

发布并获取调查链接

  1. 完成问卷设计后,点击右上角「Publish」
  2. 进入「Summary」标签,可以看到:
    • Survey Linkhttps://forms.yourdomain.com/s/xxx(直接分发给用户)
    • Embed Code:可嵌入网页的 iframe 代码

将 Survey Link 发送给用户,或放入邮件签名、产品内提示等位置。


查看响应数据

当用户填写后,在问卷详情页点击「Responses」标签:

  • Summary:NPS 分数分布,自动计算 NPS 值(推荐者% - 批评者%)
  • Responses:逐条响应列表,可筛选、搜索、导出 CSV
  • Insights(AI 功能):自动归纳开放式问题的主题(需配置 OpenAI API Key)

在「Summary」页面可以实时看到:

  • NPS 分数曲线(按日期)
  • 0-10 分各段的响应人数分布柱状图
  • 开放式问题的词云

配置 Webhook

当有新响应提交时,通过 Webhook 实时通知你的系统:

  1. 进入「Integrations」→「Webhooks」
  2. 点击「Add Webhook」
  3. 填写:
    • URL:你的接收端点(如https://api.yourdomain.com/webhooks/survey
    • Trigger:选择「Response Created」
    • Survey:选择对应的 NPS 问卷(或「All Surveys」)
  4. 保存后,每次有新提交 Formbricks 会向该 URL 发送 POST 请求

Webhook 的请求体示例:

{"webhookId":"xxx","event":"responseCreated","data":{"id":"resp_xxx","surveyId":"survey_xxx","createdAt":"2026-05-17T10:00:00.000Z","data":{"npsQuestion":9,"openQuestion":"产品很好用,尤其是自动化功能"},"personAttributes":{"email":"user@example.com","userId":"user_123"}}}

JavaScript SDK 集成(应用内弹出调查)

Formbricks 最强大的功能之一是在 Web 应用中根据用户行为触发弹出式调查,无需让用户跳转到外部链接。

安装 SDK

npminstall@formbricks/js

初始化 SDK

在你的应用入口文件(如_app.tsxmain.js)中初始化:

importformbricksfrom"@formbricks/js";if(typeofwindow!=="undefined"){formbricks.init({environmentId:"your_environment_id",// 从 Formbricks 设置页获取apiHost:"https://forms.yourdomain.com",});}

environmentId在「Settings」→「API Keys」页面可以找到。

绑定用户身份

当用户登录后,传递用户信息给 Formbricks SDK,用于匹配调查目标人群:

// 用户登录成功后调用formbricks.setUserId("user_123");formbricks.setAttribute("email","user@example.com");formbricks.setAttribute("plan","pro");formbricks.setAttribute("signUpDate","2026-01-15");

触发调查

方式一:基于用户行为自动触发(在 Formbricks 后台配置触发条件)

// 用户完成某个关键操作时触发formbricks.track("orderCompleted");formbricks.track("featureUsed",{featureName:"export"});

在 Formbricks 后台创建「App Survey」时,可以设置在特定track事件触发时弹出调查,并配置条件(如:仅对 30 天内注册的 Pro 用户显示)。

方式二:直接弹出指定调查

// 主动触发特定调查(适合按钮点击等场景)formbricks.track("manualTrigger_nps");

React 完整示例

import { useEffect } from "react"; import formbricks from "@formbricks/js"; function App() { useEffect(() => { // 初始化 formbricks.init({ environmentId: process.env.NEXT_PUBLIC_FORMBRICKS_ENV_ID, apiHost: process.env.NEXT_PUBLIC_FORMBRICKS_HOST, }); }, []); useEffect(() => { // 用户登录后设置身份 if (user) { formbricks.setUserId(user.id); formbricks.setAttribute("email", user.email); formbricks.setAttribute("plan", user.plan); } }, [user]); const handleExport = async () => { await exportData(); // 导出完成后触发满意度调查 formbricks.track("exportCompleted"); }; return ( <button onClick={handleExport}>导出数据</button> ); }

通过 API 查询响应数据

Formbricks 提供完整的 REST API,可以将响应数据集成到自己的数据分析系统:

# 获取 API Key(在 Settings → API Keys 生成)API_KEY="your_api_key_here"ENV_ID="your_environment_id"SURVEY_ID="your_survey_id"# 获取问卷的所有响应curl-XGET\"https://forms.yourdomain.com/api/v1/surveys/${SURVEY_ID}/responses"\-H"x-api-key:${API_KEY}"# 获取特定用户的所有响应(按 email 筛选)curl-XGET\"https://forms.yourdomain.com/api/v1/responses?email=user@example.com"\-H"x-api-key:${API_KEY}"

响应数据可直接推送到数据仓库(如 ClickHouse、BigQuery)进行更复杂的分析。


常用运维命令

# 查看服务状态dockercomposeps# 备份数据库dockerexecformbricks-db pg_dump-Uformbricks formbricks\>formbricks-backup-$(date+%Y%m%d).sql# 恢复备份dockerexec-iformbricks-db psql-Uformbricks formbricks\<formbricks-backup-20260517.sql# 更新到最新版本dockercompose pull formbricksdockercompose up-dformbricks# 查看运行日志dockercompose logs-fformbricks--tail=100

总结

Formbricks 将链接调查和应用内弹出调查统一在一个平台,配合条件逻辑和 JavaScript SDK,可以在正确的时机向正确的用户推送最相关的问卷,大幅提升响应率和数据质量。相比 Typeform 等公有服务,自托管方案让调查数据完全存储在自己的服务器上,满足数据合规要求,且无响应数量限制。

http://www.jsqmd.com/news/898151/

相关文章:

  • Hexo主题插件开发终极指南:为Solitude主题打造个性化功能模块
  • 2026厦门高端名表回收行业测评:本地合规交易标准与优质机构权威排行 - 薛定谔的梨花猫
  • 技术视角:MTKClient——联发科芯片逆向工程与底层访问的架构解析
  • 昌都外贸网站开发找哪家?WaiMaoYa 外贸鸭实景展示产能与实力,精准打动海外大客户 - 外贸独立站运营
  • 海口品牌首饰回收哪家靠谱 主流平台价格对比 - 合扬奢侈品交易中心
  • 如何扩展SD_PixelArt_SpriteSheet_Generator:自定义训练与模型微调指南
  • 小米 MiMo-V2.5 系列 API 最高降 99%,营收利润双降仍计划 AI 投 600 亿!
  • 重庆公司注册代办机构排行:5家合规服务商盘点(2026版) - 果果1998
  • Taotoken的TokenPlan套餐如何为高频用户带来显著成本优势
  • 物联网安全基石:BORON超轻量级密码算法设计与实现解析
  • 如何在 openclaw 中快速配置 taotoken 的聚合 api 端点
  • 2026年安阳工业水处理设备5大品牌深度横评推荐 - 企业名录优选推荐
  • 2026邯郸装修公司TOP8排行 - 品牌帮
  • 卫星网络中基于动态超时的SDN流表管理优化方法SAT-FLOW详解
  • 春申驾校联系方式查询 官方正规渠道全 - 资讯纵览
  • 5步深度配置方案:打造高效Klipper 3D打印控制界面
  • 2026年国内拼豆门店加盟品牌综合实力排行 - 奔跑123
  • 基于FPAA的仿生六足机器人分层CPG控制器设计与实现
  • NuExtract-1.5-tiny-GGUF未来展望:路线图与技术发展趋势分析
  • 一文读懂Gemma-4-E2B:从架构解析到核心功能,AI开发者入门必备指南
  • 毫米波MIMO混合预编码:原理、算法与工程实践
  • 普宁注册公司哪家代办好|注册公司全程不跑腿怎么做到 - 品牌观察
  • 门窗行业GEO优化哪家强?成都百抖获客:技术自研+全国覆盖,领跑门窗AI获客新赛道 - 资讯纵览
  • NaCl-RAS:硬件优化如何解决安全沙箱中的分支预测性能瓶颈
  • WRAS认证办理哪家好?2026WRAS认证办理公司推荐分享 - 栗子测评
  • 题解:AT_arc145_d [ARC145D] Non Arithmetic Progression Set
  • 2026年玉林卖黄金去哪不被坑?三家正规门店实地测评,全域免费上门,乡镇也能当天变现 - 润富黄金珠宝行
  • Segment-FA:解决深度包检测中正则表达式状态爆炸的创新架构
  • 2026江苏长晶科技(JSCJ)优质授权代理商推荐 - 资讯纵览
  • 广州商业场所除四害服务选择指南:2026年企业必备 - 资讯速览