发送消息

创建消息

创建文本消息

创建文本消息的接口,此接口返回一个消息实例,可以在需要发送文本消息时调用 发送消息 接口发送消息实例。
接口
chat.createTextMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
to
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值TencentCloudChat.TYPES.CONV_C2C(端到端会话)或TencentCloudChat.TYPES.CONV_GROUP(群组会话)
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
receiverList
Array | undefined
定向接收消息的群成员列表(社群和直播群不支持)
isSupportExtension
Boolean
是否支持消息扩展,true 支持 false 不支持(需要您购买进阶版套餐)
payload的描述如下:
参数
类型
说明
text
String
消息文本内容
返回值
Message
示例
// 发送文本消息,Web 端与小程序端相同
// 1. 创建消息实例,接口返回的实例可以上屏
let message = chat.createTextMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
// 消息优先级,用于群聊。如果某个群的消息超过了频率限制,后台会优先下发高优先级的消息
// priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL,
payload: {
text: 'Hello world!'
},
// 如果您发消息需要已读回执,需购买旗舰版套餐,并且创建消息时将 needReadReceipt 设置为 true
needReadReceipt: true
// 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
// cloudCustomData: 'your cloud custom data'
});
// 2. 发送消息
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
// 发送群定向消息
// 注意:群定向消息不计入会话未读,receiverList 最大支持50个接收者。
let message = chat.createTextMessage({
to: 'group1',
conversationType: TencentCloudChat.TYPES.CONV_GROUP,
payload: {
text: 'Hello world!'
},
// 如果您需要发群定向消息,需购买旗舰版套餐,并且创建消息时通过 receiverList 指定消息接收者
receiverList: ['user0', 'user1']
});
// 发送消息
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

创建@消息

创建可以附带 @ 提醒功能的文本消息的接口,此接口返回一个消息实例,可以在需要发送文本消息时调用 发送消息 接口发送消息实例。
说明:
1. 此接口仅用于群聊,且社群和社群下的话题不支持 @ALL。
2. 创建群 @ 消息不支持指定消息接收者。
接口
chat.createTextAtMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
to
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值TencentCloudChat.TYPES.CONV_C2C(端到端会话)或TencentCloudChat.TYPES.CONV_GROUP(群组会话)
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload的描述如下:
参数
类型
说明
text
String
消息文本内容
atUserList
Array
需要 @ 的用户列表,如果需要 @ALL,请传入 TencentCloudChat.TYPES.MSG_AT_ALL 。 举个例子,假设该条文本消息希望 @ 提醒 denny 和 lucy 两个用户,同时又希望 @ 所有人,atUserList 传 ['denny', 'lucy', TencentCloudChat.TYPES.MSG_AT_ALL]
返回值
Message
示例
// 发送文本消息,Web 端与小程序端相同
// 1. 创建消息实例,接口返回的实例可以上屏
let message = chat.createTextAtMessage({
to: 'group1',
conversationType: TencentCloudChat.TYPES.CONV_GROUP,
// 消息优先级,用于群聊
// priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL,
payload: {
text: '@denny @lucy @所有人 今晚聚餐,收到的请回复1',
// 'denny' 'lucy' 都是 userID,而非昵称
atUserList: ['denny', 'lucy', TencentCloudChat.TYPES.MSG_AT_ALL]
},
// 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
// cloudCustomData: 'your cloud custom data'
});
// 2. 发送消息
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

创建图片消息

创建图片消息的接口,此接口返回一个消息实例,可以在需要发送图片消息时调用 发送消息 接口发送消息实例。 React Native 发送图片消息您需要集成 react-native-image-picker
npm install react-native-image-picker --save
接口
chat.createImageMessage(options);
参数
参数 optionsObject 类型,包含的属性值如下表所示:
参数
类型
说明
to
String
消息的接收方
conversationType
String
会话类型,取值 TencentCloudChat.TYPES.CONV_C2CTencentCloudChat.TYPES.CONV_GROUP
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
onProgress
function
获取上传进度的回调函数
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload的描述如下:
参数
类型
说明
file
HTMLInputElement | Object | File
用于选择图片的 DOM 节点(Web)或者 File 对象(Web)
wx.chooseImage 接口的 success 回调参数。SDK 会读取其中的数据并上传图片
返回值
Message
示例
import {launchImageLibrary} from 'react-native-image-picker';
// 1. 选择图片
launchImageLibrary({
mediaType: 'photo',
selectionLimit: 1,
}).then((result) => {
const file = result.assets[0];
// 2. 创建消息实例,接口返回的实例可以上屏
let message = chat.createImageMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
payload: { file: file },
// React Native 不支持上传进度回调
// onProgress: function(event) { console.log('file uploading:', event) }
});
// 3. 发送图片
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
});
import {launchCamera} from 'react-native-image-picker';
// 1. 拍照
launchCamera({
mediaType: 'photo',
cameraType: 'back',
}).then((result) => {
const file = result.assets[0];
// 2. 创建消息实例,接口返回的实例可以上屏
let message = chat.createImageMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
payload: { file: file },
// React Native 不支持上传进度回调
// onProgress: function(event) { console.log('file uploading:', event) }
});
// 3. 发送图片
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
});

创建音频消息

创建音频消息实例的接口,此接口返回一个消息实例,可以在需要发送音频消息时调用 发送消息 接口发送消息。React Native 发送音频消息您需要集成 react-native-audio-recorder-player
npm install react-native-audio-recorder-player --save
接口
chat.createAudioMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
to
String
消息的接收方
conversationType
String
会话类型,取值 TencentCloudChat.TYPES.CONV_GROUPTencentCloudChat.TYPES.CONV_GROUP
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload的描述如下:
参数
类型
说明
file
Object
录音后得到的文件信息
返回值
Message
示例
import AudioRecorderPlayer, {AVEncodingOption} from 'react-native-audio-recorder-player';
// 记录录音时长,单位: ms
let duration = 0;
// 记录录音文件路径
let uri = '';

// 1. 开始录音
const onStartRecord = async () => {
await audioRecorderPlayer.startRecorder('test.aac',{
VFormatIDKeyIOS: AVEncodingOption.aac,
});
audioRecorderPlayer.addRecordBackListener((e: any) => {
duration = e.currentPosition;
});
};
// 2. 结束录音
const onStopRecord = async () => {
uri = await audioRecorderPlayer.stopRecorder();
audioRecorderPlayer.removeRecordBackListener();
};
// 3. 发送语音
const file = {
uri: uri,
duration: duration,
};
let message = chat.createAudioMessage({
to: 'user1',
conversationType: 'C2C',
payload: {
file: file,
},
// React Native 不支持上传进度回调
// onProgress: function(event) { console.log('file uploading:', event) }
});
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

创建视频消息

创建视频消息实例的接口,此接口返回一个消息实例,可以在需要发送视频消息时调用 发送消息 接口发送消息。React Native 发送视频消息您需要集成 react-native-image-picker
npm install react-native-image-picker --save
接口
chat.createVideoMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
to
String
消息的接收方
conversationType
String
会话类型,取值TencentCloudChat.TYPES.CONV_GROUP
TencentCloudChat.TYPES.CONV_GROUP
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload 的描述如下:
参数
类型
说明
file
HTMLInputElement | File | Object
自定义消息的数据字段
返回值
Message
示例
import {launchImageLibrary} from 'react-native-image-picker';
// 1. 选择视频
launchImageLibrary({
mediaType: 'video',
selectionLimit: 1,
}).then((result) => {
const file = result.assets[0];
// 2. 创建消息实例,接口返回的实例可以上屏
let message = chat.createVideoMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
payload: { file: file },
// React Native 不支持上传进度回调
// onProgress: function(event) { console.log('file uploading:', event) }
});
// 3. 发送视频
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
});
import {launchCamera} from 'react-native-image-picker';
// 1. 拍摄视频
launchCamera({
mediaType: 'video',
cameraType: 'back',
}).then((result) => {
const file = result.assets[0];
// 2. 创建消息实例,接口返回的实例可以上屏
let message = chat.createVideoMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
payload: { file: file },
// React Native 不支持上传进度回调
// onProgress: function(event) { console.log('file uploading:', event) }
});
// 3. 发送视频
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
});

创建自定义消息

创建自定义消息实例的接口,此接口返回一个消息实例,可以在需要发送自定义消息时调用 发送消息 接口发送消息实例。当 SDK 提供的能力不能满足您的需求时,可以使用自定义消息进行个性化定制。
接口
chat.createCustomMessage(options);
参数
参数 optionsObject 类型,包含的属性值如下:
参数
类型
说明
to
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值TencentCloudChat.TYPES.CONV_GROUP
TencentCloudChat.TYPES.CONV_GROUP
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload 的描述如下:
参数
类型
说明
data
String
自定义消息的数据字段
description
String
自定义消息的说明字段
extension
String
自定义消息的扩展字段
返回值
Message
示例
// 示例:利用自定义消息实现投骰子功能
// 1. 定义随机函数
function random(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
}
// 2. 创建消息实例,接口返回的实例可以上屏
let message = chat.createCustomMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
// 消息优先级,用于群聊
// priority: TencentCloudChat.TYPES.MSG_PRIORITY_HIGH,
payload: {
data: 'dice', // 用于标识该消息是骰子类型消息
description: String(random(1,6)), // 获取骰子点数
extension: ''
}
});
// 3. 发送消息
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

创建表情消息

创建表情消息实例的接口,此接口返回一个消息实例,可以在需要发送表情消息时调用 发送消息 接口发送消息。
接口
chat.createFaceMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
to
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值 TencentCloudChat.TYPES.CONV_C2CTencentCloudChat.TYPES.CONV_GROUP
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload的描述如下:
参数
类型
说明
index
Number
表情索引,用户自定义
data
String
额外数据
返回值
Message
示例
// 发送表情消息,Web端与小程序端相同。
// 1. 创建消息实例,接口返回的实例可以上屏
let message = chat.createFaceMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
// 消息优先级,用于群聊
// priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL,
payload: {
index: 1, // Number 表情索引,用户自定义
data: 'tt00' // String 额外数据
},
// 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
// cloudCustomData: 'your cloud custom data'
});
// 2. 发送消息
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

创建文件消息

创建文件消息的接口,此接口返回一个消息实例,可以在需要发送文件消息时调用 发送消息 接口发送消息实例。React Native 发送文件消息您需要集成 react-native-document-picker
npm install react-native-document-picker --save
接口
chat.createFileMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
to
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值 TencentCloudChat.TYPES.CONV_C2CTencentCloudChat.TYPES.CONV_GROUP
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
onProgress
function
获取上传进度的回调函数
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload的描述如下:
参数
类型
说明
file
HTMLInputElement | File | Object
用于选择文件的 DOM 节点(Web)或者 File 对象(Web)或者 Object(uni.chooseFile 接口的 success 回调参数),SDK 会读取其中的数据并上传文件
返回值
Message
示例
import DocumentPicker from 'react-native-document-picker';
// 1. 选择文件
DocumentPicker.pick({
type: [DocumentPicker.types.allFiles],
}).then((result) => {
const file = result[0];
// 2. 创建消息实例,接口返回的实例可以上屏
let message = chat.createFileMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
payload: { file: file },
// React Native 不支持上传进度回调
// onProgress: function(event) { console.log('file uploading:', event) }
});
// 3. 发送文件
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});
});

创建地理位置消息

创建地理位置消息的接口,此接口返回一个消息实例,可以在需要发送地理位置消息时调用 发送消息 接口发送消息。
接口
chat.createLocationMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
to
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值 TencentCloudChat.TYPES.CONV_C2CTencentCloudChat.TYPES.TYPES.CONV_GROUP
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload 的描述如下:
参数
类型
说明
description
String
地理位置描述信息
longitude
Number
经度
latitude
Number
纬度
返回值
Message
示例
// 发送地理位置消息,Web 端与小程序端相同
// 1. 创建消息实例,接口返回的实例可以上屏
let message = chat.createLocationMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
// 消息优先级,用于群聊
// priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL,
payload: {
description: '深圳市深南大道10000号腾讯大厦',
longitude: 113.941079, // 经度
latitude: 22.546103 // 纬度
}
});
// 2. 发送消息
let promise = chat.sendMessage(message);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

创建合并消息

创建合并消息的接口,此接口返回一个消息实例,可以在需要发送合并消息时调用 发送消息 接口发送消息。
说明:
1. 不支持合并已发送失败的消息,如果消息列表内传入了已发送失败的消息,则创建消息接口会报错。
接口
chat.createMergerMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
to
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值 TencentCloudChat.TYPES.CONV_C2CTencentCloudChat.TYPES.CONV_GROUP
priority
String
消息优先级,如果群组内消息超过频率限制,后端会优先投递高优先级消息。支持的枚举值:
TencentCloudChat.TYPES.MSG_PRIORITY_HIGH
TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL (default)
TencentCloudChat.TYPES.MSG_PRIORITY_LOW
TencentCloudChat.TYPES.MSG_PRIORITY_LOWEST
payload
Object
消息内容的容器
cloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
payload的描述如下:
参数
类型
说明
messageList
Array
合并的消息列表
title
String
合并的标题,例如:"大湾区前端人才中心的聊天记录"
abstractList
String
摘要列表,不同的消息类型可以设置不同的摘要信息,例如:文本消息可以设置为:sender: text,图片消息可以设置为:sender: [图片],文件消息可以设置为:sender: [文件]
compatibleText
String
兼容文本,低版本 SDK 如果不支持合并消息,默认会收到一条文本消息,文本消息的内容为 ${compatibleText},必填
返回值
Message
示例
// 1. 将群聊消息转发到 c2c 会话
// message1 message2 message3 是群聊消息
let mergerMessage = chat.createMergerMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
payload: {
messageList: [message1, message2, message3],
title: '大湾区前端人才中心的聊天记录',
abstractList: ['allen: 666', 'iris: [图片]', 'linda: [文件]'],
compatibleText: '请升级 Chat SDK 到v2.10.1或更高版本查看此消息'
},
// 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
// cloudCustomData: 'your cloud custom data'
});

// 2. 发送消息
let promise = chat.sendMessage(mergerMessage);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

下载合并消息

如果发送方发送的合并消息较大,SDK 会将此消息存储到云端,消息接收方查看消息时,需要先把消息从云端下载到本地。
接口
chat.downloadMergerMessage(message);
参数
参数
类型
说明
message
Message
消息实例
返回值
Promise
示例
// downloadKey 存在说明收到的合并消息存储在云端,需要先下载
if (message.type === TencentCloudChat.TYPES.MSG_MERGER && message.payload.downloadKey !== '') {
let promise = chat.downloadMergerMessage(message);
promise.then(function(imResponse) {
// 下载成功后,SDK会更新 message.payload.messageList 等信息
console.log(imResponse.data);
}).catch(function(imError) {
// 下载失败
console.warn('downloadMergerMessage error:', imError);
});
}

逐条转发消息

如果您需要转发单条消息,可以先通过 createForwardMessage 接口创建一条和原消息内容完全一样的转发消息,再调用 sendMessage 接口把转发消息发送出去。
说明:
1. 支持单条转发和逐条转发。
接口
chat.createForwardMessage(message);
参数
参数
类型
说明
message
Message
消息实例
示例
let forwardMessage = chat.createForwardMessage({
to: 'user1',
conversationType: TencentCloudChat.TYPES.CONV_C2C,
// 消息优先级,用于群聊
// priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL,
payload: message, // 消息实例,已收到的或自己已发出的消息
// 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)
// cloudCustomData: 'your cloud custom data'
});
// 2. 发送消息
let promise = chat.sendMessage(forwardMessage);
promise.then(function(imResponse) {
// 发送成功
console.log(imResponse);
}).catch(function(imError) {
// 发送失败
console.warn('sendMessage error:', imError);
});

发送消息

发送消息的接口,需先调用下列的创建消息实例的接口获取消息实例后,再调用该接口发送消息实例。
说明:
1. 调用该接口发送消息实例,需要 sdk 处于 ready 状态,否则将无法发送消息实例。sdk 状态,可通过监听以下事件得到:TencentCloudChat.EVENT.SDK_READY - sdk 处于 ready 状态时触发
2. TencentCloudChat.EVENT.SDK_NOT_READY - sdk 处于 not ready 状态时触发。
3. 接收推送的单聊、群聊、群提示、群系统通知的新消息,需监听事件 TencentCloudChat.EVENT.MESSAGE_RECEIVED
4. 本实例发送的消息,不会触发事件 TencentCloudChat.EVENT.MESSAGE_RECEIVED。同账号从其他端(或通过 REST API)发送的消息,会触发事件 TencentCloudChat.EVENT.MESSAGE_RECEIVED
5. 离线推送仅适用于终端(Android 或 iOS),Web 不支持。
6. onlineUserOnly 和 messageControlInfo 不能同时使用。
7. 支持普通社群和话题消息不计未读。
8. 向【系统会话】发消息,SDK 将返回错误码 2106。
9. 消息包体大小限制为12KB,且不可调整,超出将导致消息发送失败,错误码 80002。
10. 启用好友关系检查后(【Chat 控制台】>【应用配置】>【功能配置】>【登录与消息】>【好友关系检查】),Chat 会在发起单聊时检查好友关系,仅允许好友之间发送单聊消息,陌生人发送单聊消息时 SDK 返回错误码 20009。
chat.sendMessage(options);
参数
参数 optionsObject类型,包含的属性值如下:
参数
类型
说明
message
Message
消息实例
options
Object
消息发送选项(消息内容的容器),选填
options的描述如下:
参数
类型
说明
onlineUserOnly
Boolean
消息是否仅发送给在线用户的标识,默认值为 false;设置为 true,则消息既不存漫游,也不会计入未读,也不会离线推送给接收方。适合用于发送广播通知等不重要的提示消息场景。在 AVChatRoom 发送消息不支持此选项
offlinePushInfo
Object
离线推送 配置
messageControlInfo
Object
消息控制配置
offlinePushInfo的描述如下:
参数
类型
说明
disablePush
Boolean
true 关闭离线推送;false 开启离线推送(默认)
disableVoipPush
Boolean
true 关闭 voip 推送(默认);false 开启 voip 推送(开启 voip 推送需要同时开启离线推送)
title
String
离线推送标题,该字段为 iOS 和 Android 共用
description
String
离线推送内容,该字段会覆盖消息实例的离线推送展示文本。若发送的是自定义消息,该 description 字段会覆盖 message.payload.description。如果 description 和 message.payload.description 字段都不填,接收方将收不到该自定义消息的离线推送
extension
String
离线推送透传内容
androidInfo
Object
Android 推送配置
apnsInfo
Object
iOS 推送配置
androidInfo的描述如下:
参数
类型
说明
sound
String

Android 离线推送声音设置。只支持华为、小米和谷歌。
小米手机在 Android 8.0 及以上版本必须设置 androidInfo.XiaoMiChannelID,请您参考:小米自定义铃声
谷歌手机 FCM 推送在 Android 8.0 及以上系统设置声音提示,必须设置 androidInfo.FCMChannelID。
自定义铃音需要设置声音文件路径。例如: androidInfo.sound = "shake.xxx"
对应 uniapp "nativeResources/android/res/raw/shake.xxx" 音频文件.
对应原生应用的 "/res/raw/shake.xxx" 音频文件。

XiaoMiChannelID
String
小米手机 MIUI 10 及以上的通知类别(Channel)适配字段。
OPPOChannelID
String
OPPO 手机 Android 8.0 及以上的 NotificationChannel 通知适配字段。
FCMChannelID
String
Google 手机 Android 8.0 及以上的通知渠道字段。
VIVOClassification
Number
VIVO 手机推送消息分类,0:运营消息,1:系统消息,默认为1。
VIVOCategory
String
VIVO 手机用来标识消息类型。
HuaWeiCategory
String
华为手机用来标识消息类型。
HuaWeiImage
String
华为推送通知栏通知图片 url,v3.4.1 起支持。
使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png
图片文件须小于 512KB,规格建议为 40dp x 40dp,弧角大小为 8dp。超出建议规格的图片会存在图片压缩或图片显示不全的情况。图片格式建议使用 JPG/JPEG/PNG。

HonorImage
String
荣耀推送通知栏通知图片 url,v3.4.1 起支持。
使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png
图标文件大小须小于 100KB,图标建议规格大小:160px x 160px,弧角大小为 32px,超出规格大小的图标会存在图片压缩或显示不全的情况。

GoogleImage
String
Google 推送通知栏通知图片 url,v3.4.1 起支持。
使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png
图标文件大小须小于 1 MB,超出规格大小的图标会存在图片压缩或显示不全的情况。

apnsInfo描述如下:
参数
类型
说明
sound
String
iOS 离线推送声音设置。
当 apnsInfo.sound = TencentCloudChat.TYPES.IOS_OFFLINE_PUSH_NO_SOUND,表示接收时不会播放声音。
当 apnsInfo.sound = TencentCloudChat.TYPES.IOS_OFFLINE_PUSH_DEFAULT_SOUND,表示接收时播放系统声音。
自定义铃音需要设置声音文件路径。例如: apnsInfo.sound = "shake.xxx"
对应 uniapp "nativeResources/ios/Resources/shake.xxx" 文件,uniapp 必须为正式包。
对应原生 Xcode 工程中的 "shake.xxx" 音频文件。

ignoreIOSBadge
Boolean
离线推送忽略 badge 计数(仅对 iOS 生效),默认为 false,设置为 true 时,在 iOS 接收端,这条消息不会使 APP 的应用图标未读计数增加。
disableVoipPush
Boolean
true 关闭 voip 推送(默认);false 开启 voip 推送(开启 voip 推送需要同时开启离线推送)
image
String
标识 APNs 通知栏通知图片地址,当客户端拿到该字段时,可以通过下载图片资源的方式将图片展示在弹窗上,v3.4.1 起支持。
使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png
支持 JPEG、GIF、PNG,大小不超过 10 MB
需要在 IM 控制台打开 mutable-content 属性,支持 iOS 10 Service Extension 特性
资源的 key 值是 "image"

messageControlInfo 的描述如下:
参数
类型
说明
excludedFromUnreadCount
Boolean
true 消息不更新会话 unreadCount(消息存漫游),默认值 false
excludedFromLastMessage
Boolean
true 消息不更新会话 lastMessage(消息存漫游),默认值 false
excludedFromContentModeration
Boolean
消息是否不过内容审核(云端审核)
只有在开通【云端审核】功能后,excludedFromContentModeration 设置才有效,设置为 true,消息不过内容审核,设置为 false 消息过内容审核。
返回
Promise
示例
// 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。
// 离线推送的标题和内容使用默认值。
// 离线推送的说明请参考 https://www.tencentcloud.com/document/product/1047/33525
chat.sendMessage(message);
chat.sendMessage(message, {
onlineUserOnly: true // 如果接收方不在线,则消息不存入漫游,且不会进行离线推送
});
chat.sendMessage(message, {
offlinePushInfo: {
disablePush: true // 如果接收方不在线,则消息将存入漫游,但不进行离线推送
}
});
chat.sendMessage(message, {
// 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。
// 接入侧可自定义离线推送的标题及内容
offlinePushInfo: {
title: '', // 离线推送标题
description: '', // 离线推送内容
androidOPPOChannelID: '' // 离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID
}
});
chat.sendMessage(message, {
messageControlInfo: {
excludedFromUnreadCount: true, // 消息不更新会话 unreadCount(消息存漫游)
excludedFromLastMessage: true // 消息不更新会话 lastMessage(消息存漫游)
}
});
// 消息不过内容审核
chat.sendMessage(message, {
messageControlInfo: {
excludedFromContentModeration: true,
}
});
// 支持 VoIP push
chat.sendMessage(message, {
offlinePushInfo: {
disablePush: false,
disableVoipPush: false
}
});

获取设备权限

React Native 发送图片、视频、文件消息需要获取相关的设备权限。
Android
iOS
在 android 目录下,找到 app/src/main/AndroidManifest.xml ,添加以下权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
在 ios 目录下找到 Info.plist ,添加以下权限:
<key>NSCameraUsageDescription</key>
<string>我们需要访问您的相机以拍摄照片</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>我们需要访问您的相册以选择照片</string>
<key>NSMicrophoneUsageDescription</key>
<string>我们需要访问您的麦克风以录制音频</string>

接口限制

功能特性
限制项
限制说明
单聊/群聊
内容长度
单聊、群聊消息,单条消息最大长度限制为 12K。
发送频率
单聊消息:客户端发送单聊消息无限制;REST API 发送有频率限制,可查看相应接口的文档。
群聊消息:每个群限 40 条/秒(针对所有群类型、所有平台接口)。不同群内发消息,限频互不影响。
接收频率
单聊和群聊均无限制。
单个文件大小
发送文件消息时,SDK 最大支持发送单个文件大小为 100MB。
说明:
1. 消息数量超过限制后,后台优先下发优先级相对较高的消息,同等优先级的消息随机排序。如果同一秒内高优先级消息总数超过 40 条/秒,高优先级消息也会被抛弃。
2. 被频控限制的消息,不会下发,不会存入历史消息,但会给发送人返回成功,会触发 群内发言之前回调,但不会触发 群内发言之后回调
3. REST API 发送群组消息接口调用限频默认为 200次/秒,与上述 “每个群发送消息限 40 条/秒” 是不同概念,请区分开。
更多限制请参见文档 使用限制