发送消息
创建文本消息
创建文本消息的接口,此接口返回一个消息实例,可以在需要发送文本消息时调用
发送消息
接口发送消息实例。
tim.createTextMessage(options)
参数
options
为
Object
类型,包含的属性值如下表所示:
Attributes
Default
Description
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值
TIM.TYPES.CONV_C2C
(端到端会话)或
TIM.TYPES.CONV_GROUP
(群组会话)
priority
String
<optional>
TIM.TYPES.MSG_PRIORITY_NORMAL
消息优先级
payload
Object
消息内容的容器
payload
的描述如下表所示:
Description
String
消息文本内容
let message = tim.createTextMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
text: 'Hello world!'
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
消息实例 Message。
创建图片消息
创建图片消息的接口,此接口返回一个消息实例,可以在需要发送图片消息时调用 发送消息 接口发送消息实例。
v2.3.1版本开始支持传入 File 对象,使用前需要将 SDK 升级至v2.3.1或以上。
tim.createImageMessage(options)
参数options
为Object
类型,包含的属性值如下表所示:
Attributes
Default
Description
String
消息的接收方
conversationType
String
会话类型,取值TIM.TYPES.CONV_C2C
或TIM.TYPES.CONV_GROUP
priority
String
<optional>
TIM.TYPES.MSG_PRIORITY_NORMAL
消息优先级
payload
Object
消息内容的容器
onProgress
function
获取上传进度的回调函数
payload
的描述如下表所示:
Description
HTMLInputElement 或 Object
用于选择图片的 DOM 节点(Web)或者 File 对象(Web)或者微信小程序 wx.chooseImage
接口的 success
回调参数。SDK 会读取其中的数据并上传图片
Web 示例
let message = tim.createImageMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
file: document.getElementById('imagePicker'),
onProgress: function(event) { console.log('file uploading:', event) }
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
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];
fileCopy = file.slice();
if (typeof file === 'undefined') {
console.warn('file 是 undefined,请检查代码或浏览器兼容性!');
return;
let message = tim.createImageMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
file: file
onProgress: function(event) { console.log('file uploading:', event) }
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
小程序示例
wx.chooseImage({
sourceType: ['album'],
count: 1,
success: function (res) {
let message = tim.createImageMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: { file: res },
onProgress: function(event) { console.log('file uploading:', event) }
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
消息实例 Message。
创建音频消息
创建音频消息实例的接口,此接口返回一个消息实例,可以在需要发送音频消息时调用 发送消息 接口发送消息。 目前 createAudioMessage 只支持在微信小程序环境使用。
tim.createAudioMessage(options)
参数options
为Object
类型,包含的属性值如下表所示:
Attributes
Default
Description
String
消息的接收方
conversationType
String
会话类型,取值TIM.TYPES.CONV_C2C
或TIM.TYPES.CONV_GROUP
priority
String
<optional>
TIM.TYPES.MSG_PRIORITY_NORMAL
消息优先级
payload
Object
消息内容的容器
payload
的描述如下表所示:
Description
Object
录音后得到的文件信息
小程序示例
const recorderManager = wx.getRecorderManager();
const recordOptions = {
duration: 60000,
sampleRate: 44100,
numberOfChannels: 1,
encodeBitRate: 192000,
format: 'aac'
recorderManager.onError(function(errMsg) {
console.warn('recorder error:', errMsg);
recorderManager.onStop(function(res) {
console.log('recorder stop', res);
const message = tim.createAudioMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
file: res
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
recorderManager.start(recordOptions);
消息实例 Message。
创建文件消息
创建文件消息的接口,此接口返回一个消息实例,可以在需要发送文件消息时调用 发送消息 接口发送消息实例。
! v2.3.1版本开始支持传入 File 对象,使用前需要将 SDK 升级至v2.3.1或以上。
! v2.4.0版本起,上传文件大小最大值调整为100MB。
! 微信小程序目前不支持选择文件的功能,故该接口暂不支持微信小程序端。
tim.createFileMessage(options)
参数options
为Object
类型,包含的属性值如下表所示:
Attributes
Default
Description
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值TIM.TYPES.CONV_C2C
(端到端会话)或TIM.TYPES.CONV_GROUP
(群组会话)
priority
String
<optional>
TIM.TYPES.MSG_PRIORITY_NORMAL
消息优先级
payload
Object
消息内容的容器
onProgress
function
获取上传进度的回调函数
payload
的描述如下表所示:
Description
HTMLInputElement
用于选择文件的 DOM 节点(Web)或者 File 对象(Web),SDK 会读取其中的数据并上传文件
let message = tim.createFileMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
file: document.getElementById('filePicker'),
onProgress: function(event) { console.log('file uploading:', event) }
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
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];
fileCopy = file.slice();
if (typeof file === 'undefined') {
console.warn('file 是 undefined,请检查代码或浏览器兼容性!');
return;
let message = tim.createFileMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
file: file
onProgress: function(event) { console.log('file uploading:', event) }
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
消息实例 Message。
创建自定义消息
创建自定义消息实例的接口,此接口返回一个消息实例,可以在需要发送自定义消息时调用 发送消息 接口发送消息实例。
当 SDK 提供的能力不能满足您的需求时,可以使用自定义消息进行个性化定制,例如投骰子功能。
tim.createCustomMessage(options)
参数options
为Object
类型,包含的属性值如下表所示:
Attributes
Default
Description
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值TIM.TYPES.CONV_C2C
(端到端会话)或TIM.TYPES.CONV_GROUP
(群组会话)
priority
String
<optional>
TIM.TYPES.MSG_PRIORITY_NORMAL
消息优先级
payload
Object
消息内容的容器
payload
的描述如下表所示:
Description
String
自定义消息的数据字段
description
String
自定义消息的说明字段
extension
String
自定义消息的扩展字段
function random(min, max) {
return Math.floor(Math.random() * (max - min + 1) + min);
let message = tim.createCustomMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
data: 'dice',
description: String(random(1,6)),
extension: ''
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
消息实例 Message。
创建视频消息
创建视频消息实例的接口,此接口返回一个消息实例,可以在需要发送视频消息时调用 发送消息 接口发送消息。
使用该接口前,需要将SDK版本升级至v2.2.0或以上。
createVideoMessage 支持在微信小程序环境使用,从v2.6.0起,支持在 Web 环境使用。
微信小程序录制视频,或者从相册选择视频文件,没有返回视频缩略图信息。为了更好的体验,SDK 在创建视频消息时会设置默认的缩略图信息。如果接入侧不想展示默认的缩略图,可在渲染的时候忽略缩图相关信息,自主处理。
全平台互通视频消息,移动端请升级使用 最新的 TUIKit 或 SDK。
tim.createVideoMessage(options)
参数options
为Object
类型,包含的属性值如下表所示:
Attributes
Default
Description
String
消息的接收方
conversationType
String
会话类型,取值TIM.TYPES.CONV_C2C
或TIM.TYPES.CONV_GROUP
priority
String
<optional>
TIM.TYPES.MSG_PRIORITY_NORMAL
消息优先级
payload
Object
消息内容的容器
payload
的描述如下表所示:
Description
HTMLInputElement
、File
或 Object
用于选择视频文件的 DOM 节点(Web)或者 File 对象(Web),或微信小程序录制或者从相册选择的视频文件。SDK 会读取其中的数据并上传
wx.chooseVideo({
sourceType: ['album', 'camera'],
maxDuration: 60,
camera: 'back',
success (res) {
let message = tim.createVideoMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
file: res
onProgress: function(event) { console.log('video uploading:', event) }
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
const message = tim.createVideoMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
file: document.getElementById('videoPicker')
onProgress: function(event) { console.log('file uploading:', event) }
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
消息实例 Message。
创建表情消息
创建表情消息实例的接口,此接口返回一个消息实例,可以在需要发送表情消息时调用 发送消息 接口发送消息。
使用该接口前,需要将 SDK 版本升级至v2.3.1或以上。
tim.createFaceMessage(options)
参数options
为Object
类型,包含的属性值如下表所示:
Attributes
Default
Description
String
消息接收方的 userID 或 groupID
conversationType
String
会话类型,取值TIM.TYPES.CONV_C2C
(端到端会话)或TIM.TYPES.CONV_GROUP
(群组会话)
priority
String
<dx-inline-code-holder></dx-inline-code-holder>
<optional>
消息优先级
TIM.TYPES.MSG_PRIORITY_NORMAL
payload
消息内容的容器
Object
的描述如下表所示:
Description
payload
index
表情索引,用户自定义
Number
let message = tim.createFaceMessage({
to: 'user1',
conversationType: TIM.TYPES.CONV_C2C,
payload: {
index: 1,
data: 'tt00'
let promise = tim.sendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse);
}).catch(function(imError) {
console.warn('sendMessage error:', imError);
消息实例 Message。
发送消息
发送消息的接口,需先调用下列的创建消息实例的接口获取消息实例后,再调用该接口发送消息实例。
创建文本消息
创建图片消息
创建音频消息
创建视频消息
创建自定义消息
创建表情消息
创建文件消息
调用该接口发送消息实例,需要 SDK 处于 ready 状态,否则将无法发送消息实例。SDK 状态,可通过监听以下事件得到:
TIM.EVENT.SDK_READY:SDK 处于 ready 状态时触发。
TIM.EVENT.SDK_NOT_READY:SDK 处于 not ready 状态时触发。
接收推送的单聊、群聊、群提示、群系统通知的新消息,需监听事件 TIM.EVENT.MESSAGE_RECEIVED。
本实例发送的消息,不会触发事件 TIM.EVENT.MESSAGE_RECEIVED。同帐号从其他端(或通过 REST API)发送的消息,会触发事件 TIM.EVENT.MESSAGE_RECEIVED, 离线推送仅适用于终端(Android 或 iOS),Web 和 微信小程序不支持。
tim.sendMessage(options)
参数String
为options
类型,包含的属性值如下表所示:
Attributes
Description
Object
message
Message
options
Object
消息发送选项(消息内容的容器)
optional
的描述如下表所示:
Attributes
Description
options
onlineUserOnly
Boolean
v2.6.4起支持,消息是否仅发送给在线用户的标识,默认值为 false;设置为 true,则消息既不存漫游,也不会计入未读,也不会离线推送给接收方。适合用于发送广播通知等不重要的提示消息场景。在 AVChatRoom 发送消息不支持此选项
optional
offlinePushInfo
Object
v2.6.4起支持,离线推送 配置
optional
的描述如下表所示:
Attributes
Description
offlinePushInfo
disablePush
Boolean
true 关闭离线推送;false 开启离线推送(默认)
optional
title
String
离线推送标题,该字段为 iOS 和 Android 共用
optional
description
String
离线推送内容,该字段会覆盖消息实例的离线推送展示文本。若发送的是自定义消息,该 description 字段会覆盖 message.payload.description。如果 description 和 message.payload.description 字段都不填,接收方将收不到该自定义消息的离线推送
optional
extension
String
离线推送透传内容
optional
ignoreIOSBadge
Boolean
离线推送忽略 badge 计数(仅对 iOS 生效),如果设置为 true,在 iOS 接收端,这条消息不会使 App 的应用图标未读计数增加
optional
androidOPPOChannelID
String
离线推送设置 OPPO 手机 8.0 系统及以上的渠道 ID
tim.sendMessage(message);
tim.sendMessage(message, {
onlineUserOnly: true
tim.sendMessage(message, {
offlinePushInfo: {
disablePush: true
tim.sendMessage(message, {
offlinePushInfo: {
title: '',
description: '',
androidOPPOChannelID: ''
Type : optional
撤回消息
撤回单聊消息或者群聊消息。撤回成功后,消息对象的 Promise
属性值为 isRevoked
。
使用该接口前,需要将 SDK 版本升级至v2.4.0或以上。
消息可撤回时间默认为2分钟。可通过 控制台 调整消息可撤回时间。
被撤回的消息,可以调用 getMessageList 接口从单聊或者群聊消息漫游中拉取到。接入侧需根据消息对象的 isRevoked 属性妥善处理被撤回消息的展示。例如,单聊会话内可展示为 "对方撤回了一条消息",群聊会话内可展示为 "张三撤回了一条消息"。
可使用 REST API 撤回单聊消息 或 撤回群聊消息。
tim.revokeMessage(options)
参数true
为options
类型,包含的属性值如下表所示:
Description
Object
message
let promise = tim.revokeMessage(message);
promise.then(function(imResponse) {
}).catch(function(imError) {
console.warn('revokeMessage error:', imError);
tim.on(TIM.EVENT.MESSAGE_REVOKED, function(event) {
let promise = tim.getMessageList({conversationID: 'C2Ctest', count: 15});
promise.then(function(imResponse) {
const messageList = imResponse.data.messageList;
messageList.forEach(function(message) {
if (message.isRevoked) {
} else {
Type : Message
重发消息
重发消息的接口,当消息发送失败时,调用该接口进行重发。
tim.resendMessage(options)
参数Promise
为options
类型,包含的属性值如下表所示:
Description
Object
message
let promise = tim.resendMessage(message);
promise.then(function(imResponse) {
console.log(imResponse.data.message);
}).catch(function(imError) {
console.warn('resendMessage error:', imError);
该接口返回 Message
对象:
Promise
的回调函数参数为 IMResponse,可在then
中获取群组列表。
IMResponse.data.groupList
的回调函数参数为 IMError。
接收消息
接收消息
请参考 接收消息事件。
接受消息的接口,接收消息需要通过事件监听实现:
let onMessageReceived = function(event) {
tim.on(TIM.EVENT.MESSAGE_RECEIVED, onMessageReceived);
解析文本消息
- 简单版
如果您的文本消息只含有文字,则可以直接在 UI 上渲染出catch
文字。
- 含有 [呲牙] 内容需要解析为的文本
const emojiMap = {
'[微笑]': 'emoji_0.png',
'[呲牙]': 'emoji_1.png',
'[下雨]': 'emoji_2.png'
const emojiUrl = 'http://xxxxxxxx/emoji/'
function parseText (payload) {
let renderDom = []
let temp = payload.text
let left = -1
let right = -1
while (temp !== '') {
left = temp.indexOf('[')
right = temp.indexOf(']')
switch (left) {
case 0:
if (right === -1) {
renderDom.push({
name: 'text',
text: temp
temp = ''
} else {
let _emoji = temp.slice(0, right + 1)
if (emojiMap[_emoji]) {
renderDom.push({
name: 'img',
src: emojiUrl + emojiMap[_emoji]
temp = temp.substring(right + 1)
} else {
renderDom.push({
name: 'text',
text: '['
temp = temp.slice(1)
break
case -1:
renderDom.push({
name: 'text',
text: temp
temp = ''
break
default:
renderDom.push({
name: 'text',
text: temp.slice(0, left)
temp = temp.substring(left)
break
return renderDom
解析系统消息
function parseGroupSystemNotice (payload) {
const groupName =
payload.groupProfile.groupName || payload.groupProfile.groupID
switch (payload.operationType) {
case 1:
return `${payload.operatorID} 申请加入群组:${groupName}`
case 2:
return `成功加入群组:${groupName}`
case 3:
return `申请加入群组:${groupName}被拒绝`
case 4:
return `被管理员${payload.operatorID}踢出群组:${groupName}`
case 5:
return `群:${groupName} 已被${payload.operatorID}解散`
case 6:
return `${payload.operatorID}创建群:${groupName}`
case 7:
return `${payload.operatorID}邀请你加群:${groupName}`
case 8:
return `你退出群组:${groupName}`
case 9:
return `你被${payload.operatorID}设置为群:${groupName}的管理员`
case 10:
return `你被${payload.operatorID}撤销群:${groupName}的管理员身份`
case 255:
return '自定义群系统通知'
解析群提示消息
function parseGroupTipContent (payload) {
switch (payload.operationType) {
case this.TIM.TYPES.GRP_TIP_MBR_JOIN:
return `群成员:${payload.userIDList.join(',')},加入群组`
case this.TIM.TYPES.GRP_TIP_MBR_QUIT:
return `群成员:${payload.userIDList.join(',')},退出群组`
case this.TIM.TYPES.GRP_TIP_MBR_KICKED_OUT:
return `群成员:${payload.userIDList.join(',')},被${payload.operatorID}踢出群组`
case this.TIM.TYPES.GRP_TIP_MBR_SET_ADMIN:
return `群成员:${payload.userIDList.join(',')},成为管理员`
case this.TIM.TYPES.GRP_TIP_MBR_CANCELED_ADMIN:
return `群成员:${payload.userIDList.join(',')},被撤销管理员`
default:
return '[群提示消息]'
会话相关
获取某会话的消息列表
请参考 Conversation。
分页拉取指定会话的消息列表的接口,当用户进入会话首次渲染消息列表或者用户“下拉查看更多消息”时,需调用该接口。
tim.getMessageList(options)
let promise = tim.getMessageList({conversationID: 'C2Ctest', count: 15});
promise.then(function(imResponse) {
const messageList = imResponse.data.messageList;
const nextReqMessageID = imResponse.data.nextReqMessageID;
const isCompleted = imResponse.data.isCompleted;
let promise = tim.getMessageList({conversationID: 'C2Ctest', nextReqMessageID, count: 15});
promise.then(function(imResponse) {
const messageList = imResponse.data.messageList;
const nextReqMessageID = imResponse.data.nextReqMessageID;
const isCompleted = imResponse.data.isCompleted;
该接口返回 <optional>
对象:
Promise
的回调函数参数为 IMResponse,可在then
中获取群组列表。
IMResponse.data.groupList
的回调函数参数为 IMError。
将会话设置为已读
将某会话下的未读消息状态设置为已读,置为已读的消息不会计入到未读统计,当打开会话或切换会话时调用该接口。如果在打开/切换会话时,不调用该接口,则对应的消息会一直是未读的状态。
tim.setMessageRead(options)
参数catch
为options
类型,包含的属性值如下表所示:
Description
Object
options
消息内容的容器
Object
的描述如下表所示:
Description
payload
conversationID
会话 ID。会话 ID 组成方式:C2C+userID(单聊)GROUP+groupID(群聊)@TIM#SYSTEM(系统通知会话)
tim.setMessageRead({conversationID: 'C2Cexample'});
获取会话列表
获取会话列表的接口,该接口拉取最近的100条会话,当需要刷新会话列表时调用该接口。
- 该接口获取的会话列表中的资料是不完整的(仅包括头像、昵称等,能够满足会话列表的渲染需求),若要查询详细会话资料,请参考 getConversationProfile。
- 会话保存时长跟会话最后一条消息保存时间一致,消息默认保存7天,即会话默认保存7天。
tim.getConversationList()
let promise = tim.getConversationList();
promise.then(function(imResponse) {
const conversationList = imResponse.data.conversationList;
}).catch(function(imError) {
console.warn('getConversationList error:', imError);
该接口返回 String
对象:
Promise
的回调函数参数为 IMResponse,可在then
中获取群组列表。
IMResponse.data.groupList
的回调函数参数为 IMError。
获取会话资料
获取会话资料的接口,当单击会话列表中的某个会话时,调用该接口获取会话的详细信息。
tim.getConversationProfile(conversationID)
参数catch
为options
类型,包含的属性值如下表所示:
Description
Object
conversationID
会话 ID。会话 ID 组成方式:C2C+userID(单聊)GROUP+groupID(群聊)@TIM#SYSTEM(系统通知会话)
let promise = tim.getConversationProfile(conversationID);
promise.then(function(imResponse) {
console.log(imResponse.data.conversation);
}).catch(function(imError) {
console.warn('getConversationProfile error:', imError);
该接口返回 String
对象:
Promise
的回调函数参数为 IMResponse,可在then
中获取群组列表。
IMResponse.data.groupList
的回调函数参数为 IMError。
删除会话
根据会话 ID 删除会话的接口,该接口只删除会话,不删除消息。例如,删除与用户 A 的会话,下次再与用户 A 发起会话时,之前的聊天信息仍在。
tim.deleteConversation(conversationID)
参数catch
为options
类型,包含的属性值如下表所示:
Description
Object
conversationID
会话 ID。会话 ID 组成方式:C2C+userID(单聊)GROUP+groupID(群聊)@TIM#SYSTEM(系统通知会话)
let promise = tim.deleteConversation('C2CExample');
promise.then(function(imResponse) {
const { conversationID } = imResponse.data;
}).catch(function(imError) {
console.warn('deleteConversation error:', imError);
该接口返回 String
对象:
Promise
的回调函数参数为 IMResponse,可在then
中获取群组列表。
IMResponse.data.groupList
的回调函数参数为 IMError。