752 lines
15 KiB
Markdown
752 lines
15 KiB
Markdown
# 设备交互模块 API 文档
|
||
|
||
本文档详细说明设备交互模块的 API 接口。所有接口基于 RESTful 设计原则。
|
||
|
||
## 接口基础信息
|
||
|
||
- **基础路径**: `/api/device/`
|
||
- **认证方式**: Token 认证(除特别说明外)
|
||
- **返回格式**: JSON
|
||
|
||
## 1. 设备类型管理
|
||
|
||
### 1.1 获取设备类型列表
|
||
|
||
获取所有设备类型的列表。
|
||
|
||
- **URL**: `/api/device/device-types/`
|
||
- **方法**: `GET`
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
[
|
||
{
|
||
"id": 1,
|
||
"name": "智能音箱",
|
||
"code": "SP01",
|
||
"description": "AI智能音箱设备",
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
]
|
||
```
|
||
|
||
### 1.2 创建设备类型
|
||
|
||
创建新的设备类型。
|
||
|
||
- **URL**: `/api/device/device-types/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"name": "智能音箱",
|
||
"code": "SP01",
|
||
"description": "AI智能音箱设备"
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"name": "智能音箱",
|
||
"code": "SP01",
|
||
"description": "AI智能音箱设备",
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 1.3 获取设备类型详情
|
||
|
||
根据ID获取设备类型详情。
|
||
|
||
- **URL**: `/api/device/device-types/{id}/`
|
||
- **方法**: `GET`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备类型ID
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"name": "智能音箱",
|
||
"code": "SP01",
|
||
"description": "AI智能音箱设备",
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 1.4 更新设备类型
|
||
|
||
更新现有设备类型。
|
||
|
||
- **URL**: `/api/device/device-types/{id}/`
|
||
- **方法**: `PUT`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备类型ID
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"name": "智能音箱",
|
||
"code": "SP01",
|
||
"description": "更新后的描述"
|
||
}
|
||
```
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"name": "智能音箱",
|
||
"code": "SP01",
|
||
"description": "更新后的描述",
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-02T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 1.5 删除设备类型
|
||
|
||
删除现有设备类型。
|
||
|
||
- **URL**: `/api/device/device-types/{id}/`
|
||
- **方法**: `DELETE`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备类型ID
|
||
- **认证**: 需要
|
||
- **响应**: 204 No Content
|
||
|
||
## 2. 设备批次管理
|
||
|
||
### 2.1 获取设备批次列表
|
||
|
||
获取所有设备批次的列表。
|
||
|
||
- **URL**: `/api/device/device-batches/`
|
||
- **方法**: `GET`
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
[
|
||
{
|
||
"id": 1,
|
||
"device_type": 1,
|
||
"device_type_name": "智能音箱",
|
||
"batch_number": "BSP0101",
|
||
"production_date": "2023-01-01",
|
||
"quantity": 500,
|
||
"description": "第一批智能音箱",
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
]
|
||
```
|
||
|
||
### 2.2 创建设备批次
|
||
|
||
创建新的设备批次。
|
||
|
||
- **URL**: `/api/device/device-batches/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"device_type": 1,
|
||
"batch_number": "BSP0101",
|
||
"production_date": "2023-01-01",
|
||
"quantity": 500,
|
||
"description": "第一批智能音箱"
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"device_type": 1,
|
||
"device_type_name": "智能音箱",
|
||
"batch_number": "BSP0101",
|
||
"production_date": "2023-01-01",
|
||
"quantity": 500,
|
||
"description": "第一批智能音箱",
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 2.3 获取设备批次详情
|
||
|
||
根据ID获取设备批次详情。
|
||
|
||
- **URL**: `/api/device/device-batches/{id}/`
|
||
- **方法**: `GET`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备批次ID
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"device_type": 1,
|
||
"device_type_name": "智能音箱",
|
||
"batch_number": "BSP0101",
|
||
"production_date": "2023-01-01",
|
||
"quantity": 500,
|
||
"description": "第一批智能音箱",
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 2.4 更新设备批次
|
||
|
||
更新现有设备批次。
|
||
|
||
- **URL**: `/api/device/device-batches/{id}/`
|
||
- **方法**: `PUT`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备批次ID
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"device_type": 1,
|
||
"batch_number": "BSP0101",
|
||
"production_date": "2023-01-01",
|
||
"quantity": 600,
|
||
"description": "更新后的描述"
|
||
}
|
||
```
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"device_type": 1,
|
||
"device_type_name": "智能音箱",
|
||
"batch_number": "BSP0101",
|
||
"production_date": "2023-01-01",
|
||
"quantity": 600,
|
||
"description": "更新后的描述",
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-02T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 2.5 删除设备批次
|
||
|
||
删除现有设备批次。
|
||
|
||
- **URL**: `/api/device/device-batches/{id}/`
|
||
- **方法**: `DELETE`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备批次ID
|
||
- **认证**: 需要
|
||
- **响应**: 204 No Content
|
||
|
||
## 3. 设备管理
|
||
|
||
### 3.1 获取设备列表
|
||
|
||
获取所有设备的列表。
|
||
|
||
- **URL**: `/api/device/devices/`
|
||
- **方法**: `GET`
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
[
|
||
{
|
||
"id": 1,
|
||
"device_type": 1,
|
||
"device_type_name": "智能音箱",
|
||
"batch": 1,
|
||
"batch_number": "BSP0101",
|
||
"serial_number": "00001",
|
||
"device_code": "SP0100001",
|
||
"mac_address": "00:11:22:33:44:55",
|
||
"is_active": false,
|
||
"activated_at": null,
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
]
|
||
```
|
||
|
||
### 3.2 创建单个设备
|
||
|
||
创建新的设备。
|
||
|
||
- **URL**: `/api/device/devices/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"device_type": 1,
|
||
"batch": 1,
|
||
"serial_number": "00001",
|
||
"mac_address": "00:11:22:33:44:55"
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"device_type": 1,
|
||
"device_type_name": "智能音箱",
|
||
"batch": 1,
|
||
"batch_number": "BSP0101",
|
||
"serial_number": "00001",
|
||
"device_code": "SP0100001",
|
||
"mac_address": "00:11:22:33:44:55",
|
||
"is_active": false,
|
||
"activated_at": null,
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 3.3 批量创建设备
|
||
|
||
批量创建指定数量的设备,自动生成序列号和MAC地址。
|
||
|
||
- **URL**: `/api/device/devices/batch_create/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"device_type": 1,
|
||
"batch": 1,
|
||
"start_serial": "00001",
|
||
"count": 100,
|
||
"mac_prefix": "00:11:22"
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "成功创建100个设备",
|
||
"data": [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ..., 100]
|
||
}
|
||
```
|
||
|
||
### 3.4 获取设备详情
|
||
|
||
根据ID获取设备详情。
|
||
|
||
- **URL**: `/api/device/devices/{id}/`
|
||
- **方法**: `GET`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备ID
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"device_type": 1,
|
||
"device_type_name": "智能音箱",
|
||
"batch": 1,
|
||
"batch_number": "BSP0101",
|
||
"serial_number": "00001",
|
||
"device_code": "SP0100001",
|
||
"mac_address": "00:11:22:33:44:55",
|
||
"is_active": false,
|
||
"activated_at": null,
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 3.5 更新设备
|
||
|
||
更新现有设备。
|
||
|
||
- **URL**: `/api/device/devices/{id}/`
|
||
- **方法**: `PUT`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备ID
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"device_type": 1,
|
||
"batch": 1,
|
||
"serial_number": "00001",
|
||
"mac_address": "00:11:22:33:44:55"
|
||
}
|
||
```
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"device_type": 1,
|
||
"device_type_name": "智能音箱",
|
||
"batch": 1,
|
||
"batch_number": "BSP0101",
|
||
"serial_number": "00001",
|
||
"device_code": "SP0100001",
|
||
"mac_address": "00:11:22:33:44:55",
|
||
"is_active": false,
|
||
"activated_at": null,
|
||
"created_at": "2023-01-01T00:00:00Z",
|
||
"updated_at": "2023-01-02T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 3.6 删除设备
|
||
|
||
删除现有设备。
|
||
|
||
- **URL**: `/api/device/devices/{id}/`
|
||
- **方法**: `DELETE`
|
||
- **参数**:
|
||
- `id` (路径参数): 设备ID
|
||
- **认证**: 需要
|
||
- **响应**: 204 No Content
|
||
|
||
## 4. 用户设备管理
|
||
|
||
### 4.1 获取用户设备列表
|
||
|
||
获取当前用户绑定的所有设备列表。
|
||
|
||
- **URL**: `/api/device/user-devices/`
|
||
- **方法**: `GET`
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
[
|
||
{
|
||
"id": 1,
|
||
"user": 1,
|
||
"device": 1,
|
||
"device_code": "SP0100001",
|
||
"device_type": "智能音箱",
|
||
"nickname": "我的设备",
|
||
"is_primary": true,
|
||
"bound_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
]
|
||
```
|
||
|
||
### 4.2 绑定设备
|
||
|
||
将设备绑定到当前用户。
|
||
|
||
- **URL**: `/api/device/user-devices/bind/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"mac_address": "00:11:22:33:44:55",
|
||
"nickname": "我的设备",
|
||
"is_primary": true
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"id": 1,
|
||
"user": 1,
|
||
"device": 1,
|
||
"device_code": "SP0100001",
|
||
"device_type": "智能音箱",
|
||
"nickname": "我的设备",
|
||
"is_primary": true,
|
||
"bound_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
```
|
||
|
||
### 4.3 设置主要设备
|
||
|
||
将某个绑定的设备设置为主要设备。
|
||
|
||
- **URL**: `/api/device/user-devices/{id}/set_primary/`
|
||
- **方法**: `POST`
|
||
- **参数**:
|
||
- `id` (路径参数): 用户设备关联ID
|
||
- **认证**: 需要
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "成功设置主要设备",
|
||
"data": {
|
||
"id": 1,
|
||
"user": 1,
|
||
"device": 1,
|
||
"device_code": "SP0100001",
|
||
"device_type": "智能音箱",
|
||
"nickname": "我的设备",
|
||
"is_primary": true,
|
||
"bound_at": "2023-01-01T00:00:00Z"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 4.4 解绑设备
|
||
|
||
解除用户与设备的绑定关系。
|
||
|
||
- **URL**: `/api/device/user-devices/{id}/`
|
||
- **方法**: `DELETE`
|
||
- **参数**:
|
||
- `id` (路径参数): 用户设备关联ID
|
||
- **认证**: 需要
|
||
- **响应**: 204 No Content
|
||
|
||
## 5. 火山引擎Token管理
|
||
|
||
### 5.1 生成Token
|
||
|
||
为当前用户生成火山引擎Token,用于语音交互。
|
||
|
||
- **URL**: `/api/device/rtc-token/generate/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"expire_time": 86400
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "Token生成成功",
|
||
"data": {
|
||
"token": "示例Token字符串",
|
||
"room_id": "12345678",
|
||
"user_id": "1",
|
||
"app_id": "xxxxxxxx",
|
||
"expire_time": 86400,
|
||
"task_id": "task-12345",
|
||
"device_code": "SP0100001",
|
||
"device_type": "智能音箱"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 5.2 根据MAC地址获取Token
|
||
|
||
设备通过MAC地址获取Token,无需用户登录认证。
|
||
|
||
- **URL**: `/api/device/rtc-token/get_by_mac/`
|
||
- **方法**: `GET`
|
||
- **参数**:
|
||
- `mac_address` (查询参数): 设备MAC地址
|
||
- `expire_time` (查询参数, 可选): Token过期时间(秒)
|
||
- **认证**: 不需要
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "Token生成成功",
|
||
"data": {
|
||
"token": "示例Token字符串",
|
||
"room_id": "12345678",
|
||
"user_id": "1",
|
||
"app_id": "xxxxxxxx",
|
||
"expire_time": 86400,
|
||
"task_id": "task-12345",
|
||
"device_code": "SP0100001",
|
||
"device_type": "智能音箱"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 6. 消息管理
|
||
|
||
### 6.1 发送消息
|
||
|
||
发送消息到用户绑定的设备。
|
||
|
||
- **URL**: `/api/device/messages/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"type": "text",
|
||
"message": {
|
||
"content": "你好,世界!"
|
||
},
|
||
"user_id": "1"
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "消息已发送",
|
||
"data": {
|
||
"type": "text",
|
||
"message": {
|
||
"content": "你好,世界!"
|
||
},
|
||
"user_id": "1",
|
||
"timestamp": "2023-01-01T00:00:00Z"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.2 发送天气消息
|
||
|
||
发送天气查询消息到用户绑定的设备。
|
||
|
||
- **URL**: `/api/device/messages/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"type": "weather",
|
||
"message": {
|
||
"city": "北京"
|
||
},
|
||
"user_id": "1"
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "天气信息已发送",
|
||
"data": {
|
||
"city": "北京",
|
||
"weather": "晴",
|
||
"temperature": "25°C",
|
||
"humidity": "50%",
|
||
"wind": "东北风3级"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.3 发送唱歌消息
|
||
|
||
发送唱歌指令到用户绑定的设备。
|
||
|
||
- **URL**: `/api/device/messages/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"type": "sing",
|
||
"message": {
|
||
"song": "歌曲名称",
|
||
"artist": "歌手名称"
|
||
},
|
||
"user_id": "1"
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "唱歌指令已发送",
|
||
"data": {
|
||
"type": "sing",
|
||
"message": {
|
||
"song": "歌曲名称",
|
||
"artist": "歌手名称"
|
||
},
|
||
"user_id": "1"
|
||
}
|
||
}
|
||
```
|
||
|
||
### 6.4 发送跳舞消息
|
||
|
||
发送跳舞指令到用户绑定的设备。
|
||
|
||
- **URL**: `/api/device/messages/`
|
||
- **方法**: `POST`
|
||
- **认证**: 需要
|
||
- **请求体**:
|
||
```json
|
||
{
|
||
"type": "dance",
|
||
"message": {
|
||
"dance": "舞蹈名称",
|
||
"style": "舞蹈风格",
|
||
"duration": "30秒"
|
||
},
|
||
"user_id": "1"
|
||
}
|
||
```
|
||
- **响应**:
|
||
```json
|
||
{
|
||
"status": "success",
|
||
"message": "跳舞指令已发送",
|
||
"data": {
|
||
"type": "dance",
|
||
"message": {
|
||
"dance": "舞蹈名称",
|
||
"style": "舞蹈风格",
|
||
"duration": "30秒"
|
||
},
|
||
"user_id": "1"
|
||
}
|
||
}
|
||
```
|
||
|
||
## 7. WebSocket 通信
|
||
|
||
### 7.1 WebSocket 连接
|
||
|
||
WebSocket 连接用于实时通信。
|
||
|
||
- **URL**: `ws://domain/api/device/messages/{user_id}/`
|
||
- **参数**:
|
||
- `user_id` (路径参数): 用户ID
|
||
- **认证**: 通过查询参数 `token` 进行认证
|
||
|
||
### 7.2 WebSocket 消息格式
|
||
|
||
WebSocket 消息基本格式如下:
|
||
|
||
```json
|
||
{
|
||
"type": "消息类型",
|
||
"message": {
|
||
// 消息内容,根据类型不同而不同
|
||
},
|
||
"user_id": "用户ID"
|
||
}
|
||
```
|
||
|
||
支持的消息类型:
|
||
- `text`: 文本消息
|
||
- `weather`: 天气查询
|
||
- `sing`: 唱歌指令
|
||
- `dance`: 跳舞指令
|
||
|
||
## 8. 错误响应
|
||
|
||
所有API在出错时会返回统一格式的错误响应:
|
||
|
||
```json
|
||
{
|
||
"status": "error",
|
||
"message": "错误信息",
|
||
"code": "错误代码(可选)"
|
||
}
|
||
```
|
||
|
||
常见错误状态码:
|
||
- `400 Bad Request`: 请求参数错误
|
||
- `401 Unauthorized`: 未认证
|
||
- `403 Forbidden`: 无权限
|
||
- `404 Not Found`: 资源不存在
|
||
- `500 Internal Server Error`: 服务器内部错误
|
||
|
||
详细错误码及处理方法参见 [设备错误文档](device_errors.md) |