发送消息
本文介绍了如何从客户端 SDK 发送消息,适用于单聊、群聊、聊天室场景。
- 客户端 SDK 发送消息存在频率限制,每秒最多只能发送 5 条消息。
- 2026 年 5 月 29 日起,新注册客户的除图片消息(
RC:ImgMsg)、流式消息(RC:StreamMsg)、语音消息(RC:VcMsg)、视频消息(RC:SightMsg)、位置消息(RC:LBSMsg)、合并转发消息(RC:CombineV2Msg,RC:CombineMsg)、引用消息(RC:ReferenceMsg)外,其他消息的content消息体大小限制不超过 10 KB。实际限制以连接成功后getAppSettings返回的AppSettings.messageSizeLimit为准。消息体大小按消息content序列化为 JSON 后的字节数计算。
发送消息
sendMessage 是 IMLib 中发送消息的基础接口,支持发送内置消息类型及自定义消息类型。针对不同的特定消息类型,IMLib 还提供了多个便于调用的语法糖方法。
接口
RongIMLib.sendMessage(conversation, message, options)
参数说明
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
conversation | IConversationOption | 是 | 目标会话 |
message | BaseMessage | 是 | 待发送的消息实例。类型为 BaseMessage 的子类,可为 IMLib 内置消息(如 RongIMLib.TextMessage)或通过 RongIMLib.registerMessageType() 自定义的消息实例 |
options | ISendMessageOptions | 否 | 发送配置项。定义发送行为中的一些可选配置,如是否可拓展,推送等 |
示例
以下示例演示如何调用 sendMessage 向群聊中发送一条 @ 张三的文本消息。
1. 定义目标会话及消息内容
因为发送的是群聊 @ 消息,所以需要添加 mentionedInfo。
// 定义消息投送目标会话, 这里定义一个群组类型会话
const conversation = { conversationType: RongIMLib.ConversationType.GROUP, targetId: '<目标 Id>' }
// 实例化待发送消息,RongIMLib.TextMessage 为内置文本型消息
const message = new RongIMLib.TextMessage({
// 文本内容
content: '文本内容',
// (可选)消息中附加信息,透传到对端
extra: '消息中附加信息',
// 群组消息中,如果需要发送 @ 消息,可添加 mentionedInfo 字段
mentionedInfo: {
// @ 类型:全部、个人
type: RongIMLib.MentionedType.SINGAL,
// @ 用户列表
userIdList: ['zhangsan'],
// @ 内容
mentionedContent: ''
}
})
2. 配置发送选项
构建 ISendMessageOptions 配置项,用于定义发送行为。例如群聊 @ 消息需将 isMentioned 设为 true。
// 配置属性
const options = {
// 如果需要发送 @ 消息,isMentioned 需设置为 true
isMentioned: true,
// 消息发送前的回调,可以使用此回调返回的 message 用于列表渲染
onSendBefore: (message) => {
console.log('消息发送前的回调', message)
}
}
3. 调用发送方法
调用 sendMessage 发送消息,并根据返回结果中的 messageId 更新消息状态。
// 发送消息
RongIMLib.sendMessage(conversation, message, options).then(res => {
if (res.code === RongIMLib.ErrorCode.SUCCESS) {
// 消息发送 成功,可以根据返回结果中的 messageId 字段将列表中的该消息状态改为发送成功。
console.log('消息发送成功', res.data)
} else {
console.log('消息发送失败', res.code, res.msg)
}
})
4. 处理消息发送失败
若发送失败,可根据返回结果中的 messageId 将消息状态标记为失败,并提供重发操作。
- 若消息未送达融云服务器,或服务器返回失败,接收方将无法收到消息。
- 在弱网等极端环境下,消息可能已成功送达对方,但发送端未收到回执而超时认定失败。此时若客户端重发,收件方可能会收到重复消息。详见 FAQ。
5. 重发消息
重发时需保持消息内容与原消息一致。
自 SDK 5.5.1 起,支持在 options 中指定原消息的 messageId,用于判重。融云服务端本身不去重,应用层可依据该 ID 判断是否为重复消息。messageId 可从 onSendBefore 回调返回的 message 或发送结果中获取。
// 定义消息投送目标会话, 这里定义一个群组类型会话
const conversation = { conversationType: RongIMLib.ConversationType.GROUP, targetId: '<目标 Id>' }
// 实例化待发送消息,RongIMLib.TextMessage 为内置文本型消息
const message = new RongIMLib.TextMessage({ content: '文本内容' })
// 配置属性
const options = {
// 重发消息的 messageId, 可以从 onSendBefore 回调返回的 message 对象中 或 返回结果中获取
messageId: 0
}
RongIMLib.sendMessage(conversation, message, options).then(res => {
if (res.code === RongIMLib.ErrorCode.SUCCESS) {
// 消息发送成功,可以根据返回结果中的 messageId 字段将列表中的该消息状态改为发送成功。
console.log('消息发送成功', res.data)
} else {
// 消息发送失败,可以根据返回结果中的 messageId 字段将列表中的该消息状态改为发送失败。
console.log('消息发送失败', res.code, res.msg)
}
})
sendMessage 接口说明
sendMessage 方法接收 conversation、message、options 三个参数。
-
conversation定义目标会话。详见IConversationOption。参数 类型 说明 conversationTypeConversationType会话类型 targetIdstring接收方 Id -
message是待发送的消息内容,支持 IMLib 内置消息(例如RongIMLib.TextMessage)实例,或者通过RongIMLib.registerMessageType()实现的自定义消息实例。 -
options定义发送行为中的一些可选配置,如是否可拓展,推送等。参见 ISendMessageOptions参数 类型 说明 isStatusMessageboolean(已废弃)是否为状态消息(可选项) disableNotificationboolean是否发送静默消息(可选项) pushContentstringPush 信息(可选项) pushDatastringPush 通知携带的附加信息(可选项) isMentionedboolean是否为 @ 消息。仅在 conversationType取值为群组或超级群类型时有效(可选项)mentionedType1|2(已废弃) @ 消息类型,1: @ 所有人 2: @ 指定用户(可选项) 已废弃 mentionedUserIdListstring[](