发送消息
本文介绍了如何从客户端发送消息,适用于单聊、群聊、聊天室。
- 客户端 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 中的内置类型消息或自定义消息。
以调用 sendMessage 往群聊中发送 @张三的文本消息为例。
-
定义目标群聊会话,并实例化待发送消息。因为 发送的是群聊 @ 消息,所以需要添加
mentionedInfo。JavaScript// 定义消息投送目标会话, 这里定义一个群组类型会话
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: ''
}
}) -
构造发送选项
ISendMessageOptions,用于定义发送行为中的一些可选配置。因为发送的是群聊 @ 消息,必须将options中的isMentioned设置为true。JavaScript// 配置属性
const options = {
// 如果需要发送 @ 消息,isMentioned 需设置为 true
isMentioned: true,
// 消息发送前的回调,可以使用此回调返回的 message 用于列表渲染
onSendBefore: (message) => {
console.log('消息发送前的回调', message)
}
} -
发送消息。如果消息发送成功,可以根据返回结果中的
messageId字段将列表中的该消息状态改为发送成功。JavaScript// 发送消息
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)
}
}) -
如果消息发送失败,可以根据返回结果中的
messageId字段将列表中的该消息状态改为发送失败,并重发消息。客户端遇到消息发送失败时,可能有以下情况:
- 消息未送达融云服务器,或送达融云服务端后返回发送失败的情况(其他人也没有收到)。
- 某些极端情况下(例如弱网环境),消息可能已成功送达收件方。但发送端未能及时收到融云服务端回执,超时后认为发送失败。此时客户端重发消息后会导致对方重复收到消息。关于该问题的详细解释可参考 FAQ。
-
重新发送消息。重发消息需与原始消息保持一致。
提示SDK 从 5.5.1 版本开始,支持重发消息时在
options中传入原消息的messageId。融云服务端不会去除重复消息,应用层可通过该 ID 自行判断消息是否属于重复消息,并进行相应处理。该 ID 可以从onSendBefore回调返回的message对象或返回结果中获取。JavaScript// 定义消息投送目标会话, 这里定义一个群组类型会话
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值为ConversationType.GROUP时有效(可选项)mentionedType1|2@ 消息类型,1: @ 所有人 2: @ 指定用户(可选项)已废弃mentionedUserIdListstring[]被 @ 的用户 Id 列表(可选项)已废弃directionalUserIdListstring[]用于发送群定向消息,只当 conversationType值为ConversationType.GROUP时有效(可选项)isVoipPushboolean当对方为 iOS 设备且未在线时,其将收到 Voip Push. 此配置对 Android 无影响(可选项) canIncludeExpansionboolean是否允许消息被拓展 expansion[key: string]: string 消息拓展内容数据(可选项) isFilerWhiteBlacklistboolean黑/白名单(可选 项) pushConfigIPushConfig移动端推送配置(可选项)(与 Android、iOS 端的 MessagePushConfig 作用相似) onSendBeforeFunction消息发送前的回调。(≥ 5.4.0) messageIdnumber重发消息时,传要重发消息的 messageId,重发消息的所有参数需与原始消息一致。(≥ 5.5.1) disableUpdateLastMessageboolean禁止更新会话最后一条消息,默认为 false。(≥ 5.12.2) needReceiptboolean是否需要对方发送回执,默认为 false(≥ 5.20.0) quoteInfoIQuoteInfo描述消息引用关系(≥ 5.38.0) -
IPushConfig参数说明参数 类型 说明 pushTitlestring推送标题 ,在没有设置的情况下:单聊通知标题显示为发送者名称,群聊通知标题显示为群名称;自定义消息,默认不显示标题; pushContentstring推送内容 pushDatastring远程推送附加信息 iOSConfigIiOSPushConfig(可选项) androidConfigIAndroidPushConfig(可选项) disablePushTitleboolean是否显示推送标题. 仅针对 iOS 平台有效 forceShowDetailContentboolean是否强制推送 templateIdstring推送模板id
-
以发送文本消息为例:
// 定义消息投送目标会话
const conversation = { conversationType: RongIMLib.ConversationType.PRIVATE, targetId: '<目标 Id>' }
// 实例化待发送消息,RongIMLib.TextMessage 为内置文本型消息
const message = new RongIMLib.TextMessage({ content: '' })
// 发送
RongIMLib.sendMessage(conversation, message).then(res => {})
关于发送媒体消息的说明
重要
小程序平台 IMLib SDK 未提供发送媒体消息的语法糖方法。
如需在小程序平台实现发送图片、GIF、文件等媒体消息,请使用 sendMessage 方法,您需要自行实现消息中的文件上传逻辑。
以融云微信小程序 Demo 中的实现为例,完整示例请您参考 Demo 源码中的 chat.js。