diff --git a/docs/.vuepress/sidebar/document.ts b/docs/.vuepress/sidebar/document.ts index 0f9ca48a..8050d473 100644 --- a/docs/.vuepress/sidebar/document.ts +++ b/docs/.vuepress/sidebar/document.ts @@ -353,7 +353,17 @@ const documentSidebar = [ children: [ { text: '管理群组', link: 'group_manage.html' }, { text: '管理群组文件', link: 'group_file.html' }, - { text: '管理群组成员', link: 'group_member.html' }, + { text: '管理群组成员', + children: [ + { text: '获取成员列表', link: 'group_member_obtain.html' }, + { text: '添加/移除成员', link: 'group_member_add_delete.html' }, + { text: '管理群成员自定义属性', link: 'group_member_attribute.html' }, + { text: '管理群主/管理员', link: 'group_member_admin.html' }, + { text: '管理禁言', link: 'group_member_mutelist.html' }, + { text: '管理白名单', link: 'group_member_allowlist.html' }, + { text: '管理黑名单', link: 'group_member_blocklist.html' } + ] + }, { text: '管理子区', link: 'group_thread.html' } ] }, @@ -363,7 +373,17 @@ const documentSidebar = [ { text: '管理超级管理员', link: 'chatroom_superadmin.html' }, { text: '管理聊天室', link: 'chatroom_manage.html' }, { text: '管理聊天室属性', link: 'chatroom_attribute.html' }, - { text: '管理聊天室成员', link: 'chatroom_member.html' } + { text: '管理聊天室成员', + children: [ + { text: '获取成员列表', link: 'chatroom_member_obtain.html' }, + { text: '添加/移除成员', link: 'chatroom_member_add_delete.html' }, + { text: '管理聊天室所有者/管理员', link: 'chatroom_member_admin.html' }, + { text: '管理禁言', link: 'chatroom_member_mutelist.html' }, + { text: '管理用户标签及禁言', link: 'chatroom_label_mute.html' }, + { text: '管理白名单', link: 'chatroom_member_allowlist.html' }, + { text: '管理黑名单', link: 'chatroom_member_blocklist.html' } + ] + } ] }, { @@ -372,7 +392,8 @@ const documentSidebar = [ { text: '用户体系管理', link: 'account_system.html' }, { text: '用户属性', link: 'userprofile.html' }, { text: '用户状态订阅', link: 'presence.html' }, - // { text: '用户收藏', link: 'favorite.html'}, + { text: '用户全局禁言', link: 'user_global_mute.html' }, + { text: '用户收藏', link: 'user_favorite.html'}, { text: '用户关系管理', link: 'user_relationship.html' } ] }, diff --git a/docs/README.md b/docs/README.md index 5ad4b691..bb9fc81f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -816,7 +816,7 @@ projects: link: /document/electron/group.html#群成员管理 - icon: /sdk/rest.svg text: REST - link: /document/server-side/group_member.html#管理群组成员 + link: /document/server-side/group_member_obtain.html#管理群组成员 - text: 管理群组属性 desc: 支持修改群组名称及描述、获取和更新群组公告、管理群共享文件和更新群扩展字段。 sdks: @@ -924,7 +924,7 @@ projects: link: /document/electron/chatroom.html#加入聊天室 - icon: /sdk/rest.svg text: REST - link: /document/server-side/chatroom_member.html#管理聊天室成员 + link: /document/server-side/chatroom_member_obtain.html#管理聊天室成员 - text: 管理聊天室属性 desc: 管理聊天室基本属性,包括聊天室名称、描述和公告,以及自定义属性。 sdks: @@ -1126,6 +1126,18 @@ projects: - icon: /sdk/rest.svg text: REST link: /document/server-side/presence.html + - text: 用户全局禁言 + desc: 设置单个用户 ID 的单聊、群组或聊天室消息的全局禁言。设置成功后,该用户将无法在对应的单聊、群组或聊天室中发送消息。 + sdks: + - icon: /sdk/rest.svg + text: REST + link: /document/server-side/user_global_mute.html + - text: 用户收藏 + desc: 支持收藏聊天过程中发送成功的各类消息或你的其他自定义内容。这些收藏的内容永久保存,你可以随时查看。 + sdks: + - icon: /sdk/rest.svg + text: REST + link: /document/server-side/user_favorite.html - text: 多设备登录 desc: 同一账号在多个设备上登录,所有已登录的设备之间可以同步消息、好友和群组相关操作、子区操作以及会话操作。 sdks: diff --git a/docs/document/server-side/account_system.md b/docs/document/server-side/account_system.md index de14e4d6..b8b58a32 100644 --- a/docs/document/server-side/account_system.md +++ b/docs/document/server-side/account_system.md @@ -1489,318 +1489,4 @@ curl -L -X GET 'http://XXXX/XXXX/XXXX/users/XXXX/resources' \ | 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | | 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 | -关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。 - -## 用户全局禁言 - -随着监管机制日益完善,对 app 的监管不断加强,安全合规逐渐成为 app 的生命线。 - -为加强 app 管理,环信即时通讯提供全局禁言功能,对 app 提供用户 ID 级别的禁言管理,支持在管理员发现用户违规后进行全局禁言,以维护 app 良好的内容生态环境。禁言到期后,服务器会自动解除禁言,恢复该用户发送消息的权限。 - -你可以对单个用户 ID 设置单聊、群组或聊天室消息全局禁言。禁言后,该用户无论通过调用客户端 API,还是使用服务端 RESTful API 都将无法在对应的单聊、群组或聊天室发送消息。 - -该功能可广泛用于实时互动 app 中,例如发现某用户频繁向多个聊天室发送违规广告,则可以对该用户开启全局聊天室禁言 15 天;发现某用户发表触犯红线的政治言论,则可以全局永久禁言,用户申诉通过后可以解禁。 - -使用该功能前,你需先查看你的 IM 套餐版本是否开通了该功能。该功能与 IM 套餐包版本之间的开通关系,详见[产品计费](/product/pricing.html#套餐包功能详情)。 - -### 设置用户全局禁言 - -设置单个用户 ID 的单聊、群组或聊天室消息的全局禁言。设置成功后,该用户将无法在对应的单聊、群组或聊天室中发送消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/mutes -``` - -##### 路径参数 - -参数及说明详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :---------- | :----- | :------- | :----------------------- | -| `username` | String | 是 | 设置全局禁言的用户 ID。 | -| `chat` | Int | 否 | 单聊禁言时长,单位为秒,最大值为 `2147483647`。
- > `0`:该用户 ID 的单聊禁言时长。
- `0`:取消该用户的单聊禁言。
- `-1`:该用户被设置永久单聊禁言。
- 其他负值无效。 | -| `groupchat` | Int | 否 | 群组禁言时长,单位为秒,规则同单聊禁言。 | -| `chatroom` | Int | 否 | 聊天室禁言时长,单位为秒,规则同单聊禁言。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :----- | :-------------------------------------------- | -| `data.result` | String | 是否成功设置用户全局禁言。`ok` 表示设置成功。 | - -其他字段及说明详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -L -X POST 'https://XXXX/XXXX/XXXX/mutes' \ --H 'Authorization: Bearer ' \ --H 'Content-Type: application/json' \ ---data-raw '{ - "username": "zs1", - "chat": 100, - "groupchat": 100, - "chatroom": 100 -}' -``` - -##### 响应示例 - -```json -{ - "path": "/mutes", - "uri": "https://XXXX/XXXX/XXXX/mutes", - "timestamp": 1631609754727, - "organization": "XXXX", - "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d", - "action": "post", - "data": { - "result": "ok" - }, - "duration": 74, - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----- | :---------- | :-------- | :------------------| :------------------------| -| 400 | required_property_not_found | Entity user requires a property named username | 用户不存在。 | 先注册用户或者检查用户名是否正确。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 | - -关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。 - -### 查询单个用户 ID 全局禁言 - -查询单个用户的单聊、群聊和聊天室的全局禁言详情。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/mutes/{username} -``` - -##### 路径参数 - -参数及说明详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------------------------------------------------------------------------------------------------------- | -| `Content-Type` | String | 是 | 内容类型,请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :--------------- | :----- | :------------------ | -| `data.userid` | String | 设置禁言的用户 ID。 | -| `data.chat` | Int | 单聊剩余禁言时间,单位为秒。最大值为 `2147483647`。
- > 0:该用户 ID 剩余的单聊禁言时长。
- `0`:该用户的单聊消息禁言已取消。
- `-1`:该用户被设置永久单聊消息禁言。 | -| `data.groupchat` | Int | 群组消息剩余禁言时长,单位为秒,规则同单聊禁言。 | -| `data.chatroom` | Int | 聊天室消息剩余禁言时长,单位为秒,规则同单聊禁言。 | -| `data.unixtime` | Int | 当前操作的 Unix 时间戳。 | - -其他字段及说明详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -L -X GET 'https://XXXX/XXXX/XXXX/mutes/zs1' \ --H 'Authorization: Bearer ' \ --H 'Content-Type: application/json' -``` - -##### 响应示例 - -```json -{ - "path": "/mutes", - "uri": "https://XXXX/XXXX/XXXX/mutes", - "timestamp": 1631609831800, - "organization": "XXXX", - "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d", - "action": "get", - "data": { - "userid": "XXXX#restys_zs1", - "chat": 96, - "groupchat": 96, - "chatroom": 96, - "unixtime": 1631609831 - }, - "duration": 13, - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :---------- | :------------------| :-------------------| :-----------| :------------| -| 400 | required_property_not_found | Entity user requires a property named username | 用户不存在。 | 先注册用户或者检查用户名是否正确。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。| - -关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。 - -### 查询 app 下的所有全局禁言的用户 - -该方法查询 app 下所有全局禁言的用户及其禁言剩余时间。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/mutes -``` - -##### 路径参数 - -参数及说明详见[公共参数](#公共参数)。 - -##### 查询参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :--- | :------- | :---------------------------------------------------- | -| `pageNum` | Int | 否 | 请求查询的页码。 | -| `pageSize` | Int | 否 | 请求查询每页显示的禁言用户的数量。取值范围为 [1,50]。 | - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :--------------------------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中的 `data` 字段描述如下: - -| 字段 | 类型 | 描述 | -| :-------------------- | :-------- | :---------------------- | -| `data` | JSON Array | 获取的所有全局禁言的用户的信息。 | -| - `username` | String | 设置禁言的用户 ID。 | -| - `chat` | Int | 单聊消息剩余禁言时间,单位为秒。最大值为 `2147483647`。
- > 0:该用户 ID 具体的单聊消息禁言时长。
- `0`:该用户的单聊消息禁言已取消。
- `-1`:该用户被设置永久单聊消息禁言。 | -| - `groupchat` | Int | 群组消息剩余禁言时长,单位为秒,规则同上。| -| - `chatroom` | Int | 聊天室消息剩余禁言时长,单位为秒,规则同上。 | -| - `unixtime` | Long | 当前操作的 Unix 时间戳,单位为毫秒。 | - -其他字段及说明详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -L -X GET 'https://XXXX/XXXX/XXXX/mutes?pageNum=1&pageSize=10' \ --H 'Authorization: Bearer ' \ --H 'Content-Type: application/json' -``` - -##### 响应示例 - -```json -{ - "path": "/mutes", - "uri": "https://XXXX/XXXX/XXXX/mutes", - "timestamp": 1631609858771, - "organization": "XXXX", - "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d", - "action": "get", - "data": { - "data": [ - { - "username": "zs2", - "chatroom": 0 - }, - { - "username": "zs1", - "groupchat": 69 - }, - { - "username": "zs1", - "chat": 69 - }, - { - "username": "zs1", - "chatroom": 69 - }, - { - "username": "h2", - "chatroom": 0 - }, - { - "username": "h2", - "groupchat": 0 - }, - { - "username": "h2", - "chat": 0 - } - ], - "unixtime": 1631609858 - }, - "duration": 17, - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :---------- | :------------------| :--------------------| :------------------| :----------------| -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 | - -关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。 - - - - - - - +关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。 \ No newline at end of file diff --git a/docs/document/server-side/chatroom_label_mute.md b/docs/document/server-side/chatroom_label_mute.md new file mode 100644 index 00000000..0a48d61f --- /dev/null +++ b/docs/document/server-side/chatroom_label_mute.md @@ -0,0 +1,334 @@ +# 聊天室用户标签禁言 + + + +环信即时通讯 IM 支持设置用户在聊天室中的标签,并按标签用户禁言。**要使用这些 RESTful API,需联系商务开通功能。** + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。 +- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `chatroom_id` | String | 是 | 聊天室 ID。 | +| `username` | String | 是 | 用户 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :------------------- | :----- | :------------ | +| `action` | String | 请求方法。 | +| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 数据详情。 | +| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | + +## 认证方式 + +环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 按聊天室用户标签禁言 + +可以控制标签下的用户是否可以在聊天室中发言。 + +**调用频率上限**:100 次/秒/App Key + +#### HTTP 请求 + +```http +PUT https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/tag/mute +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------------------------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------------------------------------------- | +| `mute_duration` | Long | 是 | 禁言时长,从当前时间开始计算。单位为秒。`0` 表示取消禁言,`-1` 表示永久禁言。 | +| `tag` | String | 是 | 标签名称,标签名称长度不能超过32字符。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :--- | :------------------------------------------------------ | +| `data.result` | Bool | 是否成功禁言:
- `true`:是;
- `false`:否。 | +| `properties` | JSON | 开发者无需关注该字段。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X PUT 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/tag/mute' \ +-H 'Content-Type: application/json' \ +-H 'Accept: application/json' \ +-H 'Authorization: Bearer ' \ +-d '{ + "tag": "t1", + "mute_duration": 30 +} +``` + +##### 响应示例 + +```json +{ + "action": "put", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/tag/mute", + "entities":[], + "data": { + "result": true + }, + "timestamp": 1489072189508, + "duration": 0, + "properties":{}, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :---------- | :----------------- | :--------- | :------------------------------------ | :----------------------------------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | +| 403 | forbidden_op | Group tag mute is disabled | 聊天室标签禁言功能没有开通。 | 联系环信商务开通聊天室标签禁言功能。 | +| 404 | resource_not_found | group tag not found | 聊天室标签不存在。 | 先为用户设置聊天室标签再进行操作。 | +| 403 | exceed_limit | tag length exceeds limit! | 标签名称长度超过限制。 | 控制标签名称长度。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 设置用户在聊天室中的标签 + +设置用户在聊天室中的标签,一次最多设置 10 个,新设置的标签会覆盖原有标签。 + +**调用频率上限**:100 次/秒/App Key + +#### HTTP 请求 + +```http +PUT https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/users/{username}/tag +``` + +##### 路径参数 + +| 参数 | 类型 | 描述 | 是否必填 | +| :-------------- | :----- | :--------------------- | :------- | +| `chatroom_id` | String | 聊天室 ID。 | 是 | +| `username` | String | 为哪个用户添加在该聊天室中的标签。 | 是 | + +其他参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------------------------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :----- | :---- | :------- | :----------------------------------------------------------- | +| `tags` | Array | 是 | 设置用户在聊天室中的标签列表。最多可设置 10 个标签。传 "tags":[] 会删除用户的聊天室标签。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :--- | :------------------------------------------------------ | +| `data.result` | Bool | 是否修改成功:
- `true`:是;
- `false`:否。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X PUT -H 'Content-Type: application/json' \ +-H 'Accept: application/json' \ +-H 'Authorization: Bearer ' \ +-d '{ + "tags": ["t1", "t2"] +}'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users/u10/tag' +``` + +##### 响应示例 + +```json +{ + "action": "put", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users/u10/tag", + "entities":[], + "data": { + "result": true + }, + "timestamp": 1489072189508, + "properties":{}, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :---------- | :----------------- | :---------------- | :-------------------- | :------------------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 用户 ID 不在聊天室中。 | 传入聊天室中的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | +| 403 | forbidden_op | Group tag mute is disabled | 聊天室标签禁言功能没有开通。 | 联系环信商务开通聊天室标签禁言功能。 | +| 403 | exceed_limit | user group tag count exceed limit | 用户聊天室标签设置的数量超过限制。 | 控制一次请求 `tags` 的标签个数不要超过限制(10 个)。 | +| 400 | invalid_parameter | tags should be type of List | 请求 body 中 `tags` 的类型错误。 | 请求 body 中的 `tags` 请使用数组类型 。| +| 403 | exceed_limit | tag length exceeds limit! | 标签名称长度超过限制。 | 控制标签名称长度不要超过32字符。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 获取用户聊天室标签 + +获取某个用户在指定聊天室中的标签。 + +**调用频率上限**:100 次/秒/App Key + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/users/{username}/tag +``` + +##### 路径参数 + +| 参数 | 类型 | 描述 | 是否必填 | +| :-------------- | :----- | :--------------------- | :------- | +| `chatroom_id` | String | 聊天室 ID。 | 是 | +| `username` | String | 获取哪个用户在该聊天室中的标签。 | 是 | + +其他参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------------------------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :----- | :--- | :----------------------------------------------------------- | +| `data` | JSON | 响应数据,格式为<标签名称>:<标签过期时间戳(毫秒)>。`-1` 表示对该用户永久禁言。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET -H 'Content-Type: application/json' \ +-H 'Accept: application/json' \ +-H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users/u10/tag' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users/u10/tag", + "entities":[], + "data": { + "t2":"1730790248255" + }, + "timestamp": 1489072189508, + "properties":{}, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :---------- | :----------------- | :---------------------------------------- | :------------------------------------ | :----------------------------------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 用户 ID 不在聊天室中。 | 传入聊天室中的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | +| 403 | forbidden_op | Group tag mute is disabled | 聊天室标签禁言功能没有开通。 | 联系环信商务开通聊天室标签禁言功能。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + diff --git a/docs/document/server-side/chatroom_member.md b/docs/document/server-side/chatroom_member.md deleted file mode 100644 index 85d94435..00000000 --- a/docs/document/server-side/chatroom_member.md +++ /dev/null @@ -1,1977 +0,0 @@ -# 聊天室成员管理 - - - -环信即时通讯 IM 提供多个接口实现聊天室成员管理,包括添加和移除聊天室成员、转让聊天室所有权以及聊天室黑名单、白名单和禁言列表相关操作。 - -## 前提条件 - -要调用环信即时通讯 RESTful API,请确保满足以下要求: - -- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 -- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。 -- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。 - -## 聊天室成员角色 - -| 成员角色 | 描述 | 管理权限 | -| :----------- | :------------------------------------------------- | :--------------------------------- | -| 普通成员 | 不具备管理权限的聊天室成员。 | 普通成员可以修改自己的聊天室信息。 | -| 聊天室管理员 | 由聊天室创建者授权,协助聊天室管理,具有管理权限。 | 管理员可以管理聊天室内的普通成员。 最多支持添加 99 个管理员。 | -| 聊天室所有者 | 聊天室的创建者,具有聊天室最高权限。 | 聊天室所有者可以指定聊天室管理员、解散聊天室、更改聊天室信息、管理聊天室成员。 | - -## 公共参数 - -#### 请求参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :------------ | :----- | :------- | :---------------- | -| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | -| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | -| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | -| `chatroom_id` | String | 是 | 聊天室 ID。 | -| `username` | String | 是 | 用户 ID。 | -| `name` | String | 是 | 聊天室名称,最大长度为 128 个字符。 | -| `description` | String | 是 | 聊天室描述,最大长度为 512 个字符。 | -| `maxusers` | Int | 否 | 聊天室成员数上限,创建聊天室时设置。该参数的默认最大值为 10,000,如需调整请联系商务。 | - -#### 响应参数 - -| 参数 | 类型 | 描述 | -| :------------------- | :----- | :------------ | -| `action` | String | 请求方法。 | -| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 | -| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | -| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | -| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | -| `uri` | String | 请求 URL。 | -| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | -| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 | -| `entities` | JSON | 响应实体。 | -| `data` | JSON | 数据详情。 | -| `uuid` | String | 系统内为用户或者应用生成的系统内唯一标识,开发者无需关心。 | -| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 | -| `username` | String | 用户 ID。 | -| `affiliations_count` | Int | 聊天室现有成员总数。 | -| `affiliations` | Array | 聊天室现有成员列表,数组类型,包含 `owner` 和 `member` 元素,即聊天室所有者和聊天室成员(包括聊天室管理员)。例如: “affiliations”:[{“owner”: “13800138001”},{“member”:”v3y0kf9arx”},{“member”:”xc6xrnbzci”}]。 | -| `owner` | String | 聊天室所有者的用户 ID。例如:{“owner”: “13800138001”}。 | -| `member` | String | 聊天室成员的用户 ID,包括聊天室管理员和普通成员的用户 ID。例如:{“member”:”xc6xrnbzci”}。 | -| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | -| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | - -## 认证方式 - -环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: - -`Authorization: Bearer YourAppToken` - -为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 - -## 分页获取聊天室成员列表 - -可以分页获取聊天室成员列表。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/users?pagenum={N}&pagesize={N} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 查询参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :--- | :------- | :------------------------------------------------------------- | -| `pagenum` | Int | 否 | 查询页码。默认值为 1。 | -| `pagesize` | Int | 否 | 每页显示的聊天室成员数量。默认值为 1000。取值范围为 [0,1000]。若传入的值超过了 1000,则返回 1000 个聊天室成员。 | - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------------------------------------------------------------------------------------------------------- | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 参数 | 类型 | 描述 | -| :------------ | :----- | :-------------- | -| `data` | JSON Array | 聊天室成员信息。 | -| - `owner` | String | 聊天室所有者的用户 ID。例如:{“owner”: “user1”}。 | -| - `member` | String | 普通聊天室成员或聊天室管理员的用户 ID。例如:{“member”:“user2”}。 | -| `count` | Number | 本次调用获取的聊天室成员数量。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users?pagenum=2&pagesize=2 -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "52XXXXf0", - "params": { - "pagesize": ["2"], - "pagenum": ["2"] - }, - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users", - "entities": [], - "data": [ - { - "owner": "user1" - }, - { - "member": "user2" - } - ], - "timestamp": 1489074511416, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp", - "count": 2 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | service_resource_not_found | do not find this group:XX | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 添加单个聊天室成员 - -向聊天室添加一个成员。如果待添加的用户在 app 中不存在或已经在聊天室中,则请求失败并返回错误码 400。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 参数 | 类型 | 描述 | -| :------------ | :----- | :---------------------------------------------------------- | -| `data.result` | Bool | 是否添加成功:
- `true`:是;
- `false`:否。 | -| `data.action` | String | 执行的操作,`add_member` 表示向聊天室添加成员。 | -| `data.id` | String | 聊天室 ID,聊天室唯一标识符,由环信即时通讯 IM 服务器生成。 | -| `data.user` | String | 添加到聊天室的用户。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1", - "entities": [], - "data": { - "result": true, - "action": "add_member", - "id": "66XXXX33", - "user": "user1" - }, - "timestamp": 1542554038353, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | -| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 | -| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 批量添加聊天室成员 - -向聊天室添加多位用户,一次性最多可添加 60 位用户。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :---------- | :---- | :------- | :------------------- | -| `usernames` | Array | 是 | 添加的用户 ID 数组,每次最多可传 60 个用户 ID。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 参数 | 类型 | 描述 | -| :---------------- | :----- | :-------------------------------------------------------------------- | -| `data.newmembers` | Array | 添加成功的用户 ID 数组。 | -| `data.action` | String | 执行的操作内容。在该响应中,该字段的值为 `add_member`,表示添加用户。 | -| `data.id` | String | 聊天室 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ - "usernames": [ - "user1","user2" - ] - }' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users", - "entities": [], - "data": { - "newmembers": ["user1", "user2"], - "action": "add_member", - "id": "66XXXX33" - }, - "timestamp": 1542554537237, - "duration": 9, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | addMembers: addMembers number more than maxSize : 60 | 批量添加数量达到限制(60)。 | 将添加的成员数量调整在限制(60)以下。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | -| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 | -| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 移除单个聊天室成员 - -从聊天室移除一个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 参数 | 类型 | 描述 | -| :------------ | :----- | :------------------------------------- | -| `data.result` | Bool | 是否成功移出聊天室成员:
- `true`:是;
- `false`:否。 | -| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除聊天室成员。 | -| `data.user` | String | 用户 ID。 | -| `data.id` | String | 聊天室 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1", - "entities": [], - "data": { - "result": true, - "action": "remove_member", - "user": "user1", - "id": "66XXXX33" - }, - "timestamp": 1542555744726, - "duration": 1, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | -| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 批量移除聊天室成员 - -从聊天室移除多个成员,单次请求最多可移除 100 个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{usernames} -``` - -##### 路径参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :----- | :------- | :------------------ | -| `username` | String | 是 | 要移除的一个或多个用户 ID。每次最多可传 100 个用户 ID,用户 ID 之间用英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。| - -其他字段及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :-------------------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 参数 | 类型 | 描述 | -| :------------ | :----- | :--------------------------------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 是否成功批量移除聊天室成员:
- `true`:是;
- `false`:否。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除成员。 | -| - `reason` | String | 移除失败的原因。 | -| - `user` | String | 已删除成员的用户 ID 列表。 | -| - `id` | String | 聊天室 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2", - "entities": [], - "data": [ - { - "result": false, - "action": "remove_member", - "reason": "user: user1 doesn't exist in group: 66XXXX33", - "user": "user1", - "id": "66XXXX33" - }, - { - "result": true, - "action": "remove_member", - "user": "user2", - "id": "66XXXX33" - } - ], - "timestamp": 1542556177147, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量删除数量达到限制(60)。 | 将传入的成员数量调整到限制(60)以下。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | -| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 获取聊天室管理员列表 - -获取聊天室管理员列表的接口。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :--------------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 参数 | 类型 | 描述 | -| :----- | :---- | :------------------------- | -| `data` | Array | 聊天室管理员用户 ID 数组。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin", - "entities": [], - "data": ["user1"], - "timestamp": 1489073361210, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp", - "count": 1 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 添加聊天室管理员 - -将一个聊天室成员设置为聊天室管理员。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -#### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :--------------------------- | -| `Content-Type` | String | 是 | 内容类型。填入 `application/json`。 | -| `Accept` | String | 是 | 内容类型。填入 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 描述 | -| :--------- | :---------------------------------- | -| `newadmin` | 要添加为聊天室管理员的成员用户 ID。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 参数 | 类型 | 描述 | -| :-------------- | :----- | :----------------------------------------------------------------- | -| `data.result` | Bool | 操作结果:
- `success`:添加成功;
- `false`:添加失败。 | -| `data.newadmin` | String | 添加为聊天室管理员的成员用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -d '{"newadmin":"user1"}' -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin", - "entities": [], - "data": { - "result": "success", - "newadmin": "user1" - }, - "timestamp": 1489073130083, - "duration": 1, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | -| 404 | resource_not_found | username XXX doesn't exist! | 要添加聊天室管理员的用户 ID 不存在。 | 传入聊天室中普通成员的用户 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 移除聊天室管理员 - -将用户的角色从聊天室管理员降为普通聊天室成员。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin/{oldadmin} -``` - -##### 路径参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :----- | :------- | :------------------------------ | -| `oldadmin` | String | 是 | 被撤销管理权限的管理员用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :-------------------------- | -| `Accept` | String | 是 | 内容类型。填入 `application/json` | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :-------------- | :----- | :---------------------------------------------------------------------------- | -| `data.result` | Bool | 是否成功撤销聊天室管理员的管理权限:
- `true`:是;
- `false`:否。 | -| `data.oldadmin` | String | 被撤销管理权限的管理员用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin/user1 -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin/user1", - "entities": [], - "data": { - "result": "success", - "oldadmin": "user1" - }, - "timestamp": 1489073432732, - "duration": 1, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | -| 404 | resource_not_found | username XXX doesn't exist! | 要移除聊天室管理员的用户 ID 不存在。 | 传入聊天室管理员的用户 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 管理黑名单 - -环信即时通讯 IM 提供多个接口实现聊天室黑名单管理,包括查看黑名单中的用户以及将用户添加至和移出黑名单等操作。 - -### 查询聊天室黑名单 - -查询一个聊天室黑名单中的用户列表。黑名单中的用户无法查看或收到该聊天室的信息。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :----- | :---- | :------------------------ | -| `data` | Array | 聊天室黑名单中的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users", - "entities": [], - "data": ["user2", "user3"], - "timestamp": 1543466293681, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp", - "count": 2 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 添加单个用户至聊天室黑名单 - -将单个用户加入指定聊天室的黑名单。聊天室所有者无法被加入聊天室的黑名单。 - -用户进入聊天室黑名单后,无法查看和收发该聊天室的信息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------ | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------------- | :----- | :------------------ | -| `data.result` | Bool | 是否成功将用户添加至聊天室黑名单:
- `true`:是;
- `false`:否。 | -| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_blocks`,表示向聊天室黑名单中添加用户。 | -| `data.user` | String | 添加的用户 ID。 | -| `data.chatroomid` | String | 聊天室 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1", - "entities": [], - "data": { - "result": true, - "action": "add_blocks", - "user": "user1", - "chatroomid": "66XXXX33" - }, - "timestamp": 1542539577124, - "duration": 27, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 要添加的用户不在聊天室中。 | 传入聊天室成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 批量添加用户至聊天室黑名单 - -将多个用户加入指定聊天室的黑名单。你一次最多可以添加 60 个用户至聊天室黑名单。聊天室所有者无法被加入聊天室的黑名单。 - -用户进入聊天室黑名单后,无法查看和收发该聊天室的信息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 描述 | -| :---------- | :---- | :------------------------------------------------------------------ | -| `usernames` | Array | 待添加到聊天室黑名单的用户 ID,最多可添加 60 个。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------------- | :----- | :-------------------------------------------------------------------------------- | -| `data` | JSON Array | 响应数据。 | -| - `result` | Bool | 是否成功批量添加用户至聊天室黑名单:
- `true`:是;
- `false`:否。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_blocks`,表示向聊天室黑名单中添加用户。 | -| - `reason` | String | 添加失败的原因。 | -| - `user` | String | 添加的用户 ID。 | -| - `chatroomid` | String | 聊天室 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ - "usernames": [ - "user3", - "user4" - ] - }' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users", - "entities": [], - "data": [ - { - "result": false, - "action": "add_blocks", - "reason": "user: user3 doesn't exist in chatroom: 66XXXX33", - "user": "user3", - "chatroomid": "66XXXX33" - }, - { - "result": true, - "action": "add_blocks", - "user": "user4", - "chatroomid": "66XXXX33" - } - ], - "timestamp": 1542540095540, - "duration": 16, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | userNames is more than max limit : 60 | 批量添加超过上限(60)。 | 调整要添加的数量在限制以下。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 要添加的用户不在聊天室中。 | 传入聊天室成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 从聊天室黑名单移出单个用户 - -将指定用户移出聊天室黑名单。对于聊天室黑名单中的用户,如果需要将其再次加入聊天室,需要先将其从聊天室黑名单中移除。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :--------------------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------------- | :----- | :--------------------------------------- | -| `data.result` | Bool | 是否成功将该用户移出聊天室黑名单:
- `true`:是;
- `false`:否。 | -| `data.chatroomid` | String | 聊天室 ID。 | -| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将用户移出聊天室黑名单。 | -| `data.user` | String | 被移除的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1", - "entities": [], - "data": { - "result": true, - "action": "remove_blocks", - "user": "user1", - "chatroomid": "66XXXX33" - }, - "timestamp": 1542540470679, - "duration": 45, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在聊天室中。 | 传入聊天室黑名单中的成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 从聊天室黑名单批量移除用户 - -将多名指定用户从聊天室黑名单中移除。你每次最多可移除 60 个用户。对于聊天室黑名单中的用户,如果需要将其再次加入聊天室,需要先将其从聊天室黑名单中移除。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/blocks/users/{usernames} -``` - -##### 路径参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :----- | :------- | :------------------------------------------------------------ | -| `username` | String | 是 | 要移出聊天室黑名单的用户 ID,每次最多可传 60 个。用户 ID 之间以英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------------- | :----- | :------------------------------------------ | -| `data` | JSON Array | 响应数据。 | -| - `result` | Bool | 是否成功将用户批量移出聊天室黑名单:
- `true`:是;
- `false`:否。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将用户移出聊天室黑名单。 | -| - `user` | String | 被移除的用户 ID。 | -| - `chatroomid` | String | 聊天室 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1%2Cuser2' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "8beXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/blocks/users/user1%2Cuser2", - "entities": [], - "data": [ - { - "result": true, - "action": "remove_blocks", - "user": "user1", - "chatroomid": "66XXXX33" - }, - { - "result": true, - "action": "remove_blocks", - "user": "user2", - "chatroomid": "66XXXX33" - } - ], - "timestamp": 1542541014655, - "duration": 29, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | removeBlacklist: list size more than max limit : 60 | 批量删除超过上限(60)。 | 调整要移除的数量在限制(60)以下. | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在聊天室中。 | 传入聊天室黑名单中的成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 管理白名单 - -环信即时通讯 IM 提供多个接口实现聊天室白名单管理,包括查看白名单中的用户以及将用户添加至和移出白名单等。 - -聊天室白名单中的成员在聊天室中发送的消息为高优先级,会优先送达,但不保证必达。当负载较高时,服务器会优先丢弃低优先级的消息。若即便如此负载仍很高,服务器也会丢弃高优先级消息。 - -### 查询聊天室白名单 - -查询一个聊天室白名单中的用户列表。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :----- | :---- | :------------------------ | -| `data` | Array | 聊天室白名单中的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "5cXXXX75d", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users", - "entities": [], - "data": ["wzy_test", "wzy_vivo", "wzy_huawei", "wzy_xiaomi", "wzy_meizu"], - "timestamp": 1594724947117, - "duration": 3, - "organization": "XXXX", - "applicationName": "testapp", - "count": 5 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 添加单个用户至聊天室白名单 - -将单个用户添加至聊天室白名单。用户添加至聊天室白名单后,当聊天室全员禁言时,仍可以在聊天室中发送消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------------- | :----- | :-------------------- | -| `data.result` | Bool | 是否成功将单个用户添加至聊天室白名单:
- `true`:是;
- `false`:否。 | -| `data.chatroomid` | String | 聊天室 ID。 | -| `data.action` | String | 执行操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将用户添加至聊天室白名单中。 | -| `data.user` | String | 添加的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/{66XXXX33}/white/users/{username}' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "5cXXXX75d", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users/wzy_xiaomi", - "entities": [], - "data": { - "result": true, - "action": "add_user_whitelist", - "user": "wzy_xiaomi", - "chatroomid": "66XXXX33" - }, - "timestamp": 1594724293063, - "duration": 4, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 批量添加用户至聊天室白名单 - -添加多个用户至聊天室白名单。你一次最多可添加 60 个用户。用户添加至聊天室白名单后,在聊天室全员禁言时,仍可以在聊天室中发送消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------------------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### 请求 body - -| 参数 | 类型 | 描述 | -| :---------- | :---- | :------------------- | -| `usernames` | Array | 待添加至聊天室白名单中的用户 ID,每次最多可传 60 个。| - -其他字段及描述详见 [公共参数](#公共参数)。 - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------------- | :----- | :--------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 是否成功将用户批量添加至聊天室白名单:
- `true`:是;
- `false`:否。 | -| - `reason` | String | 添加失败的原因。 | -| - `chatroomid` | String | 聊天室 ID。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_user_whitelist`,表示添加用户至聊天室白名单。 | -| - `user` | String | 添加至聊天室白名单中的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{"usernames" : ["user1"]}' 'https://XXXX/XXXX/XXXX/chatrooms/{chatroomid}/white/users' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "5cXXXX75d", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users", - "entities": [], - "data": [ - { - "result": true, - "action": "add_user_whitelist", - "user": "wzy_test", - "chatroomid": "66XXXX33" - }, - { - "result": true, - "action": "add_user_whitelist", - "user": "wzy_meizu", - "chatroomid": "66XXXX33" - } - ], - "timestamp": 1594724634191, - "duration": 2, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | usernames size is more than max limit : 60 | 批量添加白名单超过上限(60)。 | 调整要添加的数量在限制(60)以下. | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 将用户移出聊天室白名单 - -将指定用户从聊天室白名单移除。你每次最多可移除 60 个用户。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users/{username} -``` - -##### 路径参数 - -| 参数 | 类型 | 描述 | 是否必填 | -| :---------- | :----- | :------------------------- | :------- | -| `usernames` | String | 要从聊天室白名单中移除的用户 ID,最多可传 60 个,用户 ID 之间以英文逗号(",")分隔。 | 是 | - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :--------------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------------- | :----- | :-------------- | -| `data` | JSON Array | 响应数据。 | -| - `result` | Bool | 是否成功将用户移出聊天室白名单:
- `true`:是;
- `false`:否。 | -| - `chatroomid` | String | 聊天室 ID。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_user_whitelist`,表示将用户移出聊天室白名单。 | -| - `user` | String | 移除聊天室白名单的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/{66XXXX33}/white/users/{username}' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "5cXXXX75d", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users/wzy_huawei,wzy_meizu", - "entities": [], - "data": [ - { - "result": true, - "action": "remove_user_whitelist", - "user": "wzy_huawei", - "chatroomid": "66XXXX33" - }, - { - "result": true, - "action": "remove_user_whitelist", - "user": "wzy_meizu", - "chatroomid": "66XXXX33" - } - ], - "timestamp": 1594725137704, - "duration": 1, - "organization": "XXXX", - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | removeWhitelist size is more than max limit : 60 | 批量移除白名单超过上限(60)。 | 调整要移除的数量在限制(60)以下。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 要加入白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 管理禁言 - -环信即时通讯 IM 提供多个管理聊天室禁言列表的接口,包括获取禁言列表以及将用户添加至或移出禁言列表等。 - -### 获取禁言列表 - -获取当前聊天室的禁言用户列表。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :----- | :----------------------------------- | -| `data` | JSON Array | 响应数据。 | -| - `expire` | Long | 禁言到期的 Unix 时间戳,单位为毫秒。 | -| - `user` | String | 被禁言的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET HTTP://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute", - "entities": [], - "data": [ - { - "expire": 1489158589481, - "user": "user1" - }, - { - "expire": 1489158589481, - "user": "user2" - } - ], - "timestamp": 1489072802179, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 禁言聊天室成员 - -禁言单个或多个聊天室成员。你一次最多可禁言 60 个成员。 - -用户被禁言后,将无法在聊天室中发送消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :-------------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------- | -| `mute_duration` | Long | 是 | 禁言时长,从当前时间开始计算。单位为毫秒。`-1` 表示永久禁言。 | -| `usernames` | Array | 是 | 要被禁言的用户 ID,一次最多可传 60 个。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :----- | :------------------- | -| `data` | JSON Array | 响应数据。 | -| - `result` | Bool | 是否成功禁言用户:
- `true`:是;
- `false`:否。 | -| - `expire` | Long | 禁言到期时间,Unix 时间戳,单位为毫秒。 | -| - `user` | String | 被禁言的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d -'{ - "usernames": [ - "user1", - "user2" - ], - "mute_duration": 86400000 -}'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute", - "entities": [], - "data": [ - { - "result": true, - "expire": 1642148173726, - "user": "user1" - }, - { - "result": true, - "expire": 1642148173726, - "user": "user2" - } - ], - "timestamp": 1489072189508, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 400 | forbidden_op | users [XX] are not members of this group! | 要禁言的用户 ID 不在聊天室中。 | 传入聊天室中的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | -| 400 | invalid_parameter | userNames size is more than max limit : 60 | 批量禁言指定聊天室成员数量超过60 | 控制禁言指定聊天室成员数量在 60 以内。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 禁言聊天室全体成员 - -对所有聊天室成员一键禁言。该操作不影响聊天室禁言列表,即一键禁言不会将聊天室所有成员加入聊天室禁言列表。 - -设置聊天室全员禁言后,仅聊天室白名单中的用户可在聊天室内发消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/ban -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------------------------------------ | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------- | :--- | :------------ | -| `data.mute` | Bool | 是否处于聊天室全员禁言状态:
- `true`:是;
- `false`:否。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban' -``` - -##### 响应示例 - -```json -{ - "action": "put", - "application": "5cXXXX75d", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban", - "entities": [], - "data": { - "mute": true - }, - "timestamp": 1594628861058, - "duration": 1, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | - -### 解除聊天室禁言成员 - -解除对一个或多个聊天室成员的禁言。你一次最多可对 60 个成员解除禁言。 - -解除禁言后,该成员可以正常在聊天室中发送消息。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute/{member1}(,{member2},…) -``` - -##### 路径参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------- | :----- | :------- | :------- | -| `member1` | String | 是 | 待被移出禁言列表的聊天室成员的用户 ID。
一次最多可传 60 个用户 ID,用户 ID 之间用英文逗号(",")隔开,逗号在 URL 中转义为 "%2C"。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------- | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :------ | :------------------------------------------------------------------------- | -| `data` | JSON Array | 响应数据。 | -| - `result` | Boolean | 是否成功将指定用户移出禁言列表:
- `true`:是;
- `false`:否。 | -| - `user` | String | 被解除禁言的聊天室成员的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE HTTP://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute/user1 -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute/user1", - "entities": [], - "data": [ - { - "result": true, - "user": "user1" - } - ], - "timestamp": 1489072695859, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | removeMute member size more than max limit : 60 | 批量移除禁言超过上限(60)。 | 调整要移除的数量在限制(60)以下. | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | - -### 解除聊天室全员禁言 - -一键取消对聊天室全体成员的禁言。解除禁言后,聊天室成员可以在聊天室中正常发送消息。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/ban -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------ | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------- | :--- | :--------------- | -| `data.mute` | Bool | 是否处于聊天室全员禁言状态:
- `true`:是;
- `false`:否。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "5cXXXX75d", - "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban", - "entities": [], - "data": { - "mute": false - }, - "timestamp": 1594628899502, - "duration": 1, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | diff --git a/docs/document/server-side/chatroom_member_add_delete.md b/docs/document/server-side/chatroom_member_add_delete.md new file mode 100644 index 00000000..dc8967b9 --- /dev/null +++ b/docs/document/server-side/chatroom_member_add_delete.md @@ -0,0 +1,413 @@ +# 添加/移除聊天室成员 + + + +环信即时通讯 IM 提供多个接口实现聊天室成员的添加和移除。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。 +- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `chatroom_id` | String | 是 | 聊天室 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :------------------- | :----- | :------------ | +| `action` | String | 请求方法。 | +| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 数据详情。 | +| `uuid` | String | 系统内为用户或者应用生成的系统内唯一标识,开发者无需关心。 | +| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | + +## 认证方式 + +环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 添加单个聊天室成员 + +向聊天室添加一个成员。如果待添加的用户在 app 中不存在或已经在聊天室中,则请求失败并返回错误码 400。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `username` | String | 是 | 要添加的用户 ID。 | + +其它参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :------------ | :----- | :---------------------------------------------------------- | +| `data.result` | Bool | 是否添加成功:
- `true`:是;
- `false`:否。 | +| `data.action` | String | 执行的操作,`add_member` 表示向聊天室添加成员。 | +| `data.id` | String | 聊天室 ID,聊天室唯一标识符,由环信即时通讯 IM 服务器生成。 | +| `data.user` | String | 添加到聊天室的用户。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "8beXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1", + "entities": [], + "data": { + "result": true, + "action": "add_member", + "id": "66XXXX33", + "user": "user1" + }, + "timestamp": 1542554038353, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 | +| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量添加聊天室成员 + +向聊天室添加多位用户,一次性最多可添加 60 位用户。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :---------- | :---- | :------- | :------------------- | +| `usernames` | Array | 是 | 添加的用户 ID 数组,每次最多可传 60 个用户 ID。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :---------------- | :----- | :-------------------------------------------------------------------- | +| `data.newmembers` | Array | 添加成功的用户 ID 数组。 | +| `data.action` | String | 执行的操作内容。在该响应中,该字段的值为 `add_member`,表示添加用户。 | +| `data.id` | String | 聊天室 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ + "usernames": [ + "user1","user2" + ] + }' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "8beXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users", + "entities": [], + "data": { + "newmembers": ["user1", "user2"], + "action": "add_member", + "id": "66XXXX33" + }, + "timestamp": 1542554537237, + "duration": 9, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | addMembers: addMembers number more than maxSize : 60 | 批量添加数量达到限制(60)。 | 将添加的成员数量调整在限制(60)以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 | +| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 移除单个聊天室成员 + +从聊天室移除一个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `username` | String | 是 | 要移除的用户 ID。 | + +其它参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :------------ | :----- | :------------------------------------- | +| `data.result` | Bool | 是否成功移出聊天室成员:
- `true`:是;
- `false`:否。 | +| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除聊天室成员。 | +| `data.user` | String | 用户 ID。 | +| `data.id` | String | 聊天室 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "8beXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1", + "entities": [], + "data": { + "result": true, + "action": "remove_member", + "user": "user1", + "id": "66XXXX33" + }, + "timestamp": 1542555744726, + "duration": 1, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量移除聊天室成员 + +从聊天室移除多个成员,单次请求最多可移除 100 个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{usernames} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :------------------ | +| `username` | String | 是 | 要移除的一个或多个用户 ID。每次最多可传 100 个用户 ID,用户 ID 之间用英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。| + +其他字段及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------------------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :------------ | :----- | :--------------------------------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 是否成功批量移除聊天室成员:
- `true`:是;
- `false`:否。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除成员。 | +| - `reason` | String | 移除失败的原因。 | +| - `user` | String | 已删除成员的用户 ID 列表。 | +| - `id` | String | 聊天室 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "8beXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2", + "entities": [], + "data": [ + { + "result": false, + "action": "remove_member", + "reason": "user: user1 doesn't exist in group: 66XXXX33", + "user": "user1", + "id": "66XXXX33" + }, + { + "result": true, + "action": "remove_member", + "user": "user2", + "id": "66XXXX33" + } + ], + "timestamp": 1542556177147, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量删除数量达到限制(60)。 | 将传入的成员数量调整到限制(60)以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 \ No newline at end of file diff --git a/docs/document/server-side/chatroom_member_admin.md b/docs/document/server-side/chatroom_member_admin.md new file mode 100644 index 00000000..eec9fcb4 --- /dev/null +++ b/docs/document/server-side/chatroom_member_admin.md @@ -0,0 +1,296 @@ +# 管理聊天室管理员 + + + +环信即时通讯 IM 提供多个接口管理聊天室管理员,包括获取、添加和移除聊天室管理员。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。 +- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。 + +## 聊天室成员角色 + +| 成员角色 | 描述 | 管理权限 | +| :----------- | :------------------------------------------------- | :--------------------------------- | +| 普通成员 | 不具备管理权限的聊天室成员。 | 普通成员可以修改自己的聊天室信息。 | +| 聊天室管理员 | 由聊天室创建者授权,协助聊天室管理,具有管理权限。 | 管理员可以管理聊天室内的普通成员。 最多支持添加 99 个管理员。 | +| 聊天室所有者 | 聊天室的创建者,具有聊天室最高权限。 | 聊天室所有者可以指定聊天室管理员、解散聊天室、更改聊天室信息、管理聊天室成员。 | + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `chatroom_id` | String | 是 | 聊天室 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :------------------- | :----- | :------------ | +| `action` | String | 请求方法。 | +| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 数据详情。 | +| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | + +## 认证方式 + +环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 获取聊天室管理员列表 + +获取聊天室管理员列表的接口。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :----- | :---- | :------------------------- | +| `data` | Array | 聊天室管理员用户 ID 数组。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -H 'Accept: application/json' -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin", + "entities": [], + "data": ["user1"], + "timestamp": 1489073361210, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp", + "count": 1 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 添加聊天室管理员 + +将一个聊天室成员设置为聊天室管理员。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +#### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------------------- | +| `Content-Type` | String | 是 | 内容类型。填入 `application/json`。 | +| `Accept` | String | 是 | 内容类型。填入 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 描述 | +| :--------- | :---------------------------------- | +| `newadmin` | 要添加为聊天室管理员的成员用户 ID。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :-------------- | :----- | :----------------------------------------------------------------- | +| `data.result` | Bool | 操作结果:
- `success`:添加成功;
- `false`:添加失败。 | +| `data.newadmin` | String | 添加为聊天室管理员的成员用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -d '{"newadmin":"user1"}' -H 'Accept: application/json' -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin", + "entities": [], + "data": { + "result": "success", + "newadmin": "user1" + }, + "timestamp": 1489073130083, + "duration": 1, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要添加聊天室管理员的用户 ID 不存在。 | 传入聊天室中普通成员的用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 移除聊天室管理员 + +将用户的角色从聊天室管理员降为普通聊天室成员。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin/{oldadmin} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :------------------------------ | +| `oldadmin` | String | 是 | 被撤销管理权限的管理员用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------------------------- | +| `Accept` | String | 是 | 内容类型。填入 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :-------------- | :----- | :---------------------------------------------------------------------------- | +| `data.result` | Bool | 是否成功撤销聊天室管理员的管理权限:
- `true`:是;
- `false`:否。 | +| `data.oldadmin` | String | 被撤销管理权限的管理员用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin/user1 -H 'Accept: application/json' -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin/user1", + "entities": [], + "data": { + "result": "success", + "oldadmin": "user1" + }, + "timestamp": 1489073432732, + "duration": 1, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要移除聊天室管理员的用户 ID 不存在。 | 传入聊天室管理员的用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 diff --git a/docs/document/server-side/chatroom_member_allowlist.md b/docs/document/server-side/chatroom_member_allowlist.md new file mode 100644 index 00000000..6898ae55 --- /dev/null +++ b/docs/document/server-side/chatroom_member_allowlist.md @@ -0,0 +1,403 @@ +# 聊天室白名单管理 + + + +环信即时通讯 IM 提供多个接口实现聊天室白名单管理,包括查看白名单中的用户以及将用户添加至和移出白名单等。 + +聊天室白名单中的成员在聊天室中发送的消息为高优先级,会优先送达,但不保证必达。当负载较高时,服务器会优先丢弃低优先级的消息。若即便如此负载仍很高,服务器也会丢弃高优先级消息。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。 +- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `chatroom_id` | String | 是 | 聊天室 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :------------------- | :----- | :------------ | +| `action` | String | 请求方法。 | +| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 数据详情。 | +| `uuid` | String | 系统内为用户或者应用生成的系统内唯一标识,开发者无需关心。 | +| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | + +## 认证方式 + +环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 查询聊天室白名单 + +查询一个聊天室白名单中的用户列表。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :----- | :---- | :------------------------ | +| `data` | Array | 聊天室白名单中的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "5cXXXX75d", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users", + "entities": [], + "data": ["wzy_test", "wzy_vivo", "wzy_huawei", "wzy_xiaomi", "wzy_meizu"], + "timestamp": 1594724947117, + "duration": 3, + "organization": "XXXX", + "applicationName": "testapp", + "count": 5 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 添加单个用户至聊天室白名单 + +将单个用户添加至聊天室白名单。用户添加至聊天室白名单后,当聊天室全员禁言时,仍可以在聊天室中发送消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users/{username} +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :---------------- | :----- | :-------------------- | +| `data.result` | Bool | 是否成功将单个用户添加至聊天室白名单:
- `true`:是;
- `false`:否。 | +| `data.chatroomid` | String | 聊天室 ID。 | +| `data.action` | String | 执行操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将用户添加至聊天室白名单中。 | +| `data.user` | String | 添加的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/{66XXXX33}/white/users/{username}' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "5cXXXX75d", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users/wzy_xiaomi", + "entities": [], + "data": { + "result": true, + "action": "add_user_whitelist", + "user": "wzy_xiaomi", + "chatroomid": "66XXXX33" + }, + "timestamp": 1594724293063, + "duration": 4, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量添加用户至聊天室白名单 + +添加多个用户至聊天室白名单。你一次最多可添加 60 个用户。用户添加至聊天室白名单后,在聊天室全员禁言时,仍可以在聊天室中发送消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### 请求 body + +| 参数 | 类型 | 描述 | +| :---------- | :---- | :------------------- | +| `usernames` | Array | 待添加至聊天室白名单中的用户 ID,每次最多可传 60 个。| + +其他字段及描述详见 [公共参数](#公共参数)。 + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :---------------- | :----- | :--------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 是否成功将用户批量添加至聊天室白名单:
- `true`:是;
- `false`:否。 | +| - `reason` | String | 添加失败的原因。 | +| - `chatroomid` | String | 聊天室 ID。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_user_whitelist`,表示添加用户至聊天室白名单。 | +| - `user` | String | 添加至聊天室白名单中的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{"usernames" : ["user1"]}' 'https://XXXX/XXXX/XXXX/chatrooms/{chatroomid}/white/users' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "5cXXXX75d", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users", + "entities": [], + "data": [ + { + "result": true, + "action": "add_user_whitelist", + "user": "wzy_test", + "chatroomid": "66XXXX33" + }, + { + "result": true, + "action": "add_user_whitelist", + "user": "wzy_meizu", + "chatroomid": "66XXXX33" + } + ], + "timestamp": 1594724634191, + "duration": 2, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | usernames size is more than max limit : 60 | 批量添加白名单超过上限(60)。 | 调整要添加的数量在限制(60)以下. | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 将用户移出聊天室白名单 + +将指定用户从聊天室白名单移除。你每次最多可移除 60 个用户。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/white/users/{username} +``` + +##### 路径参数 + +| 参数 | 类型 | 描述 | 是否必填 | +| :---------- | :----- | :------------------------- | :------- | +| `usernames` | String | 要从聊天室白名单中移除的用户 ID,最多可传 60 个,用户 ID 之间以英文逗号(",")分隔。 | 是 | + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :---------------- | :----- | :-------------- | +| `data` | JSON Array | 响应数据。 | +| - `result` | Bool | 是否成功将用户移出聊天室白名单:
- `true`:是;
- `false`:否。 | +| - `chatroomid` | String | 聊天室 ID。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_user_whitelist`,表示将用户移出聊天室白名单。 | +| - `user` | String | 移除聊天室白名单的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/{66XXXX33}/white/users/{username}' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "5cXXXX75d", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/white/users/wzy_huawei,wzy_meizu", + "entities": [], + "data": [ + { + "result": true, + "action": "remove_user_whitelist", + "user": "wzy_huawei", + "chatroomid": "66XXXX33" + }, + { + "result": true, + "action": "remove_user_whitelist", + "user": "wzy_meizu", + "chatroomid": "66XXXX33" + } + ], + "timestamp": 1594725137704, + "duration": 1, + "organization": "XXXX", + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | removeWhitelist size is more than max limit : 60 | 批量移除白名单超过上限(60)。 | 调整要移除的数量在限制(60)以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 要加入白名单的用户 ID 不在聊天室中。 | 传入聊天室成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 \ No newline at end of file diff --git a/docs/document/server-side/chatroom_member_blocklist.md b/docs/document/server-side/chatroom_member_blocklist.md new file mode 100644 index 00000000..91f187aa --- /dev/null +++ b/docs/document/server-side/chatroom_member_blocklist.md @@ -0,0 +1,495 @@ +# 聊天室黑名单管理 + + + +环信即时通讯 IM 提供多个接口实现聊天室黑名单管理,包括查询聊天室黑名单、将成员添加和移除聊天室黑名单。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。 +- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `chatroom_id` | String | 是 | 聊天室 ID。 | +| `username` | String | 是 | 用户 ID。 | +| `name` | String | 是 | 聊天室名称,最大长度为 128 个字符。 | +| `description` | String | 是 | 聊天室描述,最大长度为 512 个字符。 | +| `maxusers` | Int | 否 | 聊天室成员数上限,创建聊天室时设置。该参数的默认最大值为 10,000,如需调整请联系商务。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :------------------- | :----- | :------------ | +| `action` | String | 请求方法。 | +| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 数据详情。 | +| `uuid` | String | 系统内为用户或者应用生成的系统内唯一标识,开发者无需关心。 | +| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 | +| `username` | String | 用户 ID。 | +| `affiliations_count` | Int | 聊天室现有成员总数。 | +| `affiliations` | Array | 聊天室现有成员列表,数组类型,包含 `owner` 和 `member` 元素,即聊天室所有者和聊天室成员(包括聊天室管理员)。例如: “affiliations”:[{“owner”: “13800138001”},{“member”:”v3y0kf9arx”},{“member”:”xc6xrnbzci”}]。 | +| `owner` | String | 聊天室所有者的用户 ID。例如:{“owner”: “13800138001”}。 | +| `member` | String | 聊天室成员的用户 ID,包括聊天室管理员和普通成员的用户 ID。例如:{“member”:”xc6xrnbzci”}。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | + +## 认证方式 + +环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 添加单个聊天室成员 + +向聊天室添加一个成员。如果待添加的用户在 app 中不存在或已经在聊天室中,则请求失败并返回错误码 400。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `username` | String | 是 | 要加入聊天室黑名单的用户 ID。 | + +其它参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :------------ | :----- | :---------------------------------------------------------- | +| `data.result` | Bool | 是否添加成功:
- `true`:是;
- `false`:否。 | +| `data.action` | String | 执行的操作,`add_member` 表示向聊天室添加成员。 | +| `data.id` | String | 聊天室 ID,聊天室唯一标识符,由环信即时通讯 IM 服务器生成。 | +| `data.user` | String | 添加到聊天室的用户。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "8beXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1", + "entities": [], + "data": { + "result": true, + "action": "add_member", + "id": "66XXXX33", + "user": "user1" + }, + "timestamp": 1542554038353, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 | +| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量添加聊天室成员 + +向聊天室添加多位用户,一次性最多可添加 60 位用户。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :---------- | :---- | :------- | :------------------- | +| `usernames` | Array | 是 | 添加的用户 ID 数组,每次最多可传 60 个用户 ID。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :---------------- | :----- | :-------------------------------------------------------------------- | +| `data.newmembers` | Array | 添加成功的用户 ID 数组。 | +| `data.action` | String | 执行的操作内容。在该响应中,该字段的值为 `add_member`,表示添加用户。 | +| `data.id` | String | 聊天室 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ + "usernames": [ + "user1","user2" + ] + }' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "8beXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users", + "entities": [], + "data": { + "newmembers": ["user1", "user2"], + "action": "add_member", + "id": "66XXXX33" + }, + "timestamp": 1542554537237, + "duration": 9, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | addMembers: addMembers number more than maxSize : 60 | 批量添加数量达到限制(60)。 | 将添加的成员数量调整在限制(60)以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要添加的用户 ID 不存在。 | 传入存在的用户 ID。 | +| 403 | forbidden_op | can not join this group, reason:user XXX has joined too many chatrooms! | 要添加的用户已加入了太多的聊天室。 | 传入其他用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 移除单个聊天室成员 + +从聊天室移除一个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{username} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `username` | String | 是 | 要移出聊天室黑名单的用户 ID。 | + +其它参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :------------ | :----- | :------------------------------------- | +| `data.result` | Bool | 是否成功移出聊天室成员:
- `true`:是;
- `false`:否。 | +| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除聊天室成员。 | +| `data.user` | String | 用户 ID。 | +| `data.id` | String | 聊天室 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "8beXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1", + "entities": [], + "data": { + "result": true, + "action": "remove_member", + "user": "user1", + "id": "66XXXX33" + }, + "timestamp": 1542555744726, + "duration": 1, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量移除聊天室成员 + +从聊天室移除多个成员,单次请求最多可移除 100 个成员。如果被移除用户不在聊天室中或聊天室不存在,将返回错误。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroomid}/users/{usernames} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :------------------ | +| `username` | String | 是 | 要移除的一个或多个用户 ID。每次最多可传 100 个用户 ID,用户 ID 之间用英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。| + +其他字段及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------------------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :------------ | :----- | :--------------------------------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 是否成功批量移除聊天室成员:
- `true`:是;
- `false`:否。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除成员。 | +| - `reason` | String | 移除失败的原因。 | +| - `user` | String | 已删除成员的用户 ID 列表。 | +| - `id` | String | 聊天室 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "8beXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/66XXXX33/users/user1%2Cuser2", + "entities": [], + "data": [ + { + "result": false, + "action": "remove_member", + "reason": "user: user1 doesn't exist in group: 66XXXX33", + "user": "user1", + "id": "66XXXX33" + }, + { + "result": true, + "action": "remove_member", + "user": "user2", + "id": "66XXXX33" + } + ], + "timestamp": 1542556177147, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量删除数量达到限制(60)。 | 将传入的成员数量调整到限制(60)以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 用户不在聊天室中。 | 传入聊天室中成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | +| 404 | resource_not_found | username XXX doesn't exist! | 要删除的用户 ID 不存在。 | 传入聊天室中成员的用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 获取聊天室管理员列表 + +获取聊天室管理员列表的接口。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/admin +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :----- | :---- | :------------------------- | +| `data` | Array | 聊天室管理员用户 ID 数组。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/admin", + "entities": [], + "data": ["user1"], + "timestamp": 1489073361210, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp", + "count": 1 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 \ No newline at end of file diff --git a/docs/document/server-side/chatroom_member_mutelist.md b/docs/document/server-side/chatroom_member_mutelist.md new file mode 100644 index 00000000..0f5bf2b2 --- /dev/null +++ b/docs/document/server-side/chatroom_member_mutelist.md @@ -0,0 +1,470 @@ +# 聊天室成员禁言管理 + + + +环信即时通讯 IM 提供多个接口实现聊天室成员禁言,包括添加和移除聊天室成员、转让聊天室所有权以及聊天室黑名单、白名单和禁言列表相关操作。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。 +- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `chatroom_id` | String | 是 | 聊天室 ID。 | +| `username` | String | 是 | 用户 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :------------------- | :----- | :------------ | +| `action` | String | 请求方法。 | +| `host` | String | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名,与请求参数 `host` 相同。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `id` | String | 聊天室 ID,聊天室唯一标识,由环信即时通讯 IM 服务器生成。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 数据详情。 | +| `created` | String | 用户、群组或聊天室的创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | + +## 认证方式 + +环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 获取禁言列表 + +获取当前聊天室的禁言用户列表。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :----- | :----------------------------------- | +| `data` | JSON Array | 响应数据。 | +| - `expire` | Long | 禁言到期的 Unix 时间戳,单位为毫秒。 | +| - `user` | String | 被禁言的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET HTTP://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute", + "entities": [], + "data": [ + { + "expire": 1489158589481, + "user": "user1" + }, + { + "expire": 1489158589481, + "user": "user2" + } + ], + "timestamp": 1489072802179, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。| + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 禁言聊天室成员 + +禁言单个或多个聊天室成员。你一次最多可禁言 60 个成员。 + +用户被禁言后,将无法在聊天室中发送消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------- | +| `mute_duration` | Long | 是 | 禁言时长,从当前时间开始计算。单位为毫秒。`-1` 表示永久禁言。 | +| `usernames` | Array | 是 | 要被禁言的用户 ID,一次最多可传 60 个。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :----- | :------------------- | +| `data` | JSON Array | 响应数据。 | +| - `result` | Bool | 是否成功禁言用户:
- `true`:是;
- `false`:否。 | +| - `expire` | Long | 禁言到期时间,Unix 时间戳,单位为毫秒。 | +| - `user` | String | 被禁言的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d +'{ + "usernames": [ + "user1", + "user2" + ], + "mute_duration": 86400000 +}'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute", + "entities": [], + "data": [ + { + "result": true, + "expire": 1642148173726, + "user": "user1" + }, + { + "result": true, + "expire": 1642148173726, + "user": "user2" + } + ], + "timestamp": 1489072189508, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 400 | forbidden_op | users [XX] are not members of this group! | 要禁言的用户 ID 不在聊天室中。 | 传入聊天室中的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | +| 400 | invalid_parameter | userNames size is more than max limit : 60 | 批量禁言指定聊天室成员数量超过60 | 控制禁言指定聊天室成员数量在 60 以内。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 禁言聊天室全体成员 + +对所有聊天室成员一键禁言。该操作不影响聊天室禁言列表,即一键禁言不会将聊天室所有成员加入聊天室禁言列表。 + +设置聊天室全员禁言后,仅聊天室白名单中的用户可在聊天室内发消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/ban +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------------------------------------------ | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :---------- | :--- | :------------ | +| `data.mute` | Bool | 是否处于聊天室全员禁言状态:
- `true`:是;
- `false`:否。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban' +``` + +##### 响应示例 + +```json +{ + "action": "put", + "application": "5cXXXX75d", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban", + "entities": [], + "data": { + "mute": true + }, + "timestamp": 1594628861058, + "duration": 1, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | + +## 解除聊天室禁言成员 + +解除对一个或多个聊天室成员的禁言。你一次最多可对 60 个成员解除禁言。 + +解除禁言后,该成员可以正常在聊天室中发送消息。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/mute/{member1}(,{member2},…) +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------- | :----- | :------- | :------- | +| `member1` | String | 是 | 待被移出禁言列表的聊天室成员的用户 ID。
一次最多可传 60 个用户 ID,用户 ID 之间用英文逗号(",")隔开,逗号在 URL 中转义为 "%2C"。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------- | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :------ | :------------------------------------------------------------------------- | +| `data` | JSON Array | 响应数据。 | +| - `result` | Boolean | 是否成功将指定用户移出禁言列表:
- `true`:是;
- `false`:否。 | +| - `user` | String | 被解除禁言的聊天室成员的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE HTTP://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute/user1 -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/mute/user1", + "entities": [], + "data": [ + { + "result": true, + "user": "user1" + } + ], + "timestamp": 1489072695859, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | removeMute member size more than max limit : 60 | 批量移除禁言超过上限(60)。 | 调整要移除的数量在限制(60)以下. | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | + +## 解除聊天室全员禁言 + +一键取消对聊天室全体成员的禁言。解除禁言后,聊天室成员可以在聊天室中正常发送消息。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/ban +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------------ | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :---------- | :--- | :--------------- | +| `data.mute` | Bool | 是否处于聊天室全员禁言状态:
- `true`:是;
- `false`:否。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "5cXXXX75d", + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/ban", + "entities": [], + "data": { + "mute": false + }, + "timestamp": 1594628899502, + "duration": 1, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 聊天室不存在。 | 使用合法的聊天室 ID。 | diff --git a/docs/document/server-side/chatroom_member_obtain.md b/docs/document/server-side/chatroom_member_obtain.md new file mode 100644 index 00000000..e65a6836 --- /dev/null +++ b/docs/document/server-side/chatroom_member_obtain.md @@ -0,0 +1,138 @@ +# 获取聊天室成员列表 + + + +环信即时通讯 IM 提供 RESTful API 接口用于分页获取聊天室成员列表。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM REST API 的调用频率限制,详见[接口频率限制](limitationapi.html)。 +- 了解聊天室成员相关限制,详见[使用限制](/product/limitation.html#聊天室成员)。 + +## 聊天室成员角色 + +| 成员角色 | 描述 | 管理权限 | +| :----------- | :----------------------- | :----------------- | +| 普通成员 | 不具备管理权限的聊天室成员。 | 普通成员可以修改自己的聊天室信息。 | +| 聊天室管理员 | 由聊天室创建者授权,协助聊天室管理,具有管理权限。 | 管理员可以管理聊天室内的普通成员。 最多支持添加 99 个管理员。 | +| 聊天室所有者 | 聊天室的创建者,具有聊天室最高权限。 | 聊天室所有者可以指定聊天室管理员、解散聊天室、更改聊天室信息、管理聊天室成员。 | + +## 认证方式 + +环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 REST API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 分页获取聊天室成员列表 + +可以分页获取聊天室成员列表。 + +### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatrooms/{chatroom_id}/users?pagenum={N}&pagesize={N} +``` + +#### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------------ | :----- | :------- | :---------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `chatroom_id` | String | 是 | 聊天室 ID。 | + +#### 查询参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :--- | :------- | :-------------------- | +| `pagenum` | Int | 否 | 查询页码。默认值为 `1`。 | +| `pagesize` | Int | 否 | 每页显示的聊天室成员数量。默认值为 1000。取值范围为 [0,1000]。若传入的值超过了 1000,则返回 1000 个聊天室成员。 | + +#### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------------------------- | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +### HTTP 响应 + +#### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 参数 | 类型 | 描述 | +| :------------------- | :----- | :------------ | +| `action` | String | 请求方法。 | +| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | +| `params` | JSON | 查询参数。 | +| - `pagesize` | Array | 每页期望显示的聊天室成员数量。 | +| - `pagenum` | Array | 当前页码。 | +| `uri` | String | 请求 URL。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON Array | 聊天室成员信息。 | +| - `owner` | String | 聊天室所有者的用户 ID。例如:{“owner”: “user1”}。 | +| - `member` | String | 普通聊天室成员或聊天室管理员的用户 ID。例如:{“member”:“user2”}。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `count` | Number | 本次调用实际获取的聊天室成员数量。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +### 示例 + +#### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users?pagenum=2&pagesize=2 -H 'Authorization: Bearer ' +``` + +#### 响应示例 + +```json +{ + "action": "get", + "application": "52XXXXf0", + "params": { + "pagesize": ["2"], + "pagenum": ["2"] + }, + "uri": "https://XXXX/XXXX/XXXX/chatrooms/12XXXX11/users", + "entities": [], + "data": [ + { + "owner": "user1" + }, + { + "member": "user2" + } + ], + "timestamp": 1489074511416, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp", + "count": 2 +} +``` + +### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | service_resource_not_found | do not find this group:XX | 聊天室 ID 不存在。 | 传入存在的合法的聊天室 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 diff --git a/docs/document/server-side/error.md b/docs/document/server-side/error.md index 3c9b3b02..3ef2fb83 100644 --- a/docs/document/server-side/error.md +++ b/docs/document/server-side/error.md @@ -47,8 +47,8 @@ | 用户属性 | 设置/删除/获取用户属性、获取 app 下用户属性总大小。 | 关于错误码,详见[用户属性模块](userprofile.html)中各接口对应的错误码列表。 | | 用户关系 | 添加/移除好友、设置好友备注、获取好友列表和导入好友列表。 | 关于错误码,详见[用户关系管理模块](user_relationship.html)中各接口对应的错误码列表。| | 消息 | 消息相关功能,包括发送消息、上传/下载文件、撤回消息、删除漫游消息、修改/导入消息。 | 详见以下 API 对应的错误码列表:
- [发送单聊消息](message_single.html)
- [发送群聊消息](message_group.html)
- [发送聊天室消息](message_chatroom.html)
- [上传和下载文件](message_download.html)
- [撤回消息和单向删除会话](message_recall.html)
- [单向删除漫游消息](message_delete.html)
- [修改文本或自定义消息](message_modify_text_custom.html)
- [导入消息](message_import.html) | -| 群组 | 群组管理、群成员管理、子区管理。 | 关于错误码,详见[群组管理](group_manage.html)、[群组文件管理](group_file.html)、[群成员管理](group_member.html)和[子区管理](group_thread.html)中各接口对应的错误码列表。 | -| 聊天室 | 聊天室管理、聊天室属性管理、聊天室成员管理。 | 关于错误码,详见[超级管理员管理](chatroom_superadmin.html)、[聊天室管理](chatroom_manage.html)、[聊天室属性管理](chatroom_attribute.html)和[聊天室成员管理](chatroom_member.html)中各接口对应的错误码列表。 | +| 群组 | 群组管理、群成员管理、子区管理。 | 关于错误码,详见[群组管理](group_manage.html)、[群组文件管理](group_file.html)、[群成员管理](group_member_obtain.html)和[子区管理](group_thread.html)中各接口对应的错误码列表。 | +| 聊天室 | 聊天室管理、聊天室属性管理、聊天室成员管理。 | 关于错误码,详见[超级管理员管理](chatroom_superadmin.html)、[聊天室管理](chatroom_manage.html)、[聊天室属性管理](chatroom_attribute.html)和[聊天室成员管理](chatroom_member_obtain.html)中各接口对应的错误码列表。 | | 在线状态订阅 | 设置用户在线状态、订阅/取消订阅/查询用户在线状态、查询单个群组的在线成员数量。 | 关于错误码,详见[在线状态订阅](presence.html)中各接口对应的错误码列表。 | | 消息表情回复(Reaction) | 创建/追加/删除 Reaction、根据消息 ID 获取 Reaction、根据消息 ID 和表情 ID 获取 Reaction 信息。 | 关于错误码,详见[消息表情回复](reaction.html)中各接口对应的错误码列表。 | | 离线推送 | 绑定/解除绑定推送信息、查询推送绑定信息、设置离线推送时显示的昵称、展示方式、免打扰、通知首选语言、使用推送模板。| 关于错误码,详见[离线推送](push.html)中各接口对应的错误码列表。 | diff --git a/docs/document/server-side/group_member.md b/docs/document/server-side/group_member.md deleted file mode 100644 index 1c30d0e2..00000000 --- a/docs/document/server-side/group_member.md +++ /dev/null @@ -1,2411 +0,0 @@ -# 群成员管理 - - - -环信即时通讯 IM 提供了 RESTful API 管理 App 中群组的成员,包括添加和移除群组成员、转让群组所有权以及群组黑名单、白名单和禁言列表相关操作。 - -## 前提条件 - -要调用环信即时通讯 RESTful API,请确保满足以下要求: - -- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 -- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 -- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。 - -## 公共参数 - -#### 请求参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :----- | :------- | :--------------- | -| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | -| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | -| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | -| `group_id` | String | 是 | 群组 ID。 | -| `username` | String | 是 | 用户 ID。 | - -#### 响应参数 - -| 参数 | 类型 | 描述 | -| :---------------- | :----- | :----------------------------------------------------------------------------- | -| `action` | String | 请求方法。 | -| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | -| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | -| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | -| `uri` | String | 请求 URL。 | -| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | -| `entities` | JSON | 响应实体。 | -| `data` | JSON | 实际获取的数据详情。 | -| `uuid` | String | 用户在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | -| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 | -| `timestamp` | Long | Unix 时间戳,单位为毫秒。 | -| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 | -| `properties` | String | 响应属性。 | - -## 群组角色 - -群组角色包含群主、群管理员和普通群成员,三个角色权限范围依次递减。 - -- 群主拥有群的所有权限; -- 群管理员拥有管理黑名单、白名单和禁言等权限; -- 群主加管理员数量共 100 个,即管理员最多可添加 99 个。 - -## 认证方式 - -环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: - -`Authorization: Bearer YourAppToken` - -为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 - -## 分页获取群成员列表 - -可以分页获取群组成员列表。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users?pagenum={N}&pagesize={N} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 查询参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :--- | :------- | :------------------- | -| `pagenum` | Int | 否 | 当前页码。默认从第 1 页开始获取。 | -| `pagesize` | Int | 否 | 每页期望返回的群组成员数量。取值范围为 [1,1000]。默认为 `1000`。若传入的值大于 `1000`,则获取 1000 个群组成员。 | - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :-------------------------- | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :----- | :------------------------------------------ | -| `data.owner` | String | 群主的用户 ID。例如:{“owner”: “user1”}。 | -| `data.member` | String | 普通群成员或群管理员的用户 ID。例如:{“member”:“user2”}。 | -| `count` | Number | 本次调用获取的群成员数量。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/users?pagenum=2&pagesize=2 -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "52XXXXf0", - "params": { - "pagesize": ["2"], - "pagenum": ["2"] - }, - "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/users", - "entities": [], - "data": [ - { - "owner": "user1" - }, - { - "member": "user2" - } - ], - "timestamp": 1489074511416, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp", - "count": 2 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | service_resource_not_found | do not find this group:XX | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 添加单个群组成员 - -每次添加一个群成员。若添加的用户已是群成员,则添加失败,返回错误。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------ | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------- | :----- | :-------------------------------------------------------------------- | -| `data.result` | Bool | 添加结果:
- `true`:成功。
- `false`:失败。 | -| `data.groupid` | String | 群组 ID。 | -| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_member`,表示添加群组成员。 | -| `data.user` | String | 添加的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user4' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user4", - "entities": [], - "data": { - "result": true, - "groupid": "66XXXX85", - "action": "add_member", - "user": "user4" - }, - "timestamp": 1542364958405, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | can not join this group, reason:user: XX already in group: XX\n | 用户已经在群里。 | 不要重复加入。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | -| 404 | resource_not_found | username XX doesn't exist! | 要添加的用户不存在 | 使用合法的用户,即 `username` 传入存在的用户 ID。| -| 403 | exceed_limit | user XX has joined too many groups! | 用户可加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 批量添加群组成员 - -一次为群组添加多个成员,每次最多可以添加 60 位成员。如果所有用户均已是群成员,添加失败,返回错误。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :---------- | :---- | :------- | :---------- | -| `usernames` | Array | 是 | 要添加为群组成员的用户 ID 数组,每次最多可传 60 个用户 ID。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------------- | :----- | :----------------- | -| `data.newmembers` | Array | 添加的群组成员的用户 ID。 | -| `data.groupid` | String | 群组 ID。 | -| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_member`,表示添加群成员。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ - "usernames": [ - "user4","user5" - ] - }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users", - "entities": [], - "data": { - "newmembers": ["user5", "user4"], - "groupid": "66XXXX85", - "action": "add_member" - }, - "timestamp": 1542365557942, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | an not join this group, reason:user: XX already in group: XX\n | 用户已经在群里。 | 不要重复加入。| -| 403 | exceed_limit | user XX has joined too many groups! | 用户可加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 | -| 403 | exceed_limit | members size is greater than max user size ! | 加入群成员的人数超过最大限制。每次最多可以添加 60 位成员。 | 调整创建群的加群人数。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | -| 404 | resource_not_found | username XX doesn't exist! | 要添加的用户不存在。 | 使用合法的用户,即 `username` 传入存在的用户 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 移除单个群组成员 - -从群中移除指定成员。如果被移除用户不是群成员,将移除失败,并返回错误。移除后,该成员也会被移除其在该群组中加入的子区。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------- | :----- | :----------------------------------------------------------------------- | -| `data.result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 | -| `data.groupid` | String | 群组 ID。 | -| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除群组成员。 | -| `data.user` | String | 被移除的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user3' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user3", - "entities": [], - "data": { - "result": true, - "action": "remove_member", - "user": "user3", - "groupid": "66XXXX85" - }, - "timestamp": 1542365943067, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | users [XX] are not members of this group! | 用户不在群组中。 | 传入群组中成员的用户 ID。| -| 403 | forbidden_op | forbidden operation on group owner! | 群主不能被移除。 | 不要将群主移出群组。 | -| 403 | exceed_limit | user XX has joined too many groups! | 用户加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 批量移除群组成员 - -一次移除多名群成员。如果所有被移除用户均不是群成员,将移除失败,并返回错误。移除后,这些成员也会被移除其在该群组中加入的子区。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{members} -``` - -##### 路径参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------- | :----- | :------- | :-------------------------------------------------------------------------------------------------------------- | -| `members` | String | 是 | 要移除的群成员的用户 ID,用户 ID 之间用英文逗号(",")分隔。建议每次最多传 60 个用户 ID,并且 URL 的长度不超过 4 KB。 | - -其他参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :-------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------- | :----- | :------------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 操作结果:
- `true`:移除成功;
- `false`:移除失败。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除群组成员。 | -| - `reason` | String | 操作失败的原因。 | -| - `user` | String | 被移除成员的用户 ID。 | -| - `groupid` | String | 操作的群组 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/ttXXXX81,user2,user3' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "9bXXXXf7", - "uri": "https://XXXX/XXXX/XXXX", - "entities": [], - "data": [ - { - "result": false, - "action": "remove_member", - "reason": "user ttXXXX81 doesn't exist.", - "user": "user1", - "groupid": "14XXXX79" - }, - { - "result": true, - "action": "remove_member", - "user": "user2", - "groupid": "14XXXX79" - }, - { - "result": true, - "action": "remove_member", - "user": "user3", - "groupid": "14XXXX79" - } - ], - "timestamp": 1433492935318, - "duration": 84, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | users [XX] are not members of this group! | 用户不在群组中。 | 传入群组中成员的用户 ID。 | -| 403 | forbidden_op | forbidden operation on group owner! | 群主不能被移除。 | 无。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | -| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量移除群成员数量超过 60 人。 | 控制批量移除群成员数量在 60 以内。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 设置群成员自定义属性 - -设置群成员的自定义属性(key-value),例如在群组中的昵称和头像等。 - -#### HTTP 请求 - -```http -PUT https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/user/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :--- | :------- | :----------------------------------------- | -| `metaData` | JSON | 是 | 要设置的群成员自定义属性,为 key-value 键值对。对于单个键值对:
- key 表示属性名称,不能超过 16 字节。
- value 表示属性值,不能超过 512 个字节。若 value 设置为空字符串即删除该自定义属性。单个群成员的自定义属性总长度不能超过 4 KB。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :----- | :--- | :----------------------- | -| `data` | JSON | 设置的群成员自定义属性。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token -curl -L -X PUT 'https://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/user/XXXX' \ --H 'Content-Type: application/json' \ --H 'Accept: application/json' \ --H 'Authorization: Bearer ' \ --d '{ - "metaData": { - "key1": "value1" - } -}' -``` - -##### 响应示例 - -```json -{ - "timestamp": 1678674135533, - "data": { - "key1": "value1" - }, - "duration": 53 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | metadata_error | exceeds chatgroup user metadata single key limit | 添加的群成员属性的 key 过长。 | 调整群成员属性 key 的长度。属性 key 不能超过 16 字节。 | -| 400 | metadata_error | exceeds chatgroup user metadata single value limit | 添加的群成员属性的 value 过长。 | 调整群成员属性 value 的长度。value 不能超过 512 个字节。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 批量设置群成员自定义属性 - -批量设置群成员的自定义属性(key-value),例如,在群组中的昵称和头像等。每次请求最多可为 20 个群成员设置多个属性,而且可对不同群成员设置不同属性。传入相同用户 ID 时,若其属性名称不同,则添加,相同则更新。 - -**调用频率上限**:100 次/秒/App Key - -#### HTTP 请求 - -```http -PUT https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/users/batch -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。| -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :--- | :------- | :-------------- | -| `username` | JSON | 是 | 要设置自定义属性的群成员用户 ID,为 key-value 键值对。对于单个键值对:
- key 为固定字段,固定为 `username` 。
- value 填写要设置自定义属性的单个用户 ID,不可为空。 | -| `metadata` | JSON | 是 | 要为该用户设置的群自定义属性,可包含多个 key-value 键值对。对于单个键值对:
- key 为要为该用户设置的属性名称,不能超过 16 字节,且不能为空。
- value 为要设置的属性的值,不能超过 512 个字节。若 value 设置为空字符串则删除该自定义属性。单个群成员的自定义属性总长度不能超过 4 KB。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :----- | :--- | :----------------------- | -| `data` | JSON | 设置的群成员自定义属性,包含更新成功和失败的信息。 | -| `updateMetadataFailed` | JSON Array | 失败的更新记录,包含更新失败的用户 ID 和对应的错误信息。 | -| `updateMetadataSucceeded` | JSON Array | 成功的更新记录,包含用户 ID 及其在当前群中的自定义属性。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token -curl -L -X PUT 'http://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/users/batch' \ --H 'Content-Type: application/json' \ --H 'Accept: application/json' \ --H 'Authorization: Bearer ' \ --d '[ - { - "username": "user1", - "metadata": { - "metadataKey1": "value1", - "metadataKey2": "value2" - } - }, - { - "username": "user2", - "metadata": { - "metadataKey3": "value3", - "metadataKey4": "" - } - } -]' -``` - -##### 响应示例 - -```json -{ - "timestamp": 1727593257722, - "data": { - "updateMetadataFailed:": [], - "updateMetadataSucceeded:": [ - { - "username": "user1", - "metadata": { - "metadataKey1": "value1", - "metadataKey2": "value2" - } - }, - { - "username": "user2", - "metadata": { - "metadataKey3": "value3" - } - } - ] - }, - "duration": 483 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | metadata_error | exceeds chatgroup user metadata single key limit | 添加的群成员属性的 key 过长。 | 调整群成员属性名称的长度。属性 key 不能超过 16 字节。 | -| 400 | metadata_error | exceeds chatgroup user metadata single value limit | 添加的群成员属性的 value 过长。 | 调整群成员属性值的长度。属性 value 不能超过 512 个字节。 | -| 400 | metadata_error | Some users are not in the group: user99 | 部分用户不在群内 | 验证返回的用户是否在群内,如不在群内,请先添加至群聊或从请求中移除。 | -| 400 | metadata_error | exceeds chatgroup metadata batch put users limit | 批量修改的群成员数量达到上限。 | 调整批量设置自定义属性的群成员数量,单次请求修改不能超过 20 个群成员。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | metadata_error | chatgroup user metadata service not allow | 自定义群成员属性功能未开通。 | 请联系商务开通。 | -| 404 | metadata_error | group not exists | 群聊不存在。 | 请检查请求中的group_id 是否存在。 | -| 409 | metadata_error | Failed to operate user metadata. Concurrent operation not allowed | 对相同用户并发请求操作其 metadata | 由于该接口为批量接口,尽量避免对相同用户并发操作的使用场景,可以通过一次性传入用户所需的全部 metadata 进行设置。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 获取单个群成员的所有自定义属性 - -获取单个群成员的所有自定义属性。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/user/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :----- | :--- | :----------------------- | -| `data` | JSON | 获取的群成员自定义属性。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token -curl -L -X GET 'https://a1-hsb.easemob.com/easemob-demo/testy/metadata/chatgroup/207059303858177/user/test2' \ --H 'Content-Type: application/json' \ --H 'Accept: application/json' --H 'Authorization: Bearer YWMtozZwfsFFEe2oQTE6aob5eQAAAAAAAAAAAAAAAAAAAAExCXvf5bRGAJBgXNYFJVQ9AQMAAAGG2MUClwBPGgDsI1GYg1QtapTEdGyrm29Eu6L8qx60lDZ9TJRDOQjEsw' \ ---data-raw '' -``` - -##### 响应示例 - -```json -{ - "timestamp": 1678674211840, - "data": { - "key1": "value1" - }, - "duration": 6 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | MetadataException | user not in group | 用户不在群组内。 | 使用正确的群组成员的用户 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 根据属性 key 获取多个群成员的自定义属性 - -根据指定的属性 key 获取多个群成员的自定义属性。每次最多可获取 10 个群成员的自定义属性。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/get -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :----------- | :--------- | :------- | :--------------------------------- | -| `targets` | JSON Array | 是 | 要获取自定义属性的群成员的用户 ID。一次最多可传 10 个用户 ID。 | -| `properties` | JSON Array | 是 | 要获取自定义属性的 key 的数组。若该参数设置为空数组或不传,则获取这些群成员的所有自定义属性。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :----- | :--- | :------------------ | -| `data` | JSON | 获取的群成员的自定义属性。如下响应示例中的 `test1` 和 `test2` 为自定义属性所属的群成员的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token -curl -L -X POST 'https://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/get'\ --H'Content-Type: application/json'\ --H'Accept: application/json'\ --H'Authorization: Bearer '\ --d '{ - "targets":["test1","test2"], - "properties":["key1","key2"] -}' -``` - -##### 响应示例 - -```json -{ - "timestamp": 1678674292783, - "data": { - "test1": { - "key1": "value1" - }, - "test2": { - "key1": "value1" - } - }, - "duration": 2 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | metadata_error | query param reaches limit. | 批量查询数量达到限制。 | 减少要查询的用户 ID。每次最多可获取 10 个群成员的自定义属性。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 获取群管理员列表 - -获取群组管理员列表。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :-------------------------------- | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :----- | :---- | :------------------------- | -| `data` | Array | 群组管理员的用户 ID 列表。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin", - "entities": [], - "data": ["user1"], - "timestamp": 1489073361210, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp", - "count": 1 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 添加群管理员 - -将一个普通群成员设为为群管理员。群管理员有管理黑名单、禁言等权限。最多可以添加 99 个群管理员。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :-------- | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :--------- | :----- | :------- | :-------------------------- | -| `newadmin` | String | 是 | 要添加的新管理员的用户 ID。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :-------------- | :----- | :---------------------- | -| `data` | JSON | 群管理员添加结果。 | -| `data.result` | String | 群管理员是否添加成功。 | -| `data.newadmin` | String | 添加的管理员的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin -d '{"newadmin":"user1"}' -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "52XXXXf0", - "applicationName": "demo", - "data": { - "result": "success", - "newadmin": "man" - }, - "duration": 0, - "entities": [], - "organization": "XXXX", - "properties": {}, - "timestamp": 1680074570600, - "uri": "https://XXXX/XXXX/XXXX/chatgroups/190141728620545/admin" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | user: XX doesn't exist in group: XXX | 用户不在群组中。 | 传入群组成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。| - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 移除群管理员 - -将用户的角色从群管理员降为群普通成员。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------- | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :-------------- | :----- | :--------------------------------------------------------------------------- | -| `data.result` | Bool | 操作结果:
- `success`:表示移除成功;
- `failure`:表示移除失败。 | -| `data.oldadmin` | String | 被移除的管理员用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin/user1 -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin/user1", - "entities": [], - "data": { - "result": "success", - "oldadmin": "user1" - }, - "timestamp": 1489073432732, - "duration": 1, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | user:XX is not admin of group:XX | 用户不是这个群的管理员。 | 传入在群组中管理员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 转让群组 - -修改群主为同一群组中的其他成员。 - -#### HTTP 请求 - -```http -PUT https://{host}/{org_name}/{app_name}/chatgroups/{group_id} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 描述 | -| :--------- | :----- | :------------------------ | -| `newowner` | String | 群组的新群主的用户 ID。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :-------------- | :--- | :-------------------------------------------------------------- | -| `data.newowner` | Bool | 操作结果:
- `true`:转让成功。
- `false`:转让失败。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X PUT -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ "newowner": "user2" }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85' -``` - -##### 响应示例 - -```json -{ - "action": "put", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85", - "entities": [], - "data": { - "newowner": true - }, - "timestamp": 1542537813420, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | user: XX doesn't exist in group: XXX | 要转让的新群主不在群组中。 | 传入群组成员的用户 ID。 | -| 403 | forbidden_op | new owner and old owner are the same | 新群主和旧群主不能是同一群成员。 | 传入的新群主的用户 ID 不能与旧群主的用户 ID 相同。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 管理黑名单 - -环信即时通讯 IM 提供多个接口完成群组黑名单管理,包括查看黑名单中的用户以及将用户加入和移除黑名单等。 - -### 查询群组黑名单 - -查询一个群组黑名单中的用户列表。黑名单中的用户无法查看该群组的信息,也无法收到该群组的消息。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :--------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------ | :---- | :----------------------- | -| `count` | Int | 群组黑名单中的用户数量。 | -| `data` | Array | 群组黑名单上的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/67178793598977/blocks/users", - "entities": [], - "data": ["user2", "user3"], - "timestamp": 1543466293681, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp", - "count": 2 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 添加单个用户至群组黑名单 - -将单个用户添加至群组黑名单。群主无法被加入群组的黑名单。 - -用户进入群组黑名单后会收到加入黑名单的回调。之后,该用户无法查看该群组的信息,也收不到该群组的消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------- | :----- | :---------------------------------------------------------------------------- | -| `data.result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 | -| `data.action` | String | 执行操作。在该响应中,该字段的值为 `add_blocks`,表示将成员添加至群组黑名单。 | -| `data.user` | String | 添加的用户 ID。 | -| `data.groupid` | String | 群组 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1", - "entities": [], - "data": { - "result": true, - "action": "add_blocks", - "user": "user1", - "groupid": "66XXXX85" - }, - "timestamp": 1542539577124, - "duration": 27, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | users [XX] are not members of this group! | 要添加黑名单的用户 ID 不在群组中。 | 使用群组成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | -| 403 | forbidden_op | forbidden operation on group owner! | 无法将群主加入群组黑名单。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 批量添加用户至群组黑名单 - -将多个用户添加至群组黑名单,一次最多可以添加 60 个用户。群主无法被加入群组的黑名单。 - -用户进入群组黑名单后会收到加入黑名单的回调。黑名单上的用户无法查看该群组的信息,也收不到该群组的消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :---------- | :---- | :------- | :--------------------------------- | -| `usernames` | Array | 是 | 要添加至群组黑名单的用户 ID 数组,每次最多可传 60 个用户 ID。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------- | :----- | :-------------------------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_blocks`,表示将群成员加入群组黑名单。 | -| - `reason` | String | 添加失败的原因。 | -| - `user` | String | 添加的用户 ID。 | -| - `groupid` | String | 群组 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ - "usernames": [ - "user3","user4" - ] - }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users", - "entities": [], - "data": [ - { - "result": false, - "action": "add_blocks", - "reason": "user: user3 doesn't exist in group: 66XXXX85", - "user": "user3", - "groupid": "66XXXX85" - }, - { - "result": true, - "action": "add_blocks", - "user": "user4", - "groupid": "66XXXX85" - } - ], - "timestamp": 1542540095540, - "duration": 16, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | userNames is more than max limit : 60 | 批量添加的用户数超过了上限 60。 | 调整要移除的数量在限制以下。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。| -| 403 | forbidden_op | users [XX] are not members of this group! | 要添加黑名单的用户 ID 不在群组中。 | 使用群组成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 从群组黑名单移除单个用户 - -将指定用户移出群组黑名单。对于群组黑名单中的用户,如果需要将其再次加入群组,需要先将其从群组黑名单中移除。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :--------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :-------- | :----- | :-------------------- | -| `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 | -| `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将群成员移出群组黑名单。 | -| `user` | String | 添加的用户 ID。 | -| `groupid` | String | 群组 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1", - "entities": [], - "data": { - "result": true, - "action": "remove_blocks", - "user": "user1", - "groupid": "66XXXX85" - }, - "timestamp": 1542540470679, - "duration": 45, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在群组中。 | 传入群组黑名单中的群成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 从群组黑名单批量移除用户 - -将多名指定用户从群组黑名单中移除。你一次最多可移除 60 个用户。 - -对于群组黑名单中的用户,如果要将其再次加入群组,需先将其从群组黑名单中移除。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{usernames} -``` - -##### 路径参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :---------- | :----- | :------- | :-------------------------- | -| `usernames` | String | 是 | 要移除群组黑名单的用户 ID,一次最多可传 60 个,用户 ID 之间以英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。 | - -其他参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :-------------------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------- | :----- | :-------------------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将用户从群组黑名单批量移除。 | -| - `user` | String | 被移除的用户 ID。 | -| - `groupid` | String | 群组 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1%2Cuser2' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "8bXXXX02", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1%2Cuser2", - "entities": [], - "data": [ - { - "result": true, - "action": "remove_blocks", - "user": "user1", - "groupid": "66XXXX85" - }, - { - "result": true, - "action": "remove_blocks", - "user": "user2", - "groupid": "66XXXX85" - } - ], - "timestamp": 1542541014655, - "duration": 29, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | removeBlacklist: list size more than max limit : 60 | 批量删除超过上限 60。 | 调整要移除的数量在限制以下。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在群组中。 | 传入群组黑名单中的群成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 管理白名单 - -环信即时通讯 IM 提供多个接口实现群组白名单管理,包括查看群组白名单中的用户以及将用户添加至或移除白名单等。 - -### 查询群组白名单 - -查询群组白名单中的用户列表。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :----- | :---- | :--------------------------- | -| `data` | Array | 群组白名单中的用户 ID 列表。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "XXXX", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users", - "entities": [], - "data": [ - "wzy_test", - "wzy_vivo", - "wzy_huawei", - "wzy_xiaomi", - "wzXXXXzu" - ], - "timestamp": 1594724947117, - "duration": 3, - "organization": "XXXX", - "applicationName": "XXXX", - "count": 5 -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 添加单个用户至群组白名单 - -将指定的单个用户添加至群组白名单。用户添加至群组白名单后,当群组全员被禁言时,仍可以在群组中发送消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users/{username} -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------------ | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 描述 | -| :------------- | :----------------------- | -| `data.result` | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 | -| `data.action` | 执行操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将成员加入群白名单。 | -| `data.user` | 添加的用户 ID。 | -| `data.groupid` | 群组 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users/{username}' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "XXXX", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users/wzy_xiaomi", - "entities": [], - "data": { - "result": true, - "action": "add_user_whitelist", - "user": "wzy_xiaomi", - "groupid": "12XXXX53" - }, - "timestamp": 1594724293063, - "duration": 4, - "organization": "XXXX", - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在群组中。 | 传入群组成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 批量添加用户至群组白名单 - -添加多个用户至群组白名单。你一次最多可添加 60 个用户。 - -用户添加至白名单后在群组全员禁言时仍可以在群组中发送消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------------------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 描述 | -| :---------- | :---- | :----------------- | -| `usernames` | Array | 待添加至群组白名单中的用户 ID 数组,每次最多可传 60 个用户 ID。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------- | :----- | :--------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将成员加入群白名单。 | -| - `user` | String | 添加的用户 ID。 | -| - `groupid` | String | 群组 ID。 | -| - `reason` | String | 添加失败的原因。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{"usernames" : ["user1"]}' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "XXXX", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users", - "entities": [], - "data": [ - { - "result": true, - "action": "add_user_whitelist", - "user": "wzy_test", - "groupid": "12XXXX53" - }, - { - "result": true, - "action": "add_user_whitelist", - "user": "wzXXXXzu", - "groupid": "12XXXX53" - } - ], - "timestamp": 1594724634191, - "duration": 2, - "organization": "XXXX", - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | usernames size is more than max limit : 60 | 批量添加白名单的群成员超过了上限 60。 | 调整要添加的数量在限制(60)以下。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在群组中。 | 传入群组成员的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 从群组白名单移除用户 - -将指定用户从群组白名单中移除。你每次最多可移除 60 个用户。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users/{username} -``` - -##### 路径参数 -| 参数 | 类型 | 是否必需 | 描述 | -| :-------- | :----- | :------- | :----- | -| `username` | String | 是 | 要从群组白名单中移除的用户 ID,最多可传 60 个,用户 ID 之间以英文逗号(",")分隔。 | - -其他参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------- | :----- | :------- | :----- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------- | :----- | :--------------------------------------------------------------------------------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 | -| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_user_whitelist`,表示将成员移出群组白名单。 | -| - `user` | String | 移除群组白名单的用户 ID。 | -| - `groupid` | String | 群组 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users/{username}' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "XXXX", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users/wzy_huawei,wzXXXXzu", - "entities": [], - "data": [ - { - "result": true, - "action": "remove_user_whitelist", - "user": "wzy_huawei", - "groupid": "12XXXX53" - }, - { - "result": true, - "action": "remove_user_whitelist", - "user": "wzXXXXzu", - "groupid": "12XXXX53" - } - ], - "timestamp": 1594725137704, - "duration": 1, - "organization": "XXXX", - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 400 | invalid_parameter | removeWhitelist size is more than max limit : 60 | 批量移除白名单的群成员数量超过了上限 60。 | 调整要移除的数量在限制(60)以下。 | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。| -| 403 | forbidden_op | users [XX] are not members of this group! | 要移除白名单的用户 ID 不在群组中。 | 传入在群组白名单中的用户 ID。| -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -## 管理禁言 - -环信即时通讯 IM 提供多个接口进行群组禁言列表管理,包括查看禁言列表以及将用户添加至或移出禁言列表等。 - -### 获取禁言列表 - -获取当前群组的禁言用户列表。 - -#### HTTP 请求 - -```http -GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :--------------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :----- | :--------------------------- | -| `data` | JSON Array | 响应数据。| -| - `expire` | Long | 禁言到期的时间,单位为毫秒。 | -| - `user` | String | 被禁言用户的 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "get", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute", - "entities": [], - "data": [ - { - "expire": 1489158589481, - "user": "user1" - } - ], - "timestamp": 1489072802179, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群组 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 禁言指定群成员 - -对一个或多个群成员禁言。你一次最多可禁言 60 个群组成员。 - -群成员被禁言后,将无法在群组中发送消息,也无法在该群组下的子区中发送消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :----------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -##### 请求 body - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :---- | :------- | :--------------------------------------------------------- | -| `mute_duration` | Long | 是 | 禁言时长,单位为毫秒。 | -| `usernames` | Array | 是 | 要添加到禁言列表的用户 ID 列表,每次最多可添加 60 个。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :----- | :-------------------------------------------------------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 操作结果:
- `true`:添加成功;
- `false`:添加失败。 | -| - `expire` | Long | 禁言到期的时间。该时间为 Unix 时间戳,单位为毫秒。 | -| - `user` | String | 被禁言用户的 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute -d '{"usernames":["user1"], "mute_duration":86400000}' -H 'Authorization: Bearer ' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute", - "entities": [], - "data": [ - { - "result": true, - "expire": 1489158589481, - "user": "user1" - } - ], - "timestamp": 1489072189508, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 403 | forbidden_op | users [XX] are not members of this group! | 要禁言的用户 ID 不在群组中。 | 传入群组中的用户 ID。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | -| 400 | invalid_parameter | userNames size is more than max limit : 60 | 批量禁言指定群成员数量超过60 | 控制禁言指定群成员数量在 60 以内。 | -| 403 | forbidden_op | "forbidden operation on group owner!" | 无法对群主禁言。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 禁言全体群成员 - -对所有群组成员一键禁言,即将群组的所有成员加入禁言列表。设置群组全员禁言后,仅群组白名单中的用户可在群组以及该群组下的子区内发送消息。 - -#### HTTP 请求 - -```http -POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/ban -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :---------- | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :--- | :-------------------------------------------------------------- | -| `data.mute` | Bool | 操作结果:
- `true`:禁言成功;
- `false`:禁言失败。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/ban' -``` - -##### 响应示例 - -```json -{ - "action": "post", - "application": "XXXX", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/ban", - "entities": [], - "data": { - "mute": true - }, - "timestamp": 1594628861058, - "duration": 1, - "organization": "XXXX", - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 解除成员禁言 - -将一个或多个群成员移出禁言列表。你一次最多可对 60 个成员解除禁言。 - -移除后,群成员可以在群组中正常发送消息,同时也可以在该群组下的子区中发送消息。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute/{member1}(,{member2},…) -``` - -##### 路径参数 - -| 参数 | 类型 | 是否必需 | 描述 | -| :------- | :----- | :------- | :---------------------------------------------------------------------------------------- | -| `member` | String | 是 | 要解除禁言的成员的用户 ID,每次最多可传 60 个,多个用户 ID 之间以英文逗号(",")分隔,例如 `{member1},{member2}`。 | - -其他参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------- | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :------------ | :---- | :-------------------------------------------------------------- | -| `data` | JSON Array | 响应数据。| -| - `result` | Bool | 操作结果:
- `true`:解除成功;
- `false`:解除失败。 | -| - `user` | Array | 被移出禁言列表的用户 ID。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/10130212061185/mute/user1' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "52XXXXf0", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute/user1", - "entities": [], - "data": [ - { - "result": true, - "user": "user1" - } - ], - "timestamp": 1489072695859, - "duration": 0, - "organization": "XXXX", - "applicationName": "testapp" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | -| 400 | invalid_parameter | removeMute member size more than max limit : 60 | 批量移除禁言列表的用户数超过上限 60。 | 控制解除成员禁言数量在 60 以内。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - -### 解除全员禁言 - -一键取消对群组全体成员的禁言。解除禁言后,群成员可以在群组和该群组下的子区中正常发送消息。 - -#### HTTP 请求 - -```http -DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/ban -``` - -##### 路径参数 - -参数及描述详见 [公共参数](#公共参数)。 - -##### 请求 header - -| 参数 | 类型 | 是否必需 | 描述 | -| :-------------- | :----- | :------- | :------------------------------ | -| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | -| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | -| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | - -#### HTTP 响应 - -##### 响应 body - -如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: - -| 字段 | 类型 | 描述 | -| :---------- | :--- | :--------------------------------------------------------------- | -| `data.mute` | Bool | 是否处于全员禁言状态。
- `true`:是;
- `false`:否。 | - -其他字段及描述详见 [公共参数](#公共参数)。 - -如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 - -#### 示例 - -##### 请求示例 - -```shell -# 将 替换为你在服务端生成的 App Token - -curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/ban' -``` - -##### 响应示例 - -```json -{ - "action": "delete", - "application": "XXXX", - "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/ban", - "entities": [], - "data": { - "mute": false - }, - "timestamp": 1594628899502, - "duration": 1, - "organization": "XXXX", - "applicationName": "XXXX" -} -``` - -#### 错误码 - -如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: - -| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | -| :----------- | :--- | :------------- | :----------- | :----------- | -| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | -| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | - -关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 - diff --git a/docs/document/server-side/group_member_add_delete.md b/docs/document/server-side/group_member_add_delete.md new file mode 100644 index 00000000..9f5efa91 --- /dev/null +++ b/docs/document/server-side/group_member_add_delete.md @@ -0,0 +1,413 @@ +# 添加/移除群组成员 + + + +环信即时通讯 IM 提供了多个 RESTful API 接口实现群组成员的添加和移除,包括添加单个或批量添加成员和移除单个或批量移除成员。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 +- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `group_id` | String | 是 | 群组 ID。 | +| `username` | String | 是 | 用户 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :---------------- | :----- | :----------------------------------------------------------------------------- | +| `action` | String | 请求方法。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 实际获取的数据详情。 | +| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | Unix 时间戳,单位为毫秒。 | +| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 | +| `properties` | String | 响应属性。 | + +## 认证方式 + +环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 添加单个群组成员 + +每次添加一个群成员。若添加的用户已是群成员,则添加失败,返回错误。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{username} +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------ | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------- | :----- | :-------------------------------------------------------------------- | +| `data.result` | Bool | 添加结果:
- `true`:成功。
- `false`:失败。 | +| `data.groupid` | String | 群组 ID。 | +| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_member`,表示添加群组成员。 | +| `data.user` | String | 添加的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user4' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user4", + "entities": [], + "data": { + "result": true, + "groupid": "66XXXX85", + "action": "add_member", + "user": "user4" + }, + "timestamp": 1542364958405, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | can not join this group, reason:user: XX already in group: XX\n | 用户已经在群里。 | 不要重复加入。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | +| 404 | resource_not_found | username XX doesn't exist! | 要添加的用户不存在 | 使用合法的用户,即 `username` 传入存在的用户 ID。| +| 403 | exceed_limit | user XX has joined too many groups! | 用户可加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量添加群组成员 + +一次为群组添加多个成员,每次最多可以添加 60 位成员。如果所有用户均已是群成员,添加失败,返回错误。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :---------- | :---- | :------- | :---------- | +| `usernames` | Array | 是 | 要添加为群组成员的用户 ID 数组,每次最多可传 60 个用户 ID。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :---------------- | :----- | :----------------- | +| `data.newmembers` | Array | 添加的群组成员的用户 ID。 | +| `data.groupid` | String | 群组 ID。 | +| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `add_member`,表示添加群成员。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ + "usernames": [ + "user4","user5" + ] + }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users", + "entities": [], + "data": { + "newmembers": ["user5", "user4"], + "groupid": "66XXXX85", + "action": "add_member" + }, + "timestamp": 1542365557942, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | an not join this group, reason:user: XX already in group: XX\n | 用户已经在群里。 | 不要重复加入。| +| 403 | exceed_limit | user XX has joined too many groups! | 用户可加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 | +| 403 | exceed_limit | members size is greater than max user size ! | 加入群成员的人数超过最大限制。每次最多可以添加 60 位成员。 | 调整创建群的加群人数。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | +| 404 | resource_not_found | username XX doesn't exist! | 要添加的用户不存在。 | 使用合法的用户,即 `username` 传入存在的用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 移除单个群组成员 + +从群中移除指定成员。如果被移除用户不是群成员,将移除失败,并返回错误。移除后,该成员也会被移除其在该群组中加入的子区。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{username} +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------- | :----- | :----------------------------------------------------------------------- | +| `data.result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 | +| `data.groupid` | String | 群组 ID。 | +| `data.action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除群组成员。 | +| `data.user` | String | 被移除的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user3' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/user3", + "entities": [], + "data": { + "result": true, + "action": "remove_member", + "user": "user3", + "groupid": "66XXXX85" + }, + "timestamp": 1542365943067, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | users [XX] are not members of this group! | 用户不在群组中。 | 传入群组中成员的用户 ID。| +| 403 | forbidden_op | forbidden operation on group owner! | 群主不能被移除。 | 不要将群主移出群组。 | +| 403 | exceed_limit | user XX has joined too many groups! | 用户加入的群组数达到上限。 | 退出不用的群组或联系商务调整上限。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量移除群组成员 + +一次移除多名群成员。如果所有被移除用户均不是群成员,将移除失败,并返回错误。移除后,这些成员也会被移除其在该群组中加入的子区。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users/{members} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------- | :----- | :------- | :-------------------------------------------------------------------------------------------------------------- | +| `members` | String | 是 | 要移除的群成员的用户 ID,用户 ID 之间用英文逗号(",")分隔。建议每次最多传 60 个用户 ID,并且 URL 的长度不超过 4 KB。 | + +其他参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------- | :----- | :------------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 操作结果:
- `true`:移除成功;
- `false`:移除失败。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_member`,表示移除群组成员。 | +| - `reason` | String | 操作失败的原因。 | +| - `user` | String | 被移除成员的用户 ID。 | +| - `groupid` | String | 操作的群组 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/users/ttXXXX81,user2,user3' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "9bXXXXf7", + "uri": "https://XXXX/XXXX/XXXX", + "entities": [], + "data": [ + { + "result": false, + "action": "remove_member", + "reason": "user ttXXXX81 doesn't exist.", + "user": "user1", + "groupid": "14XXXX79" + }, + { + "result": true, + "action": "remove_member", + "user": "user2", + "groupid": "14XXXX79" + }, + { + "result": true, + "action": "remove_member", + "user": "user3", + "groupid": "14XXXX79" + } + ], + "timestamp": 1433492935318, + "duration": 84, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | users [XX] are not members of this group! | 用户不在群组中。 | 传入群组中成员的用户 ID。 | +| 403 | forbidden_op | forbidden operation on group owner! | 群主不能被移除。 | 无。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | +| 400 | invalid_parameter | kickMember: kickMembers number more than maxSize : 60 | 批量移除群成员数量超过 60 人。 | 控制批量移除群成员数量在 60 以内。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 diff --git a/docs/document/server-side/group_member_admin.md b/docs/document/server-side/group_member_admin.md new file mode 100644 index 00000000..a1317106 --- /dev/null +++ b/docs/document/server-side/group_member_admin.md @@ -0,0 +1,378 @@ +# 管理群组主和群管理员 + + + +环信即时通讯 IM 提供了多个 RESTful API 管理群主和管理员,包括转让群组、查询管理员和添加和移除单个群组管理员。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 +- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `group_id` | String | 是 | 群组 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :---------------- | :----- | :----------------------------------------------------------------------------- | +| `action` | String | 请求方法。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 实际获取的数据详情。 | +| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | Unix 时间戳,单位为毫秒。 | +| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 | +| `properties` | String | 响应属性。 | + +## 群组角色 + +群组角色包含群主、群管理员和普通群成员,三个角色权限范围依次递减。 + +- 群主拥有群的所有权限; +- 群管理员拥有管理黑名单、白名单和禁言等权限; +- 群主加管理员数量共 100 个,即管理员最多可添加 99 个。 + +## 认证方式 + +环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 转让群组 + +修改群主为同一群组中的其他成员。 + +#### HTTP 请求 + +```http +PUT https://{host}/{org_name}/{app_name}/chatgroups/{group_id} +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 描述 | +| :--------- | :----- | :------------------------ | +| `newowner` | String | 群组的新群主的用户 ID。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :-------------- | :--- | :-------------------------------------------------------------- | +| `data.newowner` | Bool | 操作结果:
- `true`:转让成功。
- `false`:转让失败。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X PUT -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ "newowner": "user2" }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85' +``` + +##### 响应示例 + +```json +{ + "action": "put", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85", + "entities": [], + "data": { + "newowner": true + }, + "timestamp": 1542537813420, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | user: XX doesn't exist in group: XXX | 要转让的新群主不在群组中。 | 传入群组成员的用户 ID。 | +| 403 | forbidden_op | new owner and old owner are the same | 新群主和旧群主不能是同一群成员。 | 传入的新群主的用户 ID 不能与旧群主的用户 ID 相同。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 获取群管理员列表 + +获取群组管理员列表。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------------------------------- | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :----- | :---- | :------------------------- | +| `data` | Array | 群组管理员的用户 ID 列表。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin", + "entities": [], + "data": ["user1"], + "timestamp": 1489073361210, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp", + "count": 1 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 添加群管理员 + +将一个普通群成员设为群管理员。群管理员有管理黑名单、禁言等权限。最多可以添加 99 个群管理员。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------- | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :-------------------------- | +| `newadmin` | String | 是 | 要添加的新管理员的用户 ID。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :-------------- | :----- | :---------------------- | +| `data` | JSON | 群管理员添加结果。 | +| `data.result` | String | 群管理员是否添加成功。 | +| `data.newadmin` | String | 添加的管理员的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin -d '{"newadmin":"user1"}' -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "52XXXXf0", + "applicationName": "demo", + "data": { + "result": "success", + "newadmin": "man" + }, + "duration": 0, + "entities": [], + "organization": "XXXX", + "properties": {}, + "timestamp": 1680074570600, + "uri": "https://XXXX/XXXX/XXXX/chatgroups/190141728620545/admin" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | user: XX doesn't exist in group: XXX | 用户不在群组中。 | 传入群组成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。| + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 移除群管理员 + +将用户的角色从群管理员降为群普通成员。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/admin/{username} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `username` | String | 是 | 要移出群组管理员列表的管理员的用户 ID。 | + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------- | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :-------------- | :----- | :--------------------------------------------------------------------------- | +| `data.result` | Bool | 操作结果:
- `success`:表示移除成功;
- `failure`:表示移除失败。 | +| `data.oldadmin` | String | 被移除的管理员用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin/user1 -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/admin/user1", + "entities": [], + "data": { + "result": "success", + "oldadmin": "user1" + }, + "timestamp": 1489073432732, + "duration": 1, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | user:XX is not admin of group:XX | 用户不是这个群的管理员。 | 传入在群组中管理员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + + diff --git a/docs/document/server-side/group_member_allowlist.md b/docs/document/server-side/group_member_allowlist.md new file mode 100644 index 00000000..c4fbbf61 --- /dev/null +++ b/docs/document/server-side/group_member_allowlist.md @@ -0,0 +1,410 @@ +# 群组白名单管理 + + + +环信即时通讯 IM 提供多个接口实现群组白名单管理,包括查看白名单中的用户以及将用户添加至和移出白名单等。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 +- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `group_id` | String | 是 | 群组 ID。 | +| `username` | String | 是 | 用户 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :---------------- | :----- | :----------------------------------------------------------------------------- | +| `action` | String | 请求方法。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 实际获取的数据详情。 | +| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | Unix 时间戳,单位为毫秒。 | +| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 | +| `properties` | String | 响应属性。 | + +## 认证方式 + +环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 查询群组白名单 + +查询群组白名单中的用户列表。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :----- | :---- | :--------------------------- | +| `data` | Array | 群组白名单中的用户 ID 列表。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "XXXX", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users", + "entities": [], + "data": [ + "wzy_test", + "wzy_vivo", + "wzy_huawei", + "wzy_xiaomi", + "wzXXXXzu" + ], + "timestamp": 1594724947117, + "duration": 3, + "organization": "XXXX", + "applicationName": "XXXX", + "count": 5 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 添加单个用户至群组白名单 + +将指定的单个用户添加至群组白名单。用户添加至群组白名单后,当群组全员被禁言时,仍可以在群组中发送消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users/{username} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `username` | String | 是 | 要加入群组白名单的用户 ID。 | + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------------------ | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 描述 | +| :------------- | :----------------------- | +| `data.result` | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 | +| `data.action` | 执行操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将成员加入群白名单。 | +| `data.user` | 添加的用户 ID。 | +| `data.groupid` | 群组 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users/{username}' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "XXXX", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users/wzy_xiaomi", + "entities": [], + "data": { + "result": true, + "action": "add_user_whitelist", + "user": "wzy_xiaomi", + "groupid": "12XXXX53" + }, + "timestamp": 1594724293063, + "duration": 4, + "organization": "XXXX", + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在群组中。 | 传入群组成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量添加用户至群组白名单 + +添加多个用户至群组白名单。你一次最多可添加 60 个用户。 + +用户添加至白名单后在群组全员禁言时仍可以在群组中发送消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 描述 | +| :---------- | :---- | :----------------- | +| `usernames` | Array | 待添加至群组白名单中的用户 ID 数组,每次最多可传 60 个用户 ID。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------- | :----- | :--------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_user_whitelist`,表示将成员加入群白名单。 | +| - `user` | String | 添加的用户 ID。 | +| - `groupid` | String | 群组 ID。 | +| - `reason` | String | 添加失败的原因。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{"usernames" : ["user1"]}' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "XXXX", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users", + "entities": [], + "data": [ + { + "result": true, + "action": "add_user_whitelist", + "user": "wzy_test", + "groupid": "12XXXX53" + }, + { + "result": true, + "action": "add_user_whitelist", + "user": "wzXXXXzu", + "groupid": "12XXXX53" + } + ], + "timestamp": 1594724634191, + "duration": 2, + "organization": "XXXX", + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | usernames size is more than max limit : 60 | 批量添加白名单的群成员超过了上限 60。 | 调整要添加的数量在限制(60)以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | users [XX] are not members of this group! | 要添加白名单的用户 ID 不在群组中。 | 传入群组成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 从群组白名单移除用户 + +将指定用户从群组白名单中移除。你每次最多可移除 60 个用户。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/white/users/{username} +``` + +##### 路径参数 +| 参数 | 类型 | 是否必需 | 描述 | +| :-------- | :----- | :------- | :----- | +| `username` | String | 是 | 要从群组白名单中移除的用户 ID,最多可传 60 个,用户 ID 之间以英文逗号(",")分隔。 | + +其他参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------- | :----- | :------- | :----- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------- | :----- | :--------------------------------------------------------------------------------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_user_whitelist`,表示将成员移出群组白名单。 | +| - `user` | String | 移除群组白名单的用户 ID。 | +| - `groupid` | String | 群组 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/white/users/{username}' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "XXXX", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/white/users/wzy_huawei,wzXXXXzu", + "entities": [], + "data": [ + { + "result": true, + "action": "remove_user_whitelist", + "user": "wzy_huawei", + "groupid": "12XXXX53" + }, + { + "result": true, + "action": "remove_user_whitelist", + "user": "wzXXXXzu", + "groupid": "12XXXX53" + } + ], + "timestamp": 1594725137704, + "duration": 1, + "organization": "XXXX", + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | removeWhitelist size is more than max limit : 60 | 批量移除白名单的群成员数量超过了上限 60。 | 调整要移除的数量在限制(60)以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。| +| 403 | forbidden_op | users [XX] are not members of this group! | 要移除白名单的用户 ID 不在群组中。 | 传入在群组白名单中的用户 ID。| +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + diff --git a/docs/document/server-side/group_member_attribute.md b/docs/document/server-side/group_member_attribute.md new file mode 100644 index 00000000..7787c32f --- /dev/null +++ b/docs/document/server-side/group_member_attribute.md @@ -0,0 +1,412 @@ +# 群成员属性管理 + + + +环信即时通讯 IM 提供了 RESTful API 管理 App 中群组的成员的属性,包括设置和获取单个或多个群成员的属性。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 +- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `group_id` | String | 是 | 群组 ID。 | +| `username` | String | 是 | 用户 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :---------------- | :----- | :----------------------------------------------------------------------------- | +| `action` | String | 请求方法。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 实际获取的数据详情。 | +| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | Unix 时间戳,单位为毫秒。 | +| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 | +| `properties` | String | 响应属性。 | + +## 认证方式 + +环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 设置群成员自定义属性 + +设置群成员的自定义属性(key-value),例如在群组中的昵称和头像等。 + +#### HTTP 请求 + +```http +PUT https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/user/{username} +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :--- | :------- | :----------------------------------------- | +| `metaData` | JSON | 是 | 要设置的群成员自定义属性,为 key-value 键值对。对于单个键值对:
- key 表示属性名称,不能超过 16 字节。
- value 表示属性值,不能超过 512 个字节。若 value 设置为空字符串即删除该自定义属性。单个群成员的自定义属性总长度不能超过 4 KB。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :----- | :--- | :----------------------- | +| `data` | JSON | 设置的群成员自定义属性。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token +curl -L -X PUT 'https://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/user/XXXX' \ +-H 'Content-Type: application/json' \ +-H 'Accept: application/json' \ +-H 'Authorization: Bearer ' \ +-d '{ + "metaData": { + "key1": "value1" + } +}' +``` + +##### 响应示例 + +```json +{ + "timestamp": 1678674135533, + "data": { + "key1": "value1" + }, + "duration": 53 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | metadata_error | exceeds chatgroup user metadata single key limit | 添加的群成员属性的 key 过长。 | 调整群成员属性 key 的长度。属性 key 不能超过 16 字节。 | +| 400 | metadata_error | exceeds chatgroup user metadata single value limit | 添加的群成员属性的 value 过长。 | 调整群成员属性 value 的长度。value 不能超过 512 个字节。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量设置群成员自定义属性 + +批量设置群成员的自定义属性(key-value),例如,在群组中的昵称和头像等。每次请求最多可为 20 个群成员设置多个属性,而且可对不同群成员设置不同属性。传入相同用户 ID 时,若其属性名称不同,则添加,相同则更新。 + +**调用频率上限**:100 次/秒/App Key + +#### HTTP 请求 + +```http +PUT https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/users/batch +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。| +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :--- | :------- | :-------------- | +| `username` | JSON | 是 | 要设置自定义属性的群成员用户 ID,为 key-value 键值对。对于单个键值对:
- key 为固定字段,固定为 `username` 。
- value 填写要设置自定义属性的单个用户 ID,不可为空。 | +| `metadata` | JSON | 是 | 要为该用户设置的群自定义属性,可包含多个 key-value 键值对。对于单个键值对:
- key 为要为该用户设置的属性名称,不能超过 16 字节,且不能为空。
- value 为要设置的属性的值,不能超过 512 个字节。若 value 设置为空字符串则删除该自定义属性。单个群成员的自定义属性总长度不能超过 4 KB。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :----- | :--- | :----------------------- | +| `data` | JSON | 设置的群成员自定义属性,包含更新成功和失败的信息。 | +| `updateMetadataFailed` | JSON Array | 失败的更新记录,包含更新失败的用户 ID 和对应的错误信息。 | +| `updateMetadataSucceeded` | JSON Array | 成功的更新记录,包含用户 ID 及其在当前群中的自定义属性。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token +curl -L -X PUT 'http://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/users/batch' \ +-H 'Content-Type: application/json' \ +-H 'Accept: application/json' \ +-H 'Authorization: Bearer ' \ +-d '[ + { + "username": "user1", + "metadata": { + "metadataKey1": "value1", + "metadataKey2": "value2" + } + }, + { + "username": "user2", + "metadata": { + "metadataKey3": "value3", + "metadataKey4": "" + } + } +]' +``` + +##### 响应示例 + +```json +{ + "timestamp": 1727593257722, + "data": { + "updateMetadataFailed:": [], + "updateMetadataSucceeded:": [ + { + "username": "user1", + "metadata": { + "metadataKey1": "value1", + "metadataKey2": "value2" + } + }, + { + "username": "user2", + "metadata": { + "metadataKey3": "value3" + } + } + ] + }, + "duration": 483 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | metadata_error | exceeds chatgroup user metadata single key limit | 添加的群成员属性的 key 过长。 | 调整群成员属性名称的长度。属性 key 不能超过 16 字节。 | +| 400 | metadata_error | exceeds chatgroup user metadata single value limit | 添加的群成员属性的 value 过长。 | 调整群成员属性值的长度。属性 value 不能超过 512 个字节。 | +| 400 | metadata_error | Some users are not in the group: user99 | 部分用户不在群内 | 验证返回的用户是否在群内,如不在群内,请先添加至群聊或从请求中移除。 | +| 400 | metadata_error | exceeds chatgroup metadata batch put users limit | 批量修改的群成员数量达到上限。 | 调整批量设置自定义属性的群成员数量,单次请求修改不能超过 20 个群成员。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | metadata_error | chatgroup user metadata service not allow | 自定义群成员属性功能未开通。 | 请联系商务开通。 | +| 404 | metadata_error | group not exists | 群聊不存在。 | 请检查请求中的group_id 是否存在。 | +| 409 | metadata_error | Failed to operate user metadata. Concurrent operation not allowed | 对相同用户并发请求操作其 metadata | 由于该接口为批量接口,尽量避免对相同用户并发操作的使用场景,可以通过一次性传入用户所需的全部 metadata 进行设置。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 获取单个群成员的所有自定义属性 + +获取单个群成员的所有自定义属性。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/user/{username} +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :----- | :--- | :----------------------- | +| `data` | JSON | 获取的群成员自定义属性。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token +curl -L -X GET 'https://a1-hsb.easemob.com/easemob-demo/testy/metadata/chatgroup/207059303858177/user/test2' \ +-H 'Content-Type: application/json' \ +-H 'Accept: application/json' +-H 'Authorization: Bearer YWMtozZwfsFFEe2oQTE6aob5eQAAAAAAAAAAAAAAAAAAAAExCXvf5bRGAJBgXNYFJVQ9AQMAAAGG2MUClwBPGgDsI1GYg1QtapTEdGyrm29Eu6L8qx60lDZ9TJRDOQjEsw' \ +--data-raw '' +``` + +##### 响应示例 + +```json +{ + "timestamp": 1678674211840, + "data": { + "key1": "value1" + }, + "duration": 6 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | MetadataException | user not in group | 用户不在群组内。 | 使用正确的群组成员的用户 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 根据属性 key 获取多个群成员的自定义属性 + +根据指定的属性 key 获取多个群成员的自定义属性。每次最多可获取 10 个群成员的自定义属性。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/metadata/chatgroup/{group_id}/get +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :----------- | :--------- | :------- | :--------------------------------- | +| `targets` | JSON Array | 是 | 要获取自定义属性的群成员的用户 ID。一次最多可传 10 个用户 ID。 | +| `properties` | JSON Array | 是 | 要获取自定义属性的 key 的数组。若该参数设置为空数组或不传,则获取这些群成员的所有自定义属性。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :----- | :--- | :------------------ | +| `data` | JSON | 获取的群成员的自定义属性。如下响应示例中的 `test1` 和 `test2` 为自定义属性所属的群成员的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token +curl -L -X POST 'https://XXXX/XXXX/XXXX/metadata/chatgroup/XXXX/get'\ +-H'Content-Type: application/json'\ +-H'Accept: application/json'\ +-H'Authorization: Bearer '\ +-d '{ + "targets":["test1","test2"], + "properties":["key1","key2"] +}' +``` + +##### 响应示例 + +```json +{ + "timestamp": 1678674292783, + "data": { + "test1": { + "key1": "value1" + }, + "test2": { + "key1": "value1" + } + }, + "duration": 2 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | metadata_error | query param reaches limit. | 批量查询数量达到限制。 | 减少要查询的用户 ID。每次最多可获取 10 个群成员的自定义属性。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + diff --git a/docs/document/server-side/group_member_blocklist.md b/docs/document/server-side/group_member_blocklist.md new file mode 100644 index 00000000..10af6f9e --- /dev/null +++ b/docs/document/server-side/group_member_blocklist.md @@ -0,0 +1,493 @@ +# 群组黑名单管理 + + + +环信即时通讯 IM 提供多个接口实现群组黑名单管理,包括查询群组黑名单、将成员添加和移除聊天室黑名单。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 +- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `group_id` | String | 是 | 群组 ID。 | +| `username` | String | 是 | 用户 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :---------------- | :----- | :----------------------------------------------------------------------------- | +| `action` | String | 请求方法。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 实际获取的数据详情。 | +| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | Unix 时间戳,单位为毫秒。 | +| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 | +| `properties` | String | 响应属性。 | + +## 认证方式 + +环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 查询群组黑名单 + +查询一个群组黑名单中的用户列表。黑名单中的用户无法查看该群组的信息,也无法收到该群组的消息。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------ | :---- | :----------------------- | +| `count` | Int | 群组黑名单中的用户数量。 | +| `data` | Array | 群组黑名单上的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/67178793598977/blocks/users", + "entities": [], + "data": ["user2", "user3"], + "timestamp": 1543466293681, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp", + "count": 2 +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 添加单个用户至群组黑名单 + +将单个用户添加至群组黑名单。群主无法被加入群组的黑名单。 + +用户进入群组黑名单后会收到加入黑名单的回调。之后,该用户无法查看该群组的信息,也收不到该群组的消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{username} +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------- | :----- | :---------------------------------------------------------------------------- | +| `data.result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 | +| `data.action` | String | 执行操作。在该响应中,该字段的值为 `add_blocks`,表示将成员添加至群组黑名单。 | +| `data.user` | String | 添加的用户 ID。 | +| `data.groupid` | String | 群组 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1", + "entities": [], + "data": { + "result": true, + "action": "add_blocks", + "user": "user1", + "groupid": "66XXXX85" + }, + "timestamp": 1542539577124, + "duration": 27, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | users [XX] are not members of this group! | 要添加黑名单的用户 ID 不在群组中。 | 使用群组成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | +| 403 | forbidden_op | forbidden operation on group owner! | 无法将群主加入群组黑名单。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 批量添加用户至群组黑名单 + +将多个用户添加至群组黑名单,一次最多可以添加 60 个用户。群主无法被加入群组的黑名单。 + +用户进入群组黑名单后会收到加入黑名单的回调。黑名单上的用户无法查看该群组的信息,也收不到该群组的消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :---------- | :---- | :------- | :--------------------------------- | +| `usernames` | Array | 是 | 要添加至群组黑名单的用户 ID 数组,每次最多可传 60 个用户 ID。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------- | :----- | :-------------------------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 添加结果:
- `true`:添加成功;
- `false`:添加失败。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `add_blocks`,表示将群成员加入群组黑名单。 | +| - `reason` | String | 添加失败的原因。 | +| - `user` | String | 添加的用户 ID。 | +| - `groupid` | String | 群组 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' -d '{ + "usernames": [ + "user3","user4" + ] + }' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users", + "entities": [], + "data": [ + { + "result": false, + "action": "add_blocks", + "reason": "user: user3 doesn't exist in group: 66XXXX85", + "user": "user3", + "groupid": "66XXXX85" + }, + { + "result": true, + "action": "add_blocks", + "user": "user4", + "groupid": "66XXXX85" + } + ], + "timestamp": 1542540095540, + "duration": 16, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | userNames is more than max limit : 60 | 批量添加的用户数超过了上限 60。 | 调整要移除的数量在限制以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。| +| 403 | forbidden_op | users [XX] are not members of this group! | 要添加黑名单的用户 ID 不在群组中。 | 使用群组成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 从群组黑名单移除单个用户 + +将指定用户移出群组黑名单。对于群组黑名单中的用户,如果需要将其再次加入群组,需要先将其从群组黑名单中移除。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{username} +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :-------- | :----- | :-------------------- | +| `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 | +| `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将群成员移出群组黑名单。 | +| `user` | String | 添加的用户 ID。 | +| `groupid` | String | 群组 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1", + "entities": [], + "data": { + "result": true, + "action": "remove_blocks", + "user": "user1", + "groupid": "66XXXX85" + }, + "timestamp": 1542540470679, + "duration": 45, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在群组中。 | 传入群组黑名单中的群成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 从群组黑名单批量移除用户 + +将多名指定用户从群组黑名单中移除。你一次最多可移除 60 个用户。 + +对于群组黑名单中的用户,如果要将其再次加入群组,需先将其从群组黑名单中移除。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/blocks/users/{usernames} +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :---------- | :----- | :------- | :-------------------------- | +| `usernames` | String | 是 | 要移除群组黑名单的用户 ID,一次最多可传 60 个,用户 ID 之间以英文逗号(",")分隔,逗号在 URL 中转义为 "%2C"。 | + +其他参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------------------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------- | :----- | :-------------------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 移除结果:
- `true`:移除成功;
- `false`:移除失败。 | +| - `action` | String | 执行的操作。在该响应中,该字段的值为 `remove_blocks`,表示将用户从群组黑名单批量移除。 | +| - `user` | String | 被移除的用户 ID。 | +| - `groupid` | String | 群组 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1%2Cuser2' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "8bXXXX02", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/66XXXX85/blocks/users/user1%2Cuser2", + "entities": [], + "data": [ + { + "result": true, + "action": "remove_blocks", + "user": "user1", + "groupid": "66XXXX85" + }, + { + "result": true, + "action": "remove_blocks", + "user": "user2", + "groupid": "66XXXX85" + } + ], + "timestamp": 1542541014655, + "duration": 29, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 400 | invalid_parameter | removeBlacklist: list size more than max limit : 60 | 批量删除超过上限 60。 | 调整要移除的数量在限制以下。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | users [XX] are not members of this group! | 要移除黑名单的用户 ID 不在群组中。 | 传入群组黑名单中的群成员的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 diff --git a/docs/document/server-side/group_member_mutelist.md b/docs/document/server-side/group_member_mutelist.md new file mode 100644 index 00000000..fcf7873c --- /dev/null +++ b/docs/document/server-side/group_member_mutelist.md @@ -0,0 +1,461 @@ +# 群组成员禁言管理 + + + +环信即时通讯 IM 提供多个接口实现聊天室成员禁言,包括获取禁言列表、将成员添加或移出禁言列表,以及全员禁言和解除全员禁言。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 +- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。 + +## 公共参数 + +#### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `group_id` | String | 是 | 群组 ID。 | +| `username` | String | 是 | 用户 ID。 | + +#### 响应参数 + +| 参数 | 类型 | 描述 | +| :---------------- | :----- | :----------------------------------------------------------------------------- | +| `action` | String | 请求方法。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON | 实际获取的数据详情。 | +| `uuid` | String | 用户在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | +| `created` | Long | 群组创建时间,Unix 时间戳,单位为毫秒。 | +| `timestamp` | Long | Unix 时间戳,单位为毫秒。 | +| `duration` | Int | 从发送请求到响应的时长,单位为毫秒。 | +| `properties` | String | 响应属性。 | + +## 认证方式 + +环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 获取禁言列表 + +获取当前群组的禁言用户列表。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :----- | :--------------------------- | +| `data` | JSON Array | 响应数据。| +| - `expire` | Long | 禁言到期的时间,单位为毫秒。 | +| - `user` | String | 被禁言用户的 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "get", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute", + "entities": [], + "data": [ + { + "expire": 1489158589481, + "user": "user1" + } + ], + "timestamp": 1489072802179, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群组 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 禁言指定群成员 + +对一个或多个群成员禁言。你一次最多可禁言 60 个群组成员。 + +群成员被禁言后,将无法在群组中发送消息,也无法在该群组下的子区中发送消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :---- | :------- | :--------------------------------------------------------- | +| `mute_duration` | Long | 是 | 禁言时长,单位为毫秒。 | +| `usernames` | Array | 是 | 要添加到禁言列表的用户 ID 列表,每次最多可添加 60 个。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :----- | :-------------------------------------------------------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 操作结果:
- `true`:添加成功;
- `false`:添加失败。 | +| - `expire` | Long | 禁言到期的时间。该时间为 Unix 时间戳,单位为毫秒。 | +| - `user` | String | 被禁言用户的 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute -d '{"usernames":["user1"], "mute_duration":86400000}' -H 'Authorization: Bearer ' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute", + "entities": [], + "data": [ + { + "result": true, + "expire": 1489158589481, + "user": "user1" + } + ], + "timestamp": 1489072189508, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 403 | forbidden_op | users [XX] are not members of this group! | 要禁言的用户 ID 不在群组中。 | 传入群组中的用户 ID。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | +| 400 | invalid_parameter | userNames size is more than max limit : 60 | 批量禁言指定群成员数量超过60 | 控制禁言指定群成员数量在 60 以内。 | +| 403 | forbidden_op | "forbidden operation on group owner!" | 无法对群主禁言。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 禁言全体群成员 + +对所有群组成员一键禁言,即将群组的所有成员加入禁言列表。设置群组全员禁言后,仅群组白名单中的用户可在群组以及该群组下的子区内发送消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/ban +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :---------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :--- | :-------------------------------------------------------------- | +| `data.mute` | Bool | 操作结果:
- `true`:禁言成功;
- `false`:禁言失败。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X POST -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/ban' +``` + +##### 响应示例 + +```json +{ + "action": "post", + "application": "XXXX", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/ban", + "entities": [], + "data": { + "mute": true + }, + "timestamp": 1594628861058, + "duration": 1, + "organization": "XXXX", + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 解除成员禁言 + +将一个或多个群成员移出禁言列表。你一次最多可对 60 个成员解除禁言。 + +移除后,群成员可以在群组中正常发送消息,同时也可以在该群组下的子区中发送消息。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/mute/{member1}(,{member2},…) +``` + +##### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :------- | :----- | :------- | :---------------------------------------------------------------------------------------- | +| `member` | String | 是 | 要解除禁言的成员的用户 ID,每次最多可传 60 个,多个用户 ID 之间以英文逗号(",")分隔,例如 `{member1},{member2}`。 | + +其他参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------- | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :---- | :-------------------------------------------------------------- | +| `data` | JSON Array | 响应数据。| +| - `result` | Bool | 操作结果:
- `true`:解除成功;
- `false`:解除失败。 | +| - `user` | Array | 被移出禁言列表的用户 ID。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/10130212061185/mute/user1' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "52XXXXf0", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/mute/user1", + "entities": [], + "data": [ + { + "result": true, + "user": "user1" + } + ], + "timestamp": 1489072695859, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | +| 400 | invalid_parameter | removeMute member size more than max limit : 60 | 批量移除禁言列表的用户数超过上限 60。 | 控制解除成员禁言数量在 60 以内。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + +## 解除全员禁言 + +一键取消对群组全体成员的禁言。解除禁言后,群成员可以在群组和该群组下的子区中正常发送消息。 + +#### HTTP 请求 + +```http +DELETE https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/ban +``` + +##### 路径参数 + +参数及描述详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------------------------ | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Accept` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :---------- | :--- | :--------------------------------------------------------------- | +| `data.mute` | Bool | 是否处于全员禁言状态。
- `true`:是;
- `false`:否。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X DELETE -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Authorization: Bearer ' 'https://XXXX/XXXX/XXXX/chatgroups/{groupid}/ban' +``` + +##### 响应示例 + +```json +{ + "action": "delete", + "application": "XXXX", + "uri": "https://XXXX/XXXX/XXXX/chatgroups/12XXXX53/ban", + "entities": [], + "data": { + "mute": false + }, + "timestamp": 1594628899502, + "duration": 1, + "organization": "XXXX", + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | resource_not_found | grpID XX does not exist! | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 + diff --git a/docs/document/server-side/group_member_obtain.md b/docs/document/server-side/group_member_obtain.md new file mode 100644 index 00000000..8ec06894 --- /dev/null +++ b/docs/document/server-side/group_member_obtain.md @@ -0,0 +1,141 @@ +# 获取群组成员列表 + + + +环信即时通讯 IM 提供 RESTful API 接口用于分页获取群组成员列表。 + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯 IM 管理后台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 了解环信 IM RESTful API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 +- 群成员的相关限制,详见 [使用限制](limitation.html#群组)。 + +## 群组角色 + +群组角色包含群主、群管理员和普通群成员,三个角色权限范围依次递减。 + +- 群主拥有群的所有权限; +- 群管理员拥有管理黑名单、白名单和禁言等权限; +- 群主加管理员数量共 100 个,即管理员最多可添加 99 个。 + +## 认证方式 + +环信即时通讯 RESTful API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。即时通讯 RESTful API 推荐使用 app token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +## 分页获取群成员列表 + +可以分页获取群组成员列表。 + +### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/chatgroups/{group_id}/users?pagenum={N}&pagesize={N}&joined_time={true/false} +``` + +#### 路径参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :--------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `group_id` | String | 是 | 群组 ID。 | + +#### 查询参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :--- | :------- | :------------------- | +| `pagenum` | Int | 否 | 当前页码。默认从第 1 页开始获取。 | +| `pagesize` | Int | 否 | 每页期望返回的群组成员数量。取值范围为 [1,1000]。默认为 `1000`。若传入的值大于 `1000`,则获取 1000 个群组成员。 | +| `joined_time` | Bool | 否 | 是否需返回用户加入群组的时间:
- `true`:返回
- `false`:不返回 | + +#### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :-------------------------- | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +### HTTP 响应 + +#### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :----- | :------------------------------------------ | +| `action` | String | 请求方法。 | +| `application` | String | 应用在系统内的唯一标识。该标识由系统生成,开发者无需关心。 | +| `params` | JSON | 查询参数。 | +| - `joined_time` | Bool | 是否需返回用户加入群组的时间:
- `true`:返回
- `false`:不返回 | +| - `pagesize` | Array | 每页期望显示的群组成员数量。 | +| - `pagenum` | Array | 当前页码。 | +| `uri` | String | 请求 URL。 | +| `entities` | JSON | 响应实体。 | +| `data` | JSON Array | 群组成员信息。 | +| `data.owner` | String | 群主的用户 ID。例如:{“owner”: “user1”}。 | +| `data.joined_time` | String | 加入群组的时间。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长,单位为毫秒。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `count` | Int | 本次调用实际获取的群成员数量。 | + +其他字段及描述详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +### 示例 + +#### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -X GET HTTP://XXXX/XXXX/XXXX/chatgroups/10XXXX85/users?pagesize=1000&pagenum=1&joined_time=true' \ +-H 'Authorization: Bearer ' +``` + +#### 响应示例 + +```json +{ + "action": "get", + "application": "52XXXXf0", + "params": { + "pagesize": ["2"], + "pagenum": ["2"] + }, + "uri": "https://XXXX/XXXX/XXXX/chatgroups/10XXXX85/users", + "entities": [], + "data": [ + { + "owner": "user1" + }, + { + "member": "user2" + } + ], + "timestamp": 1489074511416, + "duration": 0, + "organization": "XXXX", + "applicationName": "testapp", + "count": 2 +} +``` + +### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----------- | :--- | :------------- | :----------- | :----------- | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | service_resource_not_found | do not find this group:XX | 群组不存在。 | 使用合法的群 ID。 | + +关于其他错误,你可以参考 [响应状态码](error.html) 了解可能的原因。 \ No newline at end of file diff --git a/docs/document/server-side/favorite.md b/docs/document/server-side/user_favorite.md similarity index 98% rename from docs/document/server-side/favorite.md rename to docs/document/server-side/user_favorite.md index d67523f1..61a61c90 100644 --- a/docs/document/server-side/favorite.md +++ b/docs/document/server-side/user_favorite.md @@ -197,8 +197,8 @@ POST https://{host}/{org_name}/{app_name}/users/{username}/collections | `type` | Int | 收藏类型。 | | `data` | String | 收藏内容。 | | `ext` | String | 收藏的扩展信息。 | -| `createdAt` | Int | 收藏创建时间。 | -| `updatedAt` | Int | 收藏更新时间。 | +| `createdAt` | Long | 收藏创建时间。 | +| `updatedAt` | Long | 收藏更新时间。 | 响应字段及说明详见 [公共参数](#公共参数)。 @@ -280,7 +280,7 @@ POST https://{host}/{org_name}/{app_name}/collections | - `data` | String | 是 | 收藏内容。 | | - `type` | Int | 是 | 收藏类型。 | | - `ext` | String | 是 | 收藏的扩展信息。 | -| - `createdAt` | Int | 是 | 收藏的添加时间。 | +| - `createdAt` | Long | 是 | 收藏的添加时间。 | | `username` | String | 是 | 为哪个用户添加收藏。 | #### HTTP 响应 @@ -397,8 +397,8 @@ PUT https://{host}/{org_name}/{app_name}/users/{username}/collections/{collectio | `type` | Int | 收藏类型。 | | `data` | String | 收藏内容。 | | `ext` | String | 收藏的扩展信息。 | -| `createdAt` | Int | 收藏创建时间。 | -| `updatedAt` | Int | 收藏更新时间。 | +| `createdAt` | Long | 收藏创建时间。 | +| `updatedAt` | Long | 收藏更新时间。 | 响应字段及说明详见 [公共参数](#公共参数)。 diff --git a/docs/document/server-side/user_global_mute.md b/docs/document/server-side/user_global_mute.md new file mode 100644 index 00000000..dc615184 --- /dev/null +++ b/docs/document/server-side/user_global_mute.md @@ -0,0 +1,357 @@ +# 用户全局禁言 + +随着监管机制日益完善,对 app 的监管不断加强,安全合规逐渐成为 app 的生命线。 + +为加强 app 管理,环信即时通讯提供全局禁言功能,对 app 提供用户 ID 级别的禁言管理,支持在管理员发现用户违规后进行全局禁言,以维护 app 良好的内容生态环境。禁言到期后,服务器会自动解除禁言,恢复该用户发送消息的权限。 + +你可以对单个用户 ID 设置单聊、群组或聊天室消息全局禁言。禁言后,该用户无论通过调用客户端 API,还是使用服务端 RESTful API 都将无法在对应的单聊、群组或聊天室发送消息。 + +该功能可广泛用于实时互动 app 中,例如发现某用户频繁向多个聊天室发送违规广告,则可以对该用户开启全局聊天室禁言 15 天;发现某用户发表触犯红线的政治言论,则可以全局永久禁言,用户申诉通过后可以解禁。 + +使用该功能前,你需先查看你的 IM 套餐版本是否开通了该功能。该功能与 IM 套餐包版本之间的开通关系,详见[产品计费](/product/pricing.html#套餐包功能详情)。 + +## 公共参数 + +以下表格列举了环信 IM 的 RESTful 接口的公共请求参数和响应参数: + +### 请求参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :----- | :------- | :------------------------- | +| `host` | String | 是 | 环信即时通讯 IM 分配的用于访问 RESTful API 的域名。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `org_name` | String | 是 | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | +| `app_name` | String | 是 | 你在环信即时通讯云控制台创建应用时填入的应用名称。详见 [获取环信即时通讯 IM 的信息](enable_and_configure_IM.html#获取环信即时通讯-im-的信息)。 | + +### 响应参数 + +| 参数 | 类型 | 描述 | +| :------------------- | :----- | :-------------------------------------------- | +| `action` | String | 请求方法。 | +| `organization` | String | 环信即时通讯 IM 为每个公司(组织)分配的唯一标识,与请求参数 `org_name` 相同。 | +| `application` | String | 系统内为应用生成的唯一标识,开发者无需关心。 | +| `applicationName` | String | 你在环信即时通讯云控制台创建应用时填入的应用名称,与请求参数 `app_name` 相同。 | +| `uri` | String | 请求 URL。 | +| `path` | String | 请求路径,属于请求 URL 的一部分,开发者无需关注。 | +| `data` | JSON | 实际获取的数据详情。 | +| `timestamp` | Long | HTTP 响应的 Unix 时间戳,单位为毫秒。 | +| `duration` | Long | 从发送 HTTP 请求到响应的时长, 单位为毫秒。 | + +## 前提条件 + +要调用环信即时通讯 RESTful API,请确保满足以下要求: + +- 已在环信即时通讯云控制台 [开通配置环信即时通讯 IM 服务](enable_and_configure_IM.html)。 +- 已从服务端获取 app token,详见 [使用 App Token 鉴权](easemob_app_token.html)。 +- 了解环信 IM API 的调用频率限制,详见 [接口频率限制](limitationapi.html)。 + +## 认证方式 + +环信即时通讯 REST API 要求 Bearer HTTP 认证。每次发送 HTTP 请求时,都必须在请求头部填入如下 `Authorization` 字段: + +`Authorization: Bearer YourAppToken` + +为提高项目的安全性,环信使用 Token(动态密钥)对即将登录即时通讯系统的用户进行鉴权。本文介绍的即时通讯所有 REST API 均需使用 App Token 的鉴权方式,详见 [使用 App Token 鉴权](easemob_app_token.html)。 + +### 设置用户全局禁言 + +设置单个用户 ID 的单聊、群组或聊天室消息的全局禁言。设置成功后,该用户将无法在对应的单聊、群组或聊天室中发送消息。 + +#### HTTP 请求 + +```http +POST https://{host}/{org_name}/{app_name}/mutes +``` + +##### 路径参数 + +参数及说明详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :----------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +##### 请求 body + +| 参数 | 类型 | 是否必需 | 描述 | +| :---------- | :----- | :------- | :----------------------- | +| `username` | String | 是 | 设置全局禁言的用户 ID。 | +| `chat` | Int | 否 | 单聊禁言时长,单位为秒,最大值为 `2147483647`。
- > `0`:该用户 ID 的单聊禁言时长。
- `0`:取消该用户的单聊禁言。
- `-1`:该用户被设置永久单聊禁言。
- 其他负值无效。 | +| `groupchat` | Int | 否 | 群组禁言时长,单位为秒,规则同单聊禁言。 | +| `chatroom` | Int | 否 | 聊天室禁言时长,单位为秒,规则同单聊禁言。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :------------ | :----- | :-------------------------------------------- | +| `data` | JSON | 全局禁言结果。 | +| `data.result` | String | 是否成功设置用户全局禁言。`ok` 表示设置成功。 | + +其他字段及说明详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -L -X POST 'https://XXXX/XXXX/XXXX/mutes' \ +-H 'Authorization: Bearer ' \ +-H 'Content-Type: application/json' \ +--data-raw '{ + "username": "zs1", + "chat": 100, + "groupchat": 100, + "chatroom": 100 +}' +``` + +##### 响应示例 + +```json +{ + "path": "/mutes", + "uri": "https://XXXX/XXXX/XXXX/mutes", + "timestamp": 1631609754727, + "organization": "XXXX", + "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d", + "action": "post", + "data": { + "result": "ok" + }, + "duration": 74, + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :----- | :---------- | :-------- | :------------------| :------------------------| +| 400 | required_property_not_found | Entity user requires a property named username | 用户不存在。 | 先注册用户或者检查用户名是否正确。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 | + +关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。 + +### 查询单个用户 ID 全局禁言 + +查询单个用户的单聊、群聊和聊天室的全局禁言详情。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/mutes/{username} +``` + +##### 路径参数 + +参数及说明详见 [公共参数](#公共参数)。 + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :------------------------------------------------------------------------------------------------------------------- | +| `Content-Type` | String | 是 | 内容类型,请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中包含以下字段: + +| 字段 | 类型 | 描述 | +| :--------------- | :----- | :------------------ | +| `data` | JSON | 用户的全局禁言详情。 | +| `data.userid` | String | 设置禁言的用户 ID。 | +| `data.chat` | Int | 单聊剩余禁言时间,单位为秒。最大值为 `2147483647`。
- > 0:该用户 ID 剩余的单聊禁言时长。
- `0`:该用户的单聊消息禁言已取消。
- `-1`:该用户被设置永久单聊消息禁言。 | +| `data.groupchat` | Int | 群组消息剩余禁言时长,单位为秒,规则同单聊禁言。 | +| `data.chatroom` | Int | 聊天室消息剩余禁言时长,单位为秒,规则同单聊禁言。 | +| `data.unixtime` | Int | 当前操作的 Unix 时间戳。 | + +其他字段及说明详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -L -X GET 'https://XXXX/XXXX/XXXX/mutes/zs1' \ +-H 'Authorization: Bearer ' \ +-H 'Content-Type: application/json' +``` + +##### 响应示例 + +```json +{ + "path": "/mutes", + "uri": "https://XXXX/XXXX/XXXX/mutes", + "timestamp": 1631609831800, + "organization": "XXXX", + "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d", + "action": "get", + "data": { + "userid": "XXXX#restys_zs1", + "chat": 96, + "groupchat": 96, + "chatroom": 96, + "unixtime": 1631609831 + }, + "duration": 13, + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :---------- | :------------------| :-------------------| :-----------| :------------| +| 400 | required_property_not_found | Entity user requires a property named username | 用户不存在。 | 先注册用户或者检查用户名是否正确。 | +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。| + +关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。 + +### 查询 app 下的所有全局禁言的用户 + +该方法查询 app 下所有全局禁言的用户及其禁言剩余时间。 + +#### HTTP 请求 + +```http +GET https://{host}/{org_name}/{app_name}/mutes +``` + +##### 路径参数 + +参数及说明详见[公共参数](#公共参数)。 + +##### 查询参数 + +| 参数 | 类型 | 是否必需 | 描述 | +| :--------- | :--- | :------- | :---------------------------------------------------- | +| `pageNum` | Int | 否 | 请求查询的页码。 | +| `pageSize` | Int | 否 | 请求查询每页显示的禁言用户的数量。取值范围为 [1,50]。 | + +##### 请求 header + +| 参数 | 类型 | 是否必需 | 描述 | +| :-------------- | :----- | :------- | :--------------------------------------- | +| `Content-Type` | String | 是 | 内容类型。请填 `application/json`。 | +| `Authorization` | String | 是 | App 管理员的鉴权 token,格式为 `Bearer YourAppToken`,其中 `Bearer` 为固定字符,后面为英文空格和获取到的 app token。 | + +#### HTTP 响应 + +##### 响应 body + +如果返回的 HTTP 状态码为 `200`,表示请求成功,响应包体中的 `data` 字段描述如下: + +| 字段 | 类型 | 描述 | +| :-------------------- | :-------- | :---------------------- | +| `data` | JSON Array | 获取的所有全局禁言的用户的信息。 | +| - `username` | String | 设置禁言的用户 ID。 | +| - `chat` | Int | 单聊消息剩余禁言时间,单位为秒。最大值为 `2147483647`。
- > 0:该用户 ID 具体的单聊消息禁言时长。
- `0`:该用户的单聊消息禁言已取消。
- `-1`:该用户被设置永久单聊消息禁言。 | +| - `groupchat` | Int | 群组消息剩余禁言时长,单位为秒,规则同上。| +| - `chatroom` | Int | 聊天室消息剩余禁言时长,单位为秒,规则同上。 | +| - `unixtime` | Long | 当前操作的 Unix 时间戳,单位为毫秒。 | + +其他字段及说明详见 [公共参数](#公共参数)。 + +如果返回的 HTTP 状态码非 `200`,表示请求失败。你可以参考 [错误码](#错误码) 了解可能的原因。 + +#### 示例 + +##### 请求示例 + +```shell +# 将 替换为你在服务端生成的 App Token + +curl -L -X GET 'https://XXXX/XXXX/XXXX/mutes?pageNum=1&pageSize=10' \ +-H 'Authorization: Bearer ' \ +-H 'Content-Type: application/json' +``` + +##### 响应示例 + +```json +{ + "path": "/mutes", + "uri": "https://XXXX/XXXX/XXXX/mutes", + "timestamp": 1631609858771, + "organization": "XXXX", + "application": "357169f0-XXXX-XXXX-9b3a-f1af649cc48d", + "action": "get", + "data": { + "data": [ + { + "username": "zs2", + "chatroom": 0 + }, + { + "username": "zs1", + "groupchat": 69 + }, + { + "username": "zs1", + "chat": 69 + }, + { + "username": "zs1", + "chatroom": 69 + }, + { + "username": "h2", + "chatroom": 0 + }, + { + "username": "h2", + "groupchat": 0 + }, + { + "username": "h2", + "chat": 0 + } + ], + "unixtime": 1631609858 + }, + "duration": 17, + "applicationName": "XXXX" +} +``` + +#### 错误码 + +如果返回的 HTTP 状态码非 `200`,表示请求失败,可能提示以下错误码: + +| HTTP 状态码 | 错误类型 | 错误提示 | 可能原因 | 处理建议 | +| :---------- | :------------------| :--------------------| :------------------| :----------------| +| 401 | unauthorized | Unable to authenticate (OAuth) | token 不合法,可能过期或 token 错误。 | 使用新的 token 访问。 | +| 404 | organization_application_not_found | Could not find application for XXX/XXX from URI: XXX/XXX/users | App key 不存在。 | 检查 `orgName` 和 `appName` 是否正确或[创建应用](/product/enable_and_configure_IM.html#创建应用)。 | + +关于其他错误,你可以参考 [错误码](#错误码) 了解可能的原因。 + + + + + + + diff --git a/docs/product/enable_and_configure_IM.md b/docs/product/enable_and_configure_IM.md index 6b8bbeb0..e780610b 100644 --- a/docs/product/enable_and_configure_IM.md +++ b/docs/product/enable_and_configure_IM.md @@ -385,6 +385,22 @@ ![img](/images/product/user_operation.png) +## 创建群组 + +1. 在环信即时通讯云的左侧导航栏中,选择 **即时通讯 > 运营服务 > 群组管理**。 +2. +3. 在 **群组管理** 页面,点击 **创建群组**,在弹出的对话框中设置群组名称、描述、群主、最大人数、群组类型、申请入群方式、邀请方式和被邀请用户是否需要确认,然后点击 **创建**。 + + 各参数的设置要求,详见[创建群组 RESTful API](/document/server-side/group_manage.html#创建群组)。 + +创建群组后,你可以通过以下步骤管理群组信息和成员: + +- 点击 **操作** 栏中的 **更多** 进行群组管理,包括查看群组成员、查看群组黑名单、发送rest消息和删除群组等。 + +- 要添加用户,选择 **查看群组成员**,在弹出的对话框中,输入用户 ID,点击 **添加成员**。成员添加后会显示在下方的成员列表中,你可以移除该成员。 + +- 在群组列表上,你可以点击群组 ID,修改群组信息,包括群组名称、描述和公告,以及管理群成员,包括全员禁言、将成员添加/移除禁言列表和黑名单,添加和移除管理员。 + ## 创建聊天室 1. 在环信即时通讯云的左侧导航栏中,选择 **即时通讯 > 运营服务 > 聊天室管理**。 @@ -393,9 +409,13 @@ 各参数的设置要求,详见[创建聊天室 RESTful API](/document/server-side/chatroom.html#创建聊天室)。 -创建聊天室后,你可以点击 **操作** 栏中的 **更多** 对进行聊天室管理,包括修改修改聊天室信息、解散聊天室以及成员管理等。 +创建群组后,你可以通过以下步骤管理聊天室信息和成员: -要添加聊天室成员,选择 **查看聊天室成员**,在弹出的对话框中,输入用户 ID,点击 **添加成员**。成员添加后会显示在下方的成员列表中,你可以移除该成员。 +- 点击 **操作** 栏中的 **更多** 进行聊天室管理,包括修改聊天室信息、查看聊天室成员、查看聊天室管理员、查看聊天室黑名单、查看聊天室禁言名单和删除聊天室。 + +- 要添加用户,选择 **查看聊天室成员**,在弹出的对话框中,输入用户 ID,点击 **添加成员**。成员添加后会显示在下方的成员列表中,你可以移除该成员。 + +- 在聊天室列表上,你可以点击聊天室 ID,修改聊天室信息,包括聊天室名称、描述和公告,以及管理聊天室成员,包括全员禁言、将成员添加/移除禁言列表和黑名单,添加和移除管理员。 ## IM 用户设备日志 diff --git a/docs/product/limitation.md b/docs/product/limitation.md index bb0c82ca..b50fd80b 100644 --- a/docs/product/limitation.md +++ b/docs/product/limitation.md @@ -77,11 +77,11 @@ | 使用限制| 默认 | 描述 | | :--------- | :----- | :------- | -| 功能开通 | 关闭 | 仅专业版及以上版本支持群消息已读回执功能。若要使用该功能,需在[环信即时通讯云控制台](https://console.easemob.com/user/login)开通,具体费用详见[产品价格](/product/pricing.html#增值服务费用)。 | -| 使用权限 | 群组管理员和群主 | 默认情况下,群主和群组管理员有权限。
可以联系商务为普通群成员开放权限。 | +| 功能开通 | 关闭 | 若要使用该功能,你需要在[环信即时通讯云控制台](https://console.easemob.com/user/login)的**即时通讯** > **功能配置** > **功能配置总览**> **基础功能**页签下,搜索找到 **消息已读回执(群聊)** 开通功能。具体费用详见[产品价格](/product/pricing.html#增值服务费用)。 | +| 使用权限 | 所有群成员 | 默认情况下,所有群成员发送消息时可要求已读回执。如果仅需群主和群管理员发消息时要求已读回执,可联系商务修改。 | | 已读回执有效期 | 3 天 | 群聊已读回执的有效期为 3 天,即群组中的消息发送时间超过 3 天,服务器不记录阅读该条消息的群组成员,也不会发送已读回执。 | -| 群规模 | 500 人 | 该特性最大支持 500 人的群组。也就是说,群组中每条消息最多可返回 500 条已读回执,若超过该上限,最新的已读回执记录会覆盖最早的记录。 | -| 群消息条数上限 | 500 条 | 单个群组每天最多支持 500 条消息要求已读回执。| +| 群规模 | 200 人 | 该特性最大支持 200 人的群组。如果超过 200 人/群,群成员发送的消息不会返回已读回执。你可以联系商务提升群成员人数上限。 | +| 查看返回已读回执数量 | 消息发送方 | 对消息返回的已读回执数量(或返回已读回执的人数),默认仅消息发送方可查看。如需所有群成员均可查看,可联系商务开通。 | ### 修改消息 diff --git a/docs/product/limitationapi.md b/docs/product/limitationapi.md index 5bccb784..02730f00 100644 --- a/docs/product/limitationapi.md +++ b/docs/product/limitationapi.md @@ -6,61 +6,6 @@ 对于环信即时通讯 IM 来说,大部分客户端接口调用时,实际上调用的是对应的 RESTful API,除接口名称带星号 * 的之外。表格中所示的每个接口的调用频率实则为 RESTful API 及其对应的客户端接口的调用频率总和。带 * 的接口由于没有对应的客户端接口,此类接口的调用频率为该 RESTful API 的调用频率。 -## 用户帐号管理 - -| Restful API 接口 |方法 | 接口 URL| -| :------------ | :--- | :--------------------------- | -| 注册单个用户 | POST | /{org_name}/{app_name}/users | -| * 批量注册用户 | POST | /{org_name}/{app_name}/users | - -以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。 - -| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | -| :----------- | :----- | :------------------- | :------------- | -| * 获取 app/用户 token | POST | /{org_name}/{app_name}/token | 300 次/秒/App Key | -| 获取单个用户 | GET | /{org_name}/{app_name}/users/{username} | 100 次/秒/App Key | -| * 批量获取用户 | GET | /{org_name}/{app_name}/users | 100 次/秒/App Key| -| * 删除单个用户 | DELETE | /{org_name}/{app_name}/users/{username} | 100 次/秒/App Key | -| * 批量删除用户 | DELETE | /{org_name}/{app_name}/users | 30 次/秒/App Key | -| * 修改用户密码 | POST | /{org_name}/{app_name}/users/{username}/password | 100 次/秒/App Key | -| * 获取用户在线状态 | GET | /{org_name}/{app_name}/users/{username}/status | 100 次/秒/App Key | -| * 批量获取用户在线状态 | POST | /{org_name}/{app_name}/users/batch/status | 50 次/秒/App Key | -| * 获取离线消息数 | GET | /{org_name}/{app_name}/users/{owner_username}/offline_msg_count | 100 次/秒/App Key | -| * 获取离线消息的状态 | GET | /{org_name}/{app_name}/users/{username}/offline_msg_status/{msg_id} | 100 次/秒/App Key | -| * 账号封禁 | POST | /{org_name}/{app_name}/users/{username}/deactivate | 100 次/秒/App Key | -| * 账号解禁 | POST | /{org_name}/{app_name}/users/{username}/activate | 100 次/秒/App Key | -| * 强制用户下线 | GET | /{org_name}/{app_name}/users/{username}/disconnect | 100 次/秒/App Key | -| * 强制用户从单设备下线 | DELETE | /{org_name}/{app_name}/users/{username}/disconnect/{resourceId} | 100 次/秒/App Key | -| * 获取指定账号的在线登录设备列表 | GET | /{org_name}/{app_name}/users/{username}/resources | 100 次/秒/App Key | - -## 消息推送 - -| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) | -| :----------- | :--- | :------------- | :----------- | -| 设置离线推送 | PUT | /{org}/{app_name}/users/{userId}/notification/{chattype}/{key} | 100 次/秒/App Key | -| 查询离线推送设置 | GET | /{org_name}/{app_name}/users/{userId}/notification/{chattype}/{key} | 100 次/秒/App Key | -| 批量设置离线推送时显示的昵称 | PUT | /{org_name}/{app_name}/push/nickname | 100 次/秒/App Key | -| 设置推送通知的首选语言 | PUT | /{org_name}/{app_name}/users/{userId}/notification/language | 100 次/秒/App Key | -| 获取推送通知的首选语言 | GET | /{org_name}/{app_name}/users/{userId}/notification/language | 100 次/秒/App Key | -| 创建离线推送模板 | POST | /{org_name}/{app_name}/notification/template | 10 次/秒/App Key | -| 查询离线推送模板 | GET | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key | -| 删除离线推送模板 | DELETE | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key | -| 接收方配置模板名称 | PUT | /{org_name}/{app_name}/users/{userId}/notification/template | 100 次/秒/App Key。 | - -| RESTful API 接口 | 方法 | 接口 URL | -| :----------- | :--- | :------------- | -| 绑定和解绑推送信息 | PUT | /{org_name}/{app_name}/users/{userId}/push/binding | -| 查询当前用户的所有设备的推送绑定信息 | GET | /{org_name}/{app_name}/users/{userId}/push/binding | - -以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。 - -| RESTful API 接口 | 方法 | 接口 URL | -| :----------- | :--- | :------------- | -| 设置推送消息显示昵称 | PUT | /{org_name}/{app_name}/users/{userId} | -| 设置推送消息展示方式 | PUT | /{org_name}/{app_name}/users/{userId} | - -以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。 - ## 消息管理 | RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | @@ -84,31 +29,18 @@ | 单向清空群组或聊天室会话某个时间点及之前的漫游消息 | POST | /{org_name}/{app_name}/rest/message/roaming/group/user/{userId}/time?groupId={groupId}&delTime={delTime} | 100 次/秒/App Key | | 导入单聊消息 | POST | /{org_name}/{app_name}/messages/users/import | 100 条/秒/App Key | -## 用户属性 - -| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | -| :---------- | :----- | :-------------------- | :---------------- | -| 设置用户属性 | PUT | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key | -| 批量获取用户属性 | POST | /{org_name}/{app_name}/metadata/user/get | 100 次/秒/App Key | -| 删除用户属性 | DELETE | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key | -| 获取指定用户的所有用户属性 | GET | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key | -| * 获取 app 下的用户属性总大小 | GET | /{org_name}/{app_name}/metadata/user/capacity | 100 次/秒/App Key | +### 消息表情回复 Reaction -## 用户关系管理 +| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) | +| :------------------- | :----- | :------------------------ | :----------- | +| 创建/添加 Reaction | POST | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key | +| 根据消息 ID 获取 Reaction | GET | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key | +| 删除 Reaction | DELETE | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key | +| 根据消息 ID 和表情 ID 获取 Reaction 信息 | GET | /{org_name}/{app_name}/reaction/user/{userId}/detail | 100 次/秒/App Key | -| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率 | -| :------------- | :----- | :---------------- | :-------------- | -| 添加好友 | POST | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key | -| 移除好友 | DELETE | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key | -| 设置好友备注 | PUT | /{org_name}/{app_name}/user/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key | -| 分页获取好友列表 | GET | /{org_name}/{app_name}/user/{username}/contacts?limit={N}&cursor={cursor}&needReturnRemark={true/false} | 100 次/秒/App Key | -| 一次性获取好友列表 | GET | /{org_name}/{app_name}/users/{owner_username}/contacts/users | 100 次/秒/App Key | -| * 导入好友列表 | POST | /{org_name}/{app_name}/users/{username}/contacts/import | 100 次/秒/App Key | -| 获取黑名单列表 | GET | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key | -| 添加用户至黑名单 | POST | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key | -| 从黑名单移除用户 | DELETE | /{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username} | 50 次/秒/App Key | +## 群组 -## 群组管理 +### 群组管理 | RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | | :--------------- |:------ | :------------ | :----------- | @@ -128,7 +60,7 @@ | 下载群组共享文件 | GET | /{org_name}/{app_name}/chatgroups/{group_id}/share_files/{file_id} | 100 次/秒/App Key | | 删除群组共享文件 | DELETE | /{org_name}/{app_name}/chatgroups/{group_id}/share_files/{file_id} | 100 次/秒/App Key | -## 群成员管理 +### 群成员管理 | RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | | :--------------- |:------ | :------------ | :----------- | @@ -160,7 +92,23 @@ | 解除成员禁言 | DELETE | /{org_name}/{app_name}/chatgroups/{group_id}/mute/{member1}(,{member2},…) | 100 次/秒/App Key | | 解除全员禁言 | DELETE | /{org_name}/{app_name}/chatgroups/{group_id}/ban | 100 次/秒/App Key | -## 聊天室管理 +### 子区管理 + +| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) | +| :------------------- | :----- | :------------------------ | :----------- | +| 分页获取 app 中的子区 | GET | /{org_name}/{app_name}/thread | 100 次/秒/App Key | +| 分页获取单个用户加入的所有子区 | GET | /{org_name}/{app_name}/threads/user/{username} | 100 次/秒/App Key | +| 分页获取单个用户在指定群组中加入的所有子区 | GET | /{org_name}/{app_name}/threads/chatgroups/{group_id}/user/{username} | 100 次/秒/App Key | +| 创建子区 | POST | /{org_name}/{app_name}/thread | 100 次/秒/App Key | +| 修改子区 | PUT | /{org_name}/{app_name}/thread/{thread_id} | 100 次/秒/App Key | +| 删除子区 | DELETE | /{org_name}/{app_name}/thread/{thread_id} | 100 次/秒/App Key | +| 分页获取子区成员列表 | GET | /{org_name}/{app_name}/thread/{thread_id}/users | 100 次/秒/App Key | +| 用户批量加入子区 | POST | /{org_name}/{app_name}/thread/{thread_id}/users | 100 次/秒/App Key | +| 批量踢出子区成员 | DELETE | /{org_name}/{app_name}/threads/{thread_id}/users | 100 次/秒/App Key | + +## 聊天室 + +### 聊天室管理 | RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | | :--------------- |:------ | :------------ | :----------- | @@ -179,7 +127,7 @@ | 删除聊天室自定义属性 | DELETE | /{org_name}/{app_name}/metadata/chatroom/{chatroom_id}/user/{username} | 100 次/秒/App Key | | 强制删除聊天室自定义属性 | DELETE | /{org_name}/{app_name}/metadata/chatroom/{chatroom_id}/user/{username}/forced | 100 次/秒/App Key | -## 聊天室成员管理 +### 聊天室成员管理 | RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | | :--------------- |:------ | :------------ | :----------- | @@ -205,19 +153,53 @@ | 禁言聊天室全体成员 | POST | /{org_name}/{app_name}/chatrooms/{chatroom_id}/ban | 100 次/秒/App Key | | 解除聊天室禁言成员 | DELETE | /{org_name}/{app_name}/chatrooms/{chatroom_id}/mute/{member1}(,{member2},…) | 100 次/秒/App Key | | 解除聊天室全员禁言 | DELETE | /{org_name}/{app_name}/chatrooms/{chatroom_id}/ban | 100 次/秒/App Key | +| 按聊天室用户标签禁言 | PUT | /{org_name}/{app_name}/chatrooms/{chatroom_id}/tag/mute | 100 次/秒/App Key | +| 设置用户在聊天室中的标签 | PUT | /{org_name}/{app_name}/chatrooms/{chatroom_id}/users/{username}/tag | 100 次/秒/App Key | +| 获取用户聊天室标签 | GET | /{org_name}/{app_name}/chatrooms/{chatroom_id}/users/{username}/tag | 100 次/秒/App Key | | 获取超级管理员列表 | GET | /{org_name}/{app_name}/chatrooms/super_admin | 100 次/秒/App Key | | 添加超级管理员 | POST | /{org_name}/{app_name}/chatrooms/super_admin | 100 次/秒/App Key | | 移除超级管理员 | DELETE | /{org_name}/{app_name}/chatrooms/super_admin/{superAdmin} | 100 次/秒/App Key | -## 全局禁言 +## 用户相关 + +### 用户体系管理 + +| Restful API 接口 |方法 | 接口 URL| +| :------------ | :--- | :--------------------------- | +| 注册单个用户 | POST | /{org_name}/{app_name}/users | +| * 批量注册用户 | POST | /{org_name}/{app_name}/users | + +以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。 | RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | -| :--------------- |:------ | :------------ | :----------- | -| * 设置用户全局禁言 | POST | /{org_name}/{app_name}/mutes | 100 次/秒/App Key | -| * 查询单个用户 ID 全局禁言 | GET | /{org_name}/{appName}/mutes/username | 100 次/秒/App Key | -| * 查询 app 下的所有全局禁言的用户 | GET | /{org_name}/{app_name}/mutes | 100 次/秒/App Key | +| :----------- | :----- | :------------------- | :------------- | +| * 获取 app/用户 token | POST | /{org_name}/{app_name}/token | 300 次/秒/App Key | +| 获取单个用户 | GET | /{org_name}/{app_name}/users/{username} | 100 次/秒/App Key | +| * 批量获取用户 | GET | /{org_name}/{app_name}/users | 100 次/秒/App Key| +| * 删除单个用户 | DELETE | /{org_name}/{app_name}/users/{username} | 100 次/秒/App Key | +| * 批量删除用户 | DELETE | /{org_name}/{app_name}/users | 30 次/秒/App Key | +| * 修改用户密码 | POST | /{org_name}/{app_name}/users/{username}/password | 100 次/秒/App Key | +| * 获取用户在线状态 | GET | /{org_name}/{app_name}/users/{username}/status | 100 次/秒/App Key | +| * 批量获取用户在线状态 | POST | /{org_name}/{app_name}/users/batch/status | 50 次/秒/App Key | +| * 获取离线消息数 | GET | /{org_name}/{app_name}/users/{owner_username}/offline_msg_count | 100 次/秒/App Key | +| * 获取离线消息的状态 | GET | /{org_name}/{app_name}/users/{username}/offline_msg_status/{msg_id} | 100 次/秒/App Key | +| * 账号封禁 | POST | /{org_name}/{app_name}/users/{username}/deactivate | 100 次/秒/App Key | +| * 账号解禁 | POST | /{org_name}/{app_name}/users/{username}/activate | 100 次/秒/App Key | +| * 强制用户下线 | GET | /{org_name}/{app_name}/users/{username}/disconnect | 100 次/秒/App Key | +| * 强制用户从单设备下线 | DELETE | /{org_name}/{app_name}/users/{username}/disconnect/{resourceId} | 100 次/秒/App Key | +| * 获取指定账号的在线登录设备列表 | GET | /{org_name}/{app_name}/users/{username}/resources | 100 次/秒/App Key | + +### 用户属性 -## 用户在线状态管理 +| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | +| :---------- | :----- | :-------------------- | :---------------- | +| 设置用户属性 | PUT | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key | +| 批量获取用户属性 | POST | /{org_name}/{app_name}/metadata/user/get | 100 次/秒/App Key | +| 删除用户属性 | DELETE | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key | +| 获取指定用户的所有用户属性 | GET | /{org_name}/{app_name}/metadata/user/{username} | 100 次/秒/App Key | +| * 获取 app 下的用户属性总大小 | GET | /{org_name}/{app_name}/metadata/user/capacity | 100 次/秒/App Key | + +### 用户在线状态订阅 | RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | | :--------------- |:------ | :------------ | :----------- | @@ -228,25 +210,62 @@ | 取消订阅多个用户的在线状态 | DELETE | /{org_name}/{app_name}/users/{uid}/presence | 50 次/秒/App Key | | 查询订阅列表 | GET | /{org_name}/{app_name}/users/{uid}/presence/sublist?pageNum={pagenumber}&pageSize={pagesize} | 50 次/秒/App Key | -## 消息表情回复 Reaction +### 全局禁言 -| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) | -| :------------------- | :----- | :------------------------ | :----------- | -| 创建/添加 Reaction | POST | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key | -| 根据消息 ID 获取 Reaction | GET | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key | -| 删除 Reaction | DELETE | /{org_name}/{app_name}/reaction/user/{userId} | 100 次/秒/App Key | -| 根据消息 ID 和表情 ID 获取 Reaction 信息 | GET | /{org_name}/{app_name}/reaction/user/{userId}/detail | 100 次/秒/App Key | +| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | +| :--------------- |:------ | :------------ | :----------- | +| * 设置用户全局禁言 | POST | /{org_name}/{app_name}/mutes | 100 次/秒/App Key | +| * 查询单个用户 ID 全局禁言 | GET | /{org_name}/{appName}/mutes/username | 100 次/秒/App Key | +| * 查询 app 下的所有全局禁言的用户 | GET | /{org_name}/{app_name}/mutes | 100 次/秒/App Key | -## 子区管理 +### 用户收藏 -| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) | -| :------------------- | :----- | :------------------------ | :----------- | -| 分页获取 app 中的子区 | GET | /{org_name}/{app_name}/thread | 100 次/秒/App Key | -| 分页获取单个用户加入的所有子区 | GET | /{org_name}/{app_name}/threads/user/{username} | 100 次/秒/App Key | -| 分页获取单个用户在指定群组中加入的所有子区 | GET | /{org_name}/{app_name}/threads/chatgroups/{group_id}/user/{username} | 100 次/秒/App Key | -| 创建子区 | POST | /{org_name}/{app_name}/thread | 100 次/秒/App Key | -| 修改子区 | PUT | /{org_name}/{app_name}/thread/{thread_id} | 100 次/秒/App Key | -| 删除子区 | DELETE | /{org_name}/{app_name}/thread/{thread_id} | 100 次/秒/App Key | -| 分页获取子区成员列表 | GET | /{org_name}/{app_name}/thread/{thread_id}/users | 100 次/秒/App Key | -| 用户批量加入子区 | POST | /{org_name}/{app_name}/thread/{thread_id}/users | 100 次/秒/App Key | -| 批量踢出子区成员 | DELETE | /{org_name}/{app_name}/threads/{thread_id}/users | 100 次/秒/App Key | \ No newline at end of file +| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率(默认值) | +| :---------- | :----- | :-------------------- | :---------------- | +| 分页获取用户收藏 | GET | /{org_name}/{app_name}/users/{username}/collections | 100 次/秒/App Key | +| 添加一条收藏 | POST | /{org_name}/{app_name}/users/{username}/collections | 100 次/秒/App Key | +| 批量添加用户收藏 | POST | /{org_name}/{app_name}/collections | 100 次/秒/App Key | +| 修改用户收藏的扩展信息 | PUT | /{org_name}/{app_name}/users/{username}/collections/{collectionId} | 100 次/秒/App Key | +| 删除用户收藏 | DELETE | /{org_name}/{app_name}/users/{username}/collections | 100 次/秒/App Key | + +### 用户关系管理 + +| RESTful API 接口 |方法 | 接口 URL| 接口最高调用频率 | +| :------------- | :----- | :---------------- | :-------------- | +| 添加好友 | POST | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key | +| 移除好友 | DELETE | /{org_name}/{app_name}/users/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key | +| 设置好友备注 | PUT | /{org_name}/{app_name}/user/{owner_username}/contacts/users/{friend_username} | 100 次/秒/App Key | +| 分页获取好友列表 | GET | /{org_name}/{app_name}/user/{username}/contacts?limit={N}&cursor={cursor}&needReturnRemark={true/false} | 100 次/秒/App Key | +| 一次性获取好友列表 | GET | /{org_name}/{app_name}/users/{owner_username}/contacts/users | 100 次/秒/App Key | +| * 导入好友列表 | POST | /{org_name}/{app_name}/users/{username}/contacts/import | 100 次/秒/App Key | +| 获取黑名单列表 | GET | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key | +| 添加用户至黑名单 | POST | /{org_name}/{app_name}/users/{owner_username}/blocks/users | 50 次/秒/App Key | +| 从黑名单移除用户 | DELETE | /{org_name}/{app_name}/users/{owner_username}/blocks/users/{blocked_username} | 50 次/秒/App Key | + +## 离线推送 + +| RESTful API 接口 | 方法 | 接口 URL | 接口最高调用频率(默认值) | +| :----------- | :--- | :------------- | :----------- | +| 设置离线推送 | PUT | /{org}/{app_name}/users/{userId}/notification/{chattype}/{key} | 100 次/秒/App Key | +| 查询离线推送设置 | GET | /{org_name}/{app_name}/users/{userId}/notification/{chattype}/{key} | 100 次/秒/App Key | +| 批量设置离线推送时显示的昵称 | PUT | /{org_name}/{app_name}/push/nickname | 100 次/秒/App Key | +| 设置推送通知的首选语言 | PUT | /{org_name}/{app_name}/users/{userId}/notification/language | 100 次/秒/App Key | +| 获取推送通知的首选语言 | GET | /{org_name}/{app_name}/users/{userId}/notification/language | 100 次/秒/App Key | +| 创建离线推送模板 | POST | /{org_name}/{app_name}/notification/template | 10 次/秒/App Key | +| 查询离线推送模板 | GET | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key | +| 删除离线推送模板 | DELETE | /{org_name}/{app_name}/notification/template/{name} | 10 次/秒/App Key | +| 接收方配置模板名称 | PUT | /{org_name}/{app_name}/users/{userId}/notification/template | 100 次/秒/App Key。 | + +| RESTful API 接口 | 方法 | 接口 URL | +| :----------- | :--- | :------------- | +| 绑定和解绑推送信息 | PUT | /{org_name}/{app_name}/users/{userId}/push/binding | +| 查询当前用户的所有设备的推送绑定信息 | GET | /{org_name}/{app_name}/users/{userId}/push/binding | + +以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。 + +| RESTful API 接口 | 方法 | 接口 URL | +| :----------- | :--- | :------------- | +| 设置推送消息显示昵称 | PUT | /{org_name}/{app_name}/users/{userId} | +| 设置推送消息展示方式 | PUT | /{org_name}/{app_name}/users/{userId} | + +以上两个接口的总调用频率(默认值)为 100 次/秒/App Key。 diff --git a/docs/product/pricing.md b/docs/product/pricing.md index c1043428..26845978 100644 --- a/docs/product/pricing.md +++ b/docs/product/pricing.md @@ -100,7 +100,7 @@ | 扩展单个群成员数上限 | 对单个 App Key 内的所有群组生效 | 预付费 | 3000 人/群,500 元/月 | 8000 人/群,500 元/月 | | 扩展单个用户可加入群组数上限 | 对单个 App Key 内的所有用户生效 | 预付费 | 2000 群/人:1000 元/月 | — | | 群聊消息已读回执 | 功能介绍详见[群聊消息已读回执](/document/android/message_receipt.html#群聊)。 | 预付费 | 1000 元/月 | — | -| 全局禁言 | 功能介绍详见[全局禁言](/document/server-side/account_system.html#用户全局禁言)。 | 预付费 | 500 元/月 | — | +| 全局禁言 | 功能介绍详见[全局禁言](/document/server-side/user_global_mute.html)。 | 预付费 | 500 元/月 | — | | 回调 | 功能介绍详见[回调](/document/server-side/callback.html)。 | 预付费 | 1000 元/月 | — | | 用户在线状态(Presence)订阅 | 功能介绍详见[用户在线状态订阅](/document/server-side/presence.html)。 | 预付费 | 1000 元/月 | — | | 消息表情回复 Reaction | 功能介绍详见[消息表情回复](/document/server-side/reaction.html)。 | 预付费 | 600 元/月 | — |