频道会话与成员管理
业务服务端使用 App Token。用户名为本应用的用户名,不是媒体 identity。查询、移出和封禁不会替用户签发媒体凭据。路径前缀和分页规则见接入概述。
查询频道会话
/{org_name}/{app_name}/rtc/channels/{channel_id}/sessions路径参数
org_name、app_name、channel_id 见频道管理。
查询参数
status 可选 joining、joined、leaving、left,省略时查询前三种当前状态;查询历史退出会话需显式传 status=left。cursor、limit 使用通用分页。
请求示例
curl "$IM_API/$ORG/$APP/rtc/channels/meeting-demo/sessions?status=joined&limit=20" -H "Authorization: Bearer $APP_TOKEN"响应
200:items 为会话数组,next_cursor 在末页为 null。会话字段见客户端会话数据结构,管理响应另包含 leave_note。历史会话保留 90 天。
错误
无效状态 / 游标为 400 invalid_argument;频道不存在为 404 not_found。
移出用户
/{org_name}/{app_name}/rtc/channels/{channel_id}/members/{username}/remove路径参数
应用和频道参数同上;username 为要移出的用户名。
请求体
operation_id 必填,1~64 个可打印 ASCII 字符,不含空格;reason 必填且非空,最多 256 个字符。不能提交 usernames。
请求示例
curl -X POST "$IM_API/$ORG/$APP/rtc/channels/meeting-demo/members/alice/remove" \
-H "Authorization: Bearer $APP_TOKEN" -H "Content-Type: application/json" \
-d '{"operation_id":"remove-meeting-demo-alice-001","reason":"主持人移出"}'响应
operation_id 与目标 sessions。媒体清理未完成返回 202,完成后 200。相同操作者、键、参数重试不会重复创建操作;HTTP 超时后保持原键重试。
移出结束该用户当前会话,但不禁止之后重新加入,也不自动撤销所有未消费票据。要禁止再次加入使用封禁;只取消待加入授权使用撤销票据。
错误
资源不存在为 404 not_found;同键不同参数为 409 conflict/idempotency_conflict;参数无效为 400 invalid_argument。
查询用户封禁
/{org_name}/{app_name}/rtc/channels/{channel_id}/bans/{username}路径参数
同移出接口。
请求示例
curl "$IM_API/$ORG/$APP/rtc/channels/meeting-demo/bans/alice" -H "Authorization: Bearer $APP_TOKEN"响应
200:ban 为封禁对象,尚无记录时为 null。记录可能已经解除或到期;根据状态和 expires_at 判断是否当前有效。保存返回的 version,用于封禁修改或解封。
错误
频道或用户不存在为 404 not_found。
封禁用户
/{org_name}/{app_name}/rtc/channels/{channel_id}/bans/{username}路径参数
同移出接口。
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
version | Integer | 是 | 无封禁记录时为 0;已有记录使用读取到的版本 |
reason | String | 是 | 非空管理说明,最多 256 个字符 |
expires_at | String / null | 否 | 晚于当前时间;省略 / null 为永久封禁 |
请求示例
curl -X PUT "$IM_API/$ORG/$APP/rtc/channels/meeting-demo/bans/alice" \
-H "Authorization: Bearer $APP_TOKEN" -H "Content-Type: application/json" \
-d '{"version":0,"reason":"违规参与","expires_at":null}'示例假设尚无封禁记录。
响应
首次建立记录为 201,更新 / 同值重放为 200,返回 ban。封禁同时撤销未消费票据,并让当前会话开始退出;响应成功不意味着媒体清理已经完成。
错误
版本冲突为 409 version_conflict;频道关闭为 409 conflict/channel_closed;无效参数为 400 invalid_argument。
解除封禁
/{org_name}/{app_name}/rtc/channels/{channel_id}/bans/{username}路径参数
同移出接口。
请求体
必须提交 version,使用最新读取版本;不需要提交期限或封禁说明。
请求示例
curl -X DELETE "$IM_API/$ORG/$APP/rtc/channels/meeting-demo/bans/alice" \
-H "Authorization: Bearer $APP_TOKEN" -H "Content-Type: application/json" \
-d '{"version":1}'响应
200:ban 为解除后的记录;本来没有记录时为 null。重复解除已解除记录成功。解除不恢复已撤销票据或已退出会话,ticket 频道需重新签发票据。
错误
旧版本不能解除后来建立的新封禁,返回 409 version_conflict。
查询有效封禁列表
/{org_name}/{app_name}/rtc/channels/{channel_id}/bans路径参数
同查询频道会话。
查询参数
cursor、limit 使用通用分页。
请求示例
curl "$IM_API/$ORG/$APP/rtc/channels/meeting-demo/bans?limit=20" -H "Authorization: Bearer $APP_TOKEN"响应
200:items 为当前有效封禁,next_cursor 在末页为 null。需要已解除 / 到期记录的版本时,用单用户查询。
错误
无效游标为 400 invalid_argument;频道不存在为 404 not_found。
数据结构
Ban 包含 username、status(active / revoked,有效性还需判断 expires_at)、expires_at(null 表示永久)、reason、version、created_at、updated_at。管理说明用于审计,不随客户端成员列表和媒体凭据公开。
