1、消息抄送功能是指将用户发送的消息数据实时同步给第三方开发者的业务服务器。使用该功能之前,用户需要开通专有云,并通过云通讯管理控制台-IM专业功能配置-消息抄送选项添加抄送地址;如果未配置抄送地址,则不会进行消息抄送;
2、云通讯提供普通消息抄送和高保障消息抄送两种方式。对于普通消息抄送,只进行一次抄送,抄送失败,将不再重发;对于高保障消息抄送,抄送消息时,若开发者服务器处于离线状态或者由于其他原因导致连接不上消息接收地址,导致抄送失败。云通讯会尝试抄送一定次数,若开发者服务器仍然无法连接,云通讯将停止抄送;
3、第三方服务器在收到云通讯IM服务器请求时,需要在超时时间(5s)内返回HTTP 200的状态码,否则云通讯IM服务器会判定请求超时,该条请求发送失败。如果第三方消息接收接口在接收到消息之后,会做比较耗时的操作(例如DB入库等操作),建议将该接口做成异步机制(例如可以将消息先存到MQ中),以免被云通讯判定为超时;
4、云通讯IM服务器通过HTTP POST方式向第三方回调地址发送请求。为了保证消息的合法性,第三方服务器需要对该请求进行校验。校验规则如下:Hearder头中携带CheckSum、MD5、CurTime参数。第三方服务器收到云通讯请求后,生成CheckSum与云通讯Header中的CheckSum进行对比,如果一致,则校验通过。CheckSum生成规则如下:CheckSum= MD5(AppId + AppToken+ MD5 + CurTime);
5、为了保证数据安全性,建议开发者使用HTTPS协议来接收请求。
CheckSum= MD5(AppId + AppToken+ MD5 + CurTime),参数说明如下:
参数 |
参数说明 |
---|---|
AppId |
登陆官网查看控制台→应用列表→应用管理→APP ID |
AppToken |
登陆官网查看控制台→应用列表→应用管理→APP TOKEN |
MD5 |
MD5值为根据request body计算出来的值, 即MD5值 = md5(request body) |
CurTime |
当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的毫秒数(String) |
重要提示:
用于计算CheckSum的AppId和AppToken开发者应妥善保管,可在应用的服务器端存储和使用,但不应存储或传递到客户端,也不应在网页等前端代码中嵌入。
1、举例
MD5值计算举例 String requestBody = "{}"; String MD5 = MD5(requestBody); CheckSum值计算举例 String AppId = "20150314000000110000000000000010"; String AppToken = "17E24E5AFDB6D0C1EF32F3533494502B"; String MD5 = "98949123123123123123123dasf61f7"; // 全大写,第三方可以在验证的时候忽略大小写 String CurTime = "1440570500855"; //当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的毫秒数(String) String CheckSum = MD5(AppId + AppToken + MD5 + CurTime); // 全大写,第三方可以在验证的时候忽略大小写 HTTP示例: POST /receiveMsg HTTP/1.1 Host: 192.168.0.1:8883 Content-Type: application/json CurTime: 1440570500855 MD5: feec2cda404d7417b8b427e95748bb56 CheckSum: 001511b8435e0b28044ca50a78e8f983026c5e01 {"eventType":"1","convType":"CUSTOM_TEAM","to":"g811575162", "fromAccount":"20150314000000110000000000000010#555555","fromClientType":"REST", "fromDeviceId":"","fromNick":"555555","msgTimestamp":"1503997379456","msgType":"TEXT","body":"容联云通讯", "attach":"","msgId":"A3A479603AD942ADBEE7FCB38E90F4B8|sNNp1H","resendFlag":"0","customSaveFlag":"", "customApnsFlag":"","customApnsText":"", "tMembers":["20150314000000110000000000000010#666666","20150314000000110000000000000010#888888"], "atUser":["20150314000000110000000000000010#666666"],"ext":"","linkInfo":"","antispam":"false"}
注意:
会话类型消息中,并不是每个字段都会一定抄送,请注意对各字段的判空处理。
2、请求包体参数说明
名称 | 类型 | 约束 | 说明 |
---|---|---|---|
eventType | String | 必选 | 值为1,表示是会话类型的消息 |
convType | String | 必选 | 会话具体类型: PERSON(单聊数据)、
TEAM(群聊数据)、 CUSTOM_PERSON(Rest个人推送)、CUSTOM_TEAM(Rest群组推送)、 NOTIFY_TEAM(群组通知) |
to | String | 必选 | 若convType为PERSON,则to为消息接收者的用户账号,字符串类型; 若convType为TEAM或CUSTOM_TEAM,则to为群组id; 若convType为CUSTOM_PERSON,则to为“REST”固定字符串, 接收者tMembers中存储; 若convType为NOTIFY_TEAM,则to为群组id |
fromAccount | String | 必选 | 消息发送者的用户账号,字符串类型 |
fromClientType | String | 可选 | 发送客户端类型: Android、IOS、IPAD、Android PAD、PC、H5、MAC、REST |
fromDeviceId | String | 可选 | 发送设备id,字符串类型 |
fromNick | String | 可选 | 发送方昵称,字符串类型 |
msgTimestamp | String | 必选 | 消息发送时间,long型 |
msgType | String | 必选 | 会话具体类型PERSON、TEAM,CUSTOM_PERSON,CUSTOM_TEAM 对应的通知消息类型: TEXT、// 文本 PICTURE、 // 图片 AUDIO、// 语音 VIDEO、//视频 LOCATION 、//位置 FILE、 //文件消息 FILE_COMPRESS、 //文件压缩 LINK、//链接消息 AT、//群组@消息会话具体类型NOTIFY_TEAM对应的通知消息类型: TEAM_APPLY、 //申请入群 TEAM_INVITE、 //邀请进群 TEAM_JOIN、//直接加入群 TEAM_DISMISS、//解散 TEAM_QUIT、//退出 TEAM_KICK、//踢出 TEAM_APPLY_ACCEPT、//同意入群申请 TEAM_INVITE_ACCEPT、//同意入群邀请 TEAM_APPLY_REJECT、 //拒绝入群申请 TEAM_INVITE_REJECT、 //拒绝邀请 TEAM_UPDATE、 //群信息更新 TEAM_MEMBER_UPDATE、//成员信息更新 TEAM_ADD_ADMIN、//管理员人员退出完后设置最近的人员为管理员通知 TEAM_ROLE_UPDATE、//角色变更 |
body | String | 可选 | 消息内容,字符串类型 |
attach | String | 可选 | 附件URL下载地址,字符串类型 |
msgId | String | 必选 | 服务端生成的消息id |
resendFlag | String | 可选 | 重发标记:0或者空不是重发, 1是重发。可转为Integer类型数据 |
customSaveFlag | String | 可选 | 自定义消息是否存离线:0:不存,1:存。可转为Integer类型数据 |
customApnsFlag | String | 可选 | 自定义消息是否进行离线推送,0 不推送离线 1推送离线 |
customApnsText | String | 可选 | 自定义消息推送文本。字符串类型 |
tMembers | String | 可选 | convType为TEAM或CUSTOM_TEAM时含此字段, 或者rest个人或多人推送消息也含有此字段 跟本次群操作有关的用户userAcc或者推送的用户userAcc tMembers格式举例: { "tMembers":["20150314000000110000000000000010#123","20150314000000110000000000000010#456"] } |
atUser | String | 可选 | @用户的账号 { "atUser":["20150314000000110000000000000010#123", "20150314000000110000000000000010#456"] } |
ext | String | 可选 | 消息扩展字段 |
linkInfo | String | 可选 | 链接消息时,链接中的信息 |
antispam | String | 可选 | 标识是否被反垃圾,仅在开启黑词校验, 且为同步校验才有此字段,可转为Boolean类型数据 |
文档更新时间:2017年9月1日