应用与密钥
GET /api/admin/apps · 创建应用 · 应用详情/重置 AppSecret · 删除/恢复(软删除,IDL: admin.apps.delete / admin.apps.restore)
删除为软删除:用户 / 消息 / 配置 / 密钥全部保留,仅把应用置为停用(Open API 与 WebSocket 鉴权返回 1017 APP_DISABLED),应用列表默认隐藏。删除需再次输入 appkey 二次确认;恢复后立即重新启用,数据原样保留。
测试用户
注册/批量导入/列表/签发 userToken/详情(GET users、POST /api/apps/{appkey}/users、POST users/batch、POST token、GET users/{userId})
API 调试器
接口元数据:GET /api/admin/api-metadata(IDL: admin.api.metadata);未就绪时使用内置目录。支持 Admin Secret / Bearer userToken / 无鉴权。
等待发送…
连接监控
在线连接明细与在线统计:GET /api/admin/apps/{appkey}/connections、/connections/stats(IDL: admin.connections.*)· 默认 10s 自动刷新
消息流转
消息查询:GET /api/admin/apps/{appkey}/messages?userId&conversationType&targetId&keyword&from&to&offset&limit(IDL: admin.messages.list);投递轨迹:GET .../messages/{messageId}/trace(MessageTrace)。
系统身份发消息(POST /api/admin/apps/{appkey}/messages · 已存在)
服务开通
服务开通项与配额:GET/POST /api/admin/apps/{appkey}/services(IDL: admin.services.get/set)· ServiceKey 八项 + quotas 四项
回调配置
离线推送 Webhook(IDL: admin.push.get/set)与通用回调体系(IDL: admin.callbacks.*;事件见 callbacks.json)
真实投递一次 webhook:推送未启用时返回 1021 SERVICE_NOT_ACTIVATED(不会伪造成功);投递结果显示 delivered / statusCode / error。
敏感词
GET/POST /api/admin/apps/{appkey}/sensitive-words(已存在,docs/10 §25)· 最多 500 词,单词 ≤64 字符
操作日志
GET /api/admin/apps/{appkey}/audit?actor=&action=&object=&from=&to=&offset=&limit=(IDL: admin.audit.list)· 管理端写操作自动埋点(actor=admin、action、object、result、timestamp;环形上限 5000 条)
成员与权限
GET/POST /api/admin/accounts · POST/DELETE /api/admin/accounts/{accountId}(IDL: admin.accounts.*)· RBAC-lite:owner > admin > operator > viewer;根凭据 X-Admin-Secret 恒为 owner,子账号使用 X-Admin-Account + X-Admin-Token
内容审核
GET /api/admin/apps/{appkey}/moderation/tasks · POST .../tasks/{taskId}/decide(IDL: admin.moderation.tasks.*)· 消息命中敏感词时由发送路径自动建任务(环形上限 2000);通过=保留消息,拒绝=标记已入库消息并向发送者发送 message.blocked 系统通知
content.extra.moderation=blocked 标记(正文保留),并给发送者写入一条 system_notification(extra.event=message.blocked)。命中词与原文快照保存在任务内,便于复核。告警
GET/POST /api/admin/apps/{appkey}/alerts/rules · GET .../alerts/events(IDL: admin.alerts.*)· 规则在维护周期(IM_MAINTENANCE_MS,默认 5s)评估;触发后写告警事件并按 HMAC-SHA256 的 X-IM-Signature 投递 webhook(best-effort,1 次重试)
功能配置
GET/POST /api/admin/apps/{appkey}/features(IDL: admin.features.get/set)· 功能级开关写穿到既有服务开通项 / 推送配置(不新建第二份状态)
接口调频
GET/POST /api/admin/apps/{appkey}/ratelimit(IDL: admin.ratelimit.get/set)· per Open API operation QPS 覆盖;默认关闭。超限返回 HTTP 429 + code 1008 RATE_LIMITED + Retry-After: 1(envelope 保留)
群组管理
GET /api/admin/apps/{appkey}/groups · 详情 GET .../groups/{groupId} · 成员 GET .../members · 禁言/踢人/全员禁言/转让/解散/资料(IDL: admin.groups.*)· 禁言与全员禁言写入既有 Group.muted / group_mute_all,群消息发送路径真实返回 1009
封禁用户
GET/POST /api/admin/apps/{appkey}/bans(IDL: admin.bans.list / admin.bans.apply)· 封禁/解封/注销/恢复,记录原因、时长、操作者与历史;写 User.banned / User.deactivated 并踢下线,全程写操作日志
测试用户配额
GET /api/admin/apps/{appkey}/test-users · POST .../users/{userId}/test-user · POST .../test-users/limit(IDL: admin.testUsers.*)· testUser 标记落库、列表徽标与筛选;上限默认 100,超限返回 4xx
testUser 字段,控制台以徽标展示;达到上限后标记新用户返回 HTTP 400 + code 1001(不静默截断)。聊天室
GET /api/admin/apps/{appkey}/chatrooms · 销毁 POST .../chatrooms/{chatroomId}/destroy · 全体禁言 POST .../chatrooms/{chatroomId}/mute-all(IDL: admin.chatrooms.*)· 聊天室为 ephemeral,服务重启后在线态自然消失
列表字段:chatroomId / name / owner / 在线数 / 成员数 / createdAt / keepalive(保活到期)/ destroyAt / 全体禁言状态。销毁会踢出在线成员并广播 destroyed;全体禁言与 Open API chatroom.mute-all 共用同一状态,可设置时长(秒,≤2592000)到期自动解除。
统计
GET /api/admin/stats · GET /api/admin/apps/{appkey}/stats/dimensions(IDL: admin.stats.dimensions)· DAU / 消息量 / 在线峰值 / 错误率 + 群组数 / 群消息量 / 聊天室数 / 聊天室消息量 + 按天趋势
推送通道
GET/POST /api/admin/apps/{appkey}/push/channels · POST .../push/channels/{channel}/test · GET .../push/stats(IDL: admin.push.channels.* / admin.push.stats)· APNs / FCM / 华为 / 小米 / OPPO / vivo 配置存储与校验;凭据脱敏;厂商发送未实现(不伪造成功)
implemented=false / delivered=false 与原因。真正的离线推送仍走既有 webhook(admin.push.test,未配置返回 1021)。推送投递
GET/DELETE /api/admin/apps/{appkey}/push/tokens · GET/POST .../push/deliveries · GET .../push/deliveries/{deliveryId} · POST .../push/deliveries/{deliveryId}/retry · GET .../push/stats(IDL: admin.push.tokens.* / admin.push.deliveries.*)· 设备 token 台账 + 服务端投递尝试记录 + 厂商适配器真实状态
not_configured。创建投递只会生成服务端尝试记录(有活跃 token → not_configured,无 → no_token),不会显示或伪造「已发送」。POST /api/apps/{appkey}/push/tokens(Bearer 用户 token)。管理端只做查询/注销;设备换绑时同一 (platform, token) 的旧用户记录会被置为已注销。no_token,有 token 的用户是 not_configured(厂商适配器未配置)。sent 恒为 0,只有真实厂商适配器上线后才可能非 0。翻译与机器人
GET/POST /api/admin/apps/{appkey}/translation · GET/POST /api/admin/apps/{appkey}/bots(IDL: admin.translation.* / admin.bots.*)· 翻译 provider / 目标语言 / 开关(存储 + 校验);机器人列表 / 创建 / 回调地址
IM_TRANSLATE_ENDPOINT 环境变量(重启生效);未配置时接口返回 1021,不返回伪造翻译。provider=mock 已弃用并被拒绝(4xx)。机器人回调复用既有 bot.integration(HMAC-SHA256 签名投递,事件枚举固定)。服务与 API 配置
GET/POST /api/admin/apps/{appkey}/services · /features · /ratelimit(IDL: admin.services.* / admin.features.* / admin.ratelimit.*)· 8 项服务开关、6 项功能开关、配额、限流窗口/阈值与消息路由策略(单一事实源)
1021 SERVICE_NOT_ACTIVATED;功能开关写穿到同一份服务/推送状态(不新建第二份)。限流为内存 1 秒滑动窗口,超限 HTTP 429 + code 1008 + Retry-After: 1;集群级配额需后续分布式实现。消息路由策略表描述的是服务端强制路径(非配置项)。嵌入代码
POST /api/admin/apps/{appkey}/embed/token(IDL: admin.embed.token)· 一次性 token + 过期时间 + 作用域 ⇒ <iframe src="/embed?token=..."> 精简视图(无侧边栏;公开兑换端点 /api/embed/session)
im-embed:ready / resize / event),不携带管理密钥。