圈组系统通知收发
更新时间: 2024/03/14 19:21:15
圈组系统通知是用户在使用圈组功能的过程中,由云信 IM 下发给用户相关事件的通知,比如圈组服务器中的成员变更,频道变更等事件。
功能介绍
圈组内置系统通知只能通过具体事件触发,由云信 IM 发送给相关的圈组用户。用户只需注册圈组系统通知的相关监听,就能接收到对应的系统通知。
圈组自定义系统通知支持用户主动发送,并可以指定发送给全员或部分成员。
云信 IM SDK 的 QChatMsgServiceInterface
接口提供管理圈组系统通知的相关方法,帮助您快速实现对圈组系统通知的管理。
NIM SDK 中的 QChatSystemNotification
类定义了圈组的系统通知,其内置方法如下:
单击展开查看 QChatSystemNotification 的参数
参数 |
类型 |
说明 |
---|---|---|
channelId |
String | 系统通知所属的频道的 ID |
attach |
String | 系统通知的附加信息,包括以下内容:
|
ext |
String | 自定义系统通知可追加的扩展字段 |
fromAccount |
String | 系统通知发送方的用户账号 ID |
fromClientType |
TClientType |
系统通知发送方的设备类型 |
fromDeviceId |
String | 系统发送端设备 ID |
fromNick |
String | 系统通发送方的昵称 |
msgIdClient |
String | 客户端生成的系统通知 ID,自定义的系统通知里才存在,可用于去重可做去重 |
msgIdServer |
String | 服务器生成的系统通知 ID,全局唯一 |
needBadge |
Boolean | 是否需要消息计数 |
needPushNick |
Boolean | 是否需要推送昵称 |
persistEnable |
Boolean | 是否存离线,只有 toAccids 不为空,才能设置为存离线,默认为 false |
pushContent |
String | 自定义推送文案 |
pushEnable |
Boolean | 是否需要推送,默认 false |
pushPayload |
StrAnyObj |
第三方自定义的推送属性,JSON |
resendFlag |
Boolean | 是否为重发的系统通知 |
serverId |
String | 系统通知所属的圈组服务器的 ID |
status |
Number | 系统通知状态,默认为 0。大于 10,000 为用户自定义的状态 |
time |
Number | 系统通知发送成功的时间戳(毫秒) |
toAccids |
String | 系统通知接收者账号列表,JSONArray |
type |
TSystemMessageType |
系统通知类型,字符串,具体的系统通知类型可参考 ESystemMessageType |
updateTime |
Number | 系统通知更新时间戳 |
实现方法
本文以服务器所有者(即创建者)和服务器成员的交互为例,介绍服务器所有者发送圈组自定义系统通知的实现流程和触发内置圈组系统通知的实现流程。
前提条件
- 已接入圈组,并已创建圈组服务器。
- 已创建云信 IM 账号,作为下文中服务器所有者和服务器成员的云信 IM 账号。
如果用户所在服务器的成员人数超过 2000 人阈值,该用户还需先订阅相应的服务器或频道,才能收到对应服务器或频道的系统通知。如未超过该阈值,则无需订阅。订阅相关说明,请参见圈组订阅机制。
实现流程
以下只对部分重要步骤进行说明:
- 服务器成员通过初始化注册监听
systemNotification
监听圈组系统通知的接收。
示例代码:
const qchat = new QChatSDK({
...
})
qchat.on('systemNotification', function (systemNotification) {
console.log('receive a systemNotification', systemNotification)
})
await qchat.login()
- 服务器所有者通过调用
sendSystemNotification
发送圈组自定义系统通知。
其中 SendSystemNotificationOptions
是发送圈组自定义系统通知入参,通过入参的不同来进行区分,通知给不同的对象:
通知的对象 | 涉及的入参 |
---|---|
通知给圈组服务器全员 | serverId(服务器 ID) |
通知给圈组服务器中的某个频道全员 | serverId(服务器 ID),channelId(频道 ID) |
通知给圈组服务器中的部分成员 | serverId(服务器 ID),toAccids(通知的服务器成员列表) |
通知给圈组服务器中的某个频道中的部分成员 | serverId(服务器 ID),channelId(频道 ID),toAccids(通知的频道成员列表) |
示例代码:
// 通知给圈组服务器全员
await qchat.qchatMsg.sendSystemNotification({
"serverId": "{{YOUR_SERVER_ID}}",
"body": "notify all member from server"
})
// 通知给圈组服务器中的某个频道全员
await qchat.qchatMsg.sendSystemNotification({
"serverId": "{{YOUR_SERVER_ID}}",
"channelId": "{{YOUR_CHANNEL_ID}}",
"body": "notify all member from channel"
})
// 通知给圈组服务器中的部分成员
await qchat.qchatMsg.sendSystemNotification({
"serverId": "{{YOUR_SERVER_ID}}",
"toAccids": ["YOUR_ACCOUNT_ID1", "YOUR_ACCOUNT_ID2"],
"body": "notify some member from server"
})
// 通知给圈组服务器中的某个频道中的部分成员
await qchat.qchatMsg.sendSystemNotification({
"serverId": "{{YOUR_SERVER_ID}}",
"channelId": "{{YOUR_CHANNEL_ID}}",
"toAccids": ["YOUR_ACCOUNT_ID1", "YOUR_ACCOUNT_ID2"],
"body": "notify some member from channel"
})
-
服务器成员收到来自服务器所有者的自定义系统通知。
-
服务器成员通过调用
markSystemNotificationsRead
标记圈组系统通知已读。
标记已读后的系统通知将从服务端删除,后续不会在其他端接收。
示例代码:
const qchat = new QChatSDK({
...
})
qchat.on('systemNotification', async function (systemNotification) {
console.log('receive a systemNotification', systemNotification)
await qchat.qchatMsg.markSystemNotificationsRead({
systemNotifications: systemNotifications
})
console.log('mark success')
})
await qchat.login()
- 服务器所有者调用
deleteServer
方法删除圈组服务器。
示例代码:
const qchat = new QChat(options);
qchat.qchatServer.deleteServer({
"serverId": "123456",
})
- 服务器所有者和服务器成员收到系统投递的内置系统通知。
该示例收到类型为“删除服务器”的系统通知,更多事件类型和相应的通知接收条件,请参见圈组系统通知分类和圈组系统通知接收机制。
- (可选)如果因为网络等原因,自定义系统通知发送失败,用户可以调用
sendSystemNotification
方法,将系统通知的resendFlag
设置为true
,重新发送圈组自定义系统通知。 示例代码如下:
//重新发送
await qchat.qchatMsg.sendSystemNotification({
"serverId": "{{YOUR_SERVER_ID}}",
"body": "notify all member from server"
"resendFlag": "true"
})
API
API | 说明 |
---|---|
systemNotification |
圈组系统通知接收事件 |
sendSystemNotification |
发送圈组系统通知 |
markSystemNotificationsRead |
标记圈组系统通知已读 |
deleteServer |
删除圈组服务器 |