# OpenIM 会议接口文档(用户端 - 前端对接版) 本文档专门用于前端开发人员对接 OpenIM 会议相关 API 接口(用户端)。 ## 目录 - [基础说明](#基础说明) - [会议状态说明](#会议状态说明) - [用户端接口](#用户端接口) - [业务规则](#业务规则) - [错误码说明](#错误码说明) - [注意事项](#注意事项) --- ## 基础说明 ### 请求格式 - **请求方法**: 所有接口均使用 `POST` 方法 - **Content-Type**: `application/json` - **请求头**: 需要在请求头中携带 `token` 进行身份验证 ```http POST /meeting/get_meeting Content-Type: application/json token: your_token_here ``` ### 响应格式 所有接口统一返回以下格式: ```json { "errCode": 0, // 错误码,0表示成功 "errMsg": "", // 错误消息 "errDlt": "", // 错误详情 "data": {} // 响应数据,具体结构见各接口说明 } ``` ### 基础URL 根据部署环境配置,例如: - 开发环境: `http://localhost:10002` - 生产环境: `https://your-domain.com` --- ## 会议状态说明 | 状态值 | 状态名称 | 说明 | 用户端可见 | |--------|---------|------|-----------| | 1 | 已预约 | 会议已创建,等待开始 | ✅ 可见 | | 2 | 进行中 | 会议正在进行 | ✅ 可见 | | 3 | 已结束 | 会议已结束 | ❌ 不可见 | | 4 | 已取消 | 会议已取消 | ❌ 不可见 | **重要提示**: - 用户端接口只能查看状态为 **1(已预约)** 和 **2(进行中)** 的会议 - 状态为 **3(已结束)** 和 **4(已取消)** 的会议对用户端不可见 --- ## 用户端接口 ### 1. 获取会议信息 **接口地址**: `POST /meeting/get_meeting` **接口描述**: 获取单个会议信息,只能查看已预约和进行中的会议 **请求参数**: ```json { "meetingID": "string" // 会议ID(必填) } ``` **响应参数**: ```json { "errCode": 0, "errMsg": "", "errDlt": "", "data": { "meetingInfo": { "meetingID": "string", // 会议ID "subject": "string", // 会议主题 "coverURL": "string", // 封面URL "scheduledTime": 1234567890000, // 预约时间戳(毫秒) "status": 1, // 会议状态:1-已预约,2-进行中 "description": "string", // 会议描述 "duration": 60, // 会议时长(分钟) "enableMic": true, // 是否开启连麦 "enableComment": true, // 是否开启评论 "anchorUsers": [ // 主播用户信息列表 { "userID": "user1", "nickname": "主播1", "faceURL": "https://example.com/avatar1.jpg" }, { "userID": "user2", "nickname": "主播2", "faceURL": "https://example.com/avatar2.jpg" } ], "groupID": "string", // 关联的群聊ID "checkInCount": 50 // 签到人数统计 } } } ``` **业务规则**: 1. 用户端接口只显示状态为 **1(已预约)** 和 **2(进行中)** 的会议 2. 如果会议状态为 **3(已结束)** 或 **4(已取消)**,将返回错误 3. 用户端接口不返回管理字段: - `creatorUserID`(创建者ID) - `ex`(扩展字段) - `createTime`(创建时间) - `updateTime`(更新时间) - `estimatedCount`(预估人数) - `anchorUserIDs`(主播ID列表,只返回 `anchorUsers`) 4. 返回的主播信息包含用户ID、昵称、头像等完整用户信息 5. 返回签到人数统计(`checkInCount`),用于显示会议签到情况 **错误码**: - `0`: 成功 - `1001`: 参数错误或会议不可用(会议已结束或已取消) - `1004`: 会议不存在 - `500`: 服务器内部错误 --- ### 2. 获取会议列表 **接口地址**: `POST /meeting/get_meetings_public` **接口描述**: 获取会议列表,只能查看已预约和进行中的会议 **请求参数**: ```json { "status": 1, // 会议状态(选填):1-已预约,2-进行中(只能查询这两个状态) "keyword": "string", // 搜索关键词(选填,搜索主题和描述) "startTime": 1234567890000, // 开始时间戳(毫秒,选填) "endTime": 1234567890000, // 结束时间戳(毫秒,选填) "pagination": { "pageNumber": 1, // 页码,从1开始(选填,默认1) "showNumber": 20 // 每页数量(选填,默认20) } } ``` **参数说明**: - `status`: 如果指定,只能传入 `1` 或 `2`,传入其他值将返回错误 - 如果不指定 `status`,查询结果会自动过滤,只返回状态1和2的会议 - 用户端接口不支持按创建者查询(没有 `creatorUserID` 参数) **响应参数**: ```json { "errCode": 0, "errMsg": "", "errDlt": "", "data": { "total": 100, // 总数(只包含状态1和2的会议) "meetings": [ { "meetingID": "string", "subject": "string", "coverURL": "string", "scheduledTime": 1234567890000, "status": 1, "description": "string", "duration": 60, "enableMic": true, "enableComment": true, "anchorUsers": [ { "userID": "user1", "nickname": "主播1", "faceURL": "https://example.com/avatar1.jpg" } ], "groupID": "string", // 关联的群聊ID "checkInCount": 50 // 签到人数统计 } ] } } ``` **业务规则**: 1. 用户端接口只显示状态为 **1(已预约)** 和 **2(进行中)** 的会议 2. 如果指定 `status` 参数,只能传入 `1` 或 `2`,传入其他值将返回错误 3. 如果不指定 `status`,查询结果会自动过滤,只返回状态1和2的会议 4. 用户端接口不支持按创建者查询 5. 用户端接口不返回管理字段(创建者ID、扩展字段、创建时间、更新时间、预估人数等) 6. 返回的主播信息包含用户ID、昵称、头像等完整用户信息 **错误码**: - `0`: 成功 - `1001`: 参数错误(如状态值不是1或2) - `500`: 服务器内部错误 --- ## 签到接口 ### 1. 会议签到 **接口地址**: `POST /meeting/check_in` **接口描述**: 用户对会议进行签到,一个用户在一个会议中只能签到一次 **请求参数**: ```json { "meetingID": "string" // 会议ID(必填) } ``` **响应参数**: ```json { "errCode": 0, "errMsg": "", "errDlt": "", "data": { "checkInID": "string", // 签到ID "checkInTime": 1234567890000 // 签到时间戳(毫秒) } } ``` **业务规则**: 1. 一个用户在一个会议中只能签到一次 2. 只能对状态为 **1(已预约)** 和 **2(进行中)** 的会议签到 3. 签到成功后会自动更新会议的签到统计(`checkInCount`) 4. 如果用户已经签到过,会返回错误 **错误码**: - `0`: 成功 - `1001`: 参数错误或会议不可用(会议已结束或已取消) - `1001`: 用户已签到 - `1004`: 会议不存在 - `500`: 服务器内部错误 --- ### 2. 检查用户是否已签到 **接口地址**: `POST /meeting/check_user_check_in` **接口描述**: 检查当前用户是否已对指定会议签到 **请求参数**: ```json { "meetingID": "string" // 会议ID(必填) } ``` **响应参数**: ```json { "errCode": 0, "errMsg": "", "errDlt": "", "data": { "isCheckedIn": true, // 是否已签到 "checkInInfo": { // 签到信息(如果已签到) "checkInID": "string", "meetingID": "string", "userID": "string", "checkInTime": 1234567890000, "userInfo": { "userID": "string", "nickname": "string", "faceURL": "string" } } } } ``` **业务规则**: 1. 如果用户已签到,返回 `isCheckedIn: true` 和签到详细信息 2. 如果用户未签到,返回 `isCheckedIn: false`,`checkInInfo` 为 `null` 3. 已签到时,会返回用户的基本信息(用户ID、昵称、头像等) **错误码**: - `0`: 成功 - `1001`: 参数错误 - `500`: 服务器内部错误 --- ### 3. 获取会议签到列表 **接口地址**: `POST /meeting/get_check_ins` **接口描述**: 获取指定会议的所有签到记录列表 **请求参数**: ```json { "meetingID": "string", // 会议ID(必填) "pagination": { "pageNumber": 1, // 页码,从1开始(选填,默认1) "showNumber": 20 // 每页数量(选填,默认20) } } ``` **响应参数**: ```json { "errCode": 0, "errMsg": "", "errDlt": "", "data": { "total": 100, // 总数 "checkIns": [ { "checkInID": "string", // 签到ID "meetingID": "string", // 会议ID "userID": "string", // 用户ID "checkInTime": 1234567890000, // 签到时间戳(毫秒) "userInfo": { // 用户信息 "userID": "string", "nickname": "string", "faceURL": "string" } } ] } } ``` **业务规则**: 1. 支持分页查询 2. 签到列表按签到时间倒序排列(最新签到的在前) 3. 每个签到记录包含用户的完整信息(用户ID、昵称、头像等) **错误码**: - `0`: 成功 - `1001`: 参数错误 - `500`: 服务器内部错误 --- ### 4. 获取会议签到统计 **接口地址**: `POST /meeting/get_check_in_stats` **接口描述**: 获取指定会议的签到人数统计 **请求参数**: ```json { "meetingID": "string" // 会议ID(必填) } ``` **响应参数**: ```json { "errCode": 0, "errMsg": "", "errDlt": "", "data": { "meetingID": "string", // 会议ID "checkInCount": 50 // 签到人数 } } ``` **业务规则**: 1. 返回会议的签到总人数 2. 这个统计也会在会议信息中的 `checkInCount` 字段中返回 **错误码**: - `0`: 成功 - `1001`: 参数错误 - `500`: 服务器内部错误 --- ## 业务规则 ### 1. 会议与群聊的关联 - 创建会议时会自动创建一个群聊 - 群聊名称为:`"会议群-{会议主题}"` - 会议封面会作为群聊头像 - 群聊的 `ex` 字段中会包含会议标识: ```json { "isMeetingGroup": true, "meetingID": "会议ID" } ``` ### 2. 主播与群角色的关系 - **有主播列表时**: - 第一个主播 → 群主 - 其他主播 → 管理员 - 创建者(如果不在主播列表中)→ 普通成员 - **没有主播列表时**: - 创建者 → 群主 ### 3. 评论开关与群禁言 - **开启评论** (`enableComment: true`): - 自动取消群禁言 - 群成员可以发送消息 - **关闭评论** (`enableComment: false`): - 自动禁言群 - 群成员无法发送消息 ### 4. 权限控制 - **查看会议**:用户端只能查看已预约和进行中的会议 ### 5. 时间验证 - 创建会议时,预约时间不能早于当前时间 - 更新会议时,如果更新预约时间,也不能早于当前时间 --- ## 错误码说明 ### 通用错误码 | 错误码 | 说明 | |--------|------| | 0 | 成功 | | 500 | 服务器内部错误 | | 1001 | 参数错误 | | 1002 | 权限不足 | | 1004 | 记录不存在 | ### 会议相关错误场景 | 错误码 | 场景 | |--------|------| | 1001 | 查询状态不是1或2 | | 1004 | 会议不存在 | | 1004 | 查询已结束或已取消的会议 | --- ## 注意事项 ### 1. 认证 - 所有接口都需要在请求头中携带 `token` 进行身份验证 - Token通过 `/auth/get_user_token` 接口获取 ### 2. 请求格式 - 所有接口使用 `POST` 方法 - Content-Type: `application/json` - 请求体为JSON格式 ### 3. 响应格式 - 所有接口统一返回格式:`{errCode, errMsg, errDlt, data}` - `errCode` 为 0 表示成功,非0表示失败 - 失败时查看 `errMsg` 和 `errDlt` 获取错误详情 ### 4. 时间戳 - 所有时间戳均为毫秒级Unix时间戳 - 例如:`1234567890000` 表示 2009-02-13 23:31:30 ### 5. 分页参数 - 分页参数统一格式: ```json { "pagination": { "pageNumber": 1, // 页码,从1开始 "showNumber": 20 // 每页数量 } } ``` ### 6. 用户端接口特点 - 只能查看状态为 **1(已预约)** 和 **2(进行中)** 的会议 - 不返回管理字段: - `creatorUserID`(创建者ID) - `ex`(扩展字段) - `createTime`(创建时间) - `updateTime`(更新时间) - `estimatedCount`(预估人数) - `anchorUserIDs`(主播ID列表,只返回 `anchorUsers`) - 不支持按创建者查询(没有 `creatorUserID` 参数) ### 7. 主播信息 - 用户端接口只返回 `anchorUsers`(主播详细信息) - 主播信息包含:`userID`、`nickname`、`faceURL` 等 ### 8. 群聊关联 - 每个会议都会关联一个群聊 - 通过 `groupID` 字段可以获取关联的群聊ID - 可以使用群聊相关接口(`/group/*`)操作关联的群聊 ### 9. 会议状态流转 ``` 1(已预约) → 2(进行中) → 3(已结束) ↓ 4(已取消) ``` - 用户端只能查看状态 **1(已预约)** 和 **2(进行中)** 的会议 - 状态 **3(已结束)** 和 **4(已取消)** 的会议对用户端不可见 --- ## 接口汇总表 | 接口路径 | 方法 | 描述 | 权限要求 | |---------|------|------|---------| | `/meeting/get_meeting` | POST | 获取会议信息 | 登录用户 | | `/meeting/get_meetings_public` | POST | 获取会议列表 | 登录用户 | --- ## 请求示例 ```bash curl -X POST http://localhost:10002/meeting/get_meeting \ -H "Content-Type: application/json" \ -H "token: your_token" \ -d '{ "meetingID": "meeting123" }' ``` ### 获取会议列表 ```bash curl -X POST http://localhost:10002/meeting/get_meetings_public \ -H "Content-Type: application/json" \ -H "token: your_token" \ -d '{ "status": 1, "keyword": "产品", "pagination": { "pageNumber": 1, "showNumber": 20 } }' ``` ### 会议签到 ```bash curl -X POST http://localhost:10002/meeting/check_in \ -H "Content-Type: application/json" \ -H "token: your_token" \ -d '{ "meetingID": "meeting123" }' ``` ### 检查用户是否已签到 ```bash curl -X POST http://localhost:10002/meeting/check_user_check_in \ -H "Content-Type: application/json" \ -H "token: your_token" \ -d '{ "meetingID": "meeting123" }' ``` ### 获取会议签到列表 ```bash curl -X POST http://localhost:10002/meeting/get_check_ins \ -H "Content-Type: application/json" \ -H "token: your_token" \ -d '{ "meetingID": "meeting123", "pagination": { "pageNumber": 1, "showNumber": 20 } }' ``` ### 获取会议签到统计 ```bash curl -X POST http://localhost:10002/meeting/get_check_in_stats \ -H "Content-Type: application/json" \ -H "token: your_token" \ -d '{ "meetingID": "meeting123" }' ``` --- **最后更新时间**: 2025-01-23