消息内容 MsgBody 说明
MsgBody 中所填写字段是消息内容。即时通信 IM 支持一条消息中包括多种消息元素类别,例如一条消息中既包括文本消息元素,还包括表情消息元素。因此 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 | 视频消息。 |
TIMRelayElem | 合并转发消息。 |
注意:
上述类型的消息均能通过服务端集成的 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 自定义消息元素时,需要填写 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 及以上版本 IM 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版本 IM SDK(Android、iOS、Mac 以及 Windows)发出的语音消息元素如下:
{"MsgType": "TIMSoundElem","MsgContent": {"UUID": "305c0201", //语音的唯一标识,类型为 String。客户端用于索引语音的键值。无法通过该字段下载相应的语音。若需要获取该语音,请升级 IM SDK 版本至4.X。"Size": 62351, //语音数据大小,类型为 Number,单位:字节。"Second": 1 //语音时长,类型为 Number,单位:秒。}}
图像消息元素
注意:
{"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 及以上版本 IM 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版本 IM 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)发出的视频消息元素的格式如下:
{"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版本 IM 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 & 小程序 & uni-app 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 收到此类消息时,IM 后台会将该消息转化成兼容文本再下发。 |
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 | |
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"}