一、注意事项
·要启用回调,必须配置回调 URL,并打开本回调对应的开关,配置方法详见 第三方回调配置 文档。
·回调的方向是即时通信 IM 后台向 App 后台发起 HTTP POST 请求。
·App 后台在收到回调请求之后,务必校验请求 URL 中的参数 SDKAppID 是否是自己的 SDKAppID。
·其他安全相关事宜请参见 第三方回调简介:安全考虑 文档。
二、请求 URL 示例
以下示例中 App 配置的回调 URL 为 https://www.example.com
示例:
https://www.example.com?SdkAppid=$SDKAppID&CallbackCommand=$CallbackCommand&contenttype=json
三、请求参数说明
| 字段 | 说明 |
| https | 请求协议为 HTTPS。请求方式为 POST。 |
| www.example.com | 回调 URL。 |
| SdkAppid | 创建应用时在即时通信 IM 控制台分配的 SDKAppID。 |
| CallbackCommand | 固定为:Push.OfflinePush。 |
| contenttype | 请求包体固定为 json。 |
四、请求包示例
{ "Events": [ // events数组长度范围为1~100 { "CallbackCommand":"Push.OfflinePush", "EventType": 1, // 事件类型,EventType=1表示单聊 "EventTime": 1557481127, // 事件发生时间戳, 单位为秒 "From_Account": "user1", // 发送者 "To_Account": "user2", // 接受者 "PushPlatform": 1, // 推送厂商 "PushStage": 1, // 推送阶段 "VendorInfo": { "FCM": { // 消息推送到FCM,这里包含了FCM厂商信息 "PushID": "xxxx", // 推送到FCM后,FCM推送返回的FCM厂商推送ID "ChannelID": "xxxx" // 发起推送时设置的FCM通知渠道字段值 }, }, "MsgKey": "48374_2837546_1557481126", // 单聊消息的唯一标识 "MsgSeq": 48374, // 消息序列号 "MsgRandom": 2837546, // 消息随机数 "MsgTime": 1557481126, // 消息的发送时间戳,单位为秒 "PushID": "67120c46_6a4086c0_9bf5fb50_200002d1089b322_2000005d8d46421", // 推送唯一标识 "ErrCode": 0, // 推送事件结果 "ErrInfo": "OK" // 推送事件结果描述,可能为空 }, { "CallbackCommand":"Push.OfflinePush", "EventType": 2, // 事件类型,EventType=2表示群聊 "EventTime": 1557481127, // 事件发生时间戳, 单位为秒 "From_Account": "user2", // 发送者 "To_Account": "user3", // 接受者 "PushPlatform": 1, // 推送厂商 "PushStage": 1, // 推送阶段 "VendorInfo": { "Hmony": { // 消息推送至鸿蒙,这里包含了鸿蒙厂商信息 "PushID": "xxxx" // 推送到鸿蒙后,鸿蒙推送返回的鸿蒙推送ID }, }, "GroupID": "@TGS#12DEVUDHQ", // 群聊的群组 ID "MsgSeq": 48375, // 消息序列号 "MsgRandom": 2837546, // 消息随机数 "MsgTime": 1557481126, // 消息的发送时间戳,单位为秒 "PushID": "6710c631_85_392fcbcff_200000b2f2c6820_200002c869bfb81", // 推送唯一标识 "ErrCode": 0, // 推送事件结果 "ErrInfo": "OK" // 推送事件结果描述,可能为空 }, …. ]}
五、请求包字段说明
| 字段 | 类型 | 说明 |
| Events | Array [ Event Object ] | 批量回调内容,最多包含100个回调事件(Event Object)的数据。 |
六、Event Object结构
| 字段 | 类型 | 说明 |
| CallbackCommand | String | 回调命令。 |
| EventType | Integer | 事件类型:EventType = 1表示单聊。EventType = 2表示群聊。 |
| EventTime | Integer | 事件发生时间戳, 单位为秒。 |
| From_Account | String | 消息发送者 UserID。 |
| To_Account | String | 消息接收者 UserID。 |
| PushPlatform | Integer | 推送厂商:PushPlatform = 0表示未知厂商。PushPlatform = 1表示 Apple APNs 推送。PushPlatform = 2表示小米推送。PushPlatform = 3表示华为推送。PushPlatform = 4表示 Google FCM 推送。PushPlatform = 5表示魅族推送。PushPlatform = 6表示 OPPO 推送。PushPlatform = 7表示 vivo 推送。PushPlatform = 8表示荣耀推送。PushPlatform = 9表示鸿蒙推送。 |
| PushStage | Integer | 推送阶段:PushStage = 1表示推送发送阶段。PushStage = 2表示推送触达阶段。PushStage = 3表示推送点击阶段。 |
| VendorInfo | Object | 推送发送给厂商时设置的关键参数以及厂商返回的推送ID,如果推送发送成功了但是设备没有收到,用户可以获取这个ID去厂商自助咨询具体原因。注意:这个字段只有在PushStage = 1时才会带上。发往不同推送厂商的信息封装到不同的Object里:APNs:Object,苹果推送信息,推送发给 APNs 时才有这个字段。字段内容见下面对 APNs 对象 的描述。XiaoMi:Object,小米推送信息,推送发给小米时才有这个字段。字段内容见下面对 XiaoMi 对象 的描述。HuaWei:Object,华为推送信息,推送发给华为时才有这个字段。字段内容见下面对 HuaWei 对象 的描述。FCM:Object,Google FCM 推送信息,推送发给 FCM 时才有这个字段。字段内容见下面对 FCM 对象 的描述。Meizu:Object,魅族推送信息,推送发给魅族时才有这个字段。字段内容见下面对 Meizu 对象 的描述。OPPO:Object,OPPO 推送信息,推送发给 OPPO 时才有这个字段。字段内容见下面对 OPPO 对象 的描述;Vivo:Object,vivo 推送信息,推送发给 Vivo 时才有这个字段。字段内容见下面对 Vivo 对象 的描述。Honor:Object,荣耀推送信息,推送发给荣耀时才有这个字段。字段内容见下面对 Honor 对象 的描述。Hmony:Object,鸿蒙推送信息,推送发给鸿蒙时才有这个字段。字段内容见下面对 Hmony 对象 的描述。 |
| MsgKey | String | 单聊消息的唯一标识,仅在 EventType = 1时有效。群聊时该字段为空。 |
| GroupID | String | 群聊的群组 ID,仅在 EventType = 2时有效。单聊时该字段为空。 |
| MsgSeq | Integer | 消息序列号,用于标记该条消息(32位无符号整数)。 |
| MsgRandom | Integer | 消息随机数,用于标记该条消息(32位无符号整数)。群聊时该字段为空。 |
| MsgTime | Integer | 消息的发送时间戳,单位为秒。 |
| PushID | String | 推送唯一标识,可以用 PushID 在 IM 控制台查询推送下发情况。 |
| ErrCode | Integer | 推送事件结果:ErrCode = 0表示成功。ErrCode 非0表示失败。 |
| ErrInfo | String | 推送事件结果描述,可能为空。 |
七、VendorInfo 下的各个厂商 Object 对象描述:
APNs Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,APNs 返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询 APNs 推送时可能需要提供这个 ID 用于排查问题。 |
| MutableContent | Integer | 发起推送时设置的参数。含义:为 1 表示开启 iOS 10+ 的推送扩展,默认为0。 |
| InterruptionLevel | string | 发起推送时设置的参数。含义:iOS 15+ 的推送通知级别,取值只能是 active、critical、passive、time-sensitive 中的一个,详情请参见:APNs InterruptionLevel 描述。 |
| ContentAvailable | Integer | 发起推送时设置的参数。为 1 表示是 iOS 静默推送,无通知栏弹窗,苹果建议1小时最多推送3条静默消息。详情请参见:APNs Background Notification。 |
XiaoMi Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,小米返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询小米推送时可能需要提供这个 ID用于排查问题。 |
| ChannelID | string | 发起推送时设置的参数。含义:小米推送 MIUI 10 及以上的通知类别(Channel)适配字段。详细请参见:小米消息分类。该字段不为空时,会覆盖控制台推送证书配置的 ChannelID 值。 |
HuaWei Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,华为返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询华为推送时可能需要提供这个 ID 用于排查问题。 |
| ChannelID | string | 发起推送时设置的参数。含义:华为推送 EMUI 10.0 及以上的通知渠道字段。该字段不为空时,会覆盖控制台推送证书配置的 ChannelID 值。 |
| Category | string | 发起推送时设置的参数。含义:华为推送消息分类,用于标识消息类型,详细请参见: category 描述。该字段不为空时,会覆盖控制台推送证书配置的 category 值。 |
FCM Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,FCM 返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询 FCM 推送时可能需要提供这个 ID 用于排查问题。 |
| ChannelID | string | 发起推送时设置的参数。含义:Google 推送 Android 8.0 及以上的通知渠道字段。 |
Meizu Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,魅族返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询魅族推送时可能需要提供这个 ID 用于排查问题。 |
| NoticeMsgType | integer | 发起推送时设置的参数。含义:魅族推送消息分类,“0”代表公信消息,“1”代表私信消息,详细请参见:魅族消息分类说明。该字段不为空时,会覆盖控制台魅族推送证书配置的消息分类。 |
OPPO Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,OPPO 返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询 OPPO 推送时可能需要提供这个 ID 用于排查问题。 |
| ChannelID | string | 发起推送时设置的参数。含义:OPPO 推送 Android 8.0 及以上的 NotificationChannel 通知适配字段。该字段不为空时,会覆盖控制台推送证书配置的 ChannelID 值。 |
| Category | string | 发起推送时设置的参数。含义:OPPO 推送消息分类,用于标识消息类型,详细请参见: category 描述。该字段不为空时,会覆盖控制台推送证书配置的 category 值。 |
Vivo Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,vivo 返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询 vivo 推送时可能需要提供这个 ID 用于排查问题。 |
| Category | string | 发起推送时设置的参数。含义:vivo 推送消息分类,用于标识消息类型,详细请参见 category 描述。该字段不为空时,会覆盖控制台推送证书配置的 category 值。 |
Honor Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,荣耀返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询荣耀推送时可能需要提供这个 ID 用于排查问题。 |
| Importance | string | 发起推送时设置的参数。含义:荣耀推送消息分类,取值为 LOW、NORMAL,详细请参见:荣耀消息分类。 |
Hmony Object 描述
| 字段 | 类型 | 说明 |
| PushID | string | 推送成功后,鸿蒙返回的厂商推送 ID,推送失败时该字段可能为空。如未收到推送,咨询鸿蒙推送时可能需要提供这个 ID 用于排查问题。 |
八、应答包示例
{ "ActionStatus": "OK", "ErrorInfo": "", "ErrorCode": 0 // 0为回调成功,1为回调出错}
九、应答包字段说明
| 字段 | 类型 | 说明 |
| ActionStatus | String | 请求处理的结果:OK 表示处理成功。FAIL 表示失败。 |
| ErrorCode | Integer | 错误码。 |
| ErrorInfo | String | 错误说明。 |