UNPKG

thunbu-im-sdk

Version:

thunbu IM JSSDK

2,487 lines (1,868 loc) 89.4 kB
# 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&#124;1&#124;2&#124;3&#124;4&#124;5&#124;6&#124;7&#124;8&#124;9&#124;10&#124;11&#124;12&#124;255 | 0: txt 文本文件,匹配`txt` <br>1: word文件,匹配`doc&#124;docx&#124;docm&#124;dot&#124;dotx&#124;wps` <br>2: Excel文件,匹配`xls&#124;xlsx&#124;xlsm&#124;xlt&#124;csv` <br>3: 图片文件,匹配`jpg&#124;jpeg&#124;jp2&#124;png&#124;svg&#124;bmp&#124;gif&#124;iff&#124;pcx&#124;pixar&#124;pxr&#124;tiff&#124;cal` <br>4: pdf 文件,匹配`pdf` <br>5: ppt 文件,匹配`ppt&#124;pptx&#124;pps&#124;ppsm` <br>6: 压缩文件,匹配`rar&#124;ace&#124;ari&#124;arc&#124;ar&#124;arj&#124;bz&#124;bza&#124;bz2&#124;car&#124;dar&#124;gca&#124;gz&#124;jar&#124;taz&#124;tar&#124;exe&#124;zip&#124;7z&#124;zz` <br>7: html文件,匹配`html&#124;htm` <br>8: mp4文件,匹配`mp4` <br>9: mp3文件,匹配`mp3` <br>10: 思维导图文件,匹配`mmap&#124;xmind&#124;mm` <br>11: Ai文件,匹配`ai&#124;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&#124;1 |安全类型,0-普通,1-密聊 | | chatType | [ChatTypeEnum](#chattypeenum-枚举类型) | 会话类型 | | cross | 0&#124;1 | 是否跨域 | | type | SendNormalMsgTypeEnum | 消息类型 | | ?domain | SendMsgDomainType | 消息扩展字段 | | ?time | number | 发送时间 | | ?groupType | 0&#124;1&#124;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&#124;1&#124;255 | 0-JPG,1-PNG,225-未知类型 | | imageList | object[] | 图片信息 | | imageList[0].type | 0&#124;1&#124;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&#124;1&#124;255 | 0-JPG,1-PNG,225-未知类型 | | imageList | object[] | 图片信息 | | imageList[0].type | 0&#124;1&#124;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&#124;1&#124;2&#124;3&#124;4&#124;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&#124;1 | 密聊类型 | | cross | 0&#124;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&#124;1 | 密聊类型 | | cross | 0&#124;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&#124;1 | 密聊类型 | | cross | 0&#124;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&#124;1 | 密聊类型 | | cross | 0&#124;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&#124;1&#124;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&#124;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&#124;3&#124;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&#124;1 | 用户状态: 1需要审核,0不需要审核 | | groupType | GroupTypeEnum | 群组类型 1内部群,3事件群,4外部群 | | appId | string | 应用ID | | createTime | number | 建群时间 | | defaultType | 0&#124;1&#124;2&#124;3 | 群组的默认类型:0名字头像都是自定义, 1名字默认头像自定义, 2名字是自定义头像是默认, 3都是默认 | | defaultAccounts | string | 组成默认信息的人员id | | num | number | 群人数 | | invitedToggle | 0&#124;1 | 邀请开关 | | atallToggle | 0&#124;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&#124;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&#124;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&#124;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&#124;1&#124;2&#124;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&#124;2 | 1设置管理员,2取消管理员 | #### 返回值 ```typescript Promise<DefaultResponse> ``` --- ### 群组模块通用接口类型定义 #### `GroupTypeEnum`-对象类型 群组类型枚举 ``` typescript export enum GroupTypeEnum { InnerGroup= 1, EventGroup = 3, OuterGroup = 4, OrgGroup = 5, MeetingGroup = 6 } ``` ##### 对象成员 | 参数 | 类型 | 说明| | --- | --- | --- | | GroupTypeEnum | 1&#124;3&#124;4&#124;5&#124;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&#124;1 | 免打扰(1表示消息免打扰) | | delFlag | 0&#124;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&#124;1 | 用户角色是否解散:0