docs: align api guide with appKey identity
这个提交包含在:
父节点
493bb73f5a
当前提交
9bb9868d31
@ -1,6 +1,6 @@
|
||||
# XuqmGroup Server 联调接口文档
|
||||
|
||||
> 最后更新:2026-04-28
|
||||
> 最后更新:2026-05-08
|
||||
|
||||
## 线上入口
|
||||
|
||||
@ -13,18 +13,18 @@
|
||||
| App 更新 | `https://dev.xuqinmin.com/api/v1/updates/` | 原生版本管理 |
|
||||
| RN 热更新 | `https://dev.xuqinmin.com/api/v1/rn/` | Bundle 热更新 |
|
||||
|
||||
## ID 约定
|
||||
## 应用标识约定
|
||||
|
||||
这套工程里同时存在两种“应用标识”,不要混用:
|
||||
|
||||
| 名称 | 含义 | 常见位置 |
|
||||
|------|------|----------|
|
||||
| `tenant appId` | 租户平台应用主键,`tenant-service` 的 `/api/apps/{id}`、`/api/apps/{appId}/services` 使用它 | 租户平台、服务配置页 |
|
||||
| `IM appKey` | IM 业务域作用域标识,`im-service` 的管理接口和消息接口虽然参数名仍叫 `appId`,但实际传的是这个值 | IM 管理页、IM HTTP 接口 |
|
||||
| `tenant appKey` | 租户平台应用唯一标识,`tenant-service` 的 `/api/apps/{appKey}`、`/api/apps/{appKey}/services` 使用它 | 租户平台、服务配置页 |
|
||||
| `IM appKey` | IM 业务域作用域标识,`im-service` 的管理接口和消息接口虽然历史参数名仍叫 `appId`,但实际传的是这个值 | IM 管理页、IM HTTP 接口 |
|
||||
|
||||
结论:
|
||||
|
||||
- `tenant-platform` 的“服务配置”只认租户 `app.id`
|
||||
- `tenant-platform` 的“服务配置”只认租户 `appKey`
|
||||
- `tenant-platform` 的“IM 管理”必须带 `appKey`
|
||||
- `tenant-platform` 的“离线推送 / 版本管理”只需要一次开通,平台差异配置在各自的管理页里维护,不再按 Android / iOS / 鸿蒙分别申请开通
|
||||
- `im-service` 代码里沿用旧参数名 `appId`,但这是历史命名,调用方传的是 `appKey`
|
||||
@ -83,14 +83,14 @@
|
||||
| POST | `/api/auth/forgot-password` | 否 | 发送找回密码邮件 |
|
||||
| POST | `/api/auth/reset-password` | 否 | 重置密码 |
|
||||
| GET | `/api/apps` | 是 | 应用列表 |
|
||||
| GET | `/api/apps/{id}` | 是 | 应用详情 |
|
||||
| GET | `/api/apps/{appKey}` | 是 | 应用详情 |
|
||||
| POST | `/api/apps` | 是 | 创建应用 |
|
||||
| PUT | `/api/apps/{id}` | 是 | 更新应用 |
|
||||
| DELETE | `/api/apps/{id}` | 是 | 删除应用 |
|
||||
| GET | `/api/apps/{appId}/services` | 是 | 服务列表 |
|
||||
| PUT | `/api/apps/{appId}/services/config` | 是 | 更新服务配置,IM 和 UPDATE 走各自的配置模型 |
|
||||
| POST | `/api/apps/{appId}/services/toggle` | 是 | 开关服务 |
|
||||
| POST | `/api/apps/{appId}/services/{id}/regenerate-key` | 是 | 重新生成服务密钥 |
|
||||
| PUT | `/api/apps/{appKey}` | 是 | 更新应用 |
|
||||
| DELETE | `/api/apps/{appKey}` | 是 | 删除应用 |
|
||||
| GET | `/api/apps/{appKey}/services` | 是 | 服务列表 |
|
||||
| PUT | `/api/apps/{appKey}/services/config` | 是 | 更新服务配置,IM 和 UPDATE 走各自的配置模型 |
|
||||
| POST | `/api/apps/{appKey}/services/toggle` | 是 | 开关服务 |
|
||||
| POST | `/api/apps/{appKey}/services/{id}/regenerate-key` | 是 | 重新生成服务密钥 |
|
||||
| GET | `/api/sub-accounts` | 是 | 子账号列表 |
|
||||
| POST | `/api/sub-accounts/send-verify-code` | 是 | 子账号邮箱验证码 |
|
||||
| POST | `/api/sub-accounts/verify-email` | 是 | 校验子账号邮箱 |
|
||||
@ -162,18 +162,18 @@
|
||||
| GET | `/api/v1/rn/update/check` | 否 | 检查 RN 热更新 |
|
||||
| POST | `/api/v1/rn/upload` | 是 | 上传 Bundle |
|
||||
| POST | `/api/v1/rn/{id}/publish` | 是 | 发布 Bundle |
|
||||
| GET | `/api/v1/rn/files/{appId}/{platform}/{moduleId}` | 否 | 下载 Bundle |
|
||||
| GET | `/api/v1/rn/files/{appKey}/{platform}/{moduleId}` | 否 | 下载 Bundle |
|
||||
|
||||
### tenant-service 提供给 update-sdk 的公共配置接口
|
||||
|
||||
| 方法 | 路径 | 鉴权 | 说明 |
|
||||
|------|------|------|------|
|
||||
| GET | `/api/sdk/config` | 否 | 发版脚本读取租户级默认配置;`appId` 可以传 `appKey`,`platform` 用于读取当前平台的 UPDATE 配置 |
|
||||
| GET | `/api/sdk/config` | 否 | 发版脚本读取租户级默认配置;`appKey` 用于读取当前平台的 UPDATE 配置 |
|
||||
|
||||
说明:
|
||||
|
||||
- 这里的 `appId` 按 `appKey` 解析;当前 demo 默认使用 `ak_demo_chat`,`tenant-service` 会优先复用数据库里已有的应用,如果没有,会自动补一条默认 demo 应用和基础服务配置。
|
||||
- `GET /api/sdk/config` 主要给 `update-sdk` 脚本使用,脚本侧建议传 `appKey`。接口会根据 `platform` 返回当前平台的 UPDATE 默认配置和开关状态。
|
||||
- 这里的 `appKey` 按唯一应用标识解析;当前 demo 默认使用 `ak_demo_chat`,`tenant-service` 会优先复用数据库里已有的应用,如果没有,会自动补一条默认 demo 应用和基础服务配置。
|
||||
- `GET /api/sdk/config` 主要给 `update-sdk` 脚本使用,脚本侧直接传 `appKey`。接口会根据 `platform` 返回当前平台的 UPDATE 默认配置和开关状态。
|
||||
- 应用商店配置页分成两个 tab:`凭据配置` 和 `应用配置指引`。App Store / 鸿蒙只保留 `marketUrl` 跳转页,且该字段是可选项;Android 市场继续保留审核凭据。审核通知使用单独的 `REVIEW_WEBHOOK` 配置,只保存一次,所有市场共用,并会在保存时先做连通性校验。
|
||||
- 发布配置页保存灰度默认模式、成员目录同步回调和成员选择回调,两个回调都支持单独配置 `secret`,调用时会带 `X-Xuqm-Callback-Secret`。
|
||||
- `POST /api/im/auth/login` 还要求 demo-service 通过 AppSecret 生成签名头再转发给 IM 服务。
|
||||
@ -182,10 +182,10 @@
|
||||
- `GET /api/v1/updates/app/check` 现在按“当前版本之后的最高已发布版本”返回更新信息,但 `forceUpdate` 会按照“当前版本之后是否存在任意一条强更版本”来计算,所以后续发布的非强更版本不会覆盖更低版本当时应看到的强更提示。
|
||||
- RN bundle 建议打成 zip 后再上传,zip 内至少包含 `rn-manifest.json`、bundle 文件和资源文件;update-service 会优先从 manifest 自动读取 `moduleId`、`version` / `bundleVersion`、`minCommonVersion` 和 `packageName`。
|
||||
- 租户平台里的“发布配置”标签页保存灰度默认模式、成员目录同步回调和成员选择回调;当默认模式切到成员灰度时,至少要配置一个回调才允许保存,保存前也会做连通性校验。
|
||||
- 上下架、上传、发布、灰度、市场提交、商店配置变更都会写入 `update_operation_log`,可通过 `GET /api/v1/updates/ops/logs?appId=...` 查询。
|
||||
- 上下架、上传、发布、灰度、市场提交、商店配置变更都会写入 `update_operation_log`,可通过 `GET /api/v1/updates/ops/logs?appKey=...` 查询。
|
||||
- 提交应用市场会真实调用已实现的厂商接口。小米、OPPO、vivo 和华为/荣耀当前支持服务端提交;App Store、Google Play、鸿蒙仍以跳转页和人工流程为主。
|
||||
- 租户平台控制台新增 `GET /api/dashboard/stats`,返回当前租户的应用数、已开通服务数和子账号数,同时会写一条 `CONSOLE / DASHBOARD / VIEW_DASHBOARD` 操作日志。
|
||||
- 租户平台“操作日志”菜单现在集中查看租户平台与版本管理两类日志;版本管理日志继续按 `appId` 查询,控制台访问日志则落在 `t_operation_log`。
|
||||
- 租户平台“操作日志”菜单现在集中查看租户平台与版本管理两类日志;版本管理日志继续按 `appKey` 查询,控制台访问日志则落在 `t_operation_log`。
|
||||
|
||||
## update-sdk 自动发版
|
||||
|
||||
@ -211,7 +211,7 @@ Android SDK 的整包发版脚本支持通过“检查版本 -> 打包 -> 上传
|
||||
|
||||
推荐流程:
|
||||
|
||||
1. 脚本先调用 `GET /api/sdk/config?appId=<appKey>&platform=<platform>`。
|
||||
1. 脚本先调用 `GET /api/sdk/config?appKey=<appKey>&platform=<platform>`。
|
||||
2. 如果服务未开通或配置缺失,则进入 dry-run 或提示补齐配置。
|
||||
3. 脚本读取服务器最新版本,和本地版本对比。
|
||||
4. 本地版本不高于服务端时,提示用户重新输入版本名 / 版本码。
|
||||
@ -234,8 +234,8 @@ curl -X POST 'https://dev.xuqinmin.com/api/auth/ops/login' \
|
||||
### App 更新检查
|
||||
|
||||
```bash
|
||||
curl 'https://dev.xuqinmin.com/api/v1/updates/app/check?appId=ak_demo_chat&platform=ANDROID¤tVersionCode=1'
|
||||
curl 'https://dev.xuqinmin.com/api/v1/updates/app/check?appId=ak_demo_chat&platform=HARMONY¤tVersionCode=1'
|
||||
curl 'https://dev.xuqinmin.com/api/v1/updates/app/check?appKey=ak_demo_chat&platform=ANDROID¤tVersionCode=1'
|
||||
curl 'https://dev.xuqinmin.com/api/v1/updates/app/check?appKey=ak_demo_chat&platform=HARMONY¤tVersionCode=1'
|
||||
```
|
||||
|
||||
Harmony 平台只跳转应用市场,不提供本地安装包下载。
|
||||
@ -243,13 +243,13 @@ Harmony 平台只跳转应用市场,不提供本地安装包下载。
|
||||
### RN 热更新检查
|
||||
|
||||
```bash
|
||||
curl 'https://dev.xuqinmin.com/api/v1/rn/update/check?appId=ak_demo_chat&platform=ANDROID&moduleId=chat-home¤tVersion=1.0.0'
|
||||
curl 'https://dev.xuqinmin.com/api/v1/rn/update/check?appKey=ak_demo_chat&platform=ANDROID&moduleId=chat-home¤tVersion=1.0.0'
|
||||
```
|
||||
|
||||
### IM 登录
|
||||
|
||||
```bash
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/auth/login?appId=ak_demo_chat&userId=demo_alice'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/auth/login?appKey=ak_demo_chat&userId=demo_alice'
|
||||
```
|
||||
|
||||
返回示例中的 `data` 只包含 `token`。如果需要更新登录态,请由业务服务端重新调用登录接口并覆盖当前会话。
|
||||
@ -257,80 +257,80 @@ curl -X POST 'https://dev.xuqinmin.com/api/im/auth/login?appId=ak_demo_chat&user
|
||||
### IM 会话与关系链
|
||||
|
||||
```bash
|
||||
curl 'https://dev.xuqinmin.com/api/im/accounts/user_001?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/accounts/import?appId=ak_demo_chat' \
|
||||
curl 'https://dev.xuqinmin.com/api/im/accounts/user_001?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/accounts/import?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"userId":"user_001","nickname":"Alice"}'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/accounts/import/batch?appId=ak_demo_chat' \
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/accounts/import/batch?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '[{"userId":"user_001"},{"userId":"user_002"}]'
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/accounts/user_001?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/accounts/user_001/exists?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/conversations?appId=ak_demo_chat'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/conversations/user_002/pinned?appId=ak_demo_chat&chatType=SINGLE&pinned=true'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/conversations/user_002/draft?appId=ak_demo_chat&chatType=SINGLE&draft=hello'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/conversations/user_002/hidden?appId=ak_demo_chat&chatType=SINGLE&hidden=true'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/conversations/user_002/group?appId=ak_demo_chat&chatType=SINGLE&groupName=重要客户'
|
||||
curl 'https://dev.xuqinmin.com/api/im/conversation-groups?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/conversation-groups/重要客户?appId=ak_demo_chat'
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/conversations/user_002?appId=ak_demo_chat&chatType=SINGLE'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/friends/user_002/group?appId=ak_demo_chat&groupName=同事'
|
||||
curl 'https://dev.xuqinmin.com/api/im/friends/groups?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/friends/groups/同事?appId=ak_demo_chat'
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/friends?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/public?appId=ak_demo_chat&keyword=demo'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/search?appId=ak_demo_chat&keyword=demo&size=20'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/group_001/members?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/group_001/members/search?appId=ak_demo_chat&keyword=demo&size=20'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/owner?appId=ak_demo_chat' \
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/accounts/user_001?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/accounts/user_001/exists?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/conversations?appKey=ak_demo_chat'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/conversations/user_002/pinned?appKey=ak_demo_chat&chatType=SINGLE&pinned=true'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/conversations/user_002/draft?appKey=ak_demo_chat&chatType=SINGLE&draft=hello'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/conversations/user_002/hidden?appKey=ak_demo_chat&chatType=SINGLE&hidden=true'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/conversations/user_002/group?appKey=ak_demo_chat&chatType=SINGLE&groupName=重要客户'
|
||||
curl 'https://dev.xuqinmin.com/api/im/conversation-groups?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/conversation-groups/重要客户?appKey=ak_demo_chat'
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/conversations/user_002?appKey=ak_demo_chat&chatType=SINGLE'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/friends/user_002/group?appKey=ak_demo_chat&groupName=同事'
|
||||
curl 'https://dev.xuqinmin.com/api/im/friends/groups?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/friends/groups/同事?appKey=ak_demo_chat'
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/friends?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/public?appKey=ak_demo_chat&keyword=demo'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/search?appKey=ak_demo_chat&keyword=demo&size=20'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/group_001/members?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/group_001/members/search?appKey=ak_demo_chat&keyword=demo&size=20'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/owner?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"newOwnerId":"user_002"}'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/groups/group_001/attributes?appId=ak_demo_chat' \
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/groups/group_001/attributes?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"department":"sales","priority":"high"}'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/attributes/delete?appId=ak_demo_chat' \
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/attributes/delete?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"keys":["priority"]}'
|
||||
curl 'https://dev.xuqinmin.com/api/im/messages/search?appId=ak_demo_chat&keyword=hello&page=0&size=20'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/webhooks?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests?appId=ak_demo_chat&remark=申请加入'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests/req_001/accept?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests/req_001/reject?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/blacklist?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/blacklist/check?appId=ak_demo_chat&targetUserId=user_002'
|
||||
curl 'https://dev.xuqinmin.com/api/im/friend-requests?appId=ak_demo_chat&direction=incoming'
|
||||
curl 'https://dev.xuqinmin.com/api/im/messages/search?appKey=ak_demo_chat&keyword=hello&page=0&size=20'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/webhooks?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests?appKey=ak_demo_chat&remark=申请加入'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests/req_001/accept?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests/req_001/reject?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/blacklist?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/blacklist/check?appKey=ak_demo_chat&targetUserId=user_002'
|
||||
curl 'https://dev.xuqinmin.com/api/im/friend-requests?appKey=ak_demo_chat&direction=incoming'
|
||||
```
|
||||
|
||||
### IM 管理后台接口
|
||||
|
||||
```bash
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/users?appId=ak_demo_chat&page=0&size=20'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/groups?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/messages?appId=ak_demo_chat&userA=user_001&userB=user_002&page=0&size=20'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/operation-logs?appId=ak_demo_chat&page=0&size=20'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/messages/msg_001/revoke?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/users?appKey=ak_demo_chat&page=0&size=20'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/groups?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/messages?appKey=ak_demo_chat&userA=user_001&userB=user_002&page=0&size=20'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/operation-logs?appKey=ak_demo_chat&page=0&size=20'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/messages/msg_001/revoke?appKey=ak_demo_chat'
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/admin/groups/group_001'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/friend-requests?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/friend-requests/req_001/accept?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/blacklist?appId=ak_demo_chat' \
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/friend-requests?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/friend-requests/req_001/accept?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/blacklist?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"userId":"user_001","blockedUserId":"user_002"}'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/members?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/owner?appId=ak_demo_chat' \
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/members?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/owner?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"newOwnerId":"user_002"}'
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/attributes?appId=ak_demo_chat' \
|
||||
curl -X PUT 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/attributes?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"department":"sales"}'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/read-receipts?appId=ak_demo_chat' \
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/read-receipts?appKey=ak_demo_chat' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"messageIds":["msg_001","msg_002"]}'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/join-requests?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/join-requests/req_001/accept?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/keyword-filters?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/global-mute?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/join-requests?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/admin/groups/group_001/join-requests/req_001/accept?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/keyword-filters?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/admin/global-mute?appKey=ak_demo_chat'
|
||||
```
|
||||
|
||||
### IM Webhook 回调
|
||||
@ -490,22 +490,22 @@ export function verifyWebhook({
|
||||
### 好友申请 / 黑名单
|
||||
|
||||
```bash
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/friend-requests?appId=ak_demo_chat&toUserId=user_002&remark=hi'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/friend-requests/req_001/accept?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/friend-requests/req_001/reject?appId=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests?appId=ak_demo_chat&remark=申请加入'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests/req_001/accept?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests/req_001/reject?appId=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/blacklist?appId=ak_demo_chat&blockedUserId=user_002'
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/blacklist?appId=ak_demo_chat&blockedUserId=user_002'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/friend-requests?appKey=ak_demo_chat&toUserId=user_002&remark=hi'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/friend-requests/req_001/accept?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/friend-requests/req_001/reject?appKey=ak_demo_chat'
|
||||
curl 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests?appKey=ak_demo_chat&remark=申请加入'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests/req_001/accept?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/groups/group_001/join-requests/req_001/reject?appKey=ak_demo_chat'
|
||||
curl -X POST 'https://dev.xuqinmin.com/api/im/blacklist?appKey=ak_demo_chat&blockedUserId=user_002'
|
||||
curl -X DELETE 'https://dev.xuqinmin.com/api/im/blacklist?appKey=ak_demo_chat&blockedUserId=user_002'
|
||||
```
|
||||
|
||||
### IM 历史过滤查询
|
||||
|
||||
```bash
|
||||
curl 'https://dev.xuqinmin.com/api/im/messages/history/user_002?appId=ak_demo_chat&page=0&size=20&keyword=hello&msgType=TEXT'
|
||||
curl 'https://dev.xuqinmin.com/api/im/messages/group-history/group_001?appId=ak_demo_chat&page=0&size=20&keyword=user_002&startTime=2026-04-27T00:00:00&endTime=2026-04-27T23:59:59'
|
||||
curl 'https://dev.xuqinmin.com/api/im/messages/history/user_002?appKey=ak_demo_chat&page=0&size=20&keyword=hello&msgType=TEXT'
|
||||
curl 'https://dev.xuqinmin.com/api/im/messages/group-history/group_001?appKey=ak_demo_chat&page=0&size=20&keyword=user_002&startTime=2026-04-27T00:00:00&endTime=2026-04-27T23:59:59'
|
||||
```
|
||||
|
||||
支持的筛选参数:`keyword`、`msgType`、`startTime`、`endTime`。
|
||||
@ -517,7 +517,7 @@ curl -X POST 'https://file.dev.xuqinmin.com/api/file/upload' \
|
||||
-H 'Authorization: Bearer <im_jwt>' \
|
||||
-F 'file=@image.jpg'
|
||||
|
||||
curl -X POST 'https://im.dev.xuqinmin.com/api/im/messages/send?appId=ak_demo_chat' \
|
||||
curl -X POST 'https://im.dev.xuqinmin.com/api/im/messages/send?appKey=ak_demo_chat' \
|
||||
-H 'Authorization: Bearer <im_jwt>' \
|
||||
-H 'Content-Type: application/json' \
|
||||
-d '{"toId":"user_002","chatType":"SINGLE","msgType":"IMAGE","content":"{\"url\":\"https://file.dev.xuqinmin.com/api/file/abc\"}"}'
|
||||
|
||||
正在加载...
在新工单中引用
屏蔽一个用户