即时通信 IM Web&小程序&uni-app(发送消息)

创建文本消息的接口,此接口返回一个消息实例,可以在需要发送文本消息时调用 发送消息 接口发送消息实例。chat.createTextMessage(options)。

相关产品
即时通信 IM 产品页,含版本规格、价格与购买入口。

一、创建文本消息

接口

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息接收方的 userID 或 groupID。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话)或 TencentCloudChat.TYPES.CONV_GROUP(群组会话)。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
payload Object – 消息内容的容器。
needReadReceipt Boolean false 如果发消息需要已读回执,需购买旗舰版或企业版套餐,并且创建消息时将 needReadReceipt 设置为 true
cloudCustomData String '' 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)。
receiverList Array | undefined – 定向接收消息的群成员列表(社群和直播群不支持)。
isSupportExtension Boolean false 是否支持消息扩展,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: 'test', 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);});

二、创建@消息

创建可以附带 @ 提醒功能的文本消息的接口,此接口返回一个消息实例,可以在需要发送文本消息时调用 发送消息 接口发送消息实例。

接口

chat.createTextAtMessage(options);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息接收方的 userID 或 groupID。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话)或 TencentCloudChat.TYPES.CONV_GROUP(群组会话)。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
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);});

三、创建图片消息

创建图片消息的接口,此接口返回一个消息实例,可以在需要发送图片消息时调用 发送消息 接口发送消息实例。

注意:1. 在开通 云端审核 功能后,如果你发送的图片消息内容不合规,云端审核超时后 SDK 会触发 MESSAGE_MODIFIED 事件,回调的 message 对象 hasRiskContent 值为 true。

注意:2. v3.3.0起,支持自定义消息审核策略,请参见 customModerationConfigurationID 参数的描述。

注意:3. 支持的图片类型:jpg、jpeg、gif、png、bmp、image、webp。

接口

chat.createImageMessage(options);

参数

参数 options 为 Object 类型,包含的属性值如下表所示:

参数 类型 默认值 描述
to String – 消息的接收方。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话) 或 TencentCloudChat.TYPES.CONV_GROUP(群组会话)。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
payload Object – 消息内容的容器。
onProgress function – 获取上传进度的回调函数。
cloudCustomData String '' 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)。
customModerationConfigurationID String | undefined  消息自定义审核配置 ID(v3.3.0起支持) 在开通【云端审核】功能后,你可以请前往 控制台 > 消息服务 Chat > 云端审核 > 审核配置 > 自定义配置 > 添加自定义配置获取配置 ID。自定义审核配置流程请参见 云端审核功能。该字段需要发消息前设置,仅用于控制发消息时的消息审核策略,其值不会存储在漫游和本地。

payload 的描述如下:

参数 类型 描述
file HTMLInputElement | Object | File 用于选择图片的 DOM 节点(Web)或者 File 对象(Web)或者微信小程序 。wx.chooseImage 接口的 success 回调参数。SDK 会读取其中的数据并上传图片。

返回值

Message

示例

// Web 端发送图片消息示例1 – 传入 DOM 节点// 1. 创建消息实例,接口返回的实例可以上屏let message = chat.createImageMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: { file: document.getElementById('imagePicker'), }, // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data' onProgress: function(event) { console.log('file uploading:', event) }});// 2. 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});

// Web 端发送图片消息示例2- 传入 File 对象// 先在页面上添加一个 id 为 "testPasteInput" 的消息输入框// 如 <input type="text" id="testPasteInput" placeholder="截图后粘贴到输入框中" size="30" />document.getElementById('testPasteInput').addEventListener('paste', function(e) { let clipboardData = e.clipboardData; let file; let fileCopy; if (clipboardData && clipboardData.files && clipboardData.files.length > 0) { file = clipboardData.files[0]; // 图片消息发送成功后,file 指向的内容可能被浏览器清空,如果接入侧有额外的渲染需求,可以提前复制一份数据 fileCopy = file.slice(); } if (typeof file === 'undefined') { console.warn('file 是 undefined,请检查代码或浏览器兼容性!'); return; } // 1. 创建消息实例,接口返回的实例可以上屏 let message = chat.createImageMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: file }, onProgress: function(event) { console.log('file uploading:', event) } }); // 2. 发送消息 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });});

// 小程序端发送图片// 1. 选择图片wx.chooseImage({ sourceType: ['album'], // 从相册选择 count: 1, // 只选一张,目前 SDK 不支持一次发送多张图片 success: function (res) { // 2. 创建消息实例,接口返回的实例可以上屏 let message = chat.createImageMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: res }, 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); }); }})

// uni-app 发送图片// 微信小程序从基础库 2.21.0 开始, wx.chooseImage 停止维护,请使用 uni.chooseMedia 代替// 1. 选择图片uni.chooseMedia({ count: 1, mediaType: ['image'], // 图片 sizeType: ['original', 'compressed'], // 可以指定是原图还是压缩图,默认二者都有 sourceType: ['album'], // 从相册选择 success: function(res) { let message = chat.createImageMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: res }, onProgress: function(event) { console.log('file uploading:', event) } }); // 2. 发送消息 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); }); }});

四、创建音频消息

创建音频消息实例的接口,此接口返回一个消息实例,可以在需要发送音频消息时调用 发送消息 接口发送消息。

注意:在开通 云端审核 功能后,如果你发送的音频消息内容不合规,云端异步审核后 SDK 会触发 MESSAGE_MODIFIED 事件,回调的 message 对象 hasRiskContent 值为 true。

接口

chat.createAudioMessage(options);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息的接收方。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话) 或 TencentCloudChat.TYPES.CONV_GROUP(群组会话)。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
payload Object – 消息内容的容器。
cloudCustomData String '' 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)。

payload 的描述如下:

参数 类型 描述
file Object 录音后得到的文件信息。

返回值

Message

示例

// 示例:使用微信的 RecorderManager 进行录音// 参考 https://developers.weixin.qq.com/minigame/dev/api/media/recorder/RecorderManager.start.html// 1. 获取全局唯一的录音管理器 RecorderManagerconst recorderManager = wx.getRecorderManager();// 录音部分参数const recordOptions = { duration: 60000, // 录音的时长,单位 ms,最大值 600000(10 分钟) sampleRate: 44100, // 采样率 numberOfChannels: 1, // 录音通道数 encodeBitRate: 192000, // 编码码率 format: 'aac' // 音频格式,选择此格式创建的音频消息,可以在即时通信 IM 全平台(Android、iOS、微信小程序和Web)互通};// 2.1 监听录音错误事件recorderManager.onError(function(errMsg) { console.warn('recorder error:', errMsg);});// 2.2 监听录音结束事件,录音结束后,调用 createAudioMessage 创建音频消息实例recorderManager.onStop(function(res) { console.log('recorder stop', res); // 4. 创建消息实例,接口返回的实例可以上屏 const message = chat.createAudioMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: { file: res }, // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data' }); // 5. 发送消息 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });});// 3. 开始录音recorderManager.start(recordOptions);

// 在 Web 端创建语音消息并发送// 示例:使用第三方库 js-audio-recorder 录制音频// 1. 开始录制let recorder = new Recorder({ // 采样位数,支持 8 或 16,默认是16 sampleBits: 16, // 采样率,支持 11025、16000、22050、24000、44100、48000,根据浏览器默认值,我的chrome是48000 sampleRate: 16000, // 声道,支持 1 或 2, 默认是1 numChannels: 1,});let startTs;recorder.start().then(() => { // 开始录音,记录起始时间戳 startTs = Date.now();}, (error) => { // 出错了 console.log(`${error.name} : ${error.message}`);});// 2. 结束录制recorder.stop();// 3. 计算录音时长,获取 WAV 数据let duration = Date.now() – startTs; // 单位:mslet wavBlob = recorder.getWAVBlob();// 4. blob 数据转成 File 对象let audioFile = new File([wavBlob], 'hello.wav', { type: 'wav' });audioFile.duration = duration;// 5. 创建音频消息let message = chat.createAudioMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: audioFile }});// 6. 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});

五、创建视频消息

创建视频消息实例的接口,此接口返回一个消息实例,可以在需要发送视频消息时调用 发送消息 接口发送消息。

注意:1. 在开通 云端审核 功能后,如果你发送的视频消息内容不合规,云端异步审核后 SDK 会触发 MESSAGE_MODIFIED 事件,回调的 message 对象 hasRiskContent 值为 true。

注意:2. v3.3.0起,支持自定义消息审核策略,请参见 customModerationConfigurationID 参数的描述。

注意:3. 支持的视频类型:mp4、 quicktime、 mov。

接口

chat.createVideoMessage(options);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息的接收方。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话)或 TencentCloudChat.TYPES.CONV_GROUP(群组会话)。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
payload Object – 消息内容的容器。
cloudCustomData String '' 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)。
customModerationConfigurationID String | undefined  消息自定义审核配置 ID(v3.3.0起支持) 在开通云端审核功能后,你可以前往 控制台,单击消息服务 Chat > 云端审核 > 审核配置 > 自定义配置 > 添加自定义配置获取配置 ID。自定义审核配置流程请参见 云端审核功能。该字段需要发消息前设置,仅用于控制发消息时的消息审核策略,其值不会存储在漫游和本地。
onProgress Function – 获取上传进度的回调函数。

payload 的描述如下:

参数 类型 描述
file HTMLInputElement | File | Object 自定义消息的数据字段。

返回值

Message

示例

// 小程序端发送视频消息示例:// 接口详情请查阅 https://developers.weixin.qq.com/miniprogram/dev/api/media/video/wx.chooseVideo.html// 1. 调用小程序接口选择视频wx.chooseVideo({ sourceType: ['album', 'camera'], // 来源相册或者拍摄 maxDuration: 60, // 设置最长时间60s camera: 'back', // 后置摄像头 success (res) { // 2. 创建消息实例,接口返回的实例可以上屏 let message = chat.createVideoMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: { file: res }, // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data' 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); }); }})

// web 端发送视频消息示例// 1. 获取视频:传入 DOM 节点// 2. 创建消息实例const message = chat.createVideoMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: document.getElementById('videoPicker') // 或者用event.target }, 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);});

// uni-app 发送视频// 1. 选择视频uni.chooseVideo({ count: 1, sourceType: ['camera', 'album'], // album 从相册选视频,camera 使用相机拍摄,默认为:['album', 'camera'] maxDuration: 60, // 设置最长时间60s camera: 'back', // 后置摄像头 success: function(res) { let message = chat.createVideoMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: res }, onProgress: function(event) { console.log('file uploading:', event) } }); // 2. 发送消息 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); }); }})

六、创建自定义消息

创建自定义消息实例的接口,此接口返回一个消息实例,可以在需要发送自定义消息时调用 发送消息 接口发送消息实例。当 SDK 提供的能力不能满足你的需求时,可以使用自定义消息进行个性化定制。

接口

chat.createCustomMessage(options);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息接收方的 userID 或 groupID。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C(端到端会话)或 TencentCloudChat.TYPES.CONV_GROUP(群组会话)。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
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);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息接收方的 userID 或 groupID。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C 或 TencentCloudChat.TYPES.CONV_GROUP。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
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);});

八、创建文件消息

创建文件消息的接口,此接口返回一个消息实例,可以在需要发送文件消息时调用 发送消息 接口发送消息实例。

接口

chat.createFileMessage(options);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息接收方的 userID 或 groupID。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C 或 TencentCloudChat.TYPES.CONV_GROUP。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
payload Object – 消息内容的容器。
onProgress function – 获取上传进度的回调函数。
cloudCustomData String '' 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)。

payload 的描述如下:

参数 类型 描述
file HTMLInputElement | File | Object 用于选择文件的 DOM 节点(Web)或者 File 对象(Web)或者 Object(uni.chooseFile 接口的 success 回调参数),SDK 会读取其中的数据并上传文件。

返回值

Message

示例

// Web 端发送文件消息示例1 – 传入 DOM 节点// 1. 创建文件消息实例,接口返回的实例可以上屏let message = chat.createFileMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, // 消息优先级,用于群聊 // priority: TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL, payload: { file: document.getElementById('filePicker'), }, // 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) // cloudCustomData: 'your cloud custom data' onProgress: function(event) { console.log('file uploading:', event) }});// 2. 发送消息let promise = chat.sendMessage(message);promise.then(function(imResponse) { // 发送成功 console.log(imResponse);}).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError);});

// Web 端发送文件消息示例2- 传入 File 对象// 先在页面上添加一个 id 为 "testPasteInput" 的消息输入框// 如 <input type="text" id="testPasteInput" placeholder="截图后粘贴到输入框中" size="30" />document.getElementById('testPasteInput').addEventListener('paste', function(e) { let clipboardData = e.clipboardData; let file; let fileCopy; if (clipboardData && clipboardData.files && clipboardData.files.length > 0) { file = clipboardData.files[0]; // 图片消息发送成功后,file 指向的内容可能被浏览器清空,如果接入侧有额外的渲染需求,可以提前复制一份数据 fileCopy = file.slice(); } if (typeof file === 'undefined') { console.warn('file 是 undefined,请检查代码或浏览器兼容性!'); return; } // 1. 创建消息实例,接口返回的实例可以上屏 let message = chat.createFileMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: file }, onProgress: function(event) { console.log('file uploading:', event) } }); // 2. 发送消息 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); });});

// uni-app 发送文件// 1. 选择文件uni.chooseFile({ count: 1, extension:['.zip','.doc'], success: function(res) { let message = chat.createFileMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: res }, onProgress: function(event) { console.log('file uploading:', event) } }); // 2. 发送消息 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); }); }});

// 手机端微信小程序或 QQ 小程序发送文件// wx.chooseMessageFile 基础库 2.5.0 开始支持,低版本需做兼容处理// qq.chooseMessageFile 基础库 1.18.0 开始支持,低版本需做兼容处理// 1. 从客户端会话选择文件wx.chooseMessageFile({ count: 1, type: 'all', // 从所有文件选择 success: (res) => { const message = chat.createFileMessage({ to: 'user1', conversationType: TencentCloudChat.TYPES.CONV_C2C, payload: { file: res }, onProgress: function(event) { console.log('file uploading:', event) } }); // 2. 发送消息 let promise = chat.sendMessage(message); promise.then(function(imResponse) { // 发送成功 console.log(imResponse); }).catch(function(imError) { // 发送失败 console.warn('sendMessage error:', imError); }); }});

九、创建地理位置消息

创建地理位置消息的接口,此接口返回一个消息实例,可以在需要发送地理位置消息时调用 发送消息 接口发送消息。

接口

chat.createLocationMessage(options);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息接收方的 userID 或 groupID。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C 或 TencentCloudChat.TYPES.CONV_GROUP。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
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);});

十、创建合并消息

创建合并消息的接口,此接口返回一个消息实例,可以在需要发送合并消息时调用 发送消息 接口发送消息。

注意:不支持合并已发送失败的消息,如果消息列表内传入了已发送失败的消息,则创建消息接口会报错。

接口

chat.createMergerMessage(options);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 默认值 描述
to String – 消息接收方的 userID 或 groupID。
conversationType String – 会话类型,取值 TencentCloudChat.TYPES.CONV_C2C 或 TencentCloudChat.TYPES.CONV_GROUP。
priority String TencentCloudChat.TYPES.MSG_PRIORITY_NORMAL 消息优先级。
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: '请升级IMSDK到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 接口把转发消息发送出去。

注意:支持单条转发和逐条转发。

接口

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);});

十三、发送消息

发送消息的接口,需先调用下列的创建消息实例的接口获取消息实例后,再调用该接口发送消息实例。

·创建文本消息

·创建 @ 消息

·创建图片消息

·创建音频消息

·创建视频消息

·创建自定义消息

·创建表情消息

·创建文件消息

·创建地理位置消息

·创建合并消息

·创建转发消息

chat.sendMessage(message, options);

参数

参数 options 为 Object 类型,包含的属性值如下:

参数 类型 描述
message Message 消息实例。
options Object 消息发送选项(消息内容的容器),选填。

options 的描述如下:

注意:V4.4.7 offlinePushInfo 字段已废弃,建议使用 pushInfo 字段。

参数 类型 描述
onlineUserOnly Boolean 消息是否仅发送给在线用户的标识,默认值为 false;设置为 true,则消息既不存漫游,也不会计入未读,也不会离线推送给接收方。适合用于发送广播通知等不重要的提示消息场景。在 AVChatRoom 发送消息不支持此选项。
pushInfo Object 离线推送配置,V4.4.7 起支持。
offlinePushInfo Object 旧版本离线推送配置(V4.4.7 起废弃),参数详情见 offlinePushInfo。
messageControlInfo Object 消息控制配置。
webhookInfo Object 禁用消息云端回调配置,参数详见 webhookInfo。

pushInfo 的描述如下:

参数 类型 描述
title String 离线推送标题,该字段为 iOS 和 Android 共用。
description String 离线推送内容,该字段会覆盖消息实例的离线推送展示文本。若发送的是自定义消息,该 description 字段会覆盖 message.payload.description。如果 description 和 message.payload.description 字段都不填,接收方将收不到该自定义消息的离线推送。
extension String 离线推送透传内容。
notification String 各厂商差异化配置,必须是 JSON 字符串。

notification 的描述如下:

一级字段 二级字段 类型 描述
huawei category String 华为手机用来标识消息类型。
 image String 华为推送通知栏通知图片 URL,v3.4.1 起支持。使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png。图片文件须小于 512KB,规格建议为 40dp x 40dp,弧角大小为 8dp。超出建议规格的图片会存在图片压缩或图片显示不全的情况。图片格式建议使用 JPG/JPEG/PNG。
xiaomi channelId String 小米手机 MIUI 10 及以上的通知类别(Channel)适配字段。
 templateId String 消息模板 ID。
 templateParam String 模板参数,值为 JSON 字符串。参数格式与个数须与模板配置完全一致;参数值长度 1~128 字符,不能为纯空格;不支持 emoji、特殊符号(\\p{So})及未分配的 Unicode 字符。
oppo channelId String OPPO 手机 Android 8.0 及以上的 NotificationChannel 通知适配字段。
 category String OPPO 手机用来标识消息类型,v3.4.9 起支持。
 templateId String OPPO 私信申请的模板 ID,申请方式详见 OPPO 私信通道:下发对应私信模板时必须携带,不支持自拟。
 templateTitle String OPPO 标题模板填充参数:例:私信模板 ID 标题模板为:欢迎来到$ {city} $ ,$ {city} $ 欢迎你。此参数内容为:{“city”:“北京”}
 templateContent String OPPO 内容模板填充参数:例:私信模板 ID 对应的内容模板为:欢迎$ {userName} $ 来到$ {city} $参数内容为:{“userName”:“汤姆”,“city”:“深圳市”}
googleFCM channelId String Google 手机 Android 8.0 及以上的通知渠道字段。
 image String Google 推送通知栏通知图片 URL,v3.4.1 起支持。使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png。图标文件大小须小于 1 MB,超出规格大小的图标会存在图片压缩或显示不全的情况。
 priority String FCM 推送消息优先级设置:"normal":普通优先级,应用在前台运行时,普通优先级消息会被立即传递。当应用在后台运行时,消息传递可能会延迟。如果是对时间不太敏感的消息(例如新电子邮件通知、使界面保持同步或在后台同步应用数据),建议你选择普通传递优先级;"high":高优先级,即使设备处于低电耗模式,FCM 也会立即尝试传递高优先级消息。 高优先级消息适用于对时间敏感的用户可见内容。
honor importance String 荣耀推送消息分类,v3.5.1 起支持。"LOW": 表示消息为资讯营销类,默认展示方式为静默通知,仅在下拉通知栏展示。"NORMAL": 表示消息为服务通讯类,默认展示方式为锁屏展示 + 下拉通知栏展示。
 image String 荣耀推送通知栏通知图片 URL,v3.4.1 起支持。使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png。图标文件大小须小于 100KB,图标建议规格大小:160px x 160px,弧角大小为 32px,超出规格大小的图标会存在图片压缩或显示不全的情况。
vivo classification Number VIVO 手机推送消息分类,0:运营消息;1:系统消息;默认为1。
 category String VIVO 手机用来标识消息类型。
 notifyType Number vivo 通知类型:1:无。2:响铃。3:振动。4:响铃和振动。默认值:4。
meizu notifyType Number 魅族推送消息分类,v3.5.5 起支持。0:公信消息,对用户有主动运营作用的推送,或者其他⾮⽤户主动触发的信息。1:私信消息,⽤户预期收到的,与⽤户关联较强的消息。
android sound String Android 离线推送声音设置。只支持华为、小米和谷歌。小米手机在 Android 8.0 及以上版本必须设置 androidInfo.XiaoMiChannelID,请你参考:小米自定义铃声。谷歌手机 FCM 推送在 Android 8.0 及以上系统设置声音提示,必须设置 androidInfo.FCMChannelID。自定义铃音需要设置声音文件路径。例如: androidInfo.sound = "shake.xxx"对应 uniapp "MyUniApp/nativeResources/android/res/raw/shake.xxx" 音频文件.对应 react-native "MyReactNativeApp/android/app/src/main/res/raw/shake.xxx" 音频文件.对应原生应用的 "/res/raw/shake.xxx" 音频文件。
ios pushType Number 0:普通的 APNs1:推送 VoIP 推送默认值: 0。
 ignoreBadge Boolean 离线推送忽略 badge 计数(仅对 iOS 生效),默认为 false,设置为 true 时,在 iOS 接收端,这条消息不会使 APP 的应用图标未读计数增加。
 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 "MyUniApp/nativeResources/ios/Resources/shake.xxx" 文件,uniapp 必须为正式包。对应 react-native "MyReactNativeApp/ios/MyReactNativeApp/Resources/shake.xxx" 文件。对应原生 Xcode 工程中的 "shake.xxx" 音频文件。
 interruptionLevel String iOS 离线推送的通知级别 (iOS 15 及以上支持),v3.5.5 起支持。"active"(默认): 会发出声音或振动,并显示横幅提示。适用于一般的重要通知,例如消息提醒、日历事件等。"passive": 不会发出声音、振动或横幅提示,只会静默地出现在通知中心。适用于不紧急的信息,例如应用内的社交活动更新或推荐内容。"time-sensitive": 会发出声音或振动,并显示横幅提示,这种级别的通知会打扰用户,即使用户启用了“专注模式”(Focus Mode)。适用于需要用户立即关注的紧急通知,例如安全警报、重要的时间提醒等。打开需要在苹果开发者平台和 Xcode 项目中增加相应的配置。"critical": 会发出声音或振动,并显示横幅提示。这种级别的通知会打扰用户,即使设备处于静音模式。适用于极其重要的紧急通知,例如公共安全警报、严重的健康警告等。打开需要向 Apple 特殊申请。
 enableBackgroundNotification Boolean false 关闭静默推送(默认);true 开启静默推送(无通知栏弹窗,苹果建议1小时最多推送3条静默消息),v3.5.5 起支持。
 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"。
harmony sound String 自定义消息通知铃声。例如该字段设置为 alert.mp3(不需要带路径),对应应用本地的 uni_modules/TencentCloud-Push/utssdk/app-harmony/resources/rawfile/alert.mp3 文件。支持的文件格式包括 MP3、WAV、MPEG 等,如果不设置,则用默认系统铃声。当请求不携带 soundDuration 字段时,建议铃声时长不超过 30 秒,若超过 30 秒则截断处理;当请求携带 soundDuration 字段时,详情请参见 soundDuration 字段说明。
 soundDuration Number 自定义消息通知铃声时长。需要配合 harmony.sound 字段使用,只有当请求同时携带 harmony.sound 字段,harmony.soundDuration 字段才会生效。仅支持数字,单位为秒,取值范围 [1, 60]。harmony.sound 字段传入的自定义消息通知铃声会播放至 harmony.soundDuration 字段值后停止,若自定义消息通知铃声对应的时长不足 harmony.soundDuration 字段值则会循环播放,在达到 harmony.soundDuration 字段值后停止。
 image String 荣耀推送通知栏通知图片 URL,v3.4.1 起支持。使用的协议必须是 HTTPS 协议,取值样例:https://example.com/image.png。图标文件大小须小于 100KB,图标建议规格大小:160px x 160px,弧角大小为 32px,超出规格大小的图标会存在图片压缩或显示不全的情况。
commonConfig tencentPushTemplateId String 推送模板 ID。模板在控制台创建并生成,客户端发送时指定。
 tencentPushTemplateParam String 推送模板填充参数。例:对应的模板是:{appName} 发来一条消息你参与的会议,地址 {address} ,将于 {time} 后开始!参数内容为:{ "appName": " TIMPush ", "address":" 1908 会议室 ", "time":" 3 分钟 "}

messageControlInfo 的描述如下:

参数 类型 描述
excludedFromUnreadCount Boolean true 消息不更新会话 unreadCount(消息存漫游),默认值 false。
excludedFromLastMessage Boolean true 消息不更新会话 lastMessage(消息存漫游),默认值 false。
excludedFromContentModeration Boolean 消息是否不过内容审核(包含本地审核和云端审核)。只有在开通本地审核或云端审核功能后,excludedFromContentModeration 设置才有效,设置为 true,消息不过内容审核,设置为 false 消息过内容审核。云端审核开通流程请参见 云端审核。

webhookInfo 的描述如下(v3.5.1 起支持):

参数 类型 描述
disableCloudMessagePreHook Boolean true 禁用消息发送前云端回调,默认值 false。
disableCloudMessagePostHook Boolean true 禁用消息发送后云端回调,默认值 false。

返回

Promise

示例

// 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。// 离线推送的标题和内容使用默认值。// 离线推送的说明请参考 https://cloud.tencent.com/document/product/269/3604chat.sendMessage(message);

chat.sendMessage(message, { onlineUserOnly: true // 如果接收方不在线,则消息不存入漫游,且不会进行离线推送});

chat.sendMessage(message, { // 如果接收方不在线,则消息将存入漫游,且进行离线推送(在接收方 App 退后台或者进程被 kill 的情况下)。 // 接入侧可自定义离线推送的标题及内容 pushInfo: { title: '', // 离线推送标题 description: '', // 离线推送内容 notification: JSON.stringify({ huawei: { category: 'IM', image: 'https://example.com/huawei.png', }, xiaomi: { channelId: 'high_system', templateId: 'xiaomi_template_id', templateParam: JSON.stringify({ keywords1: '张三', keywords2: '给你发来一条消息' }), }, }), },});

chat.sendMessage(message, { messageControlInfo: { excludedFromUnreadCount: true, // 消息不更新会话 unreadCount(消息存漫游) excludedFromLastMessage: true // 消息不更新会话 lastMessage(消息存漫游) }});

// 消息不过内容审核chat.sendMessage(message, { messageControlInfo: { excludedFromContentModeration: true, }});

// 消息云端回调chat.sendMessage(message, { webhookInfo: { disableCloudMessagePreHook: true, disableCloudMessagePostHook: true }});

十四、接口限制

功能特性 限制项 限制说明
单聊/群聊/公众号消息 内容长度 单聊、群聊消息,单条消息最大长度限制为 12K。
 发送频率 单聊消息:客户端发送单聊消息无限制;REST API 发送有频率限制,可查看相应接口的文档。群聊消息:每个群限 40 条/秒(针对所有群类型、所有平台接口)。不同群内发消息,限频互不影响。
 接收频率 单聊和群聊均无限制。
 单个文件大小 发送文件消息时,SDK 最大支持发送单个文件大小为 100MB。

注意:说明:

更多限制请参见文档 使用限制。

赞 (0)
上一篇 4天前
下一篇 4天前