消息格式描述

消息内容 MsgBody 说明

MsgBody 中所填写字段是消息内容。即时通信 Chat 支持一条消息中包括多种消息元素类别,例如一条消息中既包括文本消息元素,还包括表情消息元素。因此 MsgBody 定义为 Array 格式,可按照需求加入多类消息元素。消息元素名称为 TIMMsgElement,消息元素 TIMMsgElement 组成 MsgBody 的示例请参见 消息内容 MsgBody 实例
消息元素 TIMMsgElement 的格式统一为:
{
"MsgType": "",
"MsgContent": {}
}
字段
类型
说明
MsgType
String
消息元素类别;目前支持的消息对象包括:TIMTextElem(文本消息),TIMLocationElem(位置消息),TIMFaceElem(表情消息),TIMCustomElem(自定义消息),TIMSoundElem(语音消息),TIMImageElem(图像消息),TIMFileElem(文件消息),TIMVideoFileElem(视频消息)。
MsgContent
Object
消息元素的内容,不同的 MsgType 有不同的 MsgContent 格式,具体参见下文。
目前支持消息类别 MsgType 见下表:
MsgType的值
类型
TIMTextElem
文本消息。
TIMLocationElem
地理位置消息。
TIMFaceElem
表情消息。
TIMCustomElem
自定义消息,当接收方为 iOS 系统且应用处在后台时,此消息类型可携带除文本以外的字段到 APNs。一条组合消息中只能包含一个 TIMCustomElem 自定义消息元素。
TIMSoundElem
语音消息。
TIMImageElem
图像消息。
TIMFileElem
文件消息。
TIMVideoFileElem
视频消息。
注意
上述类型的消息均能通过服务端集成的 REST API 接口发送。

消息元素 TIMMsgElement

文本消息元素

{
"MsgType": "TIMTextElem",
"MsgContent": {
"Text": "hello world"
}
}
字段
类型
说明
Text
String
消息内容。当接收方为 iOS 或 Android 后台在线时,作为离线推送的文本展示。
当接收方为 iOS 或 Android,且应用处在后台时,JSON 请求包体中的 Text 字段作为离线推送的文本展示。

地理位置消息元素

{
"MsgType": "TIMLocationElem",
"MsgContent": {
"Desc": "someinfo",
"Latitude": 29.340656774469956,
"Longitude": 116.77497920478824
}
}
字段
类型
说明
Desc
String
地理位置描述信息。
Latitude
Number
纬度。
Longitude
Number
经度。
当接收方为 iOS 或 Android,且应用处在后台时,中文版离线推送文本为“[位置]”,英文版离线推送文本为“[Location]”。

表情消息元素

{
"MsgType": "TIMFaceElem",
"MsgContent": {
"Index": 1,
"Data": "content"
}
}
字段
类型
说明
Index
Number
表情索引,用户自定义。
Data
String
额外数据。
当接收方为 iOS 或 Android,且应用处在后台时,中文版离线推送文本为“[表情]”,英文版离线推送文本为“[Face]”。
说明
当消息中只有一个 TIMCustomElem 自定义消息元素时,如果 Desc 字段和 OfflinePushInfo.Desc 字段都不填写,将收不到该条消息的离线推送,需要填写 OfflinePushInfo.Desc 字段才能收到该消息的离线推送。

自定义消息元素

注意:
当消息中只有一个 TIMCustomElem 自定义消息元素时,需要填写 OfflinePushInfo.Desc 字段才能收到该消息的离线推送。
{
"MsgType": "TIMCustomElem",
"MsgContent": {
"Data": "message"
}
}
字段
类型
说明
Data
String
自定义消息数据。

语音消息元素

注意
通过服务端集成的 REST API 接口发送语音消息时,必须填入语音的 Url、UUID、Download_Flag 字段。需保证通过 Url 能下载到对应语音。UUID 字段需填写全局唯一的 String 值,一般填入语音文件的 MD5 值。消息接收者可以通过 V2TIMSoundElem.getUUID() 拿到设置的 UUID 字段,业务 App 可以用这个字段做语音的区分。Download_Flag 字段必须填2。
4.X 及以上版本 Chat SDK(Android、iOS、Mac 以及 Windows)发出的语音消息元素的格式如下:
{
"MsgType": "TIMSoundElem",
"MsgContent": {
"Url": "https://1234-5678187359-1253735226.cos.ap-shanghai.myqcloud.com/abc123/c9be9d32c05bfb77b3edafa4312c6c7d",
"UUID": "1053D4B3D61040894AC3DE44CDF28B3EC7EB7C0F",
"Size": 62351,
"Second": 1,
"Download_Flag": 2
}
}
字段
类型
说明
Url
String
语音下载地址,可通过该 URL 地址直接下载相应语音。
UUID
String
语音的唯一标识,客户端用于索引语音的键值。
Size
Number
语音数据大小,单位:字节。
Second
Number
语音时长,单位:秒。
Download_Flag
Number
语音下载方式标记。目前 Download_Flag 取值只能为2,表示可通过Url字段值的 URL 地址直接下载语音。
说明
2.X和3.X版本 Chat SDK(Android、iOS、Mac 以及 Windows)发出的语音消息元素如下:
{
"MsgType": "TIMSoundElem",
"MsgContent": {
"UUID": "305c0201", //语音的唯一标识,类型为 String。客户端用于索引语音的键值。无法通过该字段下载相应的语音。若需要获取该语音,请升级 IM SDK 版本至4.X。
"Size": 62351, //语音数据大小,类型为 Number,单位:字节。
"Second": 1 //语音时长,类型为 Number,单位:秒。
}
}

图像消息元素

注意
通过服务端集成的 REST API 接口发送图像消息时,必须填入图像的以下字段:URL、UUID、Width、Height。需保证通过 URL 能下载到对应图像。可据此 获取图片基本信息处理图片。Width 和 Height 分别为图片的宽度和高度,单位为像素。UUID 字段需填写全局唯一的 String 值,一般填入图片的 MD5 值。消息接收者通过调用 V2TIMImageElem.getImageList() 拿到 V2TIMImage 对象,然后通过调用V2TIMImage.getUUID() 拿到设置的 UUID 字段,业务 App 可以用这个字段做图片的区分。
{
"MsgType": "TIMImageElem",
"MsgContent": {
"UUID": "1853095_D61040894AC3DE44CDFFFB3EC7EB720F",
"ImageFormat": 1,
"ImageInfoArray": [
{
"Type": 1, //原图
"Size": 1853095,
"Width": 2448,
"Height": 3264,
"URL": "http://xxx/3200490432214177468_144115198371610486_D61040894AC3DE44CDFFFB3EC7EB720F/0"
},
{
"Type": 2, //大图
"Size": 2565240,
"Width": 0,
"Height": 0,
"URL": "http://xxx/3200490432214177468_144115198371610486_D61040894AC3DE44CDFFFB3EC7EB720F/720"
},
{
"Type": 3, //缩略图
"Size": 12535,
"Width": 0,
"Height": 0,
"URL": "http://xxx/3200490432214177468_144115198371610486_D61040894AC3DE44CDFFFB3EC7EB720F/198"
}
]
}
}
字段
类型
说明
UUID
String
图片的唯一标识,客户端用于索引图片的键值。
ImageFormat
Number
图片格式。JPG = 1,GIF = 2,PNG = 3,BMP = 4,其他 = 255。
ImageInfoArray
Array
原图、缩略图或者大图下载信息。
Type
Number
图片类型: 1-原图,2-大图,3-缩略图。
Size
Number
图片数据大小,单位:字节。
Width
Number
图片宽度,单位为像素。
Height
Number
图片高度,单位为像素。
URL
String
图片下载地址。

文件消息元素

注意
通过服务端集成的 REST API 接口发送文件消息时,需要填入文件的 Url、UUID、Download_Flag 字段。需保证通过该 Url 能下载到对应文件。UUID 字段需填写全局唯一的 String 值,一般填入文件的 MD5 值。消息接收者可以通过调用 V2TIMFileElem.getUUID() 拿到设置的 UUID 字段,业务 App 可以用这个字段做文件的区分。Download_Flag字段必须填2。
4.X 及以上版本 Chat SDK(Android、iOS、Mac 以及 Windows)发出的文件消息元素的格式如下:
{
"MsgType": "TIMFileElem",
"MsgContent": {
"Url": "https://7492-5678539059-1253735326.cos.ap-shanghai.myqcloud.com/abc123/49be9d32c0fbfba7b31dafa4312c6c7d",
"UUID": "1053D4B3D61040894AC3DE44CDF28B3EC7EB7C0F",
"FileSize": 1773552,
"FileName": "file:///private/var/Application/tmp/trim.B75D5F9B-1426-4913-8845-90DD46797FCD.MOV",
"Download_Flag": 2
}
}
字段
类型
说明
Url
String
文件下载地址,可通过该 URL 地址直接下载相应文件。
UUID
String
文件的唯一标识,客户端用于索引文件的键值。
FileSize
Number
文件数据大小,单位:字节。
FileName
String
文件名称。
Download_Flag
Number
文件下载方式标记。目前 Download_Flag 取值只能为2,表示可通过Url字段值的 URL 地址直接下载文件。
说明
2.X和3.X版本 Chat SDK(Android、iOS、Mac 以及 Windows)发出的文件消息元素如下:
{
"MsgType": "TIMFileElem",
"MsgContent": {
"UUID": "305c02010", //文件的唯一标识,类型为 String。客户端用于索引文件的键值。无法通过该字段下载相应的文件。若需要获取该文件,请升级 IM SDK 版本至4.X。
"FileSize": 1773552, //文件数据大小,类型为 Number,单位:字节。
"FileName": "file:///private/var/Application/tmp/trim.B75D5F9B-1426-4913-8845-90DD46797FCD.MOV" //文件名称,类型为 String。
}
}

### 视频消息元素

>!通过服务端集成的 Rest API 接口发送视频消息时,必须填入 VideoUrl、VideoUUID、ThumbUrl、ThumbUUID、ThumbWidth、ThumbHeight、VideoDownloadFlag 和 ThumbDownloadFlag字段。需保证通过 VideoUrl 能下载到对应视频,通过 ThumbUrl 能下载到对应的视频缩略图。VideoUUID 和 ThumbUUID 字段需填写全局唯一的 String 值,一般填入对应视频和视频缩略图的 MD5 值。消息接收者可以通过调用 V2TIMVideoElem.getVideoUUID() 和 V2TIMVideoElem.getSnapshotUUID() 分别拿到设置的 UUID 字段,业务 App 可以用这个字段做视频的区分。VideoDownloadFlag 和 ThumbDownloadFlag 字段必须填2。

4.X 及以上版本 IM SDK(Android、iOS、Mac 以及 Windows)发出的视频消息元素的格式如下:

视频消息元素

注意:
通过服务端集成的 REST API 接口发送视频消息时,必须填入 VideoUrl、VideoUUID、ThumbUrl、ThumbUUID、ThumbWidth、ThumbHeight、VideoDownloadFlag 和 ThumbDownloadFlag字段。需保证通过 VideoUrl 能下载到对应视频,通过 ThumbUrl 能下载到对应的视频缩略图。VideoUUID 和 ThumbUUID 字段需填写全局唯一的 String 值,一般填入对应视频和视频缩略图的 MD5 值。消息接收者可以通过调用 V2TIMVideoElem.getVideoUUID() 和 V2TIMVideoElem.getSnapshotUUID() 分别拿到设置的 UUID 字段,业务 App 可以用这个字段做视频的区分。VideoDownloadFlag 和 ThumbDownloadFlag 字段必须填2。
4.X 及以上版本 Chat SDK(Android、iOS、Mac 以及 Windows)发出的视频消息元素的格式如下:
{
"MsgType": "TIMVideoFileElem",
"MsgContent": {
"VideoUrl": "https://0345-1400187352-1256635546.cos.ap-shanghai.myqcloud.com/abcd/f7c6ad3c50af7d83e23efe0a208b90c9";,
"VideoUUID": "5da38ba89d6521011e1f6f3fd6692e35",
"VideoSize": 1194603,
"VideoSecond": 5,
"VideoFormat": "mp4",
"VideoDownloadFlag":2,
"ThumbUrl": "https://0345-1400187352-1256635546.cos.ap-shanghai.myqcloud.com/abcd/a6c170c9c599280cb06e0523d7a1f37b";,
"ThumbUUID": "6edaffedef5150684510cf97957b7bc8",
"ThumbSize": 13907,
"ThumbWidth": 720,
"ThumbHeight": 1280,
"ThumbFormat": "JPG",
"ThumbDownloadFlag":2
}
}
字段
类型
说明
VideoUrl
String
视频下载地址。可通过该 URL 地址直接下载相应视频。
VideoUUID
String
视频的唯一标识,客户端用于索引视频的键值。
VideoSize
Number
视频数据大小,单位:字节。
VideoSecond
Number
视频时长,单位:秒。Web 端不支持获取视频时长,值为0。
VideoFormat
String
视频格式,例如 mp4。
VideoDownloadFlag
Number
视频下载方式标记。目前 VideoDownloadFlag 取值只能为2,表示可通过`VideoUrl`字段值的 URL 地址直接下载视频。
ThumbUrl
String
视频缩略图下载地址。可通过该 URL 地址直接下载相应视频缩略图。
ThumbUUID
String
视频缩略图的唯一标识,客户端用于索引视频缩略图的键值。
ThumbSize
Number
缩略图大小,单位:字节。
ThumbWidth
Number
缩略图宽度,单位为像素。
ThumbHeight
Number
缩略图高度,单位为像素。
ThumbFormat
String
缩略图格式,例如 JPG、BMP 等。
ThumbDownloadFlag
Number
视频缩略图下载方式标记。目前 ThumbDownloadFlag 取值只能为2,表示可通过`ThumbUrl`字段值的 URL 地址直接下载视频缩略图。
说明:
2.X和3.X版本 Chat SDK(Android、iOS、Mac 以及 Windows)发出的视频消息元素如下:
{
"MsgType": "TIMVideoFileElem",
"MsgContent": {
"VideoUUID": "1400123456_dramon_34ca36be7dd214dc50a49238ef80a6b5",//视频的唯一标识,类型为 String。客户端用于索引视频的键值。无法通过该字段下载相应的视频。若需要获取该视频,请升级 IM SDK 版本至4.X。
"VideoSize": 1194603, //视频数据大小,类型为 Number,单位:字节。
"VideoSecond": 5, //视频时长,类型为 Number,单位:秒。
"VideoFormat": "mp4", //视频格式,类型为 String,例如 mp4。
"ThumbUUID": "1400123456_dramon_893f5a7a4872676ae142c08acd49c18a",//视频缩略图的唯一标识,类型为 String。客户端用于索引视频缩略图的键值。无法通过该字段下载相应的视频缩略图。若需要获取该视频缩略图,请升级 IM SDK 版本至4.X。
"ThumbSize": 13907, //缩略图大小,类型为 Number,单位:字节。
"ThumbWidth": 720, //缩略图宽度。类型为 Number。
"ThumbHeight": 1280, //缩略图高度。类型为 Number。
"ThumbFormat": "JPG" //缩略图格式,类型为 String,例如 JPG、BMP 等。
}
}

合并转发消息元素

注意
终端 5.2.210 及以上版本,web 2.10.1 及以上版本才支持收发合并转发消息。
{
"MsgType": "TIMRelayElem",
"MsgContent": {
"Title": "群聊的聊天记录",
"MsgNum": 2,
"CompatibleText": "该SDK版本不支持合并转发消息,请升级到新版本。",
"AbstractList": [
"A:大家觉得这个怎么样?",
"B:我觉得挺好的"
],
"MsgList": [
{
"From_Account": "A",
"GroupId": "group1",
"MsgSeq": 85,
"MsgRandom": 3998651049,
"MsgTimeStamp": 1664437702,
"MsgBody": [
{
"MsgContent": {
"Text": "大家觉得这个怎么样?"
},
"MsgType": "TIMTextElem"
}
]
},
{
"From_Account": "B",
"GroupId": "group1",
"MsgSeq": 86,
"MsgRandom": 965790,
"MsgTimeStamp": 1664437703,
"MsgBody": [
{
"MsgContent": {
"Text": "我觉得挺好的"
},
"MsgType": "TIMTextElem"
}
]
}
]
}
}
字段
类型
说明
Title
String
合并转发消息的标题。
MsgNum
Integer
被转发的消息条数。
CompatibleText
String
兼容文本。当不支持合并转发消息的老版本 SDK 收到此类消息时,Chat 后台会将该消息转化成兼容文本再下发。
AbstractList
Array
合并消息的摘要列表,是一个 String 数组。
MsgList
Array
消息列表。当被转发的消息长度之和小于等于12K时才会有此字段,此时不会有 JsonMsgKey 字段。
JsonMsgKey
String
合并转发的消息列表 Key。当被转发的消息长度之和大于12K时才会有此字段,此时不会有 MsgList 字段。
MsgList 中每条消息的结构如下:
字段
类型
说明
From_Account
String
消息发送方 UserID。被转发的消息为单聊或群聊时都有此字段。
To_Account
String
消息接收方 UserID。被转发的消息为单聊才有此字段。
GroupId
String
群ID。被转发的消息为群聊才有此字段。
MsgSeq
Integer
消息序列号(32位无符号整数)。
MsgRandom
Integer
消息随机数(32位无符号整数)。
MsgTimeStamp
Integer
消息的秒级时间戳。
MsgBody
Array
消息内容,具体格式请参考 消息格式描述(注意,一条消息可包括多种消息元素,MsgBody 为 Array 类型)。
CloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)。

MsgBody 消息内容实例

单一文本元素消息

单条消息中只包括一个中文本消息元素,文本内容为 hello world。
{
"MsgBody": [
{
"MsgType": "TIMTextElem",
"MsgContent": {
"Text": "hello world"
}
}
]
}

组合消息

下述的单条消息中包括两个文本消息元素和一个表情元素,消息元素顺序是文本+表情+文本。
{
"MsgBody": [
{
"MsgType": "TIMTextElem",
"MsgContent": {
"Text": "hello"
}
},
{
"MsgType": "TIMFaceElem",
"MsgContent": {
"Index": 1,
"Data": "content"
}
},
{
"MsgType": "TIMTextElem",
"MsgContent": {
"Text": "world"
}
}
]
}
注意
一条组合消息中只能带一个 TIMCustomElem 自定义消息元素, 其它消息元素数量无限制。

消息自定义数据 CloudCustomData 说明

每条消息可以携带自定义数据 CloudCustomData。
CloudCustomData 会跟该条消息的 MsgBody 一起保存在云端,CloudCustomData 会发送到对端,程序卸载重装后还能拉取到。
CloudCustomData 与 MsgBody 的格式示例如下:
{
"MsgBody": [
{
"MsgType": "TIMTextElem",
"MsgContent": {
"Text": "hello"
}
}
],
"CloudCustomData": "your cloud custom data"
}