服务开通
服务开通控制应用级能力开关:关闭后相关 Open API 与客户端能力返回 1021 SERVICE_NOT_ACTIVATED。自托管版没有“购买/开通订单”,这里的开关就是唯一事实源;部分能力(如敏感词过滤)即使关闭管理开关也仍生效,详见下表。
概念
| ServiceKey | 控制的能力 | 关闭后的行为 |
|---|---|---|
private_chat | 单聊消息发布(message.private.publish、状态消息) | 上述发布接口 1021;好友/资料等接口不在此开关门禁内 |
group | 群组创建/成员/消息/状态消息 | 群相关写操作与群消息发布 1021 |
supergroup | 超级群与频道/用户组 | super 群与 supergroup.* 接口 1021 |
chatroom | 聊天室创建/加入/消息/治理 | 聊天室接口与聊天室消息发布 1021;控制台仍可看历史房间 |
system_notification | 系统通知发布 | 系统通知发布 1021 |
callbacks | 回调事件投递与配置 | 事件不入队;回调类 Open API 1021;控制台测试投递 1024 |
message_routing | 消息路由标记(预留) | 当前服务端没有读取该开关,未强制;路由由服务/回调/推送配置共同决定 |
sensitive_words | 敏感词管理接口门禁 | 6 个词表管理接口 1021;已配置词表的过滤仍生效 |
- 读写接口:
GET/POST /api/admin/apps/{appkey}/services;写入是整体覆盖services映射,未传的键会回到默认关闭。 - 控制台「服务与 API 配置」页与「功能配置」页读写同一份状态,不存在第二份开关。
- 配额(群/聊天室成员上限、消息频率)也随本接口的
quotas一起保存,见「配额」。
前置条件
- 服务端已启动(默认
http://127.0.0.1:8080),控制台入口http://127.0.0.1:8080/console/#services(tab#services:服务开通)。 - 请求头
X-Admin-Secret与服务端IM_ADMIN_SECRET一致(本地默认dev-admin)。 - 已在控制台选中应用;带
{appkey}的接口都按应用隔离。 - 自托管版无购买、计费、套餐、续费与发票流程(不适用项);本页只覆盖配置、查询与治理接口。
步骤
- 读取当前开通项
先 GET,保存现有映射,避免整体覆盖时误关其它能力。
- 按需开启
提交完整
services映射;只改需要变更的键,其余保持原值。 - 验证业务接口
调用对应 Open API;关闭时应返回 1021,开启后恢复正常。
- 与功能开关对齐
features页的 6 个开关映射到本页的 services,改任意一侧都会写穿同一状态。
参数表
| 操作 | 方法与路径 | 请求体 |
|---|---|---|
| 读取 | GET /api/admin/apps/{appkey}/services | — |
| 整体更新 | POST /api/admin/apps/{appkey}/services | {services:{ServiceKey:bool},quotas?} |
| 功能开关映射 | GET /api/admin/apps/{appkey}/features | —(含 mapping 说明) |
示例
开启聊天室并关闭回调
Shell
# 先读,保留其它键
curl -sS -X GET "http://127.0.0.1:8080/api/admin/apps/demo/services" \
-H 'X-Admin-Secret: dev-admin'
curl -sS -X POST "http://127.0.0.1:8080/api/admin/apps/demo/services" \
-H 'X-Admin-Secret: dev-admin' \
-H 'content-type: application/json' \
-d '{"services":{"private_chat":true,"group":true,"supergroup":false,"chatroom":true,"system_notification":true,"callbacks":false,"message_routing":true,"sensitive_words":true}}'常见问题
关闭 sensitive_words 后敏感词还生效吗?
生效。该开关只门禁词表管理接口;已保存的词表仍参与发送时过滤。
关闭 callbacks 会丢历史投递吗?
不会删除历史日志,但新事件不再入队;重新开启后只投递新事件。
为什么开启后仍返回 1021?
确认改的是当前 appkey,且提交的是完整映射;整体覆盖时漏传的键会被置为关闭。
自托管需要“购买服务”吗?
不需要。没有订单、计费或有效期;开关即能力边界。