一、创建文本消息
接口
参数
参数 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。 |
注意:说明:
更多限制请参见文档 使用限制。