运营后台指南
运营后台(/admin/)面向平台运营角色,提供跨应用的用户、聊天室、消息审计、回调推送与运营看板。页面下半部分为由 Admin API 契约生成的参考。
所有管理接口使用请求头 X-Admin-Secret(服务端环境变量 IM_ADMIN_SECRET,本地默认 dev-admin)鉴权;与 Open API 的 AppKey 签名体系相互独立。
应用总览
展示应用数、用户数、消息量、在线峰值;点击应用行查看详情与实时统计。
用户管理
- 查询用户资料与在线状态;
- 封禁/解封用户;
- 查看用户标签与所属群组。
聊天室治理
- 查看在线聊天室与成员;
- 封禁聊天室成员、踢出成员;
- 销毁违规聊天室(仅运营角色)。
消息审计
按应用、用户、会话、关键字与时间检索消息;支持导出审计结果。
回调与推送通道
配置离线推送 Webhook 与通用回调,查看投递日志与失败重试;支持按事件类型开启/关闭。
运营看板
消息量、DAU、在线峰值趋势图;数据源为 Admin API 统计接口。
Admin API 参考
共 85 个管理接口,全部由 IDL 中的 operationId / method / path / 参数 / 响应 schema 生成;接口清单与实现零漂移。基础路径为 /api/admin。
| 操作 ID | 方法 | 路径 | 说明 |
|---|---|---|---|
admin.apps.list | GET | /apps | 应用列表(含用户/消息/在线统计)。 |
admin.apps.create | POST | /apps | 创建应用,返回 appkey/appSecret(仅本次返回 secret)。 |
admin.apps.get | GET | /apps/{appkey} | 应用详情(secret 脱敏)。 |
admin.apps.secret.reset | POST | /apps/{appkey}/secret/reset | 重置 AppSecret(旧签名立即失效)。 |
admin.users.list | GET | /apps/{appkey}/users | 用户列表(含在线状态/封禁),?keyword&offset&limit。 |
admin.users.register | POST | /apps/{appkey}/users | 注册测试用户(幂等)。 |
admin.users.token | POST | /apps/{appkey}/users/{userId}/token | 为测试用户签发 token(控制台复制用)。 |
admin.users.ban | POST | /apps/{appkey}/users/{userId}/ban | 封禁/解封用户。 |
admin.users.get | GET | /apps/{appkey}/users/{userId} | 用户详情(在线/封禁/禁言/token 版本)。 |
admin.users.mute | POST | /apps/{appkey}/users/{userId}/mute | 全应用禁言/解禁用户(mutedUntil=0 解禁;与群禁言独立)。 |
admin.users.resetToken | POST | /apps/{appkey}/users/{userId}/token/reset | 吊销并重置用户 token 版本(旧 JWT 立即失效)。 |
admin.metrics.overview | GET | /apps/{appkey}/metrics/overview | 应用运营指标概览:DAU/消息量/在线峰值/错误率(今日+近 7 天)。 |
admin.groups.list | GET | /apps/{appkey}/groups | 群/超级群列表(?keyword&offset&limit)。 |
admin.chatrooms.list | GET | /apps/{appkey}/chatrooms | 聊天室列表(在线数/存活状态)。 |
admin.messages.list | GET | /apps/{appkey}/messages | 消息查询:?userId&conversationType&targetId&keyword&from&to&offset&limit。 |
admin.messages.trace | GET | /apps/{appkey}/messages/{messageId}/trace | 消息投递轨迹。 |
admin.messages.send | POST | /apps/{appkey}/messages | 以系统/指定用户身份发消息(控制台调试)。 |
admin.connections.list | GET | /apps/{appkey}/connections | 在线连接明细:userId/sessionId/connectedAt/lastHeartbeat/device。 |
admin.connections.stats | GET | /apps/{appkey}/connections/stats | 在线用户数/会话数/峰值。 |
admin.services.get | GET | /apps/{appkey}/services | 服务开通项与配额。 |
admin.services.set | POST | /apps/{appkey}/services | 更新服务开通项/配额。 |
admin.callbacks.get | GET | /apps/{appkey}/callbacks | 回调配置(secret 脱敏)。 |
admin.callbacks.set | POST | /apps/{appkey}/callbacks | 设置回调配置。 |
admin.callbacks.deliveries | GET | /apps/{appkey}/callbacks/deliveries | 回调投递日志(?eventType&status&from&to&offset&limit)。 |
admin.callbacks.retry | POST | /apps/{appkey}/callbacks/deliveries/{deliveryId}/retry | 手动重试投递。 |
admin.push.get | GET | /apps/{appkey}/push | 离线推送通道配置。 |
admin.push.set | POST | /apps/{appkey}/push | 设置离线推送 webhook。 |
admin.sensitiveWords.get | GET | /apps/{appkey}/sensitive-words | 敏感词配置。 |
admin.sensitiveWords.set | POST | /apps/{appkey}/sensitive-words | 设置敏感词与处置动作。 |
admin.stats.global | GET | /stats | 全局统计。 |
admin.stats.trend | GET | /stats/trend | 运营趋势(按天,?days&appkey)。 |
admin.api.metadata | GET | /api-metadata | API 调试器元数据:可选接口列表(operationId/method/path/params),由服务端从 Open API IDL 派生。 |
admin.callbacks.test | POST | /apps/{appkey}/callbacks/test | 发送回调测试事件(按当前回调配置投递一次,返回投递结果;用于控制台“测试回调”)。 |
admin.users.batchRegister | POST | /apps/{appkey}/users/batch | 批量注册用户(上限 100,逐条幂等;返回 created 与 failed 明细)。 |
admin.messages.export | GET | /apps/{appkey}/messages/export | 导出消息为 CSV(查询参数 limit 默认 1000、beforeSeq 可选;返回 csv 文本供控制台下载)。 |
admin.chatrooms.destroy | POST | /apps/{appkey}/chatrooms/{chatroomId}/destroy | 销毁聊天室:踢出在线成员、广播 destroyed、回调 chatroom.destroyed;body {reason?}(默认 admin_destroy)。不存在 1012 / 已销毁 1013。 |
admin.chatrooms.muteAll | POST | /apps/{appkey}/chatrooms/{chatroomId}/mute-all | 聊天室全体禁言/解除:{muted, durationSec?};durationSec 1..=2592000(30 天),省略=持续禁言;muted=false 立即解除。与 Open API chatroom.mute-all 同源状态。 |
admin.audit.list | GET | /apps/{appkey}/audit | 操作日志查询(按应用;时间倒序):?actor&action&object&from&to&offset&limit。记录管理端写操作(actor=admin、action、object、result、timestamp),环形上限 5000 条。 |
admin.features.get | GET | /apps/{appkey}/features | 功能开关:friend/group/chatroom/push/sensitiveWord/messageCallbacks;mapping 字段说明各自映射到的既有数据源(ServiceActivation.services / app.pushEnabled)。 |
admin.features.set | POST | /apps/{appkey}/features | 更新功能开关(未传的开关保持原值):body {features:{friend?,group?,chatroom?,push?,sensitiveWord?,messageCallbacks?}};写穿到既有 services/push 配置,不新建第二份状态。 |
admin.ratelimit.get | GET | /apps/{appkey}/ratelimit | Open API 接口级调频配置(per operation QPS override;默认空=关闭不限频)。 |
admin.ratelimit.set | POST | /apps/{appkey}/ratelimit | 设置 Open API 接口级 QPS 覆盖:body {overrides:{operationId:qps}}(1..=10000,0/省略=该接口不限频,整体覆盖)。超限返回 HTTP 429 + code 1008 + Retry-After: 1,envelope 保留。 |
admin.push.test | POST | /apps/{appkey}/push/test | 推送测试:{userId,title?,body?} 按当前推送配置真实投递一次 webhook 并返回投递尝试结果;推送未启用/webhook 为空返回 1021 SERVICE_NOT_ACTIVATED(不伪造成功)。 |
admin.apps.delete | DELETE | /apps/{appkey} | 删除应用(软删除:保留用户/消息/配置,仅置生命周期 deleted + app.disabled):body {confirmAppkey, reason?},confirmAppkey 必须等于路径 appkey(二次确认,否则 1001)。删除后 Open API 与 WS 鉴权返回 1017 APP_DISABLED;admin.apps.list 默认隐藏,?includeDeleted=1 可见(带 deleted/deletedAt)。 |
admin.apps.restore | POST | /apps/{appkey}/restore | 恢复已删除应用:清除 deleted 标记并解除 app.disabled(1017 立即消失);数据原样保留。未删除应用返回 1001。 |
admin.accounts.list | GET | /accounts | 管理端子账号列表(accountId/name/role/disabled/createdAt/updatedAt/lastUsedAt;token 仅存 SHA-256 摘要,永不返回)。根凭据 X-Admin-Secret 不在此表内。 |
admin.accounts.create | POST | /accounts | 创建子账号 {accountId,name?,role}(role ∈ owner|admin|operator|viewer;创建 owner 需调用者自身为 owner)。响应 token 仅本次返回一次,后续鉴权用 X-Admin-Account + X-Admin-Token。上限 200 个账号。 |
admin.accounts.update | POST | /accounts/{accountId} | 更新子账号 {name?,role?,disabled?,rotateToken?}:role 变更受层级约束(admin 不能改 owner 账号,owner 角色变更需 owner);rotateToken=true 生成新 token 并在本次响应返回(旧 token 立即失效);不可停用/降级最后一个启用中的 owner。 |
admin.accounts.delete | DELETE | /accounts/{accountId} | 删除子账号:需 role ≥ admin;owner 账号仅 owner 可删;不允许删除最后一个启用中的 owner。 |
admin.moderation.tasks.list | GET | /apps/{appkey}/moderation/tasks | 内容审核任务列表(消息命中敏感词时由发送路径自动生成):?status=pending|approved|rejected|all&offset&limit。任务环形上限 2000;字段含 messageId(replace 模式)/text/matchedWords/action/status/createdAt/decided*。 |
admin.moderation.tasks.decide | POST | /apps/{appkey}/moderation/tasks/{taskId}/decide | 审核决策 {decision:approve|reject, reason?}:approve 保留消息(replace 模式保留掩码正文);reject 把已入库消息正文打上 moderation=blocked 标记并向发送者发送 message.blocked 系统通知(system_notification)。任务已决策返回 1001。 |
admin.alerts.rules.get | GET | /apps/{appkey}/alerts/rules | 告警规则与支持的指标:metric ∈ rate_limited|callback_failure|online_drop|error_5xx;字段 threshold/windowSec/webhookUrl/enabled。 |
admin.alerts.rules.set | POST | /apps/{appkey}/alerts/rules | 整体覆盖告警规则:body {rules:[{metric,threshold,windowSec,webhookUrl,enabled}]}(≤20 条,windowSec 1..=86400,同一 metric 后者覆盖前者)。评估在维护周期(IM_MAINTENANCE_MS,默认 5s)执行,触发后写事件并按 HMAC-SHA256 的 X-IM-Signature 投递 webhook(best-effort,1 次重试)。 |
admin.alerts.events.list | GET | /apps/{appkey}/alerts/events | 告警事件(环形上限 1000,按时间倒序):?metric&offset&limit;同时返回 counters(rate_limited/callback_failure/error_5xx 最近 300s 计数、online 当前值、online_drop 300s 回落)。 |
admin.groups.get | GET | /apps/{appkey}/groups/{groupId} | 群详情(K09):成员预览/管理员/禁言/全员禁言/扩展属性/群消息计数;群不存在 1012。 |
admin.groups.members | GET | /apps/{appkey}/groups/{groupId}/members | 群成员分页(K09):?keyword&offset&limit,字段 userId/name/role/online/muted/mutedUntil/testUser;排序 owner→admin→member。 |
admin.groups.memberMute | POST | /apps/{appkey}/groups/{groupId}/members/{userId}/mute | 群成员禁言/解禁(K09):body {muted,durationSec?,reason?};durationSec 1..=2592000(缺省 3600);写入既有 Group.muted,群消息发送路径真实返回 1009;群主不可被禁言。 |
admin.groups.memberRemove | POST | /apps/{appkey}/groups/{groupId}/members/{userId}/remove | 踢出群成员(K09):body {reason?};群主需先转让(否则 4xx);同步清理管理员/禁言/成员资料,回调 group.updated(members_removed)。 |
admin.groups.muteAll | POST | /apps/{appkey}/groups/{groupId}/mute-all | 群全员禁言开关(K09):body {muted,durationSec?}(durationSec 1..=2592000,缺省永久);与 Open API group.mute-all 同一份 group_mute_all 状态,群主/管理员/白名单豁免。 |
admin.groups.dismiss | POST | /apps/{appkey}/groups/{groupId}/dismiss | 解散群(K09):body {reason?};移除群与群级附属状态(禁言/白名单/成员资料/频道/扩展),消息历史保留供审计,回调 group.destroyed。 |
admin.groups.transfer | POST | /apps/{appkey}/groups/{groupId}/transfer | 转让群主(K09):body {toUserId};新群主必须是成员,旧群主保留为管理员,回调 group.updated(owner_transferred)。 |
admin.groups.profile | POST | /apps/{appkey}/groups/{groupId}/profile | 群资料编辑(K09):body {name?,notice?,joinPolicy?,ext?};name 1..=64 字符、notice ≤1000、joinPolicy ∈ invite|open、ext ≤20 键(键 ≤32 / 值 ≤256)。 |
admin.bans.list | GET | /apps/{appkey}/bans | 封禁用户视图(K10):?status=active|history|all&keyword&offset&limit;返回封禁名单(原因/时长/操作者/到期)、注销用户视图、封禁历史(环形 2000)。 |
admin.bans.apply | POST | /apps/{appkey}/bans | 封禁/解封/注销/恢复(K10):body {userId,action:ban|unban|deactivate|restore,reason?,durationSec?,operator?};写 User.banned / User.deactivated 并踢下线,durationSec 由维护周期到期自动解除,全程写审计。 |
admin.testUsers.list | GET | /apps/{appkey}/test-users | 测试用户列表(K13):?keyword&offset&limit;返回已标记用户与配额(limitConfigured/limitDefault=100/limitMax/usage)。 |
admin.testUsers.mark | POST | /apps/{appkey}/users/{userId}/test-user | 标记/取消测试用户(K13):body {testUser};超过配置上限返回 4xx(1001),用户不存在 1004。 |
admin.testUsers.limit | POST | /apps/{appkey}/test-users/limit | 设置测试用户上限(K13):body {limit}(1..=100000,默认 100);返回 usage/remaining。 |
admin.stats.dimensions | GET | /apps/{appkey}/stats/dimensions | 统计维度扩展(K14):?days(1..=90,默认 7);返回用户/群组/群消息/聊天室/聊天室消息/消息/在线总量与按天趋势;聊天室消息为 ephemeral 不落盘,如实返回 0 并在 notes 标注。 |
admin.push.channels.get | GET | /apps/{appkey}/push/channels | 推送通道配置(K21):APNs/FCM/华为/小米/OPPO/vivo;敏感字段(privateKey/serviceAccountJson/appSecret/masterSecret)脱敏,另返回 secretsSet/configured/missingFields;deliveryImplemented=false。 |
admin.push.channels.set | POST | /apps/{appkey}/push/channels | 按通道保存推送配置(K21):body {channel,enabled,fields};未知通道/未知字段/启用但缺必填 → 4xx;敏感字段传 **** 开头表示保持原值。仅存储,不包含厂商发送。 |
admin.push.channels.test | POST | /apps/{appkey}/push/channels/{channel}/test | 通道测试(K21):诚实返回 {configured,enabled,missingFields,implemented:false,delivered:false,reason};不伪造发送成功;离线推送测试仍用 POST /apps/{appkey}/push/test。 |
admin.push.stats | GET | /apps/{appkey}/push/stats | 推送统计(K22):?date&days;按 push_logs 真实投递计数聚合 sent/delivered/failed 与按天趋势;无厂商通道级拆分(channelStatsAvailable=false)。 |
admin.translation.get | GET | /apps/{appkey}/translation | 翻译配置(K24):provider/sourceLang/targetLangs/endpoint/开关;返回 configured(以 IM_TRANSLATE_ENDPOINT 为准)、runtimeSource、mockDeprecated=true。 |
admin.translation.set | POST | /apps/{appkey}/translation | 保存翻译配置(K24):body {enabled,provider:none|http,sourceLang?,targetLangs?,endpoint?};provider=mock 已弃用(4xx);enabled 需 provider=http 且端点或环境变量存在;仅存储 + 校验,运行时仍读环境变量。 |
admin.bots.list | GET | /apps/{appkey}/bots | 机器人列表(K24):?offset&limit;bot 账号与回调配置合并视图(secretMasked/secretSet/callbackUrl/events/enabled/lastDelivery),并返回支持的事件枚举。 |
admin.bots.create | POST | /apps/{appkey}/bots | 创建机器人(K24):body {botId,name,avatarUrl?,description?,callbackUrl?,events?,secret?,enabled?};callbackUrl 须 http(s),events ∈ BOT_EVENTS,secret 8..=128 字符(缺省生成);重复 botId 返回 4xx。 |
admin.bots.update | POST | /apps/{appkey}/bots/{botId} | 更新机器人(K24):body {name?,avatarUrl?,description?,callbackUrl?,events?,secret?,enabled?};callbackUrl 为空串移除回调配置,非空且无配置时创建;机器人不存在 1004。 |
admin.bots.delete | DELETE | /apps/{appkey}/bots/{botId} | 删除机器人(K24):移除 bot 账号与回调配置;不存在返回 1004(不静默成功)。 |
admin.embed.token | POST | /apps/{appkey}/embed/token | 签发一次性控制台嵌入令牌(K29):body {scopes?,ttlSec?};scopes ⊆ overview|stats|users|groups(缺省 overview+stats),ttlSec 30..=86400(缺省 900);返回 token/expiresAt/embedUrl;兑换用公开 GET /api/embed/session?token=,一次性 + 过期即失效,失败 401。 |
admin.push.tokens.list | GET | /apps/{appkey}/push/tokens | 设备 token 台账(C23/K21):?userId&platform&active&offset&limit;platform ∈ ios|android|web|huawei|xiaomi|oppo|vivo|fcm,active 仅 true|false|1|0;返回 tokens/total/hasMore/perUserLimit(服务端状态,重启后仍在)。 |
admin.push.tokens.delete | DELETE | /apps/{appkey}/push/tokens/{tokenId} | 管理端注销设备 token(C23):软删除 active=false 并写审计;不存在 404/1001(不静默成功)。 |
admin.push.deliveries.create | POST | /apps/{appkey}/push/deliveries | 创建投递尝试记录(M14):body {userIds|userId,title,body,extras?}(≤100 用户;title 1..=128、body 1..=2048、extras ≤4096 bytes);每用户一条记录。无厂商凭据/适配器 → status=no_token(无活跃 token)或 not_configured(有 token 但适配器未配置),不发起网络请求、不伪造 sent。 |
admin.push.deliveries.list | GET | /apps/{appkey}/push/deliveries | 投递记录分页(M14):?userId&status&offset&limit;status ∈ no_token|not_configured|queued|sent|failed;按 createdAt 倒序,附 counts 与 retryableStatuses(failed|not_configured)。 |
admin.push.deliveries.get | GET | /apps/{appkey}/push/deliveries/{deliveryId} | 单条投递记录(M14):含 attemptLog(每次尝试的 status/provider/error/at);不存在 404/1001。 |
admin.push.deliveries.retry | POST | /apps/{appkey}/push/deliveries/{deliveryId}/retry | 重试投递(M14):仅 failed|not_configured 可重试;生成新记录(新 deliveryId)、attempts+1、retryOf 指向旧记录;重新选择当前活跃 token(可能变为 no_token),仍不伪造 sent;其它状态返回 4xx/1001。 |
GET /api/admin/apps
应用列表(含用户/消息/在线统计)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.apps.list |
| 方法 | GET |
| 路径 | /api/admin/apps |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminApp[] |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps
创建应用,返回 appkey/appSecret(仅本次返回 secret)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.apps.create |
| 方法 | POST |
| 路径 | /api/admin/apps |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminAppSecret |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
appkey | string | 是 | — |
name | string | 是 | — |
GET /api/admin/apps/{appkey}
应用详情(secret 脱敏)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.apps.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey} |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminApp |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/secret/reset
重置 AppSecret(旧签名立即失效)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.apps.secret.reset |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/secret/reset |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminAppSecret |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/users
用户列表(含在线状态/封禁),?keyword&offset&limit。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.users.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/users |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminUserPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/users
注册测试用户(幂等)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.users.register |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/users |
| 鉴权 | X-Admin-Secret |
| 响应 | User |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
userId | string | 是 | — |
name | string | 是 | — |
avatarUrl | string | 否 | — |
POST /api/admin/apps/{appkey}/users/{userId}/token
为测试用户签发 token(控制台复制用)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.users.token |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/users/{userId}/token |
| 鉴权 | X-Admin-Secret |
| 响应 | TokenInfo |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/users/{userId}/ban
封禁/解封用户。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.users.ban |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/users/{userId}/ban |
| 鉴权 | X-Admin-Secret |
| 响应 | User |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
banned | bool | 是 | — |
reason | string | 否 | — |
GET /api/admin/apps/{appkey}/users/{userId}
用户详情(在线/封禁/禁言/token 版本)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.users.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/users/{userId} |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminUserDetail |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/users/{userId}/mute
全应用禁言/解禁用户(mutedUntil=0 解禁;与群禁言独立)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.users.mute |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/users/{userId}/mute |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminUserDetail |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
mutedUntil | uint64 | 是 | — |
POST /api/admin/apps/{appkey}/users/{userId}/token/reset
吊销并重置用户 token 版本(旧 JWT 立即失效)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.users.resetToken |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/users/{userId}/token/reset |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminUserDetail |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/metrics/overview
应用运营指标概览:DAU/消息量/在线峰值/错误率(今日+近 7 天)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.metrics.overview |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/metrics/overview |
| 鉴权 | X-Admin-Secret |
| 响应 | MetricsOverview |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/groups
群/超级群列表(?keyword&offset&limit)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/groups |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/chatrooms
聊天室列表(在线数/存活状态)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.chatrooms.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/chatrooms |
| 鉴权 | X-Admin-Secret |
| 响应 | Chatroom[] |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/messages
消息查询:?userId&conversationType&targetId&keyword&from&to&offset&limit。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.messages.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/messages |
| 鉴权 | X-Admin-Secret |
| 响应 | MessagePage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/messages/{messageId}/trace
消息投递轨迹。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.messages.trace |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/messages/{messageId}/trace |
| 鉴权 | X-Admin-Secret |
| 响应 | MessageTrace |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/messages
以系统/指定用户身份发消息(控制台调试)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.messages.send |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/messages |
| 鉴权 | X-Admin-Secret |
| 响应 | Message |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
from | string | 是 | — |
conversationType | ConversationType | 是 | — |
targetId | string | 是 | — |
content | Content | 是 | — |
GET /api/admin/apps/{appkey}/connections
在线连接明细:userId/sessionId/connectedAt/lastHeartbeat/device。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.connections.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/connections |
| 鉴权 | X-Admin-Secret |
| 响应 | ConnectionPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/connections/stats
在线用户数/会话数/峰值。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.connections.stats |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/connections/stats |
| 鉴权 | X-Admin-Secret |
| 响应 | ConnectionStats |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/services
服务开通项与配额。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.services.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/services |
| 鉴权 | X-Admin-Secret |
| 响应 | ServiceActivation |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/services
更新服务开通项/配额。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.services.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/services |
| 鉴权 | X-Admin-Secret |
| 响应 | ServiceActivation |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
services | map<ServiceKey,bool> | 是 | — |
quotas | object | 否 | — |
GET /api/admin/apps/{appkey}/callbacks
回调配置(secret 脱敏)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.callbacks.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/callbacks |
| 鉴权 | X-Admin-Secret |
| 响应 | CallbackConfig |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/callbacks
设置回调配置。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.callbacks.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/callbacks |
| 鉴权 | X-Admin-Secret |
| 响应 | CallbackConfig |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
enabled | bool | 是 | — |
url | string | 否 | — |
secret | string | 否 | — |
events | CallbackEventType[] | 是 | — |
retry | object | 否 | — |
GET /api/admin/apps/{appkey}/callbacks/deliveries
回调投递日志(?eventType&status&from&to&offset&limit)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.callbacks.deliveries |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/callbacks/deliveries |
| 鉴权 | X-Admin-Secret |
| 响应 | CallbackDeliveryPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/callbacks/deliveries/{deliveryId}/retry
手动重试投递。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.callbacks.retry |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/callbacks/deliveries/{deliveryId}/retry |
| 鉴权 | X-Admin-Secret |
| 响应 | CallbackDelivery |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/push
离线推送通道配置。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/push |
| 鉴权 | X-Admin-Secret |
| 响应 | PushConfig |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/push
设置离线推送 webhook。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/push |
| 鉴权 | X-Admin-Secret |
| 响应 | PushConfig |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
webhookUrl | string | 是 | — |
enabled | bool | 是 | — |
GET /api/admin/apps/{appkey}/sensitive-words
敏感词配置。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.sensitiveWords.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/sensitive-words |
| 鉴权 | X-Admin-Secret |
| 响应 | SensitiveWordConfig |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/sensitive-words
设置敏感词与处置动作。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.sensitiveWords.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/sensitive-words |
| 鉴权 | X-Admin-Secret |
| 响应 | SensitiveWordConfig |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
words | string[] | 是 | — |
action | string | 是 | — |
GET /api/admin/stats
全局统计。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.stats.global |
| 方法 | GET |
| 路径 | /api/admin/stats |
| 鉴权 | X-Admin-Secret |
| 响应 | OpsStats |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/stats/trend
运营趋势(按天,?days&appkey)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.stats.trend |
| 方法 | GET |
| 路径 | /api/admin/stats/trend |
| 鉴权 | X-Admin-Secret |
| 响应 | OpsStats |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/api-metadata
API 调试器元数据:可选接口列表(operationId/method/path/params),由服务端从 Open API IDL 派生。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.api.metadata |
| 方法 | GET |
| 路径 | /api/admin/api-metadata |
| 鉴权 | X-Admin-Secret |
| 响应 | ApiMetadata |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/callbacks/test
发送回调测试事件(按当前回调配置投递一次,返回投递结果;用于控制台“测试回调”)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.callbacks.test |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/callbacks/test |
| 鉴权 | X-Admin-Secret |
| 响应 | CallbackDelivery |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
eventType | string | 是 | 回调事件类型,默认 callback.test |
payload | object | 否 | — |
POST /api/admin/apps/{appkey}/users/batch
批量注册用户(上限 100,逐条幂等;返回 created 与 failed 明细)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.users.batchRegister |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/users/batch |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminBatchRegisterResult |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
users | object[] | 是 | [{userId,name,avatarUrl?}] |
GET /api/admin/apps/{appkey}/messages/export
导出消息为 CSV(查询参数 limit 默认 1000、beforeSeq 可选;返回 csv 文本供控制台下载)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.messages.export |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/messages/export |
| 鉴权 | X-Admin-Secret |
| 响应 | MessageExport |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/chatrooms/{chatroomId}/destroy
销毁聊天室:踢出在线成员、广播 destroyed、回调 chatroom.destroyed;body {reason?}(默认 admin_destroy)。不存在 1012 / 已销毁 1013。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.chatrooms.destroy |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/chatrooms/{chatroomId}/destroy |
| 鉴权 | X-Admin-Secret |
| 响应 | ChatroomDestroyResult |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
reason | string | 否 | — |
POST /api/admin/apps/{appkey}/chatrooms/{chatroomId}/mute-all
聊天室全体禁言/解除:{muted, durationSec?};durationSec 1..=2592000(30 天),省略=持续禁言;muted=false 立即解除。与 Open API chatroom.mute-all 同源状态。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.chatrooms.muteAll |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/chatrooms/{chatroomId}/mute-all |
| 鉴权 | X-Admin-Secret |
| 响应 | ChatroomMuteAll |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
muted | bool | 是 | — |
durationSec | uint32 | 否 | — |
GET /api/admin/apps/{appkey}/audit
操作日志查询(按应用;时间倒序):?actor&action&object&from&to&offset&limit。记录管理端写操作(actor=admin、action、object、result、timestamp),环形上限 5000 条。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.audit.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/audit |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminAuditPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/features
功能开关:friend/group/chatroom/push/sensitiveWord/messageCallbacks;mapping 字段说明各自映射到的既有数据源(ServiceActivation.services / app.pushEnabled)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.features.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/features |
| 鉴权 | X-Admin-Secret |
| 响应 | FeatureConfig |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/features
更新功能开关(未传的开关保持原值):body {features:{friend?,group?,chatroom?,push?,sensitiveWord?,messageCallbacks?}};写穿到既有 services/push 配置,不新建第二份状态。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.features.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/features |
| 鉴权 | X-Admin-Secret |
| 响应 | FeatureConfig |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
features | map<string,bool> | 是 | — |
GET /api/admin/apps/{appkey}/ratelimit
Open API 接口级调频配置(per operation QPS override;默认空=关闭不限频)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.ratelimit.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/ratelimit |
| 鉴权 | X-Admin-Secret |
| 响应 | RateLimitConfig |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/ratelimit
设置 Open API 接口级 QPS 覆盖:body {overrides:{operationId:qps}}(1..=10000,0/省略=该接口不限频,整体覆盖)。超限返回 HTTP 429 + code 1008 + Retry-After: 1,envelope 保留。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.ratelimit.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/ratelimit |
| 鉴权 | X-Admin-Secret |
| 响应 | RateLimitConfig |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
overrides | map<string,uint32> | 是 | — |
POST /api/admin/apps/{appkey}/push/test
推送测试:{userId,title?,body?} 按当前推送配置真实投递一次 webhook 并返回投递尝试结果;推送未启用/webhook 为空返回 1021 SERVICE_NOT_ACTIVATED(不伪造成功)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.test |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/push/test |
| 鉴权 | X-Admin-Secret |
| 响应 | PushTestResult |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
userId | string | 是 | — |
title | string | 否 | — |
body | string | 否 | — |
DELETE /api/admin/apps/{appkey}
删除应用(软删除:保留用户/消息/配置,仅置生命周期 deleted + app.disabled):body {confirmAppkey, reason?},confirmAppkey 必须等于路径 appkey(二次确认,否则 1001)。删除后 Open API 与 WS 鉴权返回 1017 APP_DISABLED;admin.apps.list 默认隐藏,?includeDeleted=1 可见(带 deleted/deletedAt)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.apps.delete |
| 方法 | DELETE |
| 路径 | /api/admin/apps/{appkey} |
| 鉴权 | X-Admin-Secret |
| 响应 | AppLifecycle |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
confirmAppkey | string | 是 | — |
reason | string | 否 | — |
POST /api/admin/apps/{appkey}/restore
恢复已删除应用:清除 deleted 标记并解除 app.disabled(1017 立即消失);数据原样保留。未删除应用返回 1001。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.apps.restore |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/restore |
| 鉴权 | X-Admin-Secret |
| 响应 | AppLifecycle |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/accounts
管理端子账号列表(accountId/name/role/disabled/createdAt/updatedAt/lastUsedAt;token 仅存 SHA-256 摘要,永不返回)。根凭据 X-Admin-Secret 不在此表内。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.accounts.list |
| 方法 | GET |
| 路径 | /api/admin/accounts |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminAccountPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/accounts
创建子账号 {accountId,name?,role}(role ∈ owner|admin|operator|viewer;创建 owner 需调用者自身为 owner)。响应 token 仅本次返回一次,后续鉴权用 X-Admin-Account + X-Admin-Token。上限 200 个账号。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.accounts.create |
| 方法 | POST |
| 路径 | /api/admin/accounts |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminAccountToken |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
accountId | string | 是 | — |
name | string | 否 | — |
role | string | 是 | — |
POST /api/admin/accounts/{accountId}
更新子账号 {name?,role?,disabled?,rotateToken?}:role 变更受层级约束(admin 不能改 owner 账号,owner 角色变更需 owner);rotateToken=true 生成新 token 并在本次响应返回(旧 token 立即失效);不可停用/降级最后一个启用中的 owner。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.accounts.update |
| 方法 | POST |
| 路径 | /api/admin/accounts/{accountId} |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminAccountToken |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 否 | — |
role | string | 否 | — |
disabled | bool | 否 | — |
rotateToken | bool | 否 | — |
DELETE /api/admin/accounts/{accountId}
删除子账号:需 role ≥ admin;owner 账号仅 owner 可删;不允许删除最后一个启用中的 owner。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.accounts.delete |
| 方法 | DELETE |
| 路径 | /api/admin/accounts/{accountId} |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminAccount |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/moderation/tasks
内容审核任务列表(消息命中敏感词时由发送路径自动生成):?status=pending|approved|rejected|all&offset&limit。任务环形上限 2000;字段含 messageId(replace 模式)/text/matchedWords/action/status/createdAt/decided*。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.moderation.tasks.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/moderation/tasks |
| 鉴权 | X-Admin-Secret |
| 响应 | ModerationTaskPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/moderation/tasks/{taskId}/decide
审核决策 {decision:approve|reject, reason?}:approve 保留消息(replace 模式保留掩码正文);reject 把已入库消息正文打上 moderation=blocked 标记并向发送者发送 message.blocked 系统通知(system_notification)。任务已决策返回 1001。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.moderation.tasks.decide |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/moderation/tasks/{taskId}/decide |
| 鉴权 | X-Admin-Secret |
| 响应 | ModerationTask |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
decision | string | 是 | — |
reason | string | 否 | — |
GET /api/admin/apps/{appkey}/alerts/rules
告警规则与支持的指标:metric ∈ rate_limited|callback_failure|online_drop|error_5xx;字段 threshold/windowSec/webhookUrl/enabled。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.alerts.rules.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/alerts/rules |
| 鉴权 | X-Admin-Secret |
| 响应 | AlertRules |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/alerts/rules
整体覆盖告警规则:body {rules:[{metric,threshold,windowSec,webhookUrl,enabled}]}(≤20 条,windowSec 1..=86400,同一 metric 后者覆盖前者)。评估在维护周期(IM_MAINTENANCE_MS,默认 5s)执行,触发后写事件并按 HMAC-SHA256 的 X-IM-Signature 投递 webhook(best-effort,1 次重试)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.alerts.rules.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/alerts/rules |
| 鉴权 | X-Admin-Secret |
| 响应 | AlertRules |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
rules | AlertRule[] | 是 | — |
GET /api/admin/apps/{appkey}/alerts/events
告警事件(环形上限 1000,按时间倒序):?metric&offset&limit;同时返回 counters(rate_limited/callback_failure/error_5xx 最近 300s 计数、online 当前值、online_drop 300s 回落)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.alerts.events.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/alerts/events |
| 鉴权 | X-Admin-Secret |
| 响应 | AlertEventPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/groups/{groupId}
群详情(K09):成员预览/管理员/禁言/全员禁言/扩展属性/群消息计数;群不存在 1012。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/groups/{groupId} |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupDetail |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/groups/{groupId}/members
群成员分页(K09):?keyword&offset&limit,字段 userId/name/role/online/muted/mutedUntil/testUser;排序 owner→admin→member。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.members |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/groups/{groupId}/members |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupMemberPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/groups/{groupId}/members/{userId}/mute
群成员禁言/解禁(K09):body {muted,durationSec?,reason?};durationSec 1..=2592000(缺省 3600);写入既有 Group.muted,群消息发送路径真实返回 1009;群主不可被禁言。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.memberMute |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/groups/{groupId}/members/{userId}/mute |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupMemberMutation |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
muted | bool | 是 | — |
durationSec | uint32 | 否 | — |
reason | string | 否 | — |
POST /api/admin/apps/{appkey}/groups/{groupId}/members/{userId}/remove
踢出群成员(K09):body {reason?};群主需先转让(否则 4xx);同步清理管理员/禁言/成员资料,回调 group.updated(members_removed)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.memberRemove |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/groups/{groupId}/members/{userId}/remove |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupMemberMutation |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
reason | string | 否 | — |
POST /api/admin/apps/{appkey}/groups/{groupId}/mute-all
群全员禁言开关(K09):body {muted,durationSec?}(durationSec 1..=2592000,缺省永久);与 Open API group.mute-all 同一份 group_mute_all 状态,群主/管理员/白名单豁免。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.muteAll |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/groups/{groupId}/mute-all |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupMuteAll |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
muted | bool | 是 | — |
durationSec | uint32 | 否 | — |
POST /api/admin/apps/{appkey}/groups/{groupId}/dismiss
解散群(K09):body {reason?};移除群与群级附属状态(禁言/白名单/成员资料/频道/扩展),消息历史保留供审计,回调 group.destroyed。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.dismiss |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/groups/{groupId}/dismiss |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupMutation |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
reason | string | 否 | — |
POST /api/admin/apps/{appkey}/groups/{groupId}/transfer
转让群主(K09):body {toUserId};新群主必须是成员,旧群主保留为管理员,回调 group.updated(owner_transferred)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.transfer |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/groups/{groupId}/transfer |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupMutation |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
toUserId | string | 是 | — |
POST /api/admin/apps/{appkey}/groups/{groupId}/profile
群资料编辑(K09):body {name?,notice?,joinPolicy?,ext?};name 1..=64 字符、notice ≤1000、joinPolicy ∈ invite|open、ext ≤20 键(键 ≤32 / 值 ≤256)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.groups.profile |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/groups/{groupId}/profile |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminGroupDetail |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 否 | — |
notice | string | 否 | — |
joinPolicy | string | 否 | — |
ext | map<string,string> | 否 | — |
GET /api/admin/apps/{appkey}/bans
封禁用户视图(K10):?status=active|history|all&keyword&offset&limit;返回封禁名单(原因/时长/操作者/到期)、注销用户视图、封禁历史(环形 2000)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.bans.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/bans |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminBanPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/bans
封禁/解封/注销/恢复(K10):body {userId,action:ban|unban|deactivate|restore,reason?,durationSec?,operator?};写 User.banned / User.deactivated 并踢下线,durationSec 由维护周期到期自动解除,全程写审计。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.bans.apply |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/bans |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminBanEntry |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
userId | string | 是 | — |
action | string | 是 | — |
reason | string | 否 | — |
durationSec | uint32 | 否 | — |
operator | string | 否 | — |
GET /api/admin/apps/{appkey}/test-users
测试用户列表(K13):?keyword&offset&limit;返回已标记用户与配额(limitConfigured/limitDefault=100/limitMax/usage)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.testUsers.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/test-users |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminTestUserPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/users/{userId}/test-user
标记/取消测试用户(K13):body {testUser};超过配置上限返回 4xx(1001),用户不存在 1004。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.testUsers.mark |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/users/{userId}/test-user |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminTestUser |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
testUser | bool | 是 | — |
POST /api/admin/apps/{appkey}/test-users/limit
设置测试用户上限(K13):body {limit}(1..=100000,默认 100);返回 usage/remaining。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.testUsers.limit |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/test-users/limit |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminTestUserLimit |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | uint32 | 是 | — |
GET /api/admin/apps/{appkey}/stats/dimensions
统计维度扩展(K14):?days(1..=90,默认 7);返回用户/群组/群消息/聊天室/聊天室消息/消息/在线总量与按天趋势;聊天室消息为 ephemeral 不落盘,如实返回 0 并在 notes 标注。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.stats.dimensions |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/stats/dimensions |
| 鉴权 | X-Admin-Secret |
| 响应 | AdminStatsDimensions |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/push/channels
推送通道配置(K21):APNs/FCM/华为/小米/OPPO/vivo;敏感字段(privateKey/serviceAccountJson/appSecret/masterSecret)脱敏,另返回 secretsSet/configured/missingFields;deliveryImplemented=false。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.channels.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/push/channels |
| 鉴权 | X-Admin-Secret |
| 响应 | PushChannelSet |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/push/channels
按通道保存推送配置(K21):body {channel,enabled,fields};未知通道/未知字段/启用但缺必填 → 4xx;敏感字段传 **** 开头表示保持原值。仅存储,不包含厂商发送。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.channels.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/push/channels |
| 鉴权 | X-Admin-Secret |
| 响应 | PushChannelSet |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
channel | string | 是 | — |
enabled | bool | 是 | — |
fields | map<string,string> | 否 | — |
POST /api/admin/apps/{appkey}/push/channels/{channel}/test
通道测试(K21):诚实返回 {configured,enabled,missingFields,implemented:false,delivered:false,reason};不伪造发送成功;离线推送测试仍用 POST /apps/{appkey}/push/test。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.channels.test |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/push/channels/{channel}/test |
| 鉴权 | X-Admin-Secret |
| 响应 | PushChannelTest |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/push/stats
推送统计(K22):?date&days;按 push_logs 真实投递计数聚合 sent/delivered/failed 与按天趋势;无厂商通道级拆分(channelStatsAvailable=false)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.stats |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/push/stats |
| 鉴权 | X-Admin-Secret |
| 响应 | PushStats |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/translation
翻译配置(K24):provider/sourceLang/targetLangs/endpoint/开关;返回 configured(以 IM_TRANSLATE_ENDPOINT 为准)、runtimeSource、mockDeprecated=true。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.translation.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/translation |
| 鉴权 | X-Admin-Secret |
| 响应 | TranslationConfig |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/translation
保存翻译配置(K24):body {enabled,provider:none|http,sourceLang?,targetLangs?,endpoint?};provider=mock 已弃用(4xx);enabled 需 provider=http 且端点或环境变量存在;仅存储 + 校验,运行时仍读环境变量。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.translation.set |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/translation |
| 鉴权 | X-Admin-Secret |
| 响应 | TranslationConfig |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
enabled | bool | 是 | — |
provider | string | 是 | — |
sourceLang | string | 否 | — |
targetLangs | string[] | 否 | — |
endpoint | string | 否 | — |
GET /api/admin/apps/{appkey}/bots
机器人列表(K24):?offset&limit;bot 账号与回调配置合并视图(secretMasked/secretSet/callbackUrl/events/enabled/lastDelivery),并返回支持的事件枚举。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.bots.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/bots |
| 鉴权 | X-Admin-Secret |
| 响应 | BotIntegrationPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/bots
创建机器人(K24):body {botId,name,avatarUrl?,description?,callbackUrl?,events?,secret?,enabled?};callbackUrl 须 http(s),events ∈ BOT_EVENTS,secret 8..=128 字符(缺省生成);重复 botId 返回 4xx。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.bots.create |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/bots |
| 鉴权 | X-Admin-Secret |
| 响应 | BotIntegration |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
botId | string | 是 | — |
name | string | 是 | — |
callbackUrl | string | 否 | — |
events | string[] | 否 | — |
secret | string | 否 | — |
enabled | bool | 否 | — |
POST /api/admin/apps/{appkey}/bots/{botId}
更新机器人(K24):body {name?,avatarUrl?,description?,callbackUrl?,events?,secret?,enabled?};callbackUrl 为空串移除回调配置,非空且无配置时创建;机器人不存在 1004。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.bots.update |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/bots/{botId} |
| 鉴权 | X-Admin-Secret |
| 响应 | BotIntegration |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
name | string | 否 | — |
callbackUrl | string | 否 | — |
events | string[] | 否 | — |
secret | string | 否 | — |
enabled | bool | 否 | — |
DELETE /api/admin/apps/{appkey}/bots/{botId}
删除机器人(K24):移除 bot 账号与回调配置;不存在返回 1004(不静默成功)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.bots.delete |
| 方法 | DELETE |
| 路径 | /api/admin/apps/{appkey}/bots/{botId} |
| 鉴权 | X-Admin-Secret |
| 响应 | BotIntegration |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/embed/token
签发一次性控制台嵌入令牌(K29):body {scopes?,ttlSec?};scopes ⊆ overview|stats|users|groups(缺省 overview+stats),ttlSec 30..=86400(缺省 900);返回 token/expiresAt/embedUrl;兑换用公开 GET /api/embed/session?token=,一次性 + 过期即失效,失败 401。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.embed.token |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/embed/token |
| 鉴权 | X-Admin-Secret |
| 响应 | EmbedToken |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
scopes | string[] | 否 | — |
ttlSec | uint32 | 否 | — |
GET /api/admin/apps/{appkey}/push/tokens
设备 token 台账(C23/K21):?userId&platform&active&offset&limit;platform ∈ ios|android|web|huawei|xiaomi|oppo|vivo|fcm,active 仅 true|false|1|0;返回 tokens/total/hasMore/perUserLimit(服务端状态,重启后仍在)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.tokens.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/push/tokens |
| 鉴权 | X-Admin-Secret |
| 响应 | PushTokenPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
DELETE /api/admin/apps/{appkey}/push/tokens/{tokenId}
管理端注销设备 token(C23):软删除 active=false 并写审计;不存在 404/1001(不静默成功)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.tokens.delete |
| 方法 | DELETE |
| 路径 | /api/admin/apps/{appkey}/push/tokens/{tokenId} |
| 鉴权 | X-Admin-Secret |
| 响应 | PushToken |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/push/deliveries
创建投递尝试记录(M14):body {userIds|userId,title,body,extras?}(≤100 用户;title 1..=128、body 1..=2048、extras ≤4096 bytes);每用户一条记录。无厂商凭据/适配器 → status=no_token(无活跃 token)或 not_configured(有 token 但适配器未配置),不发起网络请求、不伪造 sent。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.deliveries.create |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/push/deliveries |
| 鉴权 | X-Admin-Secret |
| 响应 | PushDeliveryCreateResult |
| 起始版本 | 1.0.0 |
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
userIds | string[] | 否 | — |
userId | string | 否 | — |
title | string | 是 | — |
body | string | 是 | — |
extras | object | 否 | — |
GET /api/admin/apps/{appkey}/push/deliveries
投递记录分页(M14):?userId&status&offset&limit;status ∈ no_token|not_configured|queued|sent|failed;按 createdAt 倒序,附 counts 与 retryableStatuses(failed|not_configured)。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.deliveries.list |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/push/deliveries |
| 鉴权 | X-Admin-Secret |
| 响应 | PushDeliveryPage |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
GET /api/admin/apps/{appkey}/push/deliveries/{deliveryId}
单条投递记录(M14):含 attemptLog(每次尝试的 status/provider/error/at);不存在 404/1001。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.deliveries.get |
| 方法 | GET |
| 路径 | /api/admin/apps/{appkey}/push/deliveries/{deliveryId} |
| 鉴权 | X-Admin-Secret |
| 响应 | PushDelivery |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。
POST /api/admin/apps/{appkey}/push/deliveries/{deliveryId}/retry
重试投递(M14):仅 failed|not_configured 可重试;生成新记录(新 deliveryId)、attempts+1、retryOf 指向旧记录;重新选择当前活跃 token(可能变为 no_token),仍不伪造 sent;其它状态返回 4xx/1001。
| 项目 | 值 |
|---|---|
| 操作 ID | admin.push.deliveries.retry |
| 方法 | POST |
| 路径 | /api/admin/apps/{appkey}/push/deliveries/{deliveryId}/retry |
| 鉴权 | X-Admin-Secret |
| 响应 | PushDelivery |
| 起始版本 | 1.0.0 |
该接口无请求体参数(查询参数按路径与分页约定传递)。