子区消息属于群聊消息类,与普通群消息的区别是需要添加 isChatThread
标记。本文介绍即时通讯 IM Web SDK 如何发送、接收、撤回以及获取子区消息。
即时通讯 IM Web SDK 支持你通过调用 API 在项目中实现如下功能:
消息收发流程如下图所示:
开始前,请确保满足以下条件:
每个版本的套餐包都支持子区功能。在声网控制台中启用即时通讯服务后默认开启子区功能。
本节介绍如何使用即时通讯 IM SDK 提供的 API 实现上述功能。
发送子区消息和发送群组消息的方法基本一致,区别在于 isChatThread
字段,如以下示例代码所示:
// 在子区内发送文本消息
function sendTextMessage() {
let option = {
chatType: 'groupChat', // 会话类型,设置为群聊。
type: 'txt', // 消息类型。
to: chatThreadId, // 消息接收方(子区 ID)。
msg: 'message content' // 消息内容。
isChatThread:true, // 子区消息标记。
}
let msg = WebIM.message.create(option);
connection.send(msg).then(() => {
console.log('send text message success');
}).catch((e) => {
console.log("send text message error");
})
};
关于发送消息的逻辑,详见发送消息。
子区有新消息时,子区所属群组的所有成员收到 onChatThreadChange
回调,事件为 update
。子区成员也可以通过监听 onTextMessage
回调接收子区消息,如以下代码示例所示:
// 监听收到的文本消息
connection.addEventHandler('THREADMESSAGE',{
onTextMessage:(message) =>{
if(message.chatThread && JSON.stringify(message.chatThread)!=='{}'){
console.log(message)
// 接收到子区消息,添加处理逻辑。
}
},
});
关于接收消息的逻辑,详见接收消息。
子区有消息撤回时,子区所属群组的所有成员收到 onChatThreadChange
回调,事件为 update
。子区成员也可以监听 onRecallMessage
回调,如下代码示例所示:
let option = {
mid: 'msgId',
to: 'userID',
chatType: 'groupChat'
isChatThread: true
};
connection.recallMessage(option).then((res) => {
console.log('success', res)
}).catch((error) => {
// 消息撤回失败 (超过 2 分钟)。
console.log('fail', error)
})
// 监听要撤回的消息:
conn.addEventHandler('MESSAGES',{
onRecallMessage: => (msg) {
// 接收到子区消息被撤回,添加处理逻辑。
console.log('撤回成功',msg)
},
})
关于撤回消息的逻辑,详见撤回消息。
关于如何从服务器获取子区消息,详见从服务器获取历史消息。