375 lines
7.1 KiB
Markdown
375 lines
7.1 KiB
Markdown
# Sales Chat Plugin for Tailchat
|
||
|
||
销售邀请追踪系统 - Tailchat 官方插件
|
||
|
||
## 功能特性
|
||
|
||
✅ **邀请追踪**
|
||
- 创建邀请链接
|
||
- 生成二维码
|
||
- 点击/扫码/加入统计
|
||
- 邀请码管理
|
||
|
||
✅ **数据统计**
|
||
- 个人业绩统计
|
||
- 团队排行榜
|
||
- 趋势分析
|
||
- 转化率追踪
|
||
|
||
✅ **管理功能**
|
||
- 用户管理
|
||
- 群组管理
|
||
- 踢人/销户
|
||
- 权限控制
|
||
|
||
## 快速开始
|
||
|
||
### 1. 环境要求
|
||
|
||
- Node.js >= 18
|
||
- MongoDB >= 6
|
||
- Redis >= 6
|
||
- pnpm >= 8
|
||
|
||
### 2. 安装依赖
|
||
|
||
```bash
|
||
cd /Users/sion/Desktop/projects/tailchat-sales
|
||
pnpm install
|
||
```
|
||
|
||
### 3. 配置环境变量
|
||
|
||
```bash
|
||
# 复制配置文件
|
||
cp server/.env.example server/.env
|
||
|
||
# 编辑配置
|
||
vim server/.env
|
||
```
|
||
|
||
关键配置:
|
||
```env
|
||
MONGO_URL=mongodb://localhost:27017/tailchat
|
||
REDIS_URL=redis://localhost:6379
|
||
JWT_SECRET=your-secret-key
|
||
INVITE_BASE_URL=http://localhost:11000
|
||
```
|
||
|
||
### 4. 启动开发环境
|
||
|
||
```bash
|
||
# 启动 Tailchat
|
||
cd server
|
||
pnpm dev
|
||
```
|
||
|
||
### 5. 运行测试
|
||
|
||
```bash
|
||
# 运行集成测试
|
||
./tests/integration_test.sh
|
||
```
|
||
|
||
## API 文档
|
||
|
||
### 邀请管理
|
||
|
||
#### 创建邀请
|
||
```http
|
||
POST /api/plugin/com.msgbyte.saleschat/invite/create
|
||
Authorization: Bearer <token>
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"groupId": "group-id",
|
||
"expiresIn": 7
|
||
}
|
||
```
|
||
|
||
#### 获取我的邀请列表
|
||
```http
|
||
GET /api/plugin/com.msgbyte.saleschat/invite/my
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
#### 获取邀请详情
|
||
```http
|
||
GET /api/plugin/com.msgbyte.saleschat/invite/:code
|
||
```
|
||
|
||
#### 获取邀请统计
|
||
```http
|
||
GET /api/plugin/com.msgbyte.saleschat/invite/:code/stats
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
#### 停用邀请
|
||
```http
|
||
POST /api/plugin/com.msgbyte.saleschat/invite/:code/deactivate
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
#### 通过邀请加入
|
||
```http
|
||
POST /api/plugin/com.msgbyte.saleschat/invite/join
|
||
Authorization: Bearer <token>
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"code": "invite-code"
|
||
}
|
||
```
|
||
|
||
### 数据统计
|
||
|
||
#### 获取我的统计
|
||
```http
|
||
GET /api/plugin/com.msgbyte.saleschat/stats/my
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
#### 获取团队统计
|
||
```http
|
||
GET /api/plugin/com.msgbyte.saleschat/stats/team
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
#### 获取排行榜
|
||
```http
|
||
GET /api/plugin/com.msgbyte.saleschat/stats/ranking
|
||
Authorization: Bearer <token>
|
||
```
|
||
|
||
### 管理功能
|
||
|
||
#### 踢出用户
|
||
```http
|
||
POST /api/plugin/com.msgbyte.saleschat/admin/kick
|
||
Authorization: Bearer <admin-token>
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"groupId": "group-id",
|
||
"userId": "user-id",
|
||
"reason": "违规操作"
|
||
}
|
||
```
|
||
|
||
#### 删除用户
|
||
```http
|
||
POST /api/plugin/com.msgbyte.saleschat/admin/delete
|
||
Authorization: Bearer <super-admin-token>
|
||
Content-Type: application/json
|
||
|
||
{
|
||
"userId": "user-id",
|
||
"type": "soft",
|
||
"reason": "违规操作"
|
||
}
|
||
```
|
||
|
||
## 数据库结构
|
||
|
||
### sales_invites(邀请表)
|
||
```javascript
|
||
{
|
||
code: String, // 邀请码
|
||
salesId: ObjectId, // 销售ID
|
||
groupId: ObjectId, // 群组ID
|
||
link: String, // 邀请链接
|
||
qrCodeUrl: String, // 二维码URL
|
||
createdAt: Date, // 创建时间
|
||
expiresAt: Date, // 过期时间
|
||
clickCount: Number, // 点击次数
|
||
scanCount: Number, // 扫码次数
|
||
joinCount: Number, // 加入次数
|
||
status: String // 状态
|
||
}
|
||
```
|
||
|
||
### sales_stats(统计表)
|
||
```javascript
|
||
{
|
||
salesId: ObjectId, // 销售ID
|
||
date: Date, // 日期
|
||
period: String, // 周期:daily/weekly/monthly
|
||
invitesCreated: Number, // 创建邀请数
|
||
joins: Number, // 加入数
|
||
conversions: Number, // 转化数
|
||
revenue: Number // 收入
|
||
}
|
||
```
|
||
|
||
### access_logs(访问日志)
|
||
```javascript
|
||
{
|
||
inviteCode: String, // 邀请码
|
||
visitorId: String, // 访客ID
|
||
accessType: String, // 访问类型:click/scan/join
|
||
timestamp: Date, // 时间戳
|
||
ipAddress: String, // IP地址
|
||
userAgent: String // User Agent
|
||
}
|
||
```
|
||
|
||
## 部署
|
||
|
||
### Docker 部署
|
||
|
||
```bash
|
||
# 构建镜像
|
||
docker-compose build
|
||
|
||
# 启动服务
|
||
docker-compose up -d
|
||
|
||
# 查看日志
|
||
docker-compose logs -f tailchat
|
||
|
||
# 停止服务
|
||
docker-compose down
|
||
```
|
||
|
||
### 环境变量
|
||
|
||
| 变量名 | 说明 | 默认值 |
|
||
|--------|------|--------|
|
||
| MONGO_URL | MongoDB 连接串 | mongodb://localhost:27017/tailchat |
|
||
| REDIS_URL | Redis 连接串 | redis://localhost:6379 |
|
||
| JWT_SECRET | JWT 密钥 | - |
|
||
| INVITE_BASE_URL | 邀请基础URL | http://localhost:11000 |
|
||
| ADMIN_USERNAME | 管理员用户名 | admin |
|
||
| ADMIN_PASSWORD | 管理员密码 | admin123 |
|
||
|
||
## 迁移指南
|
||
|
||
### 从独立服务迁移
|
||
|
||
1. **导出数据**
|
||
```bash
|
||
# 从原项目导出数据
|
||
cd /Users/sion/Desktop/projects/sales-chat/backend
|
||
node scripts/export-data.js > data-export.json
|
||
```
|
||
|
||
2. **导入数据**
|
||
```bash
|
||
# 导入到 Tailchat 数据库
|
||
cd /Users/sion/Desktop/projects/tailchat-sales/server
|
||
node scripts/import-data.js data-export.json
|
||
```
|
||
|
||
3. **更新前端配置**
|
||
```bash
|
||
# 修改 API 路径
|
||
# /api/invite/* → /api/plugin/com.msgbyte.saleschat/invite/*
|
||
# /api/stats/* → /api/plugin/com.msgbyte.saleschat/stats/*
|
||
```
|
||
|
||
4. **下线旧服务**
|
||
```bash
|
||
# 停止独立服务
|
||
pm2 stop sales-chat-backend
|
||
|
||
# 启动 Tailchat
|
||
docker-compose up -d
|
||
```
|
||
|
||
## 客户端
|
||
|
||
### Flutter 移动端
|
||
|
||
独立的 Flutter 应用,支持 iOS / Android / Web。
|
||
|
||
```bash
|
||
# 进入 Flutter 客户端目录
|
||
cd client/flutter
|
||
|
||
# 安装依赖
|
||
flutter pub get
|
||
|
||
# 运行应用
|
||
flutter run
|
||
|
||
# 构建 APK
|
||
flutter build apk
|
||
```
|
||
|
||
详见: [client/flutter/README.md](client/flutter/README.md)
|
||
|
||
### Tailchat Web
|
||
|
||
集成在 Tailchat Web 中的插件界面。
|
||
|
||
```bash
|
||
# 启动 Tailchat Web 开发环境
|
||
cd client/web
|
||
pnpm dev
|
||
```
|
||
|
||
## 开发
|
||
|
||
### 项目结构
|
||
```
|
||
tailchat-sales/
|
||
├── server/ # 后端服务
|
||
│ └── plugins/com.msgbyte.saleschat/ # 销售聊天插件
|
||
│ ├── package.json
|
||
│ ├── services/
|
||
│ │ ├── index.ts
|
||
│ │ ├── invite.service.ts
|
||
│ │ ├── stats.service.ts
|
||
│ │ └── admin.service.ts
|
||
│ ├── models/
|
||
│ └── test/
|
||
├── client/ # 客户端
|
||
│ ├── flutter/ # Flutter 独立应用 ⭐
|
||
│ │ ├── lib/
|
||
│ │ ├── android/
|
||
│ │ ├── ios/
|
||
│ │ └── web/
|
||
│ ├── web/ # Tailchat Web
|
||
│ ├── mobile/ # Tailchat Mobile (RN)
|
||
│ └── desktop/ # Tailchat Desktop
|
||
└── tests/ # 集成测试
|
||
```
|
||
|
||
### 添加新功能
|
||
|
||
1. 在 `services/` 创建新服务
|
||
2. 在 `models/` 创建数据模型
|
||
3. 在 `services/index.ts` 注册服务
|
||
4. 编写测试
|
||
|
||
## 故障排除
|
||
|
||
### 插件加载失败
|
||
- 检查 `package.json` 依赖
|
||
- 验证服务名称格式
|
||
- 查看 Tailchat 日志
|
||
|
||
### API 404 错误
|
||
- 确认插件已加载
|
||
- 检查路由注册
|
||
- 验证权限配置
|
||
|
||
### 数据库连接失败
|
||
- 检查 MongoDB 运行状态
|
||
- 验证连接字符串
|
||
- 检查网络配置
|
||
|
||
## 贡献
|
||
|
||
欢迎提交 Issue 和 Pull Request!
|
||
|
||
## 许可证
|
||
|
||
MIT
|
||
|
||
## 联系方式
|
||
|
||
- 原项目: `/Users/sion/Desktop/projects/sales-chat/`
|
||
- Tailchat: https://github.com/msgbyte/tailchat
|
||
- 文档: https://tailchat.msgbyte.com
|