欢迎光临
我们一直在努力

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 -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
docker –version && docker compose version


环境变量配置

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

mkdir -p /opt/formbricks
cd /opt/formbricks

# 生成 NEXTAUTH_SECRET
NEXTAUTH_SECRET=$(openssl rand -base64 32)
echo "NEXTAUTH_SECRET=$NEXTAUTH_SECRET"

# 生成 ENCRYPTION_KEY(必须为 64 位十六进制,即 32 字节)
ENCRYPTION_KEY=$(openssl rand -hex 32)
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:latest
container_name: formbricks
restart: unlessstopped
env_file: .env
depends_on:
formbricks-db:
condition: service_healthy
ports:
"3000:3000"
volumes:
formbricks_uploads:/home/nextjs/apps/web/uploads

formbricks-db:
image: postgres:15alpine
container_name: formbricksdb
restart: unlessstopped
environment:
POSTGRES_DB=formbricks
POSTGRES_USER=formbricks
POSTGRES_PASSWORD=formbricks_password
volumes:
formbricks_db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U formbricks"]
interval: 10s
timeout: 5s
retries: 5

volumes:
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:2alpine
container_name: formbrickscaddy
restart: unlessstopped
ports:
"80:80"
"443:443"
volumes:
./caddy/Caddyfile:/etc/caddy/Caddyfile
caddy_data:/data
caddy_config:/config
depends_on:
formbricks

volumes:
formbricks_db_data:
formbricks_uploads:
caddy_data:
caddy_config:


启动服务

cd /opt/formbricks
docker compose up -d

# 等待数据库初始化和 Next.js 构建(首次启动约 2-3 分钟)
docker compose logs -f formbricks

看到 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 调查

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

    新建问卷

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

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

    第一题(NPS 评分题):

    问题:您有多大可能向朋友或同事推荐我们的产品?
    类型:NPS(0-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 Link:https://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 实时通知你的系统:

  • 进入「Integrations」→「Webhooks」
  • 点击「Add Webhook」
  • 填写:
    • URL:你的接收端点(如 https://api.yourdomain.com/webhooks/survey)
    • Trigger:选择「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": "user@example.com",
    "userId": "user_123"
    }
    }
    }


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

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

    安装 SDK

    npm install @formbricks/js

    初始化 SDK

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

    import formbricks from "@formbricks/js";

    if (typeof window !== "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 -X GET \\
    "https://forms.yourdomain.com/api/v1/surveys/${SURVEY_ID}/responses" \\
    -H "x-api-key: ${API_KEY}"

    # 获取特定用户的所有响应(按 email 筛选)
    curl -X GET \\
    "https://forms.yourdomain.com/api/v1/responses?email=user@example.com" \\
    -H "x-api-key: ${API_KEY}"

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


    常用运维命令

    # 查看服务状态
    docker compose ps

    # 备份数据库
    docker exec formbricks-db pg_dump -U formbricks formbricks \\
    > formbricks-backup-$(date +%Y%m%d).sql

    # 恢复备份
    docker exec -i formbricks-db psql -U formbricks formbricks \\
    < formbricks-backup-20260517.sql

    # 更新到最新版本
    docker compose pull formbricks
    docker compose up -d formbricks

    # 查看运行日志
    docker compose logs -f formbricks –tail=100


    总结

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

    赞(0)
    未经允许不得转载:171主机测评 » Formbricks:开源问卷调查工具,用户研究和产品反馈神器
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址