免费样本

AI多平台评论管理Chrome扩展

← 返回报告详情

产品实现规划:ReviewPilot

技术选型原则

三个硬约束指导全部技术决策:

  1. 单人可维护:整个代码库一个人能在半天内理解全貌
  2. 零运维优先:能不部署服务端的,一律放客户端
  3. 渐进式复杂度:V1用最简单方案,不为"未来可能需要"提前架设基础设施

技术栈

V1技术栈总表

层级 选型 选型理由
扩展框架 Vanilla JS + Chrome Extension Manifest V3 零框架依赖,Chrome审核快(JobPocket案例:<24小时过审)
UI组件 原生HTML/CSS + 少量Tailwind CSS CDN 不引入React/Vue,减少bundle体积和审核风险
认证 Supabase Auth(Email + Google OAuth) 免费层支持50K MAU,自带Row Level Security
数据库 Supabase PostgreSQL 免费层500MB,足够前10K用户
AI推理 OpenAI GPT-4o API(主)+ Claude API(备) GPT-4o最低$0.003/回复;提供模型切换降本
支付 Stripe Checkout + Customer Portal 全球支付+自动税务处理(通过MoR)
邮件 Resend(免费层100封/天) 评论摘要邮件
短信 Twilio(V2引入) 评论邀请短信(V2功能)
Hosting 无服务端——Chrome扩展纯客户端 零hosting成本
Edge Functions Supabase Edge Functions(付费按量) 仅在需要服务端逻辑时使用(AI API Key保护等)
监控 Sentry(错误追踪)+ Supabase自带分析 免费层均够用
分析 Plausible(隐私友好的页面统计) 或直接用Chrome Web Store自带统计

为何不用框架

Chrome扩展使用React/Vue会带来三个问题:

  1. 审核风险:混淆/打包后的JS代码增加Chrome Web Store审核时间(明文Vanilla JS过审在24小时内)
  2. 权限膨胀:框架的依赖链可能导致manifest权限超出实际需要
  3. 调试困难:Service Worker、Content Script、Popup Panel三个上下文中的框架状态同步是已知痛点

V1坚持零框架。V2若UI复杂度显著增加,再评估引入Preact(3KB替代React)。

项目结构

reviewpilot-extension/
├── manifest.json              # Chrome Extension Manifest V3
├── icons/                     # 扩展图标(16/48/128)
├── popup/                     # 弹出面板
│   ├── popup.html
│   ├── popup.css
│   └── popup.js
├── content/                   # 页面注入
│   ├── content.js             # 主content script
│   ├── platforms/             # 各平台识别器+处理器
│   │   ├── google.js          # Google Business Profile
│   │   ├── yelp.js            # Yelp
│   │   ├── facebook.js        # Facebook Page
│   │   └── trustpilot.js      # Trustpilot(V2)
│   └── ui/                    # 内嵌面板UI
│       ├── reply-panel.css
│       └── reply-panel.js
├── background/                # Service Worker
│   └── service-worker.js
├── sidepanel/                 # 侧边栏
│   ├── sidepanel.html
│   ├── sidepanel.css
│   └── sidepanel.js
├── options/                   # 设置页面
│   ├── options.html
│   ├── options.css
│   └── options.js
├── shared/                    # 共享模块
│   ├── supabase.js            # Supabase客户端
│   ├── ai.js                  # AI调用封装
│   ├── stripe.js              # Stripe支付
│   ├── storage.js             # Chrome Storage API封装
│   └── utils.js               # 通用工具
├── tests/                     # 测试
│   ├── unit/
│   └── integration/
└── scripts/                   # 构建脚本
    ├── build.sh               # 打包脚本
    └── publish.sh             # Chrome Web Store发布

关键设计决策

  • shared/ai.js是唯一调用LLM API的地方,所有平台的回复生成走同一入口。这意味着如果要切换模型(GPT→Claude)、添加缓存、或做成本控制,只需改一个文件。
  • content/platforms/下每个平台一个文件,各文件实现同一个接口(detect(), getReviews(), postReply())。新增平台只需新增一个文件,不影响其他。
  • 所有Chrome Storage操作通过shared/storage.js代理,不直接调用chrome.storage.*。未来如果要迁移到IndexedDB或云端存储,改一处。

数据模型

Supabase表结构

-- 用户表(Supabase Auth内置,扩展profile)
CREATE TABLE profiles (
  id UUID REFERENCES auth.users PRIMARY KEY,
  email TEXT,
  business_name TEXT,
  business_type TEXT,       -- restaurant/clinic/salon/...
  brand_voice TEXT,         -- professional/friendly/humorous/formal/warm
  brand_details JSONB,      -- {tone_keywords: [], response_style: "", custom_rules: ""}
  plan TEXT DEFAULT 'free', -- free/basic/pro
  stripe_customer_id TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 平台连接
CREATE TABLE platform_connections (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES profiles(id) NOT NULL,
  platform TEXT NOT NULL,   -- google/yelp/facebook/trustpilot
  platform_business_id TEXT, -- GBP place_id / Yelp business_id
  business_url TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW(),
  UNIQUE(user_id, platform, platform_business_id)
);

-- AI回复记录(用于品牌语音学习,V2)
CREATE TABLE reply_history (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES profiles(id) NOT NULL,
  platform TEXT,
  review_text TEXT,
  review_rating INTEGER,    -- 1-5
  ai_suggestion TEXT,        -- AI生成的建议
  final_reply TEXT,          -- 用户修改后实际发出的回复
  approved BOOLEAN DEFAULT false,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- 订阅(Stripe Webhook同步)
CREATE TABLE subscriptions (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES profiles(id) NOT NULL,
  stripe_subscription_id TEXT UNIQUE,
  plan TEXT,
  status TEXT,              -- active/past_due/canceled
  current_period_end TIMESTAMPTZ,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

设计原则:V1 MVP不建reply_history表——先用localStorage缓存(每条回复<1KB,Chrome存储限制10MB够用10K条)。V2当品牌语音学习功能上线时再迁移到Supabase。

核心流程设计

流程A:商家回复一条评论(主流程)

1. 用户在浏览器打开Google Business Profile评论页面
2. Content Script检测到页面类型 → 注入内嵌回复按钮
3. 用户点击"AI回复"按钮
4. Content Script提取:评论内容 + 评分 + 评论者名称
5. 调用 shared/ai.js → GPT-4o生成3条回复建议
   - Prompt包含:品牌语气 + 评论内容 + 评分 + 回复策略
6. 内嵌面板展示3条建议,用户选择一条
7. 用户可编辑后点击"发布"
8. Content Script通过DOM操作填入回复框并提交
9. 记录回复到localStorage(后续同步到Supabase)
10. 更新popup面板中的回复率统计

流程B:新评论监控(后台服务)

1. Service Worker每15分钟激活(chrome.alarms API)
2. 遍历用户已连接的平台
3. 对每个平台:通过Supabase Edge Function代理请求(避免API Key暴露)
4. 对比上次检查结果 → 发现新评论
5. 触发Chrome通知(chrome.notifications API)
6. 更新badge数字(扩展图标上的未读数)
7. 如果有新评论且用户24小时未回复 → 发送邮件提醒(Resend)

注意:Google Business Profile的评论数据在2026年仍然没有完整的公开API。获取方式有两种:

  • 方案A(V1采用):Content Script抓取GBP管理页面的DOM,用户需打开GBP页面。评论监控通过Supabase Edge Function调用Google My Business API(需用户OAuth授权)。
  • 方案B(备选):纯Content Script方案——用户打开GBP页面时自动抓取并缓存评论列表。无法做后台监控,但可以做到零服务端成本。

V1优先方案B(纯客户端),V2迁移到方案A(Edge Function + OAuth)。理由:先验证用户愿意付费,再投资服务端基础设施。

流程C:用户注册与付费

1. 用户安装扩展 → 进入Onboarding页面(Options Page)
2. 输入品牌名称 + 选择行业 + 选择品牌语气 → 注册Supabase账号
3. 获得Free层权限(1个Google平台 + 10条AI回复/月)
4. 用户用完10条免费额度 → popup提示升级
5. 点击升级 → Stripe Checkout弹出(新标签页)
6. 支付完成 → Stripe Webhook → Supabase Edge Function更新plan字段
7. 扩展内plan状态刷新 → 解锁Basic/Pro功能

MVP开发排期(4周)

第1周:骨架搭建

任务 交付物
1-2 Manifest V3配置 + popup/sidepanel/options HTML骨架 + icons 可安装的空白扩展
3-4 Supabase项目创建 + Auth集成(Email + Google OAuth) 用户可注册/登录
5 Chrome Storage封装 + 平台连接CRUD 数据层完成
6-7 Google平台Content Script(检测GBP页面 + 提取评论) 可识别GBP页面并读取评论

第2周:核心AI功能

任务 交付物
8-10 shared/ai.js(GPT-4o调用 + 5种品牌语气Prompt模板) AI可生成回复
11-12 内嵌回复面板UI(评论下展示AI建议 + 编辑 + 发布) 单条评论AI回复闭环
13-14 免费额度管理(每月10条,计数器 + 重置逻辑) 用量控制

第3周:面板与支付

任务 交付物
15-16 Popup面板(评论聚合流 + 快速操作 + 回复率显示) 弹出面板可用
17-18 Stripe集成(Checkout + Webhook + Customer Portal) 支付闭环
19-20 Options页面完善(品牌配置 + 订阅管理 + 账号设置) 设置页可用
21 Yelp平台Content Script 第二平台覆盖

第4周:打磨与发布

任务 交付物
22-23 错误处理 + 边界情况(未登录/评论已删除/API限流等) 产品稳定
24 Chrome Web Store素材准备(截图/描述/宣传图) 上架材料
25-26 内部测试 + 修复Bug 稳定版本
27 Landing Page搭建(reviewpilot.io,Vercel免费层) 官网
28 Chrome Web Store提交审核 等待上架

关键实现细节

AI Prompt设计

品牌的5种语气预设对应的System Prompt片段:

专业(Professional)

你是一家{行业}的客服代表。回复需要正式、礼貌、专注于解决问题。使用完整的句子,保持专业距离,绝不使用表情符号或网络用语。

友好(Friendly)

你是一家{行业}的老板,性格热情、真诚。回复需要温暖、人性化,可以适当使用表情符号,让顾客感觉像在跟朋友聊天。

幽默(Humorous)

你是一家{行业}的有趣老板,擅长用幽默化解尴尬。回复可以轻松、有趣,但不失尊重。适合美食、娱乐等行业,不适合医疗、法律等行业。

正式(Formal)

你是一家{行业}的高级经理。回复需要简洁、高效、直奔主题。不寒暄,不拖沓,每句话都有信息量。

温暖(Warm)

你是一家{行业}的创始人,非常关心每一位顾客的感受。回复需要真诚、有共鸣,让顾客感受到"这家店真的在乎我"。

每条评论的User Prompt结构:

评论内容:{review_text}
评分:{rating}/5
评论者:{reviewer_name}

请生成3条回复建议:
1. 如果评分≥4:表达感谢并邀请再次光临
2. 如果评分=3:感谢反馈,认可具体问题,提出改进措施
3. 如果评分≤2:道歉,表示重视,提供联系方式(不公开争论)

回复长度:50-150字

安全设计

  • AI API Key存储在Supabase Edge Function环境变量中(不暴露给客户端)
  • 客户端通过Supabase认证后的RPC调用Edge Function来获取AI回复(Supabase Auth JWT验证)
  • Stripe Webhook签名验证在Supabase Edge Function中完成
  • Content Script只操作评论页面的DOM,不读取非相关数据

成本控制

  • GPT-4o Mini($0.15/1M input tokens, $0.60/1M output tokens)对评论回复场景足够,仅在用户选择"高质量"模式时使用GPT-4o
  • 在shared/ai.js中实现响应缓存:相同或相似评论(余弦相似度>0.9)直接返回缓存结果,节省API成本
  • 免费层用户的AI请求使用GPT-4o Mini;Pro用户默认GPT-4o(可降级)

验证节点

在写代码前需要先验证的三个核心假设:

假设1:本地商家愿意付费 → Landing Page + Waitlist + Reddit验证,30天内收集100+邮箱即通过

假设2:品牌语音定制有需求 → 对10个种子用户做30分钟访谈,问"如果AI回复听起来不像你,你会用吗?"

假设3:Chrome扩展形态优于独立网页 → A/B测试:Landing Page上同时展示"扩展+网页版"两个选项,测点击率差异

三个假设全部通过后再进入4周开发。任一假设不通过,调整方向后重新验证。