720 lines
16 KiB
Markdown
720 lines
16 KiB
Markdown
![]() |
# Brands 模块 API 文档
|
|||
|
|
|||
|
本文档详细说明了 Brands 模块的 API 接口,包括请求方法、URL、参数说明和响应格式。
|
|||
|
|
|||
|
## 目录
|
|||
|
|
|||
|
1. [通用说明](#通用说明)
|
|||
|
2. [品牌相关接口](#品牌相关接口)
|
|||
|
3. [产品相关接口](#产品相关接口)
|
|||
|
4. [活动相关接口](#活动相关接口)
|
|||
|
5. [WebSocket 接口](#websocket-接口)
|
|||
|
6. [状态轮询管理](#状态轮询管理)
|
|||
|
|
|||
|
## 通用说明
|
|||
|
|
|||
|
### 基础URL
|
|||
|
|
|||
|
所有 API 的基础 URL 为:`http://127.0.0.1:8000/api/`
|
|||
|
|
|||
|
### 认证方式
|
|||
|
|
|||
|
除特殊说明外,所有 API 都需要 Token 认证。请在请求头中添加:
|
|||
|
|
|||
|
```
|
|||
|
Authorization: Token <your_token>
|
|||
|
```
|
|||
|
|
|||
|
### 响应格式
|
|||
|
|
|||
|
所有 API 返回的数据格式统一为:
|
|||
|
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200, // 状态码,200表示成功,其他表示错误
|
|||
|
"message": "成功", // 状态描述
|
|||
|
"data": {} // 返回的数据,可能是对象、数组或null
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## 品牌相关接口
|
|||
|
|
|||
|
### 获取品牌列表
|
|||
|
|
|||
|
- **URL**: `/brands/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取所有品牌的列表
|
|||
|
- **参数**: 无
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"id": "uuid-string",
|
|||
|
"name": "品牌名称",
|
|||
|
"description": "品牌描述",
|
|||
|
"logo_url": "品牌Logo链接",
|
|||
|
"category": "品牌分类",
|
|||
|
"source": "来源",
|
|||
|
"collab_count": 10,
|
|||
|
"creators_count": 20,
|
|||
|
"campaign_id": "活动ID",
|
|||
|
"total_gmv_achieved": "1000.00",
|
|||
|
"total_views_achieved": "5000.00",
|
|||
|
"shop_overall_rating": "4.5",
|
|||
|
"dataset_id_list": ["id1", "id2"],
|
|||
|
"created_at": "2023-01-01T00:00:00Z",
|
|||
|
"updated_at": "2023-01-01T00:00:00Z",
|
|||
|
"is_active": true
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取单个品牌详情
|
|||
|
|
|||
|
- **URL**: `/brands/{brand_id}/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取指定ID的品牌详细信息
|
|||
|
- **参数**:
|
|||
|
- `brand_id`: 品牌ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
"id": "uuid-string",
|
|||
|
"name": "品牌名称",
|
|||
|
"description": "品牌描述",
|
|||
|
"logo_url": "品牌Logo链接",
|
|||
|
"category": "品牌分类",
|
|||
|
"source": "来源",
|
|||
|
"collab_count": 10,
|
|||
|
"creators_count": 20,
|
|||
|
"campaign_id": "活动ID",
|
|||
|
"total_gmv_achieved": "1000.00",
|
|||
|
"total_views_achieved": "5000.00",
|
|||
|
"shop_overall_rating": "4.5",
|
|||
|
"dataset_id_list": ["id1", "id2"],
|
|||
|
"created_at": "2023-01-01T00:00:00Z",
|
|||
|
"updated_at": "2023-01-01T00:00:00Z",
|
|||
|
"is_active": true,
|
|||
|
"products": [...], // 品牌关联的产品列表
|
|||
|
"campaigns": [...] // 品牌关联的活动列表
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 创建品牌
|
|||
|
|
|||
|
- **URL**: `/brands/`
|
|||
|
- **方法**: POST
|
|||
|
- **描述**: 创建新的品牌
|
|||
|
- **请求参数**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"name": "品牌名称", // 必填
|
|||
|
"description": "品牌描述",
|
|||
|
"logo_url": "品牌Logo链接",
|
|||
|
"category": "品牌分类",
|
|||
|
"source": "来源"
|
|||
|
}
|
|||
|
```
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
"id": "uuid-string",
|
|||
|
"name": "品牌名称",
|
|||
|
"description": "品牌描述",
|
|||
|
// ... 其他字段
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 更新品牌
|
|||
|
|
|||
|
- **URL**: `/brands/{brand_id}/`
|
|||
|
- **方法**: PUT/PATCH
|
|||
|
- **描述**: 更新品牌信息
|
|||
|
- **参数**:
|
|||
|
- `brand_id`: 品牌ID (路径参数)
|
|||
|
- 请求体包含要更新的字段
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
// 更新后的品牌信息
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 删除品牌
|
|||
|
|
|||
|
- **URL**: `/brands/{brand_id}/`
|
|||
|
- **方法**: DELETE
|
|||
|
- **描述**: 删除品牌(软删除)
|
|||
|
- **参数**:
|
|||
|
- `brand_id`: 品牌ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "删除成功",
|
|||
|
"data": null
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取品牌产品列表
|
|||
|
|
|||
|
- **URL**: `/brands/{brand_id}/products/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取指定品牌下的所有产品
|
|||
|
- **参数**:
|
|||
|
- `brand_id`: 品牌ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": [
|
|||
|
// 产品列表
|
|||
|
]
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取品牌活动列表
|
|||
|
|
|||
|
- **URL**: `/brands/{brand_id}/campaigns/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取指定品牌下的所有活动
|
|||
|
- **参数**:
|
|||
|
- `brand_id`: 品牌ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": [
|
|||
|
// 活动列表
|
|||
|
]
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取品牌知识库ID列表
|
|||
|
|
|||
|
- **URL**: `/brands/{brand_id}/dataset_ids/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取指定品牌的所有知识库ID
|
|||
|
- **参数**:
|
|||
|
- `brand_id`: 品牌ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
"dataset_id_list": ["id1", "id2", "id3"]
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## 产品相关接口
|
|||
|
|
|||
|
### 获取产品列表
|
|||
|
|
|||
|
- **URL**: `/products/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取所有产品列表
|
|||
|
- **参数**: 无
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"id": "uuid-string",
|
|||
|
"brand": "品牌ID",
|
|||
|
"name": "产品名称",
|
|||
|
"description": "产品描述",
|
|||
|
"image_url": "产品图片",
|
|||
|
"pid": "产品ID",
|
|||
|
"commission_rate": "10.00",
|
|||
|
"open_collab": "5.00",
|
|||
|
"available_samples": 10,
|
|||
|
"sales_price_min": "50.00",
|
|||
|
"sales_price_max": "100.00",
|
|||
|
"stock": 100,
|
|||
|
"items_sold": 50,
|
|||
|
"product_rating": "4.5",
|
|||
|
"reviews_count": 20,
|
|||
|
"collab_creators": 5,
|
|||
|
"tiktok_shop": false,
|
|||
|
"dataset_id": "知识库ID",
|
|||
|
"external_id": "外部ID",
|
|||
|
"created_at": "2023-01-01T00:00:00Z",
|
|||
|
"updated_at": "2023-01-01T00:00:00Z",
|
|||
|
"is_active": true
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取单个产品详情
|
|||
|
|
|||
|
- **URL**: `/products/{product_id}/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取指定ID的产品详情
|
|||
|
- **参数**:
|
|||
|
- `product_id`: 产品ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
// 产品详情
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 创建产品
|
|||
|
|
|||
|
- **URL**: `/products/`
|
|||
|
- **方法**: POST
|
|||
|
- **描述**: 创建新的产品
|
|||
|
- **请求参数**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"brand": "品牌ID", // 必填
|
|||
|
"name": "产品名称", // 必填
|
|||
|
"description": "产品描述",
|
|||
|
"image_url": "产品图片",
|
|||
|
"pid": "产品ID",
|
|||
|
"commission_rate": 10.00,
|
|||
|
"dataset_id": "知识库ID" // 必填
|
|||
|
// ... 其他字段
|
|||
|
}
|
|||
|
```
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
// 创建的产品信息
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 更新产品
|
|||
|
|
|||
|
- **URL**: `/products/{product_id}/`
|
|||
|
- **方法**: PUT/PATCH
|
|||
|
- **描述**: 更新产品信息
|
|||
|
- **参数**:
|
|||
|
- `product_id`: 产品ID (路径参数)
|
|||
|
- 请求体包含要更新的字段
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
// 更新后的产品信息
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 删除产品
|
|||
|
|
|||
|
- **URL**: `/products/{product_id}/`
|
|||
|
- **方法**: DELETE
|
|||
|
- **描述**: 删除产品(软删除)
|
|||
|
- **参数**:
|
|||
|
- `product_id`: 产品ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "删除成功",
|
|||
|
"data": null
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## 活动相关接口
|
|||
|
|
|||
|
### 获取活动列表
|
|||
|
|
|||
|
- **URL**: `/campaigns/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取所有活动列表
|
|||
|
- **参数**: 无
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": [
|
|||
|
{
|
|||
|
"id": "活动ID",
|
|||
|
"brand": "品牌ID",
|
|||
|
"name": "活动名称",
|
|||
|
"description": "活动描述",
|
|||
|
"image_url": "活动图片",
|
|||
|
"service": "服务类型",
|
|||
|
"creator_type": "创作者类型",
|
|||
|
"creator_level": "创作者等级",
|
|||
|
"creator_category": "创作者分类",
|
|||
|
"creators_count": 10,
|
|||
|
"gmv": "GMV范围",
|
|||
|
"followers": "粉丝数范围",
|
|||
|
"views": "浏览量范围",
|
|||
|
"budget": "预算范围",
|
|||
|
"link_product": ["产品ID1", "产品ID2"],
|
|||
|
"start_date": "2023-01-01T00:00:00Z",
|
|||
|
"end_date": "2023-02-01T00:00:00Z",
|
|||
|
"dataset_id": "知识库ID",
|
|||
|
"external_id": "外部ID",
|
|||
|
"status": "待处理", // pending, accepted, rejected, completed, in_progress
|
|||
|
"gmv_achieved": "实现GMV",
|
|||
|
"views_achieved": "实现观看量",
|
|||
|
"video_link": "视频链接",
|
|||
|
"created_at": "2023-01-01T00:00:00Z",
|
|||
|
"updated_at": "2023-01-01T00:00:00Z",
|
|||
|
"is_active": true
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取单个活动详情
|
|||
|
|
|||
|
- **URL**: `/campaigns/{campaign_id}/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取指定ID的活动详情
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
// 活动详情
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 创建活动
|
|||
|
|
|||
|
- **URL**: `/campaigns/`
|
|||
|
- **方法**: POST
|
|||
|
- **描述**: 创建新的活动
|
|||
|
- **请求参数**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"brand": "品牌ID", // 必填
|
|||
|
"name": "活动名称", // 必填
|
|||
|
"description": "活动描述",
|
|||
|
"image_url": "活动图片",
|
|||
|
"service": "服务类型",
|
|||
|
"creator_type": "创作者类型",
|
|||
|
"dataset_id": "知识库ID", // 必填
|
|||
|
// ... 其他字段
|
|||
|
}
|
|||
|
```
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
// 创建的活动信息
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 更新活动
|
|||
|
|
|||
|
- **URL**: `/campaigns/{campaign_id}/`
|
|||
|
- **方法**: PUT/PATCH
|
|||
|
- **描述**: 更新活动信息
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- 请求体包含要更新的字段
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
// 更新后的活动信息
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 删除活动
|
|||
|
|
|||
|
- **URL**: `/campaigns/{campaign_id}/`
|
|||
|
- **方法**: DELETE
|
|||
|
- **描述**: 删除活动(软删除)
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "删除成功",
|
|||
|
"data": null
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 向活动添加产品
|
|||
|
|
|||
|
- **URL**: `/campaigns/{campaign_id}/add_product/`
|
|||
|
- **方法**: POST
|
|||
|
- **描述**: 将产品添加到活动中
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- 请求体:
|
|||
|
```json
|
|||
|
{
|
|||
|
"product_id": "产品ID"
|
|||
|
}
|
|||
|
```
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "产品添加成功",
|
|||
|
"data": null
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 从活动移除产品
|
|||
|
|
|||
|
- **URL**: `/campaigns/{campaign_id}/remove_product/`
|
|||
|
- **方法**: POST
|
|||
|
- **描述**: 从活动中移除产品
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- 请求体:
|
|||
|
```json
|
|||
|
{
|
|||
|
"product_id": "产品ID"
|
|||
|
}
|
|||
|
```
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "产品移除成功",
|
|||
|
"data": null
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取活动创作者列表
|
|||
|
|
|||
|
- **URL**: `/campaigns/{campaign_id}/creator_list/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取指定活动的创作者列表
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
"campaign": {
|
|||
|
"id": "活动ID",
|
|||
|
"name": "活动名称",
|
|||
|
"description": "活动描述",
|
|||
|
"image_url": "活动图片",
|
|||
|
"service": "服务类型",
|
|||
|
"creator_type": "创作者类型",
|
|||
|
"creator_level": "创作者等级",
|
|||
|
"creator_category": "创作者分类",
|
|||
|
"creators_count": 10,
|
|||
|
"gmv": "GMV范围",
|
|||
|
"followers": "粉丝数范围",
|
|||
|
"views": "浏览量范围",
|
|||
|
"budget": "预算范围",
|
|||
|
"start_date": "2023-01-01T00:00:00Z",
|
|||
|
"end_date": "2023-02-01T00:00:00Z",
|
|||
|
"status": "状态"
|
|||
|
},
|
|||
|
"creators": [
|
|||
|
{
|
|||
|
"id": "创作者ID",
|
|||
|
"name": "创作者名称",
|
|||
|
"category": "创作者分类",
|
|||
|
"followers": 5000,
|
|||
|
"gmv_generated": "1000.00",
|
|||
|
"views_generated": "5000",
|
|||
|
"pricing": "100.00",
|
|||
|
"status": "状态"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取WebSocket连接URL
|
|||
|
|
|||
|
- **URL**: `/campaigns/{campaign_id}/websocket_url/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取带有认证Token的WebSocket连接URL
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- 查询参数:
|
|||
|
- `product_id`: 可选,用于获取特定产品的WebSocket连接
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
"websocket_url": "ws://127.0.0.1:8000/ws/campaigns/12345/status/?token=abc123"
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取当前Token信息
|
|||
|
|
|||
|
- **URL**: `/campaigns/token_info/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取当前用户的认证Token信息和WebSocket连接示例
|
|||
|
- **参数**: 无
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
"user_id": "用户ID",
|
|||
|
"email": "用户邮箱",
|
|||
|
"token": "认证Token",
|
|||
|
"expires_at": "过期时间",
|
|||
|
"websocket_example": {
|
|||
|
"campaign": "ws://127.0.0.1:8000/ws/campaigns/campaign_id/status/?token=abc123",
|
|||
|
"product": "ws://127.0.0.1:8000/ws/campaigns/campaign_id/status/?product_id=product_id&token=abc123"
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
## WebSocket 接口
|
|||
|
|
|||
|
### 建立活动状态WebSocket连接
|
|||
|
|
|||
|
- **URL**: `ws://127.0.0.1:8000/ws/campaigns/{campaign_id}/status/?token={token}`
|
|||
|
- **描述**: 建立WebSocket连接,获取活动状态的实时更新
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- 查询参数:
|
|||
|
- `token`: 用户认证Token (必填)
|
|||
|
- `product_id`: 可选,用于获取特定产品的状态
|
|||
|
- **连接成功后接收的数据格式**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"campaign": {
|
|||
|
// 活动信息
|
|||
|
},
|
|||
|
"creators": [
|
|||
|
// 创作者列表
|
|||
|
]
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### WebSocket连接JavaScript示例
|
|||
|
|
|||
|
```javascript
|
|||
|
// 获取WebSocket URL
|
|||
|
const response = await fetch(`http://127.0.0.1:8000/api/campaigns/${campaignId}/websocket_url/`);
|
|||
|
const data = await response.json();
|
|||
|
const wsUrl = data.data.websocket_url;
|
|||
|
|
|||
|
// 建立WebSocket连接
|
|||
|
const socket = new WebSocket(wsUrl);
|
|||
|
|
|||
|
// 连接打开事件
|
|||
|
socket.onopen = function(e) {
|
|||
|
console.log("WebSocket连接已建立");
|
|||
|
};
|
|||
|
|
|||
|
// 接收消息事件
|
|||
|
socket.onmessage = function(event) {
|
|||
|
const data = JSON.parse(event.data);
|
|||
|
console.log("接收到的数据:", data);
|
|||
|
// 处理接收到的数据
|
|||
|
};
|
|||
|
|
|||
|
// 错误事件
|
|||
|
socket.onerror = function(error) {
|
|||
|
console.error("WebSocket错误:", error);
|
|||
|
};
|
|||
|
|
|||
|
// 连接关闭事件
|
|||
|
socket.onclose = function(event) {
|
|||
|
console.log("WebSocket连接已关闭");
|
|||
|
};
|
|||
|
```
|
|||
|
|
|||
|
## 状态轮询管理
|
|||
|
|
|||
|
### 停止轮询
|
|||
|
|
|||
|
- **URL**: `/campaigns/{campaign_id}/stop_polling/`
|
|||
|
- **方法**: POST
|
|||
|
- **描述**: 停止指定活动的状态轮询
|
|||
|
- **参数**:
|
|||
|
- `campaign_id`: 活动ID (路径参数)
|
|||
|
- 请求体:
|
|||
|
```json
|
|||
|
{
|
|||
|
"product_id": "产品ID" // 可选,不提供则停止整个活动的轮询
|
|||
|
}
|
|||
|
```
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "轮询已停止",
|
|||
|
"data": null
|
|||
|
}
|
|||
|
```
|
|||
|
|
|||
|
### 获取活跃轮询任务
|
|||
|
|
|||
|
- **URL**: `/campaigns/active_polling_tasks/`
|
|||
|
- **方法**: GET
|
|||
|
- **描述**: 获取当前系统中所有活跃的轮询任务
|
|||
|
- **参数**: 无
|
|||
|
- **响应示例**:
|
|||
|
```json
|
|||
|
{
|
|||
|
"code": 200,
|
|||
|
"message": "成功",
|
|||
|
"data": {
|
|||
|
"active_tasks": [
|
|||
|
{
|
|||
|
"campaign_id": "活动ID",
|
|||
|
"product_id": "产品ID", // 如果存在
|
|||
|
"interval": 30, // 轮询间隔,单位为秒
|
|||
|
"last_poll": "2023-01-01T00:00:00Z"
|
|||
|
}
|
|||
|
]
|
|||
|
}
|
|||
|
}
|
|||
|
```
|