Formbricks开源问卷调查工具用户研究和产品反馈神器了解用户真实想法是产品迭代的基础但 Typeform、SurveyMonkey 等公有服务存在数据隐私风险且按响应数量收费让成本难以控制。Formbricks 是一款完全开源的问卷调查平台支持链接调查发 URL和应用内弹出调查JavaScript SDK提供漂亮的问卷构建器、条件逻辑、部分提交、响应分析仪表板、Webhook 以及完整的 API是 Typeform 的理想自托管替代方案。本文将带你部署 Formbricks创建 NPS 调查配置条件逻辑并通过 SDK 在 Web 应用中嵌入弹出式调查。服务器配置Formbricks 基于 Next.js 全栈开发搭配 PostgreSQL 作为数据存储性能稳定内存占用适中。推荐以下配置机型2 核 4GBNext.js PostgreSQL内存适中系统Ubuntu 22.04 LTS磁盘20GB 以上推荐使用雨云服务器 rainyun-com部署注册填优惠码2026off领 5 折2 核 4GB 机型完全满足 Formbricks 的生产部署需求适合独立开发者和中小团队使用。安装 Docker 和 Docker Composecurl-fsSLhttps://get.docker.com|shsudousermod-aGdocker$USERnewgrpdockerdocker--versiondockercompose version环境变量配置创建工作目录并生成安全密钥mkdir-p/opt/formbrickscd/opt/formbricks# 生成 NEXTAUTH_SECRETNEXTAUTH_SECRET$(openssl rand-base6432)echoNEXTAUTH_SECRET$NEXTAUTH_SECRET# 生成 ENCRYPTION_KEY必须为 64 位十六进制即 32 字节ENCRYPTION_KEY$(openssl rand-hex32)echoENCRYPTION_KEY$ENCRYPTION_KEY创建/opt/formbricks/.envcat/opt/formbricks/.envEOF # 应用访问地址必须与实际域名一致 WEBAPP_URLhttps://forms.yourdomain.com # NextAuth 密钥 NEXTAUTH_SECRETyour_generated_nextauth_secret_here NEXTAUTH_URLhttps://forms.yourdomain.com # 加密密钥用于加密 Webhook secrets 等敏感数据 ENCRYPTION_KEYyour_generated_encryption_key_here # 数据库连接 DATABASE_URLpostgresql://formbricks:formbricks_passwordformbricks-db:5432/formbricks # 邮件配置可选用于邀请和通知 MAIL_FROMnoreplyyourdomain.com SMTP_HOSTsmtp.youremail.com SMTP_PORT587 SMTP_USERnoreplyyourdomain.com SMTP_PASSWORDyour_smtp_password SMTP_SECURE_ENABLED1 # 功能配置 EMAIL_VERIFICATION_DISABLED0 PASSWORD_RESET_DISABLED0 SIGNUP_DISABLED0 EOFDocker Compose 配置创建/opt/formbricks/docker-compose.ymlversion:3.8services:formbricks:image:formbricks/formbricks:latestcontainer_name:formbricksrestart:unless-stoppedenv_file:.envdepends_on:formbricks-db:condition:service_healthyports:-3000:3000volumes:-formbricks_uploads:/home/nextjs/apps/web/uploadsformbricks-db:image:postgres:15-alpinecontainer_name:formbricks-dbrestart:unless-stoppedenvironment:-POSTGRES_DBformbricks-POSTGRES_USERformbricks-POSTGRES_PASSWORDformbricks_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/Caddyfileforms.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:443volumes:-./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即可。初始设置注册管理员账号首次访问时自动跳转到注册页面填写用户名、邮箱、密码填写公司名称用于团队标识点击「Create account」完成注册若启用了邮件验证检查邮箱并点击验证链接界面概览登录后进入主界面Surveys所有问卷列表按产品Product分组People用户画像记录填写者信息Responses所有响应数据汇总Integrations第三方集成Webhook、Zapier、Slack 等Settings产品设置、API Keys、成员管理创建 NPS 调查NPSNet Promoter Score净推荐值是衡量用户满意度的经典指标。新建问卷点击「 New Survey」选择类型Link Survey生成独立链接通过邮件/社交媒体分发App Survey通过 JavaScript SDK 在应用内弹出本例选择「Link Survey」选择模板「NPS Survey」内置模板快速开始自定义问卷内容NPS 模板默认包含两个问题第一题NPS 评分题问题您有多大可能向朋友或同事推荐我们的产品 类型NPS0-10 评分0完全不推荐10极力推荐第二题开放式反馈根据评分动态显示不同问题这就是条件逻辑评分 0-6批评者「是什么让您不太满意我们如何改进」评分 7-8中性者「感谢您的评分您认为我们哪些方面还可以做得更好」评分 9-10推荐者「太棒了您最喜欢我们产品的哪个方面」配置条件逻辑条件逻辑Conditional Logic让问卷根据用户的前一个答案动态决定下一个问题大幅提升问卷的相关性和完成率。设置跳转逻辑选中第二题开放式反馈点击「Logic」标签点击「 Add Logic」配置规则IF question1.value is less than 7 THEN show question2_critics (批评者专属问题)继续添加IF question1.value is between 7 and 8 THEN show question2_neutral (中性者专属问题)默认情况9-10 分显示推荐者问题设置结束逻辑可以根据评分显示不同的感谢语在「Endings」页面添加多个结束页为推荐者9-10显示「感谢您的支持 点击分享给更多朋友」为批评者0-6显示「感谢您的反馈我们会认真改进」发布并获取调查链接完成问卷设计后点击右上角「Publish」进入「Summary」标签可以看到Survey Linkhttps://forms.yourdomain.com/s/xxx直接分发给用户Embed Code可嵌入网页的 iframe 代码将 Survey Link 发送给用户或放入邮件签名、产品内提示等位置。查看响应数据当用户填写后在问卷详情页点击「Responses」标签SummaryNPS 分数分布自动计算 NPS 值推荐者% - 批评者%Responses逐条响应列表可筛选、搜索、导出 CSVInsightsAI 功能自动归纳开放式问题的主题需配置 OpenAI API Key在「Summary」页面可以实时看到NPS 分数曲线按日期0-10 分各段的响应人数分布柱状图开放式问题的词云配置 Webhook当有新响应提交时通过 Webhook 实时通知你的系统进入「Integrations」→「Webhooks」点击「Add Webhook」填写URL你的接收端点如https://api.yourdomain.com/webhooks/surveyTrigger选择「Response Created」Survey选择对应的 NPS 问卷或「All Surveys」保存后每次有新提交 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:userexample.com,userId:user_123}}}JavaScript SDK 集成应用内弹出调查Formbricks 最强大的功能之一是在 Web 应用中根据用户行为触发弹出式调查无需让用户跳转到外部链接。安装 SDKnpminstallformbricks/js初始化 SDK在你的应用入口文件如_app.tsx或main.js中初始化importformbricksfromformbricks/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,userexample.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_KEYyour_api_key_hereENV_IDyour_environment_idSURVEY_IDyour_survey_id# 获取问卷的所有响应curl-XGET\https://forms.yourdomain.com/api/v1/surveys/${SURVEY_ID}/responses\-Hx-api-key:${API_KEY}# 获取特定用户的所有响应按 email 筛选curl-XGET\https://forms.yourdomain.com/api/v1/responses?emailuserexample.com\-Hx-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--tail100总结Formbricks 将链接调查和应用内弹出调查统一在一个平台配合条件逻辑和 JavaScript SDK可以在正确的时机向正确的用户推送最相关的问卷大幅提升响应率和数据质量。相比 Typeform 等公有服务自托管方案让调查数据完全存储在自己的服务器上满足数据合规要求且无响应数量限制。