thunbu-im-sdk
Version:
thunbu IM JSSDK
2,487 lines (1,868 loc) • 89.4 kB
Markdown
# Thunbu IM JSSdk 文档
## 快速开始
闪布IM JSSDK (Javascript SDK)可以使用在PC/移动网页端应用,也可以使用在Electron、RN、小程序等跨平台应用中,提供全面而完善的即时通讯开发能力,使开发人员通过简单快速的对接集成即时通讯的功能。
> 1、接入sdk
> 2、初始化SDK
> 3、登入
> 4、消息收发
> 5、业务相关、历史消息等
> 6、登出
### 集成方式
#### 标签引入
``` html
<script src="https://flashchart-oss.oss-cn-hangzhou.aliyuncs.com/web-assets/js/shanliao-sdk/0.0.3/thunbuim-web-sdk.js"></script>
```
这样的话可以使用全局对象 ```window.SIM``` 获取sdk的引用。
#### npm 下载
使用
```npm install thunbu-im-sdk --save```
或
```yarn add thunbu-im-sdk```
从远程仓库上下载SDK
> 使用从远程仓库下载的SDK将附带有```Typescript```支持,使用标签引入或者文件引入的,也可以移步[闪布开发者平台](https://developer.sammbo.com) 下载```.d.ts```文件以获取Typescript支持
#### Demo 支持
在[闪布开发者平台](https://developer.sammbo.com)站点上,包含现有SDK的使用实例
[实例源代码](https://github.com/Thunbu/flashchat-web)
#### 浏览器兼容性
| PC浏览器 | Chrome | Firefox | Safari | Edge | Opera | Internet Explorer |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 最低支持 | Yes | 7 | Yes | 12 | Yes | 10 |
| 移动端浏览器 | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on iOS| Samsung Internet |
| :---: | :---: | :---: | :---: | :---: | :---: | :---: |
| 最低支持 | Yes | Yes | 7 | ? | Yes | Yes |
因为在某些浏览器内单个方法版本另有差异,这样就导致即使在主流浏览器的低版本中,也有可能出现单个websocket不支持从而出错,详情参见[MDN Websocket](https://developer.mozilla.org/zh-CN/docs/Web/API/WebSocket),当浏览器不兼容时
```javascript
SIM.init(config, onSuccess, onFail);
// 或者
new SIM({});
```
会返回一个错误[`SCOKET_ENOTSUP(-1000)`](#Socket状态码)。
#### 小程序接入
小程序相关接入方式需联系开发人员进行沟通集成
### 初始化
#### 初始化SDK
在所有事情开始之前,必须要先将`SIM`对象初始化,告诉`SIM`相关配置是什么,如果是web端,`apiBaseUrl`
如果传全路径可能会报跨域的问题,这个时候也可以传代理路径,不需要传全路径也可以正常工作,会将接口请求到当前域下的代理路径
##### 从 npm 下载
```javascript
import SIM from 'thunbu-im-sdk';
const SIMInstance = new SIM({
serverip: 'ws://localhost:3000/test', // websocket 地址
apiBaseUrl: 'http://localhost:9000/', // IM http 业务接口访问地址
debug: false // 是否打开控制台
});
```
##### 标签引入模式
```javascript
const SIMInstance = new window.SIM({
serverip: 'ws://localhost:3000/test', // websocket 地址
apiBaseUrl: 'http://localhost:9000/', // IM http 业务接口访问地址
debug: false // 是否打开控制台
});
```
在初始化成功后,会执行相应的回调方法,若是失败,则会在失败的回调中告知错误原因。
详见[错误码列表](#Socket状态码)
#### 监听SIM方法
在初始化完成之后,可以监听由`SIM`提供的事件
##### 从 npm 下载
```javascript
SIMInstance.addEventListener('msg', function (msg) {
console.log('notice: ', msg); // 接收到新消息
});
SIMInstance.addEventListener('notice', function (res) {
console.log('notice: ', res); // 接收到通知消息
});
SIMInstance.addEventListener('msgChange', function (res) {
console.log('msgChange: ', res); // 消息变化通知
});
SIMInstance.addEventListener('connectChange', function (status) {
console.log('connectChange: ', status); // 链接状态变更
});
```
##### 标签引入模式
```javascript
window.SIM.addEventListener('msg', function (msg) {
console.log('notice: ', msg); // 接收到新消息
});
window.SIM.addEventListener('notice', function (res) {
console.log('notice: ', res); // 接收到通知消息
});
window.SIM.addEventListener('msgChange', function (res) {
console.log('msgChange: ', res); // 消息变化通知
});
window.SIM.addEventListener('connectChange', function (status) {
console.log('connectChange: ', status); // 链接状态变更
});
```
### 登录
#### 登入
在初始化完成之后,开发人员需要操作`SIM`来告知SDK需要登录到IM服务器了,在通过相关服务(可能是私有化部署的本地后台服务,也可能是闪布服务,具体服务地址视后台地址决定)鉴权后,就可以开始登录IM服务器了~
```javascript
SIMInstance.login({
userId: "userId", // 用户ID
userSig: "userSig", // 用户凭证
appId: "appId", // 应用ID
terminal: "terminal", // 终端类型,0为mobile,1为pc或web端
appversion: "appversion", // 应用版本号
}).then(() => {
console.log('login success!');
}).catch((err) => {
console.log('login error! ', err);
});
```
登录成功之后,会执行相应的回调方法,若是登录失败,则会在失败的回调中告知原因
详见[错误码列表](##错误码列表)
#### 登出
退出登录功能
```javascript
SIMInstance.logout().then(() => {
console.log('logout success!');
}).catch((err) => {
console.log('logout error! ', err);
});
```
### 我们来简单的发个消息
我们使用`SIM`提供的`sendMsg`方法来完成给小伙伴发消息~
```javascript
SIMInstance.sendMsg({
type: 0, // 这里我们定义的 0 就代表是文本消息
message: { // 消息体内容
text: 'hello world!' // 文本消息
},
receiver: "9527", // 将消息发送给TA,消息的接收者
securityType: 0, // 安全类型 默认是0
cross: 0, // 是否跨域
sender: "9528", // 发送者的ID,你发送的就是你自己咯
chatType: 0, // 你和Ta的会话类型,单聊为0, 群聊为1
}).then((msgId) => {
console.log('sendMsg success!', msgId);
}).catch((err) => {
console.log('sendMsg error! ', err);
});
```
发送消息后,如果另一端已经处于登录状态并且已经监听了`SIM`[提供的几个事件](###监听SIM方法)的话,则会打印出相应的消息体,就已经完成了最基本的消息收发啦🎇
***恭喜您!***在经过简单的配置之后,终于可以开始发送/接收消息了~ 下面, 我们就可以开始扩展应用的更多功能了!
### 注意⚠️
我们在后续版本将基于npm进行版本管理,若是需要标签引入的源代码,则可联系客服或者对接人员提供
因为标签引入的模式不利于长期维护以及类型支持,并且我们的文档也是基于npm发布版本的内容进行讲解,包含JavaScript的新特性,所以推荐工程项目内都使用npm下载
---
## 基础方法与事件交互
介绍`SIM`提供的基础方法,包含登入登出、消息发送、事件监听、工具方法等
### 基础方法
#### `SIM`初始化
> 初始化SIM,在登录之前
##### 类型定义
```typescript
type SIMInitParams = {
apiBaseUrl: boolean,
serverip: boolean,
debug?: boolean
}
```
##### Demo 例子🌰
```javascript
const SIMInstance = new SIM({
apiBaseUrl: '/base-api',
serverip: 'wss://ws.test.com'
}).then(() => {
console.log('SIM init Success');
}).catch((err) => {
console.error('SIM init Error:', err);
})
```
##### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [SIMInitParams](#siminitparams-对象类型) | 初始化SIM的参数 |
##### `SIMInitParams` 对象类型
| 参数 | 类型 | 说明|
| --- | --- | --- |
| apiBaseUrl | string | SIM业务接口调用路径 |
| serverip | string | webSocket 连接地址 |
| ?debug | Boolean | [可选参数] 是否开启调试模式,如果开启,则控制台会打印SIM的日志,反之不会打印 |
---
#### 登录SIM: `login`
> 使用websocket登录至IM服务器
##### 类型定义
```typescript
type SIMLoginParams = {
appId: string,
userId: string,
userSig: string,
}
type EmptyFun = (...arg: any) => void;
type login = (parms: SIMLoginParams) => Promise<string>
```
##### Demo 例子🌰
```javascript
SIMInstance.login({
appId: '1',
userId: '9527',
userSig: 'wo-shi-yi-dui-zi-fu-chuan'
}).then(() => {
console.log('SIM login Success');
}).catch((err) => {
console.error('SIM login Error:', err);
})
```
##### 方法参数
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| params | [SIMLoginParams](#SIMLoginParams-对象类型) | 登录SIM的参数 |
##### `SIMLoginParams`-对象类型
| 参数 | 类型 | 说明|
| --- | --- | --- |
| appId | string | 应用ID |
| userId | string | 登录的用户Id |
| userSig | string | 登录的用户userSig |
---
#### 登出: `logout`
> 用户登出 SIM
##### 类型定义
```typescript
type EmptyFun = (...arg: any) => void;
type logout = (onSuccess?: EmptyFun, onFail?: EmptyFun) => Promise<void>;
```
##### Demo 例子🌰
```javascript
SIMInstance.login().then(() => {
console.log('SIM logout Success');
}).catch((err) => {
console.error('SIM logout Error:', err);
})
```
##### 返回值
```typescript
Promise<void>
```
##### 方法参数
无
---
##### 检查链接情况: `testOnLine`
> 检查websocket与服务器链接状态, 该函数并没有返回值,如果检测到连接终端,则会通过事件通知
##### 类型定义
```typescript
type testOnLine = (delay: number = 300) => void;
```
##### Demo 例子🌰
```javascript
SIMInstance.testOnLine();
```
##### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| ?delay | number | [可选参数] 退出登录成功的回调 |
---
### 事件交互
> SIM 的变更事件都会通过事件机制反馈给开发者
#### 绑定事件: `addEventListener`
| 事件名 | 参数 | 描述 |
| --- | --- | --- |
| "msg" | [NormalMessageItem](#normalmessageitem-对象类型) (不同的消息类型的消息包体会有所不同) | 接收到新消息时触发的事件 |
| "repetitionMsg" | any | 消息重复时触发的事件 |
| "notice" | [NoticeMessageItem](#noticemessageitem-对象类型) | 接收到新通知消息时触发的事件 |
| "msgChange" | [NormalMessageItem](#normalmessageitem-对象类型) | 消息变更时触发的事件,比如:已读、撤回、删除、标记、取消标记等 |
| "connectChange" | any | IM连接状态变更时触发的事件 |
##### Demo 例子🌰
```javascript
SIMInstance.addEventListener('msg', () => {
console.log('on message:', msg);
});
SIMInstance.addEventListener('notice', (notice) => {
console.log('on notice:', notice);
});
```
---
#### 解绑事件: `removeEventListener`
> 可以解绑的事件和可以绑定的事件名称可取值是一样的
##### 类型定义
```typescript
type removeEventListener = (eventName?: string, callback?: AnyFuncion) => void;
```
##### Demo 例子🌰
```javascript
SIMInstance.removeEventListener('msg', () => {
console.log('on message:', msg);
});
```
> 注意⚠️,如果不传 eventName 或者 eventName为空字符串,SIM将会认为程序需要将所有的监听事件都清除掉,所以务必保证知晓参数完整的必要性
---
### utils - 工具集
在`SIM`中,我们提供了一些简易的工具集以供开发人员使用
#### 获取uuid: `getGuid`
通过获取n位随机字符串生成的唯一ID
##### 类型定义
```typescript
getGuid: (length?: number) => string;
```
##### Demo
```javascript
SIMInstance.utils.getGuid(4);
```
##### 返回参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| uuid | string | 唯一ID |
---
#### 获取图片类型: `getImgFormat`
通过获取到的文件路径来确定图片类型(主要是根据文件名的后缀)
返回0|1|255 对应不同的图片类型
##### 类型定义
```typescript
getImgFormat: (filePath: string) => 0 | 1 | 255;
```
##### Demo 例子🌰
```javascript
SIMInstance.utils.getImgFormat("C:\test.png"); // return: 1
```
##### 返回参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| fileType | 0|1|255 | 0-jpg 1-png 255-unknow |
---
#### 获取文件类型: `getFileFormat`
通过获取到的问年间路径来确定文件类型(主要根据文件类型)
返回对应的文件类型
##### 类型定义
```typescript
getFileFormat: (filePath: string) => 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 255;
```
##### Demo 例子🌰
```javascript
SIMInstance.utils.getImgFormat("C:\test.png"); // return: 3
```
| 参数 | 类型 | 说明|
| --- | --- | --- |
| filePath | string | 文件路径,包含文件名的路径 |
##### 返回值
| 类型 | 说明 |
| --- | --- |
| 0|1|2|3|4|5|6|7|8|9|10|11|12|255 | 0: txt 文本文件,匹配`txt` <br>1: word文件,匹配`doc|docx|docm|dot|dotx|wps` <br>2: Excel文件,匹配`xls|xlsx|xlsm|xlt|csv` <br>3: 图片文件,匹配`jpg|jpeg|jp2|png|svg|bmp|gif|iff|pcx|pixar|pxr|tiff|cal` <br>4: pdf 文件,匹配`pdf` <br>5: ppt 文件,匹配`ppt|pptx|pps|ppsm` <br>6: 压缩文件,匹配`rar|ace|ari|arc|ar|arj|bz|bza|bz2|car|dar|gca|gz|jar|taz|tar|exe|zip|7z|zz` <br>7: html文件,匹配`html|htm` <br>8: mp4文件,匹配`mp4` <br>9: mp3文件,匹配`mp3` <br>10: 思维导图文件,匹配`mmap|xmind|mm` <br>11: Ai文件,匹配`ai|eps` <br>12: psd 文件,匹配`psd` <br>255: 未知文件 |
---
## IM 统一类型定义
### Socket状态码
```typescript
enum IM_Status {
/** 成功:200 */
SUCCEED = 200,
/** 参数正确:0 */
ARGS_CORRECT = 0,
/** 参数错误:-1 */
ARGS_ERROR = -1,
/** 未知错误:-99 */
ERROR_UNKNOWN = -99,
/** 网络连接中断:-100 */
NETWORK_OFFLINE = -100,
/** 请求超时:-101 */
REQUEST_TIMEOUT = -101,
/** 不支持h5:-1000 */
SCOKET_ENOTSUP = -1000,
/** 连接超时:-1001 */
SCOKET_TIMEOUT = -1001,
/** 已连接:-1002 */
SCOKET_CONNECT = -1002,
/** 连接中:-1003 */
SCOKET_CONNECTING = -1003,
/** 未连接:-1004 */
SCOKET_UNCONNECT = -1004,
/** 连接失败:-1005 */
SCOKET_CONNECT_ERROR = -1005,
/** 并发太高:-1006 */
SCOKET_COUNT_ERROR = -1006,
/** 登陆中:-1100 */
LOGIN_LOGINING = -1100,
/** 重复登陆:-1101 */
LOGIN_REPEAT = -1101,
/** 未登陆:-1102 */
LOGIN_NOTLOGIN = -1102
}
```
### IM command 枚举
```typescript
enum IMCommandEnum {
CMD_HB = 0,
/** 命令-登陆:1 */
CMD_LOGIN = 1,
/** 命令-登出:2 */
CMD_LOGOUT = 2,
/** 命令-上线通知:3 */
CMD_CONNECT_ONLINE_NOTICE = 3,
/** 命令-上传终端设备信息:7 */
CMD_UPLOAD_TERMINAL = 7,
/** 命令-下线通知:8 */
CMD_CONNECT_OFFLINE_NOTICE = 8,
/** 命令-消息:20 */
CMD_MSG = 20,
/** 命令-消息-服务端回执:21 */
CMD_MSG_S_RES = 21,
/** 命令-消息-客户端回执:22 */
CMD_MSG_C_RES = 22,
/** 命令-消息-已读:23 */
CMD_MSG_READ = 23,
/** 命令-消息-撤回:24 */
CMD_MSG_REVOCATION = 24,
/** 命令-消息-用户删除:25 */
CMD_MSG_DELETE = 25,
/** 命令-消息-管理员删除:26 */
CMD_MSG_ADMIN_DELETE = 26,
/** 命令-消息-标记-增加:27 */
CMD_MSG_ADD_TAG = 27,
/** 命令-消息-标记-删除:28 */
CMD_MSG_DEL_TAG = 28,
/** 命令-消息-音视频:29 */
CMD_MSG_AV = 29,
/** 命令-离线消息-查询:30 */
CMD_OFFLINE_MSG_INQUIRE = 30,
/** 命令-离线消息-回执:31 */
CMD_OFFLINE_MSG_RECEIPT = 31,
/** 命令-消息-回复数量变更:33 */
CMD_MSG_REPLYCOUNT_CHANGE = 33,
/** 已读通知(服务端发送给消息发送者)= 34 **/
CMD_MSG_READ_NOTICE = 34,
/** 主动拉取已读通知(客户端主动拉取已读通知)= 35 **/
CMD_MSG_GETREAD_NOTICE = 35,
/** 命令-聊天室-获取列表:50 */
CMD_CHAT_LIST_GIT = 50,
/** 命令-聊天室-创建通知:51 */
CMD_CHAT_CREATE_NOTICE = 51,
/** 命令-聊天室-免打扰设置:52 */
CMD_CHAT_DISTURB_CHANGE_SET = 52,
/** 命令-聊天室-免打扰变更通知:53 */
CMD_CHAT_DISTURB_CHANGE_NOTICE = 53,
/** 命令-聊天室-会话消息计数重置:54 */
CMD_CHAT_MSG_COUNT_SET = 54,
/** 命令-聊天室-会话消息计数重置通知:55 */
CMD_CHAT_MSG_COUNT_NOTICE = 55,
/** 命令-聊天室-获取置顶列表:56 */
CMD_CHAT_TOP_LIST_GIT = 56,
/** 命令-聊天室-会话置顶设置:57 */
CMD_CHAT_TOP_SET = 57,
/** 命令-聊天室-置顶变更通知:58 */
CMD_CHAT_TOP_CHANGE_NOTICE = 58,
/** 命令-聊天室-设置会话不可见通知:59 */
CMD_CHAT_DELETE_NOTICE = 59,
/** 命令-聊天室-名称变更:60 */
CMD_CHAT_NAME_SET = 60,
/** 命令-聊天室-名称变更通知:61 */
CMD_CHAT_NAME_CHANGE_NOTICE = 61,
/** 命令-聊天室-彻底删除通知:62 */
CMD_CHAT_THOROUGH_DELETE_NOTICE = 62,
/** 命令-自定义通知:99 */
CMD_CUSTOOM_NOTICE = 99,
/** 命令-用户相关-账户信息修改:100 */
CMD_USER_DETAILS_SET = 100,
/** 命令-用户相关-账户信息修改通知:101 */
CMD_USER_DETAILS_CHANGE_NOTICE = 101,
/** 命令-好友相关-好友申请通知:108 */
CMD_FRIEND_APPLY_NOTICE = 108,
/** 命令-好友相关-好友添加成功通知:109 */
CMD_FRIEND_APPLY_ADD_NOTICE = 109,
/** 命令-好友相关-好友申请答复通知:110 */
CMD_FRIEND_APPLY_RESULT_NOTICE = 110,
/** 命令-好友相关-删除好友:111 */
CMD_FRIEND_DELETE = 111,
/** 命令-好友相关-删除好友通知:112 */
CMD_FRIEND_DELETE_NOTICE = 112,
/** 命令-好友相关-好友备注修改通知:113 */
CMD_FRIEND_REMARK_CHANGE_NOTICE = 113,
/** 命令-好友相关-删除所有好友通知:116 */
CMD_FRIEND_DELETE_ALL_NOTICE = 116
}
```
### IM 消息体类型
```typescript
enum MsgTypeEnum {
Msg_Text = 0,
Msg_Pic = 1,
Msg_Audio = 2,
Msg_Video = 3,
Msg_File = 4,
Msg_Read = 5,
Msg_Withdraw = 6,
Msg_Delete = 7,
Msg_MergeForward = 8,
Msg_GroupVVC = 9,
Msg_SingleVVC = 10,
Msg_CustomEmoji = 11,
Msg_Extra = 10000,
Msg_Announcement = 20007
}
```
## IM 消息处理
与IM交互,收发、处理IM消息
### 发送消息:`sendMsg`
发送即时消息的方法,基本类型以及自定义类型都已经有定义好消息格式
格式详见[全局类型定义](#IM 消息体类型)
#### 类型定义
```typescript
type sendMsg = <T extends SendNormalMsgTypeEnum>(params: SendMsgItem<T>) => Promise<string>
```
#### Demo 例子🌰
```javascript
SIMInstance.sendMsg({
message: {
text: 'hello world~',
},
receiver: '110',
securityType: 0,
chatType: 0,
cross: 0,
type: 0,
}).then((messageId) => {
console.log('send message success! message id is: ', messageId);
}).catch((err) => {
console.error('send message Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [SendMsgItem](#sendmsgitem-对象类型) | 登录SIM的参数 |
---
#### SendMsgItem-对象类型
该对象有泛型参数
``` typescript
interface SendMsgItem<T extends SendNormalMsgTypeEnum> {
receiver: string,
message: SendMsgContentType<T>,
securityType: 0|1,
chatType: ChatTypeEnum,
cross: 0|1,
type: T,
domain?: SendMsgDomainType,
time?: number,
groupType?: 0|1|2,
offlinePush?: boolean,
offlinePushInfo?: string,
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| receiver | string |接收者|
| message | [SendMsgContentType<T>](#SendMsgContentType-对象类型) |是根据消息类型来的,不同的消息类型message字段的值会不一样 |
| securityType | 0|1 |安全类型,0-普通,1-密聊 |
| chatType | [ChatTypeEnum](#chattypeenum-枚举类型) | 会话类型 |
| cross | 0|1 | 是否跨域 |
| type | SendNormalMsgTypeEnum | 消息类型 |
| ?domain | SendMsgDomainType | 消息扩展字段 |
| ?time | number | 发送时间 |
| ?groupType | 0|1|2 | 群类型,可选值[0:私密群,1:公开群,2:讨论组] |
| ?offlinePush | boolean | 是否有离线推送 |
| ?offlinePushInfo | string | 离线推送内容 |
---
#### SendMsgContentType-对象类型
通过传入的泛型来确认返回的类型,泛型的取值范围是:[`SendNormalMsgTypeEnum`](#SendNormalMsgTypeEnum-对象类型 )
```typescript
export type SendMsgContentTypes = {
[SendNormalMsgTypeEnum.Msg_Text]: SendTextMsgContentType,
[SendNormalMsgTypeEnum.Msg_Pic]: SendPicMsgContentType,
[SendNormalMsgTypeEnum.Msg_Audio]: SendAudioMsgContentType,
[SendNormalMsgTypeEnum.Msg_Video]: SendVideoMsgContentType,
[SendNormalMsgTypeEnum.Msg_File]: SendFileMsgContentType,
[SendNormalMsgTypeEnum.Msg_MergeForward]: SendMergeForwardContentType,
[SendNormalMsgTypeEnum.Msg_CustomEmoji]: SendCustomEmojiContentType,
[SendNormalMsgTypeEnum.Msg_Extra]: SendExtraMsgContentType,
}
type SendMsgContentType<T extends SendNormalMsgTypeEnum> = SendMsgContentTypes[T];
```
##### 对象成员
| 参数 | 类型 | 说明 |
| ---------------- | ------------------------------------------------------------ | ---------------------- |
| Msg_Text | [SendTextMsgContentType](#SendTextMsgContentType-对象类型) | 文本消息包体内容 |
| Msg_Pic | [SendPicMsgContentType](#SendPicMsgContentType-对象类型) | 图片消息包体内容 |
| Msg_Audio | [SendAudioMsgContentType](#SendAudioMsgContentType-对象类型) | 语音消息包体内容 |
| Msg_Video | [SendVideoMsgContentType](#SendVideoMsgContentType-对象类型) | 视频消息包体内容 |
| Msg_File | [SendFileMsgContentType](#SendFileMsgContentType-对象类型) | 文件消息包体内容 |
| Msg_MergeForward | [SendMergeForwardContentType](#SendMergeForwardContentType-对象类型) | 合并转发消息包体内容 |
| Msg_CustomEmoji | [SendCustomEmojiContentType](#SendCustomEmojiContentType-对象类型) | 自定义表情消息包体内容 |
| Msg_Extra | [SendExtraMsgContentType](#SendExtraMsgContentType-对象类型) | 扩展消息包体内容 |
---
#### SendNormalMsgTypeEnum-对象类型
```typescript
/** 发送消息时声明的类型 - 以下类型可以发送 */
export enum SendNormalMsgTypeEnum {
Msg_Text = 0, //: '文本',
Msg_Pic = 1, //: '图片',
Msg_Audio = 2, //: '语音',
Msg_Video = 3, //: '视频',
Msg_File = 4, //: '文件',
Msg_MergeForward = 8, //: '合并转发',
Msg_CustomEmoji = 11, //: '自定义表情类型',
Msg_Extra = 10000, //: '扩展类消息',
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| Msg_Text | 0 |文本消息包体内容|
| Msg_Pic | 1 |图片消息包体内容|
| Msg_Audio | 2 |语音消息包体内容|
| Msg_Video | 3 |视频消息包体内容|
| Msg_File | 4 |文件消息包体内容|
| Msg_Withdraw | 6 |撤回消息包体内容|
| Msg_MergeForward | 8 |合并转发消息包体内容|
| Msg_CustomEmoji | 11 |自定义表情消息包体内容|
| Msg_Extra | 10000 |扩展消息包体内容|
---
#### ChatTypeEnum-枚举类型
```typescript
enum ChatTypeEnum {
SingleChat,
GroupChat,
SubscribeChat,
SubscribeBoxChat = 10,
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| SingleChat | 0 | 单聊 |
| GroupChat | 1 | 群聊 |
| SubscribeChat | 2 | 订阅号 |
| SubscribeBoxChat | 10 | 订阅号盒子 |
---
#### SendTextMsgContentType-对象类型
发送文本消息体的内容
```typescript
export interface SendTextMsgContentType {
text: string,
/** @ 的人员列表 */
members?: string[]
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| text | string | 文本内容 |
| ?members | string[] | @的人 |
---
#### SendPicMsgContentType-对象类型
发送图片消息体的内容
```typescript
export interface SendPicMsgContentType {
/** 0-JPG,1-PNG,225-未知类型 */
format: 0 | 1 | 255,
imageList: {
/** 0-原图 1-缩略大图 2-缩略小图 */
type: 0 | 1 | 2,
url: string,
size: number,
width: number,
height: number
}[]
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| format | 0|1|255 | 0-JPG,1-PNG,225-未知类型 |
| imageList | object[] | 图片信息 |
| imageList[0].type | 0|1|2 | 0-原图 1-缩略大图 2-缩略小图 |
| imageList[0].url | string | 图片地址 |
| imageList[0].size | number | 图片大小 |
| imageList[0].width | number | 图片宽度 |
| imageList[0].height | number | 图片高度 |
---
#### SendAudioMsgContentType-对象类型
发送音频文件消息体的内容
```typescript
export interface SendAudioMsgContentType {
size: number,
/** 类型 */
format: number,
/** 时长 - 秒 */
duration: number,
/** 下载地址 */
downUrl: string
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| format | 0|1|255 | 0-JPG,1-PNG,225-未知类型 |
| imageList | object[] | 图片信息 |
| imageList[0].type | 0|1|2 | 0-原图 1-缩略大图 2-缩略小图 |
| imageList[0].url | string | 图片地址 |
| imageList[0].size | number | 图片大小 |
| imageList[0].width | number | 图片宽度 |
| imageList[0].height | number | 图片高度 |
---
#### SendVideoMsgContentType-对象类型
发送视频文件消息体的内容
```typescript
export interface SendVideoMsgContentType {
/** 视频地址 */
videoUrl: string,
/** 视频大小 - b */
videoSize: number,
/** 视频时长 - 毫秒 */
duration: number,
/** 0-AVI,1-RM,2-RMVB,3-WMV,4-MP4,225-未知类型 */
videoFormat: 0 | 1 | 2 | 3 | 4 | 255,
/** 封面地址 */
coverUrl: string,
/** 封面宽度 - px */
coverWidth: number,
/** 封面高度 - px */
coverHeight: number,
/** 封面大小 - kb */
coverSize: number,
/** 封面类型,0-JPG,1-PNG,225-未知类型 */
coverFormat: 0 | 1 | 255,
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| videoUrl | string | 视频地址 |
| videoSize | number | 视频大小 - b |
| duration | number | 视频时长 - 毫秒 |
| videoFormat | 0|1|2|3|4|255 | 0-AVI,1-RM,2-RMVB,3-WMV,4-MP4,225-未知类型 |
| coverUrl | string | 封面地址 |
| coverWidth | number | 封面宽度 |
| coverHeight | number | 封面高度 |
| coverSize | number | 封面大小 |
| coverFormat | number | 封面类型 |
---
#### SendFileMsgContentType-对象类型
发送文件消息体的内容
```typescript
export interface SendFileMsgContentType {
/** 文件类型 */
format: FileFormatEnum,
/** 文件大小 - b */
size: number,
/** 下载地址 */
downUrl: string,
/** 文件名称 */
filename: string,
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| format | FileFormatEnum | 文件类型 - 参考 utils.getFileFormat 的返回值 |
| size | number | 文件大小 - b |
| downUrl | string | 下载地址 |
| filename | string | 文件名称 |
---
#### SendMergeForwardContentType-对象类型
发送合并转发消息体的内容
```typescript
export interface SendMergeForwardContentType {
title: string,
content: string,
ids: string[],
chatType: ChatTypeEnum,
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| title | FileFormatEnum | 文件类型 - 参考 utils.getFileFormat 的返回值 |
| content | number | 文件大小 - b |
| ids | string | 下载地址 |
| chatType | string | 文件名称 |
---
#### SendCustomEmojiContentType-对象类型
发送自定义表情消息体的内容
```typescript
export interface SendCustomEmojiContentType {
imgMd: string,
imgUrl: string,
size: number,
width: number,
height: number
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| imgMd | string | 图片md5值 |
| imgUrl | string | 图片地址 |
| size | number | 表情大小 |
| width | number | 宽度 |
| height | number | 高度 |
---
#### SendExtraMsgContentType-对象类型
发送自定义消息体的内容
```typescript
export interface SendExtraMsgContentType {
data: string // 自行解析,各端约定好
}
```
---
### 已读消息:`readMsg`
将消息设为已读
#### 类型定义
```typescript
type readMsg = (params: ReadMsgParamsType) => Promise<string>
```
#### Demo 例子🌰
```javascript
SIMInstance.readMsg({
id: 'messageID~~~~~~',
receiver: '110',
securityType: 0,
chatType: 0,
cross: 0,
}).then((messageId) => {
console.log('readMsg message success! message id is: ', messageId);
}).catch((err) => {
console.error('readMsg message Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [ReadMsgParamsType](#readmsgparamstype-对象类型) | 已读消息的参数 |
#### ReadMsgParamsType-对象类型
发送已读消息的参数
```typescript
export interface ReadMsgParamsType {
id: string,
chatType: ChatTypeEnum,
securityType: 0 | 1,
cross: 0 | 1,
receiver: string,
time?: number
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| id | string | 操作的消息ID |
| chatType | ChatTypeEnum | 会话类型 |
| securityType | 0|1 | 密聊类型 |
| cross | 0|1 | 是否跨域 |
| receiver | string | 接收者 |
| ?time | number | 时间 |
---
### 撤回消息: `revocationMsg`
将消息撤回
#### 类型定义
```typescript
type revocationMsg = (params: RevocationMsgParamsType)
:
Promise<string>
```
#### Demo 例子🌰
```javascript
SIMInstance.revocationMsg({
id: 'messageID~~~~~~'
receiver: '110',
securityType: 0,
chatType: 0,
cross: 0,
}).then((messageId) => {
console.log('revocationMsg message success! message id is: ', messageId);
}).catch((err) => {
console.error('revocationMsg message Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [RevocationMsgParamsType](#revocationmsgparamstype-对象类型) | 撤回消息的参数 |
#### `RevocationMsgParamsType`-对象类型
发送撤回消息的参数
```typescript
export interface RevocationMsgParamsType {
id: string,
chatType: ChatTypeEnum,
securityType: 0 | 1,
cross: 0 | 1,
receiver: string,
time?: number
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| id | string | 撤回的消息ID |
| chatType | ChatTypeEnum | 会话类型 |
| securityType | 0|1 | 密聊类型 |
| cross | 0|1 | 是否跨域 |
| receiver | string | 接收者 |
| ?time | number | 时间 |
---
### 获取消息已读状态:`fetchMsgReadState`
获取消息的已读状态
#### 类型定义
```typescript
type fetchMsgReadState = (params: FetchMsgReadParamsType)
:
Promise<string>
```
#### Demo 例子🌰
```javascript
SIMInstance.fetchMsgReadState({
id: 'messageID~~~~~~'
receiver: '110',
securityType: 0,
chatType: 0,
cross: 0,
msgType: 0,
}).then((messageId) => {
console.log('fetchMsgReadState message success! message id is: ', messageId);
}).catch((err) => {
console.error('fetchMsgReadState message Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [FetchMsgReadParamsType](#fetchmsgreadparamstype-对象类型) | 获取已读状态的参数 |
#### FetchMsgReadParamsType-对象类型
获取消息的已读状态的参数
```typescript
export interface FetchMsgReadParamsType {
id: string,
chatType: ChatTypeEnum,
securityType: 0 | 1,
cross: 0 | 1,
receiver: string,
msgType: MsgTypeEnum,
time?: number
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| id | string | 撤回的消息ID |
| chatType | ChatTypeEnum | 会话类型 |
| securityType | 0|1 | 密聊类型 |
| cross | 0|1 | 是否跨域 |
| receiver | string | 接收者 |
| msgType | MsgTypeEnum | 消息类型 |
| ?time | number | 时间 |
---
### 删除消息:`deleteMsg`
删除消息
#### 类型定义
```typescript
type deleteMsg = (params: DeleteMsgParamsType)
:
Promise<string>
```
#### Demo 例子🌰
```javascript
SIMInstance.deleteMsg({
id: 'messageID~~~~~~'
receiver: '110',
securityType: 0,
chatType: 0,
cross: 0,
msgType: 0,
delType: 1,
}).then((messageId) => {
console.log('deleteMsg message success! message id is: ', messageId);
}).catch((err) => {
console.error('deleteMsg message Error! err:', err);
})
```
#### `deleteMsg`-方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [DeleteMsgParamsType](#deletemsgparamstype-对象类型) | 删除消息的参数 |
##### `DeleteMsgParamsType`-对象类型
删除消息参数
```typescript
export interface FetchMsgReadParamsType {
id: string,
chatType: ChatTypeEnum,
securityType: 0 | 1,
cross: 0 | 1,
receiver: string,
msgType: MsgTypeEnum,
time?: number,
delType?: 0 | 1,
}
```
###### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| id | string | 删除的消息ID |
| chatType | ChatTypeEnum | 会话类型 |
| securityType | 0|1 | 密聊类型 |
| cross | 0|1 | 是否跨域 |
| receiver | string | 接收者 |
| msgType | MsgTypeEnum | 消息类型 |
| ?time | number | 时间 |
| ?delType | 0\1 | 删除类型 0-删除自己的(只影响自己),1-删除所有人(影响所有人) 默认 0 |
---
### 获取离线消息:`getOfflineMsg`
获取离线消息-得到历史消息后会触发`msg`事件
#### 类型定义
```typescript
type getOfflineMsg = (params: GetOffLineMsgParamsType)
:
Promise<string>
```
#### Demo 例子🌰
```javascript
SIMInstance.getOfflineMsg({
queryType: 0
}).then((messageId) => {
console.log('getOfflineMsg message success! message id is: ', messageId);
}).catch((err) => {
console.error('getOfflineMsg message Error! err:', err);
})
```
#### `getOfflineMsg`-方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [GetOffLineMsgParamsType](#getofflinemsgparamstype-对象类型) | 获取离线消息方法的参数 |
##### `GetOffLineMsgParamsType`-对象类型
获取离线消息方法参数
```typescript
export interface FetchMsgReadParamsType {
lastMsgTime?: number,
loginTime?: number,
tId?: string,
queryType: 0 | 1 | 2,
}
```
###### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| ?lastMsgTime | number | 上次同步时间 |
| ?loginTime | number | 登陆时间 |
| ?tId | string | 后台消息id,最开始一条id |
| queryType | 0|1|2 | 查询类型,0单聊,1群聊,2指令 |
---
### 初始化会话消息统计数量:`initMessageCount`
初始化会话消息统计数量
#### 类型定义
```typescript
type initMessageCount = (params: SendInitMessageCountParams)
:
Promise<string>
```
#### Demo 例子🌰
```javascript
SIMInstance.initMessageCount({
chatId: '123123',
chatType: 0,
securityType: 0,
}).then((messageId) => {
console.log('initMessageCount success! message id is: ', messageId);
}).catch((err) => {
console.error('initMessageCount Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [SendInitMessageCountParams](#SendInitMessageCountParams-对象类型) | 初始化会话消息统计数量方法的参数 |
##### `SendInitMessageCountParams`-对象类型
初始化会话消息统计数量方法参数
```typescript
export interface SendInitMessageCountParams {
chatId: string,
chatType: ChatTypeEnum,
securityType: 0 | 1,
time?: number
}
```
###### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| chatId | string | 会话ID |
| chatType | [ChatTypeEnum](#ChatTypeEnum-对象类型) | 会话类型 |
| securityType | 0|1 | 密聊类型 |
| ?time | number | 发送时间 |
---
## HTTP 业务相关接口
业务相关接口主要分为以下几个部分
| 分组 | 说明 |
| --- | --- |
| [群组相关接口](#群组相关接口) | 处理群聊相关业务 |
| [人员相关接口](#人员相关接口) | 处理人员相关业务 |
| [会话相关接口](#会话相关接口) | 处理会话相关业务 |
| [消息相关接口](#消息相关接口) | 处理消息相关业务 |
## 群组相关接口
通过http接口来操作IM中的群组相关功能
### 获取所有群聊: `getAllUserGroup`
获取当前用户的所有群组
#### 类型定义
```typescript
getAllUserGroup: (params: GetAllUserGroupParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.getAllUserGroup().then(() => {
console.log('getAllUserGroup success!');
}).catch((err) => {
console.error('getAllUserGroup Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [GetAllUserGroupParams](#GetAllUserGroupParams-对象类型) | 获取当前用户的所有群组的参数 |
##### `GetAllUserGroupParams`-对象类型
获取当前用户的所有群组的参数
``` typescript
interface GetAllUserGroupParams {
typeArr?: (1|3|4)[];
}
```
###### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| ?typeArr | (1|3|4)[] | 群组类型数组, 1内部群,3事件群(默认查询所有),4外部群) |
#### 返回值
```typescript
Promise<DefaultResponse<GetAllUserGroupResItem[]>>
```
##### `GetAllUserGroupResItem`-对象类型
```typescript
interface AllUserGroupItemTypes {
"id": string,
"name": string,
"avatar": string,
"ownerId": string,
"maxCount": number,
"isReview": 0|1,
"groupType": GroupTypeEnum,
"appId": string,
"createTime": number,
"defaultType": 0|1|2|3,
"defaultAccounts": string,
"num": number,
"invitedToggle": 0|1,
"atallToggle": 0|1
}
```
###### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| id | string | 群组Id |
| name | string | 群组名称 |
| avatar | string | 群组头像 |
| ownerId | string | 群主ID |
| maxCount | number | 人数上限 |
| isReview | 0|1 | 用户状态: 1需要审核,0不需要审核 |
| groupType | GroupTypeEnum | 群组类型 1内部群,3事件群,4外部群 |
| appId | string | 应用ID |
| createTime | number | 建群时间 |
| defaultType | 0|1|2|3 | 群组的默认类型:0名字头像都是自定义, 1名字默认头像自定义, 2名字是自定义头像是默认, 3都是默认 |
| defaultAccounts | string | 组成默认信息的人员id |
| num | number | 群人数 |
| invitedToggle | 0|1 | 邀请开关 |
| atallToggle | 0|1 | @all开关 |
---
### 修改群信息: `modifyGroup`
修改群信息
#### 类型定义
```typescript
modifyGroup: (params: ModifyGroupParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.modifyGroup({
groupType: 1,
groupId: '123123',
}).then(() => {
console.log('getAllUserGroup success!');
}).catch((err) => {
console.error('getAllUserGroup Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [ModifyGroupParams](#ModifyGroupParams-对象类型) | 修改群信息的参数 |
#### `ModifyGroupParams`-对象类型
修改群信息的参数
``` typescript
interface ModifyGroupParams {
groupType: GroupTypeEnum,
groupId: string,
groupName?: string,
avatar?: string,
isReview?: 0|1,
notice?: string
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群组类型枚举 |
| groupId | string | 群组ID |
| ?groupName | string | 群组名称 |
| ?avatar | string | 群组头像 |
| ?isReview | 0|1 | 是否需要审批 1需要审核,0不需要审核 |
| ?notice | string | 群通知 |
#### 返回值
```typescript
Promise<DefaultResponse>
```
---
### @All功能设置: `setGroupAtAllToggle`
切换@All的设置
#### 类型定义
```typescript
setGroupAtAllToggle: (params: SetGroupAtAllToggleParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.setGroupAtAllToggle({
groupType: 1,
groupId: '123123',
toggle: 1
}).then(() => {
console.log('setGroupAtAllToggle success!');
}).catch((err) => {
console.error('setGroupAtAllToggle Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [SetGroupAtAllToggleParams](#SetGroupAtAllToggleParams-对象类型) | 切换@All的设置的参数 |
##### `SetGroupAtAllToggleParams`-对象类型
切换@All的设置的参数
``` typescript
interface SetGroupAtAllToggleParams {
groupType: GroupTypeEnum,
groupId: string,
toggle: 0|1
}
```
###### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群组类型枚举 |
| groupId | string | 群组ID |
| toggle | 0|1 | @All的设置 是否开启@All |
#### 返回值
```typescript
Promise<DefaultResponse>
```
---
### 邀请群成员权限设置: `setGroupInvitedToggle`
更改邀请群成员的设置
#### 类型定义
```typescript
setGroupInvitedToggle: (params: SetGroupInvitedToggleParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.setGroupInvitedToggle({
groupType: 1,
groupId: '123123',
toggle: 1
}).then(() => {
console.log('setGroupInvitedToggle success!');
}).catch((err) => {
console.error('setGroupInvitedToggle Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [SetGroupInvitedToggleParams](#SetGroupInvitedToggleParams-对象类型) | 更改邀请群成员的参数 |
##### `SetGroupInvitedToggleParams`-对象类型
更改邀请群成员的参数
``` typescript
interface SetGroupInvitedToggleParams {
groupType: GroupTypeEnum,
groupId: string,
toggle: 0|1
}
```
###### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群组类型枚举 |
| groupId | string | 群组ID |
| toggle | 0|1 | 是否允许邀请 |
#### 返回值
```typescript
Promise<DefaultResponse>
```
---
### 获取群的简要信息: `getGroupIntro`
获取群的简要信息
#### 类型定义
```typescript
getGroupIntro: (params: GetGroupIntroParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.getGroupIntro({
groupType: 1,
groupId: '123123'
}).then(() => {
console.log('getGroupIntro success!');
}).catch((err) => {
console.error('getGroupIntro Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [GetGroupIntroParams](#GetGroupIntroParams-对象类型) | 获取群的简要信息的参数 |
##### `GetGroupIntroParams`-对象类型
获取群的简要信息的参数
``` typescript
interface GetGroupIntroParams {
groupType: GroupTypeEnum,
groupId: string,
}
```
###### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群组类型枚举 |
| groupId | string | 群组ID |
#### 返回值
```typescript
Promise<DefaultResponse<GetAllUserGroupResItem>>
```
| 参数 | 类型 | 说明|
| --- | --- | --- |
| GetAllUserGroupResItem | [GetAllUserGroupResItem](#GetAllUserGroupResItem-对象类型) | 群组信息对象 |
---
### 获取群组的详细信息: `getGroupDetail`
获取群组的详细信息
#### 类型定义
```typescript
getGroupDetail: (params: GetGroupDetailParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.getGroupDetail({
groupType: 1,
groupId: '123123'
}).then(() => {
console.log('getGroupDetail success!');
}).catch((err) => {
console.error('getGroupDetail Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [GetGroupDetailParams](#GetGroupDetailParams-对象类型) | 获取群组的详细信息的参数 |
##### `GetGroupDetailParams`-对象类型
获取群组的详细信息的参数
``` typescript
interface GetGroupDetailParams {
groupType: GroupTypeEnum,
groupId: string,
}
```
###### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群组类型枚举 |
| groupId | string | 群组ID |
#### 返回值
```typescript
Promise<DefaultResponse<GetGroupDetailRes>>
```
##### `GetGroupDetailRes`-对象类型
```typescript
interface GetGroupDetailRes extends GetAllUserGroupResItem {
groupMembers: GroupMemberItemType[],
groupEventExplain?: GroupEventExplainType
}
```
###### 对象成员
该对象继承了[GroupMemberItemType](#GroupMemberItemType-对象类型)对象,继承过来的属性将不再描述
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupMembers | [GroupMemberItemType](#GroupMemberItemType-对象类型)[] | 群组成员列表 |
| ?groupEventExplain | [GroupEventExplainType](#GroupEventExplainType-对象类型) | 群公告信息 |
---
### 获取群组的详细信息 - 列表获取: `getGroupDetailList`
获取群组的详细信息 - 列表获取
#### 类型定义
```typescript
getGroupDetailList: (params: GetGroupListDetailParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.getGroupDetailList({
groupType: 1,
groupIds: ['123123', '22342342121']
}).then(() => {
console.log('getGroupDetail success!');
}).catch((err) => {
console.error('getGroupDetail Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [GetGroupListDetailParams](#GetGroupListDetailParams-对象类型) | 获取群组的详细信息 - 列表获取的参数 |
##### `GetGroupDetailParams`-对象类型
获取群组的详细信息 - 列表获取的参数
``` typescript
interface GetGroupDetailParams {
groupType: GroupTypeEnum,
groupIds: string[],
}
```
###### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群组类型枚举 |
| groupIds | string[] | 群组ID数组 |
---
### 搜索群组: `searchGroups`
通过群组名称和群组类型来搜索当前用户拥有的群组
#### 类型定义
```typescript
searchGroups: (params: SearchGroupsParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.searchGroups({
groupName: 'hello'
}).then(() => {
console.log('searchGroups success!');
}).catch((err) => {
console.error('searchGroups Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [SearchGroupsParams](#SearchGroupsParams-对象类型) | 查询匹配条件的群组的参数 |
##### `SearchGroupsParams`-对象类型
查询匹配条件的群组的参数
``` typescript
interface SearchGroupsParams {
groupName: string,
typeJsonArray: (0|1|2|3)[],
}
```
###### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupName | string | 查询条件-群组名称 |
| ?typeJsonArray | (0|1|2|3)[] | 群组类型数组,0私密群,1公开群,2讨论组,3事件群(默认查询所有 |
---
### 邀请加入: `inviteJoinGroup`
邀请加入群聊
#### 类型定义
```typescript
inviteJoinGroup: (params: InviteGroupParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.inviteJoinGroup({
groupType: '1',
groupId: '123123123',
userIds: ['9572', '9528'],
}).then(() => {
console.log('inviteJoinGroup success!');
}).catch((err) => {
console.error('inviteJoinGroup Error! err:', err);
})
```
#### 方法参数
| 参数 | 类型 | 说明|
| --- | --- | --- |
| params | [InviteGroupParams](#InviteGroupParams-对象类型) | 加入群组的参数 |
##### `JoinGroupParams`-对象类型
加入群组的参数
``` typescript
interface JoinGroupParams {
groupType: GroupTypeEnum,
groupId: string,
userIds: string[]
}
```
###### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupId | string | 要加入的群组ID |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群聊类型 |
| members | string[] | 邀请人员 |
#### 返回值
```typescript
Promise<DefaultResponse>
```
---
### 转让群主: `changeGroupOwner`
转让群主
#### 类型定义
```typescript
changeGroupOwner: (params: ChangeOwnerParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.changeGroupOwner({
groupType: 1,
groupId: '123123',
newOwnerId: '9528'
}).then(() => {
console.log('changeGroupOwner success!');
}).catch((err) => {
console.error('changeGroupOwner Error! err:', err);
});
```
#### 方法参数
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| params | [ChangeOwnerParams](#ChangeOwnerParams-对象类型) | 加入群组的参数 |
##### `ChangeOwnerParams`-对象类型
加入群组的参数
``` typescript
interface ChangeOwnerParams {
groupType: GroupTypeEnum,
groupId: string,
newOwnerId: string,
}
```
###### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群聊类型 |
| groupId | string | 要加入的群组ID |
| newOwnerId | string | 要变更为群主的人员ID |
#### 返回值
```typescript
Promise<DefaultResponse>
```
---
### 获取群组管理员: `getGroupManagers`
获取群组管理员
#### 类型定义
```typescript
getGroupManagers: (params: GetGroupManagerParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.getGroupManagers({
groupType: 1,
groupId: '123123',
}).then(() => {
console.log('getGroupManagers success!');
}).catch((err) => {
console.error('getGroupManagers Error! err:', err);
});
```
#### 方法参数
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| params | [GetGroupManagerParams](#GetGroupManagerParams-对象类型) | 获取群组管理员的参数 |
##### `GetGroupManagerParams`-对象类型
获取群组管理员的参数
``` typescript
interface GetGroupManagerParams {
groupType: GroupTypeEnum,
groupId: string,
}
```
###### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群聊类型 |
| groupId | string | 获取群组管理员的群组ID |
#### 返回值
```typescript
Promise<DefaultResponse<GroupMemberItemType>>
```
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupMemberItemType](#GroupMemberItemType-对象类型) | 群聊类型 |
---
### 获取群组成员Id集合: `getGroupMemberIds`
获取群组成员Id集合
#### 类型定义
```typescript
getGroupMemberIds: (params: GetGroupMemberIdsParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.getGroupMemberIds({
groupType: 1,
groupId: '123123',
}).then(() => {
console.log('getGroupMemberIds success!');
}).catch((err) => {
console.error('getGroupMemberIds Error! err:', err);
});
```
#### 方法参数
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| params | [GetGroupMemberIdsParams](#GetGroupMemberIdsParams-对象类型) | 获取群组成员Id集合的参数 |
#### `GetGroupMemberIdsParams`-对象类型
获取群组成员Id集合的参数
``` typescript
interface GetGroupMemberIdsParams {
groupType: GroupTypeEnum,
groupId: string,
}
```
##### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群聊类型 |
| groupId | string | 获取群组成员Id集合的群组ID |
#### 返回值
```typescript
Promise<DefaultResponse<string[]>>
```
---
### 获取群组成员集合: `getGroupMemberList`
获取群组成员集合
#### 类型定义
```typescript
getGroupMemberList: (params: GetGroupMemberListParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.getGroupMemberList({
groupType: 1,
groupId: '123123',
}).then(() => {
console.log('getGroupMemberList success!');
}).catch((err) => {
console.error('getGroupMemberList Error! err:', err);
});
```
#### 方法参数
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| params | [GetGroupMemberListParams](#GetGroupMemberListParams-对象类型) | 获取群组成员集合的参数 |
#### `GetGroupMemberListParams`-对象类型
获取群组成员集合的参数
``` typescript
interface GetGroupMemberListParams {
groupType: GroupTypeEnum,
groupId: string,
}
```
##### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群聊类型 |
| groupId | string | 获取群组成员集合的群组ID |
#### 返回值
```typescript
Promise<DefaultResponse<GroupMemberItemType[]>>
```
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupMemberItemType](#GroupMemberItemType-对象类型) | 群聊类型 |
---
### 将人员移出群聊: `deleteGroupMember`
将人员移出群聊
#### 类型定义
```typescript
deleteGroupMember: (params: DeleteGroupMemberParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.deleteGroupMember({
groupType: 1,
groupId: '123123',
userIds: ['9527', '9528']
}).then(() => {
console.log('deleteGroupMember success!');
}).catch((err) => {
console.error('deleteGroupMember Error! err:', err);
});
```
#### 方法参数
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| params | [DeleteGroupMemberParams](#DeleteGroupMemberParams-对象类型) | 将人员移出群聊的参数 |
#### `DeleteGroupMemberParams`-对象类型
将人员移出群聊的参数
``` typescript
interface DeleteGroupMemberParams {
groupType: GroupTypes.GroupTypeEnum,
groupId: string,
userIds: string[]
}
```
##### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群聊类型 |
| groupId | string | 将人员移出群聊群组ID |
| userIds | string[] | 需要移出的人员Id列表 |
#### 返回值
```typescript
Promise<DefaultResponse>
```
---
### 退出群组: `quitGroup`
当前用户操作 - 退出群组
#### 类型定义
```typescript
quitGroup: (params: QuitGroupParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.quitGroup({
groupType: 1,
groupId: '123123',
}).then(() => {
console.log('quitGroup success!');
}).catch((err) => {
console.error('quitGroup Error! err:', err);
});
```
#### 方法参数
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| params | [QuitGroupParams](#QuitGroupParams-对象类型) | 退出群组的参数 |
#### `QuitGroupParams`-对象类型
退出群组的参数
``` typescript
interface QuitGroupParams {
groupType: GroupTypes.GroupTypeEnum,
groupId: string,
}
```
##### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群聊类型 |
| groupId | string | 退出群组的群组ID |
#### 返回值
```typescript
Promise<DefaultResponse>
```
---
### 修改群成员角色: `setGroupMemberRole`
修改群成员角色
#### 类型定义
```typescript
setGroupMemberRole: (params: SetGroupMemberRoleParams) => Promise<any>
```
#### Demo 例子🌰
```javascript
SIMInstance.Group.setGroupMemberRole({
groupType: 1,
groupId: '123123',
managerIds: ['9527', '9528'],
type: 1
}).then(() => {
console.log('setGroupMemberRole success!');
}).catch((err) => {
console.error('setGroupMemberRole Error! err:', err);
});
```
#### 方法参数
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| params | [SetGroupMemberRoleParams](#SetGroupMemberRoleParams-对象类型) | 设置群成员角色的参数 |
#### SetGroupMemberRoleParams-对象类型
修改群成员角色的参数
``` typescript
interface SetGroupMemberRoleParams {
groupType: GroupTypes.GroupTypeEnum,
groupId: string,
managerIds: string[],
type: 1|2,
}
```
##### 对象成员
| 参数 | 类型 | 说明 |
| --- | --- | --- |
| groupType | [GroupTypeEnum](#GroupTypeEnum-对象类型) | 群聊类型 |
| groupId | string | 退出群组的群组ID |
| managerIds | string[] | 需要操作的人员ID |
| type | 1|2 | 1设置管理员,2取消管理员 |
#### 返回值
```typescript
Promise<DefaultResponse>
```
---
### 群组模块通用接口类型定义
#### `GroupTypeEnum`-对象类型
群组类型枚举
``` typescript
export enum GroupTypeEnum {
InnerGroup= 1,
EventGroup = 3,
OuterGroup = 4,
OrgGroup = 5,
MeetingGroup = 6
}
```
##### 对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| GroupTypeEnum | 1|3|4|5|6 | 群组类型数组, 1内部群,3事件群,4外部群,5组织群,6会议群聊 |
---
#### `GroupMemberItemType`-对象类型
群成员信息
``` typescript
interface GroupMemberItemType {
"appId": string,
"groupId": string,
"userId": string,
"role": GroupUserRoleEnum,
"nickname": string,
"petName": string,
"nicknamePy": string,
"disturb": 0,
"delFlag": 0,
"createTime": number,
"updateTime": number,
"beInviteId"?: string,
beOwnerTime?: string,
}
```
##### `GroupMemberItemType`-对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| appId | number | 租户ID |
| groupId | string | 群ID |
| userId | string | 用户ID |
| role | GroupUserRoleEnum | 用户角色(0群主,1管理员,2普通用户) |
| userId | string | 用户ID |
| nickname | string | 群成员昵称 |
| petName | string | 用户昵称 |
| nicknamePy | string | 用户昵称拼音 |
| disturb | 0|1 | 免打扰(1表示消息免打扰) |
| delFlag | 0|1 | 删除标识,0代表为删除,1代表已删除 |
| createTime | number | 创建时间(加入时间) |
| updateTime | number | 修改时间 |
| ?beInviteId | string | 本人被谁邀请进群的(非邀请的情况,本字段则可为空) |
| ?beOwnerTime | string | 如是群的被转让人,本字段填的就是最近一次被转让时的时间 |
---
#### `GroupEventExplainType`-对象类型
群公告消息
``` typescript
interface GroupEventExplainType {
/** 建群人-account */
"createBy": string,
/** 建群人-name */
"createName": string,
/** 建群时间 */
"createTime": number,
/** 是否解散:0正常,1解散 */
"delFlag": boolean,
/** 附件地址JSON数组格式 */
"fileInfo": string,
/** 群组ID */
"groupId": string,
/** 事件ID */
"id": string,
/** 图片地址JSON数组格式 */
"imageInfo": string,
/** 文字内容 */
"text": string
}
```
##### `GroupEventExplainType`-对象成员
| 参数 | 类型 | 说明|
| --- | --- | --- |
| createBy | string | 建群人-account |
| createName | string | 建群人-name |
| createTime | string | 建群时间 |
| delFlag | 0|1 | 用户角色是否解散:0