Files
taiji-AI-PAD/Docs/渠道合作伙伴平台-接口对接文档.md
T
2026-01-06 16:00:33 +00:00

1297 lines
32 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 渠道合作伙伴平台 - 接口对接文档
> **版本**: v1.0.0
> **更新时间**: 2026-01-06
> **说明**: 本文档基于前端业务需求清单与后端API接口清单核实,列出渠道平台所有接口的对接状态
---
## 目录
1. [接口对接核实总结](#接口对接核实总结)
2. [认证模块](#认证模块)
3. [仪表板模块](#仪表板模块)
4. [租户管理模块](#租户管理模块)
5. [资源管理模块](#资源管理模块)
6. [计费模块](#计费模块)
7. [设置模块](#设置模块)
8. [接口汇总表](#接口汇总表)
9. [待完善功能清单](#待完善功能清单)
---
## 接口对接核实总结
### 核实结果概览
| 分类 | 已对接 | 部分对接 | 待开发 | 总计 |
|------|--------|----------|--------|------|
| 认证模块 | 2 | 0 | 0 | 2 |
| 仪表板模块 | 1 | 1 | 0 | 2 |
| 租户管理模块 | 9 | 0 | 0 | 9 |
| 资源管理模块 | 4 | 0 | 0 | 4 |
| 计费模块 | 3 | 1 | 0 | 4 |
| 设置模块 | 2 | 0 | 1 | 3 |
| **总计** | **21** | **2** | **1** | **24** |
### 核实说明
- ✅ **已对接**: 后端接口已存在且与前端需求匹配
- ⚠️ **部分对接**: 后端接口存在但功能不完整
- ❌ **待开发**: 后端接口不存在,需要新增
---
## 认证模块
### 1. 渠道用户登录 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 登录页面 → "登录"按钮 |
| **接口路径** | `POST /api/auth/login` |
| **后端文件** | `services/mcp-server/app/routes/auth.py` |
| **权限要求** | 无 |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| email | string | 是 | 邮箱地址 |
| password | string | 是 | 密码 |
| role | string | 是 | 固定值 `"channel"` |
**响应示例**:
```json
{
"success": true,
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"refreshToken": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"user": {
"id": "channel_001",
"email": "channel@example.com",
"role": "channel_admin",
"name": "渠道管理员"
}
}
}
```
**前端调用**: `TaijiAPIClient.login(email, password, "channel")`
**Token存储**: `channel_token` (localStorage + Cookie)
---
### 2. 退出登录 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 页面头部 → "退出"按钮 |
| **接口路径** | `POST /api/auth/logout` |
| **后端文件** | `services/mcp-server/app/routes/auth.py` |
| **权限要求** | 已认证用户 |
**请求头**:
```
Authorization: Bearer <token>
```
**响应示例**:
```json
{
"success": true,
"message": "登出成功"
}
```
**前端调用**: `TaijiAPIClient.logout()`
**前端行为**: 清除所有本地存储的token,跳转到登录页
---
## 仪表板模块
### 3. 渠道统计概览 ⚠️ 部分对接
| 属性 | 值 |
|------|-----|
| **展示位置** | 仪表板页面 → 顶部统计卡片区域 |
| **当前接口** | `GET /api/channel/tenants` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**展示内容**:
- 总租户数(从租户列表计算)✅
- 活跃租户(从租户列表计算)✅
- 月度收入 ❌ 需要专门接口
- 已获佣金 ❌ 需要专门接口
**当前实现**: 从租户列表接口计算总租户数和活跃租户数
**响应示例**:
```json
{
"success": true,
"data": {
"tenants": [
{
"id": "tenant_001",
"name": "租户A",
"status": "active"
}
]
}
}
```
**待完善**: 建议后端新增聚合统计接口
```
GET /api/channel/dashboard/stats
```
**建议响应**:
```json
{
"success": true,
"data": {
"totalTenants": 5,
"activeTenants": 3,
"monthlyRevenue": 12500.00,
"commission": 1250.00
}
}
```
---
### 4. 平台Agent概览 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **展示位置** | 仪表板页面 → "平台Agent概览"区域 |
| **接口路径** | `GET /api/channel/available-platform-agents` |
| **后端文件** | `services/mcp-server/app/routes/platform_agent_quota.py` |
| **权限要求** | channel_admin |
**响应示例**:
```json
{
"success": true,
"data": {
"templates": [
{
"name": "gpt-assistant",
"displayName": "GPT助手",
"description": "基于GPT的智能助手",
"podQuota": 10,
"podRemaining": 8,
"hasAccess": true
}
]
}
}
```
**前端调用**: `TaijiAPIClient.getAvailablePlatformAgents()`
---
## 租户管理模块
### 5. 租户列表 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **展示位置** | "我的租户"标签页 → 租户列表 |
| **接口路径** | `GET /api/channel/tenants` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**响应示例**:
```json
{
"success": true,
"data": {
"tenants": [
{
"id": "tenant_001",
"name": "企业A",
"status": "active",
"plan": "enterprise",
"users": 50,
"revenue": "$3,200",
"balance": "$1,500",
"creditLimit": "$5,000"
}
]
}
}
```
**前端调用**: `TaijiAPIClient.getChannelTenants()`
---
### 6. 创建租户 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | "我的租户"标签页 → "添加租户"按钮 |
| **接口路径** | `POST /api/channel/tenants/create` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| name | string | 是 | 公司名称 |
| email | string | 是 | 联系邮箱(用于登录) |
| password | string | 是 | 登录密码 |
| subscriptionTier | string | 否 | 订阅等级:free/pro/enterprise |
**请求示例**:
```json
{
"name": "新企业",
"email": "admin@newcompany.com",
"password": "SecurePass123",
"subscriptionTier": "professional"
}
```
**响应示例**:
```json
{
"success": true,
"data": {
"tenant": {
"id": "tenant_002",
"name": "新企业",
"email": "admin@newcompany.com"
}
}
}
```
**前端调用**: `TaijiAPIClient.createChannelTenant(data)`
---
### 7. 删除租户 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 租户列表 → 操作菜单 → "删除租户" |
| **接口路径** | `DELETE /api/channel/tenants/{tenantId}` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**路径参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| tenantId | string | 租户ID |
**响应示例**:
```json
{
"success": true,
"message": "租户删除成功"
}
```
**前端调用**: `TaijiAPIClient.deleteTenant(tenantId)`
---
### 8. 分配资源 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 租户列表 → 操作菜单 → "分配资源" |
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/resources` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**路径参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| tenantId | string | 租户ID |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| agents | array | 否 | Agent配额列表 |
| agents[].agentId | string | 是 | Agent模板名称 |
| agents[].quantity | int | 是 | 分配数量 |
| models | array | 否 | 模型配额列表 |
| models[].modelName | string | 是 | 模型名称(如gpt-4) |
| models[].rpm | int | 是 | 每分钟请求数限制 |
| models[].tpm | int | 是 | 每分钟令牌数限制 |
| customAgentQuota | object | 否 | 自定义Agent资源配额 |
| customAgentQuota.cpuQuota | float | 否 | CPU配额(核数/Agent) |
| customAgentQuota.memoryQuota | float | 否 | 内存配额(GB/Agent) |
**请求示例**:
```json
{
"agents": [
{
"agentId": "gpt-assistant",
"quantity": 5
}
],
"models": [
{
"modelName": "gpt-4",
"rpm": 100,
"tpm": 50000
}
],
"customAgentQuota": {
"cpuQuota": 0.5,
"memoryQuota": 1.0
}
}
```
**响应示例**:
```json
{
"success": true,
"message": "资源分配成功"
}
```
**前端调用**: `TaijiAPIClient.allocateTenantResources(tenantId, data)`
---
### 9. 租户充值 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 租户列表 → 操作菜单 → "充值" |
| **接口路径** | `POST /api/channel/tenants/{tenantId}/recharge` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**路径参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| tenantId | string | 租户ID |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| amount | float | 是 | 充值金额(USD) |
**请求示例**:
```json
{
"amount": 500.00
}
```
**响应示例**:
```json
{
"success": true,
"data": {
"newBalance": 2000.00
}
}
```
**前端调用**: `TaijiAPIClient.rechargeTenant(tenantId, amount)`
**快捷金额**: $50, $100, $500, $1000
---
### 10. 设置授信额度 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 租户列表 → 操作菜单 → "授信额度" |
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/credit` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**路径参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| tenantId | string | 租户ID |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| creditLimit | float | 是 | 授信额度(USD) |
**请求示例**:
```json
{
"creditLimit": 5000.00
}
```
**响应示例**:
```json
{
"success": true,
"message": "授信额度设置成功"
}
```
**前端调用**: `TaijiAPIClient.setTenantCreditLimit(tenantId, creditLimit)`
**快捷金额**: $500, $1000, $5000, $10000
---
### 11. 管理计费 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 租户列表 → 操作菜单 → "管理计费" |
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/billing` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**路径参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| tenantId | string | 租户ID |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| subscriptionTier | string | 否 | 订阅层级:free/professional/enterprise |
| discount | int | 否 | 折扣比例(0-100的百分比) |
**请求示例**:
```json
{
"subscriptionTier": "professional",
"discount": 10
}
```
**响应示例**:
```json
{
"success": true,
"message": "计费设置更新成功"
}
```
**前端调用**: `TaijiAPIClient.updateTenantBilling(tenantId, data)`
**订阅层级说明**:
| 层级 | 价格 | 说明 |
|------|------|------|
| 免费版 (free) | $0/mo | 基础功能 |
| 专业版 (professional) | $1,800/mo | 适合中小企业 |
| 企业版 (enterprise) | $3,200/mo | 无限制 |
---
### 12. 更新租户状态 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 租户列表 → 操作菜单 → "暂停/启用" |
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/status` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**路径参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| tenantId | string | 租户ID |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| status | string | 是 | 状态:active/suspended |
**请求示例**:
```json
{
"status": "suspended"
}
```
**响应示例**:
```json
{
"success": true,
"message": "租户状态更新成功"
}
```
**前端调用**: `TaijiAPIClient.updateTenantStatus(tenantId, status)`
---
### 13. 更新租户权限 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 租户详情 → 权限设置 |
| **接口路径** | `PUT /api/channel/tenants/{tenantId}/permissions` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**路径参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| tenantId | string | 租户ID |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| permissions | array | 是 | 权限列表 |
**请求示例**:
```json
{
"permissions": ["agent_create", "agent_deploy", "model_access"]
}
```
**响应示例**:
```json
{
"success": true,
"message": "租户权限更新成功"
}
```
**前端调用**: `TaijiAPIClient.updateTenantPermissions(tenantId, permissions)`
---
## 资源管理模块
### 14. 平台Agent模板列表 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **展示位置** | "资源管理"标签页 → "平台Agent模板"区域 |
| **接口路径** | `GET /api/channel/available-platform-agents` |
| **后端文件** | `services/mcp-server/app/routes/platform_agent_quota.py` |
| **权限要求** | channel_admin |
**响应示例**:
```json
{
"success": true,
"data": {
"templates": [
{
"name": "gpt-assistant",
"displayName": "GPT助手",
"description": "基于GPT的智能助手",
"status": "available",
"hasAccess": true,
"pendingApplication": false,
"cpuRequest": "100m",
"cpuLimit": "500m",
"memoryRequest": "128Mi",
"memoryLimit": "512Mi",
"podQuota": 10,
"podUsed": 2,
"podRemaining": 8
}
]
}
}
```
**前端调用**: `TaijiAPIClient.getAvailablePlatformAgents()`
---
### 15. 模型供应商列表 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **展示位置** | "资源管理"标签页 → "模型管理"区域 |
| **接口路径** | `GET /api/channel/providers` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**响应示例**:
```json
{
"success": true,
"data": {
"providers": [
{
"id": "provider_001",
"name": "OpenAI",
"provider": "openai",
"hasAccess": true,
"pendingApplication": false,
"supportedModels": ["gpt-4", "gpt-3.5-turbo"],
"rpm": 1000,
"tpm": 100000
}
]
}
}
```
**前端调用**: `TaijiAPIClient.getChannelProviders()`
---
### 16. 申请平台Agent配额 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | Agent模板卡片 → "申请使用"/"申请更多配额"按钮 |
| **接口路径** | `POST /api/channel/applications/platform-agents` |
| **后端文件** | `services/mcp-server/app/routes/platform_agent_quota.py` |
| **权限要求** | channel_admin |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| templateName | string | 是 | Agent模板名称 |
| requestedPodQuota | int | 是 | 申请的Pod配额数量 |
| reason | string | 是 | 申请理由 |
**请求示例**:
```json
{
"templateName": "gpt-assistant",
"requestedPodQuota": 10,
"reason": "业务扩展需要更多Agent实例"
}
```
**响应示例**:
```json
{
"success": true,
"data": {
"applicationId": "app_001"
},
"message": "申请已提交,等待审批"
}
```
**前端调用**: `TaijiAPIClient.applyForPlatformAgent(data)`
---
### 17. 申请模型供应商使用权限 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 模型供应商卡片 → "申请使用"按钮 |
| **接口路径** | `POST /api/channel/providers/apply` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| providerId | string | 是 | 供应商ID |
| requestedRpm | int | 否 | 申请的RPM配额 |
| requestedTpm | int | 否 | 申请的TPM配额 |
| reason | string | 是 | 申请理由 |
**请求示例**:
```json
{
"providerId": "provider_001",
"requestedRpm": 500,
"requestedTpm": 50000,
"reason": "需要使用OpenAI模型服务"
}
```
**响应示例**:
```json
{
"success": true,
"data": {
"applicationId": "app_002"
},
"message": "申请已提交,等待审批"
}
```
**前端调用**: `TaijiAPIClient.applyForProvider(data)`
---
## 计费模块
### 18. 租户计费统计 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **展示位置** | "计费"标签页 → "租户计费统计"区域 |
| **接口路径** | `GET /api/channel/billing/stats` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**查询参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| startTime | string | 是 | 开始时间(ISO 8601格式) |
| endTime | string | 是 | 结束时间(ISO 8601格式) |
| tenantName | string | 否 | 租户名称筛选 |
| minCalls | int | 否 | 最小调用次数 |
| maxCalls | int | 否 | 最大调用次数 |
| export | string | 否 | 导出格式:excel/csv/pdf |
**请求示例**:
```
GET /api/channel/billing/stats?startTime=2026-01-01T00:00:00Z&endTime=2026-01-31T23:59:59Z
```
**响应示例**:
```json
{
"success": true,
"data": {
"tenantStats": [
{
"tenantId": "tenant_001",
"tenantName": "企业A",
"calls": 1500,
"totalEU": 150.5,
"totalCost": 450.00
}
],
"callRecords": [
{
"timestamp": "2026-01-15T10:30:00Z",
"tenantName": "企业A",
"agentType": "gpt-assistant",
"duration": 120,
"eu": 12.0,
"price": 36.00
}
]
}
}
```
**前端调用**: `TaijiAPIClient.getChannelBillingStats(params)`
**默认范围**: 最近30天
---
### 19. 时间范围查询 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | "计费"标签页 → "时间查询"按钮 |
| **接口路径** | `GET /api/channel/billing/stats` |
| **说明** | 通过 `startTime` 和 `endTime` 参数实现 |
---
### 20. 筛选功能 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | "计费"标签页 → "筛选"按钮 |
| **接口路径** | `GET /api/channel/billing/stats` |
| **说明** | 通过查询参数实现筛选 |
**筛选条件**:
- 客户名称(tenantName)
- 最小调用次数(minCalls)
- 最大调用次数(maxCalls)
---
### 21. 数据导出 ⚠️ 部分对接
| 属性 | 值 |
|------|-----|
| **触发位置** | "计费"标签页 → "导出"按钮 |
| **接口路径** | `GET /api/channel/billing/stats` |
| **说明** | 通过 `export` 参数实现 |
**支持格式**:
- Excel (.xlsx)
- CSV (.csv)
- PDF (.pdf)
**待完善**: 后端需要支持生成并返回文件下载链接或文件流
---
## 设置模块
### 22. 管理员列表 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **展示位置** | "设置"标签页 → "当前管理员列表"区域 |
| **接口路径** | `GET /api/channel/admins` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**响应示例**:
```json
{
"success": true,
"data": {
"admins": [
{
"id": "admin_001",
"name": "张三",
"email": "zhangsan@example.com",
"role": "channel_admin",
"status": "active"
},
{
"id": "admin_002",
"name": "李四",
"email": "lisi@example.com",
"role": "billing_admin",
"status": "active"
}
]
}
}
```
**前端调用**: `TaijiAPIClient.getChannelAdmins()`
---
### 23. 创建管理员 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | "设置"标签页 → "添加管理员"按钮 |
| **接口路径** | `POST /api/channel/admins/create` |
| **后端文件** | `services/mcp-server/app/routes/channel.py` |
| **权限要求** | channel_admin |
**请求参数**:
| 参数 | 类型 | 必填 | 说明 |
|------|------|------|------|
| name | string | 是 | 管理员姓名 |
| email | string | 是 | 登录邮箱 |
| password | string | 是 | 登录密码 |
| role | string | 是 | 角色:billing_admin/operations_admin |
**请求示例**:
```json
{
"name": "王五",
"email": "wangwu@example.com",
"password": "SecurePass123",
"role": "billing_admin"
}
```
**响应示例**:
```json
{
"success": true,
"data": {
"admin": {
"id": "admin_003",
"name": "王五",
"email": "wangwu@example.com",
"role": "billing_admin"
}
}
}
```
**前端调用**: `TaijiAPIClient.createChannelAdmin(data)`
---
### 24. 删除管理员 ✅ 已对接
| 属性 | 值 |
|------|-----|
| **触发位置** | 管理员列表 → 删除按钮 |
| **接口路径** | `DELETE /api/admin/admins/{adminId}` |
| **后端文件** | `services/mcp-server/app/routes/admin.py` |
| **权限要求** | super_admin |
**路径参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| adminId | string | 管理员ID |
**响应示例**:
```json
{
"success": true,
"message": "管理员删除成功"
}
```
**前端调用**: `TaijiAPIClient.deleteAdmin(adminId)`
**注意**: 此接口使用的是 `/api/admin/admins/{adminId}` 路径,需要 super_admin 权限。前端需求文档中标注为已对接,但实际上渠道管理员可能无法直接调用此接口,需要确认权限配置。
---
### 25. 配置角色权限 ❌ 待开发
| 属性 | 值 |
|------|-----|
| **触发位置** | "设置"标签页 → 角色卡片 → "配置权限"按钮 |
| **建议接口** | `PUT /api/channel/roles/{roleId}/permissions` |
| **状态** | 后端接口不存在 |
**功能描述**: 设置不同角色可访问的功能模块
**可配置模块**:
- 概览(overview)
- 租户管理(tenants)
- 资源管理(resources)
- 计费(billing)
- 设置(settings)
**默认角色权限**:
| 角色 | 默认权限 |
|------|----------|
| 计费管理员 | overview, tenants, billing |
| 运营管理员 | overview, tenants, resources |
**当前实现**: 权限配置仅在前端状态管理
**建议请求参数**:
| 参数 | 类型 | 说明 |
|------|------|------|
| permissions | array | 权限列表(如 ["overview", "tenants", "billing"]) |
**建议请求示例**:
```json
{
"permissions": ["overview", "tenants", "billing"]
}
```
---
## 接口汇总表
### 认证相关接口
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|------|------|------|------|------|------|
| 1 | 登录 | POST | `/api/auth/login` | ✅ 已对接 | 用户登录 |
| 2 | 登出 | POST | `/api/auth/logout` | ✅ 已对接 | 用户登出 |
### 仪表板相关接口
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|------|------|------|------|------|------|
| 3 | 渠道统计 | GET | `/api/channel/tenants` | ⚠️ 部分对接 | 当前从租户列表计算,建议新增聚合接口 |
| 4 | 平台Agent概览 | GET | `/api/channel/available-platform-agents` | ✅ 已对接 | 可用Agent模板 |
### 租户管理相关接口
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|------|------|------|------|------|------|
| 5 | 获取租户列表 | GET | `/api/channel/tenants` | ✅ 已对接 | 获取渠道下所有租户 |
| 6 | 创建租户 | POST | `/api/channel/tenants/create` | ✅ 已对接 | 创建新租户 |
| 7 | 删除租户 | DELETE | `/api/channel/tenants/{tenantId}` | ✅ 已对接 | 删除租户 |
| 8 | 分配资源 | PUT | `/api/channel/tenants/{tenantId}/resources` | ✅ 已对接 | 分配Agent和模型资源 |
| 9 | 充值 | POST | `/api/channel/tenants/{tenantId}/recharge` | ✅ 已对接 | 为租户充值 |
| 10 | 设置授信 | PUT | `/api/channel/tenants/{tenantId}/credit` | ✅ 已对接 | 设置授信额度 |
| 11 | 更新计费 | PUT | `/api/channel/tenants/{tenantId}/billing` | ✅ 已对接 | 更新计费设置 |
| 12 | 更新状态 | PUT | `/api/channel/tenants/{tenantId}/status` | ✅ 已对接 | 更新租户状态 |
| 13 | 更新权限 | PUT | `/api/channel/tenants/{tenantId}/permissions` | ✅ 已对接 | 更新租户权限 |
### 资源管理相关接口
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|------|------|------|------|------|------|
| 14 | 获取平台Agent | GET | `/api/channel/available-platform-agents` | ✅ 已对接 | 获取可用Agent模板 |
| 15 | 获取供应商列表 | GET | `/api/channel/providers` | ✅ 已对接 | 获取可用模型供应商 |
| 16 | 申请Agent配额 | POST | `/api/channel/applications/platform-agents` | ✅ 已对接 | 申请Agent配额 |
| 17 | 申请供应商 | POST | `/api/channel/providers/apply` | ✅ 已对接 | 申请使用供应商 |
### 计费统计相关接口
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|------|------|------|------|------|------|
| 18 | 获取计费统计 | GET | `/api/channel/billing/stats` | ✅ 已对接 | 获取租户计费统计 |
| 19 | 时间范围查询 | GET | `/api/channel/billing/stats` | ✅ 已对接 | 通过参数实现 |
| 20 | 筛选功能 | GET | `/api/channel/billing/stats` | ✅ 已对接 | 通过参数实现 |
| 21 | 数据导出 | GET | `/api/channel/billing/stats` | ⚠️ 部分对接 | 需要后端支持文件生成 |
### 管理员管理相关接口
| 序号 | 接口 | 方法 | 路径 | 状态 | 说明 |
|------|------|------|------|------|------|
| 22 | 获取管理员列表 | GET | `/api/channel/admins` | ✅ 已对接 | 获取渠道管理员 |
| 23 | 创建管理员 | POST | `/api/channel/admins/create` | ✅ 已对接 | 创建管理员 |
| 24 | 删除管理员 | DELETE | `/api/admin/admins/{adminId}` | ✅ 已对接 | 删除管理员(需super_admin权限) |
| 25 | 配置角色权限 | PUT | `/api/channel/roles/{roleId}/permissions` | ❌ 待开发 | 配置角色权限 |
---
## 待完善功能清单
### 高优先级
| 序号 | 需求 | 说明 | 建议接口 |
|------|------|------|----------|
| 1 | 渠道仪表板统计 | 需要专门的聚合接口返回月度收入、佣金等统计数据 | `GET /api/channel/dashboard/stats` |
| 2 | 数据导出功能 | 计费数据导出需要后端支持生成Excel/CSV/PDF文件 | 修改 `/api/channel/billing/stats` 支持文件流返回 |
### 中优先级
| 序号 | 需求 | 说明 | 建议接口 |
|------|------|------|----------|
| 3 | 角色权限配置 | 当前权限配置仅在前端状态管理,需要后端接口持久化 | `PUT /api/channel/roles/{roleId}/permissions` |
| 4 | 权限验证 | 后端需要根据角色权限控制API访问 | 中间件实现 |
### 低优先级
| 序号 | 需求 | 说明 | 建议接口 |
|------|------|------|----------|
| 5 | 删除管理员权限调整 | 当前使用admin接口,建议增加channel专用接口 | `DELETE /api/channel/admins/{adminId}` |
---
## 后端接口与前端需求对照表
以下是后端 [`channel.py`](services/mcp-server/app/routes/channel.py) 中已实现的所有接口与前端需求的对照:
| 后端接口 | 前端是否使用 | 说明 |
|----------|--------------|------|
| `GET /api/channel/tenants` | ✅ 使用 | 租户列表 |
| `POST /api/channel/tenants/create` | ✅ 使用 | 创建租户 |
| `PUT /api/channel/tenants/{tenant_id}/resources` | ✅ 使用 | 分配资源 |
| `PUT /api/channel/tenants/{tenant_id}/billing` | ✅ 使用 | 管理计费 |
| `POST /api/channel/tenants/{tenant_id}/recharge` | ✅ 使用 | 租户充值 |
| `PUT /api/channel/tenants/{tenant_id}/credit` | ✅ 使用 | 设置授信 |
| `DELETE /api/channel/tenants/{tenant_id}` | ✅ 使用 | 删除租户 |
| `PUT /api/channel/tenants/{tenant_id}/status` | ✅ 使用 | 更新状态 |
| `PUT /api/channel/tenants/{tenant_id}/permissions` | ✅ 使用 | 更新权限 |
| `PUT /api/channel/tenants/{tenant_id}/password` | ❓ 未明确 | 重置密码(前端需求未提及) |
| `GET /api/channel/tenants/{tenant_id}/custom-agent-quota` | ❓ 未明确 | 获取自定义Agent配额 |
| `POST /api/channel/admins/create` | ✅ 使用 | 创建管理员 |
| `GET /api/channel/admins` | ✅ 使用 | 管理员列表 |
| `POST /api/channel/resources/apply` | ❓ 未明确 | 申请资源(前端可能使用其他接口) |
| `GET /api/channel/billing/stats` | ✅ 使用 | 计费统计 |
| `GET /api/channel/providers` | ✅ 使用 | 供应商列表 |
| `POST /api/channel/providers/apply` | ✅ 使用 | 申请供应商 |
| `GET /api/channel/providers/applications` | ✅ 使用 | 供应商申请列表 |
| `GET /api/channel/providers/access` | ❓ 未明确 | 已授权供应商列表 |
| `GET /api/channel/available-platform-agents` | ✅ 使用 | 平台Agent模板 |
| `POST /api/channel/applications/platform-agents` | ✅ 使用 | 申请Agent配额 |
| `GET /api/channel/applications/platform-agents` | ✅ 使用 | Agent申请列表 |
| `GET /api/channel/platform-agents` | ❓ 未明确 | 渠道Agent配额 |
| `POST /api/channel/tenants/{tenant_id}/platform-agents` | ❓ 未明确 | 分配Agent给租户 |
| `GET /api/channel/tenants/{tenant_id}/platform-agents/usage` | ❓ 未明确 | 租户Agent使用情况 |
| `GET /api/channel/agent-billing/stats` | ❓ 未明确 | Agent计费统计 |
| `GET /api/channel/agent-billing/history` | ❓ 未明确 | Agent计费历史 |
| `GET /api/channel/agent-billing/tenant-summary` | ❓ 未明确 | 租户Agent计费汇总 |
---
## 数据模型参考
### 租户数据结构
```typescript
interface Tenant {
id: string
name: string
email: string
status: "active" | "suspended" | "inactive"
plan: "enterprise" | "professional" | "starter" | "free"
users: number
revenue: string // 如 "$3,200"
balance?: string
creditLimit?: string
createdAt?: string
}
```
### Agent资源数据结构
```typescript
interface AgentResource {
id: string
name: string
displayName?: string
description?: string
status: "available" | "unavailable" | "Running" | "Pending"
hasAccess: boolean
pendingApplication?: boolean
cpuRequest?: string // K8s格式,如 "100m"
cpuLimit?: string // K8s格式,如 "500m"
memoryRequest?: string // K8s格式,如 "128Mi"
memoryLimit?: string // K8s格式,如 "512Mi"
podQuota?: number
podUsed?: number
podRemaining?: number
}
```
### 模型供应商数据结构
```typescript
interface ModelProvider {
id: string
name: string
provider?: string // openai, anthropic等
type?: string
hasAccess: boolean
pendingApplication?: boolean
supportedModels?: string[]
rpm: number
tpm: number
}
```
### 计费统计数据结构
```typescript
interface BillingStats {
tenantStats: Array<{
tenantId: string
tenantName: string
calls: number
totalEU: number
totalCost: number
}>
callRecords: Array<{
timestamp: string
tenantName: string
agentType: string
duration: number // 秒
eu: number
price: number
}>
}
```
### 管理员数据结构
```typescript
interface ChannelAdmin {
id: string
name: string
email: string
role: "channel_admin" | "billing_admin" | "operations_admin"
status?: "active" | "inactive"
}
```
---
## 错误码说明
| 错误码 | HTTP状态码 | 说明 |
|--------|------------|------|
| AUTH_FAILED | 401 | 认证失败 |
| TOKEN_EXPIRED | 401 | Token已过期 |
| PERMISSION_DENIED | 403 | 权限不足 |
| NOT_FOUND | 404 | 资源不存在 |
| VALIDATION_ERROR | 400 | 参数验证失败 |
| QUOTA_EXCEEDED | 400 | 配额超限 |
| DUPLICATE_ENTRY | 409 | 重复数据 |
| INTERNAL_ERROR | 500 | 服务器内部错误 |
---
## 前端源文件参考
| 文件路径 | 说明 |
|----------|------|
| `app/channel/dashboard/page.tsx` | 渠道仪表板主页面 |
| `app/channel/login/page.tsx` | 渠道登录页面 |
| `app/channel/layout.tsx` | 渠道布局组件 |
| `lib/api-client.ts` | API客户端封装 |
---
## 后端源文件参考
| 文件路径 | 说明 |
|----------|------|
| [`services/mcp-server/app/routes/auth.py`](services/mcp-server/app/routes/auth.py) | 认证模块 |
| [`services/mcp-server/app/routes/channel.py`](services/mcp-server/app/routes/channel.py) | 渠道合作伙伴API |
| [`services/mcp-server/app/routes/platform_agent_quota.py`](services/mcp-server/app/routes/platform_agent_quota.py) | 平台Agent配额管理 |
| [`services/mcp-server/app/routes/admin.py`](services/mcp-server/app/routes/admin.py) | 超级管理员API |
---
*文档生成时间: 2026-01-06*
*基于前端需求清单 v1.2.0 与后端API清单核实*