# 云屋平台 - API文档 **版本:** 3.0 **基础URL:** `https://api.yourdomain.com/api/v1` 或 `http://localhost:8000/api/v1` (开发环境) ## 概述 AI宠物伴侣平台API提供用户认证、聊天交互、背景管理、宠物配置和管理功能的端点。所有API端点遵循RESTful约定并返回JSON响应。 ## 认证 大多数端点需要通过JWT(JSON网络令牌)进行认证。在Authorization头中包含令牌: ``` Authorization: Bearer ``` ## 错误处理 所有错误响应都遵循此格式: ```json { "detail": "错误消息" } ``` ## 端点 ### 用户管理 #### POST `/user/register` 注册新用户。 **请求体:** ```json { "phone": "字符串", "password": "字符串", "nickname": "字符串", "openid": "字符串 (可选)" } ``` **响应:** ```json { "access_token": "字符串", "refresh_token": "字符串", "user": { "id": "数字", "uid": "字符串", "nickname": "字符串", "avatar": "字符串", "phone": "字符串" } } ``` #### POST `/user/login` 认证用户并返回令牌。 **请求体:** ```json { "phone": "字符串", "password": "字符串" } ``` **响应:** ```json { "access_token": "字符串", "refresh_token": "字符串", "user": { "id": "数字", "uid": "字符串", "nickname": "字符串", "avatar": "字符串", "phone": "字符串" } } ``` #### POST `/user/wechat_login` 使用微信OAuth登录。 **请求体:** ```json { "code": "字符串" } ``` **响应:** ```json { "access_token": "字符串", "refresh_token": "字符串", "user": { "id": "数字", "uid": "字符串", "nickname": "字符串", "avatar": "字符串", "phone": "字符串" } } ``` #### GET `/user/profile` 获取当前用户资料。 **响应:** ```json { "id": "数字", "uid": "字符串", "nickname": "字符串", "avatar": "字符串", "phone": "字符串", "status": "数字", "created_at": "日期时间" } ``` #### PUT `/user/profile` 更新用户资料。 **请求体:** ```json { "nickname": "字符串 (可选)", "avatar": "字符串 (可选)" } ``` **响应:** ```json { "id": "数字", "uid": "字符串", "nickname": "字符串", "avatar": "字符串", "phone": "字符串", "status": "数字", "updated_at": "日期时间" } ``` ### 背景管理 #### GET `/background/list` 获取用户可用背景列表。 **查询参数:** - `visibility` (可选): 按可见性过滤 (1=公开, 2=私有, 3=VIP) - `page` (可选): 页码 (默认: 1) - `size` (可选): 页面大小 (默认: 20) **响应:** ```json { "data": [ { "id": "数字", "name": "字符串", "resource_url": "字符串", "resource_type": "数字", "visibility": "数字", "bgm_url": "字符串", "is_locked": "布尔值", "lock_desc": "字符串", "price_points": "数字", "is_owned": "布尔值", "is_default": "布尔值" } ], "total": "数字", "page": "数字", "size": "数字" } ``` #### GET `/background/detail/{background_id}` 获取特定背景的详细信息。 **响应:** ```json { "id": "数字", "name": "字符串", "resource_url": "字符串", "resource_type": "数字", "visibility": "数字", "bgm_url": "字符串", "is_locked": "布尔值", "lock_desc": "字符串", "price_points": "数字", "pets": [ { "id": "数字", "name": "字符串", "avatar": "字符串", "coordinate_x": "字符串", "coordinate_y": "字符串", "scale": "字符串", "scene_prompt": "字符串", "hello_message": "字符串" } ] } ``` #### POST `/background/purchase` 购买锁定的背景。 **请求体:** ```json { "background_id": "数字" } ``` **响应:** ```json { "success": "布尔值", "message": "字符串" } ``` ### 宠物管理 #### GET `/pet/list` 获取当前背景中可用的宠物列表。 **查询参数:** - `background_id`: 背景ID **响应:** ```json { "data": [ { "id": "数字", "name": "字符串", "avatar": "字符串", "global_prompt": "字符串", "tts_voice_id": "字符串", "tts_speed": "字符串", "tts_volume": "字符串", "coordinate_x": "字符串", "coordinate_y": "字符串", "scale": "字符串", "scene_prompt": "字符串", "hello_message": "字符串" } ] } ``` #### GET `/pet/detail/{pet_id}` 获取特定宠物的详细信息。 **响应:** ```json { "id": "数字", "name": "字符串", "avatar": "字符串", "global_prompt": "字符串", "tts_voice_id": "字符串", "tts_speed": "字符串", "tts_volume": "字符串", "status": "数字" } ``` ### 聊天管理 #### POST `/chat/send` 向AI宠物发送消息。 **请求体:** ```json { "message": "字符串", "pet_id": "数字", "background_id": "数字", "conversation_id": "字符串 (可选)" } ``` **响应:** ```json { "response": "字符串", "conversation_id": "字符串", "tokens_used": { "input": "数字", "output": "数字" } } ``` #### GET `/chat/history` 获取对话的聊天历史记录。 **查询参数:** - `conversation_id`: 对话ID - `page` (可选): 页码 (默认: 1) - `size` (可选): 页面大小 (默认: 20) **响应:** ```json { "data": [ { "id": "数字", "user_msg": "字符串", "ai_msg": "字符串", "created_at": "日期时间" } ], "total": "数字", "page": "数字", "size": "数字" } ``` #### POST `/chat/audio_stream` 发送音频流进行实时处理(需要WebSocket连接)。 **WebSocket端点:** `/ws/audio/{user_id}` **消息格式:** ```json { "type": "audio_data | end_of_speech", "data": "二进制音频数据 | null", "timestamp": "ISO字符串" } ``` ### 管理功能 #### GET `/admin/users` 获取用户列表(仅管理员)。 **查询参数:** - `status` (可选): 按状态过滤 - `page` (可选): 页码 (默认: 1) - `size` (可选): 页面大小 (默认: 20) **响应:** ```json { "data": [ { "id": "数字", "uid": "字符串", "nickname": "字符串", "avatar": "字符串", "phone": "字符串", "status": "数字", "created_at": "日期时间" } ], "total": "数字", "page": "数字", "size": "数字" } ``` #### PUT `/admin/user/{user_id}/status` 更新用户状态(仅管理员)。 **请求体:** ```json { "status": "数字 (1=激活, 2=禁止登录, 3=禁止发言)" } ``` **响应:** ```json { "success": "布尔值", "message": "字符串" } ``` #### GET `/admin/chat_logs` 获取聊天日志(仅管理员)。 **查询参数:** - `user_id` (可选): 按用户ID过滤 - `pet_id` (可选): 按宠物ID过滤 - `start_date` (可选): 按开始日期过滤 - `end_date` (可选): 按结束日期过滤 - `page` (可选): 页码 (默认: 1) - `size` (可选): 页面大小 (默认: 20) **响应:** ```json { "data": [ { "id": "数字", "user_id": "数字", "trace_id": "字符串", "pet_id": "数字", "bg_id": "数字", "user_msg": "字符串", "ai_msg": "字符串", "tokens_input": "数字", "tokens_output": "数字", "duration_ms": "数字", "conversation_id": "字符串", "created_at": "日期时间" } ], "total": "数字", "page": "数字", "size": "数字" } ``` #### PUT `/admin/quota/gift` 向用户赠送配额(仅管理员)。 **请求体:** ```json { "user_id": "数字", "amount": "数字" } ``` **响应:** ```json { "success": "布尔值", "message": "字符串" } ``` ## WebSocket连接 ### 音频流 端点:`ws://localhost:8000/ws/audio/{user_id}` 用于与ASR和TTS服务进行实时音频处理。该连接支持双向音频流,实现无缝语音对话。 ## 速率限制 - 未认证端点:每小时每个IP 100个请求 - 已认证端点:每小时每个用户 1000个请求 - 音频处理:每小时每个用户 50个请求 ## 响应代码 - `200`: 成功 - `400`: 错误请求 - `401`: 未授权 - `403`: 禁止访问 - `404`: 未找到 - `422`: 验证错误 - `429`: 超出速率限制 - `500`: 内部服务器错误 ## 附加资源 - [数据库模式](./database_schema.sql) - [前端仓库](../frontend/) - [后端仓库](../backend/)