发公众号消息之前回调

功能说明

App 后台可以通过该回调实时查看公众号的广播消息,包括:
对公众号消息进行实时记录(例如记录日志,或者同步到其他系统)。
拦截公众号发言的请求。
注意:
消息前回调默认2s超时且不支持调整,使用消息前回调处理内容审核,会增加两次公网传输,消息发送的整体时延会比普通场景增加至少2倍。

注意事项

要启用回调,必须配置回调 URL,并打开本条回调协议对应的开关,配置方法详细请参见 第三方回调配置 文档。
回调的方向是即时通信 IM 后台向 App 后台发起 HTTP POST 请求。
App 后台在收到回调请求之后,务必校验请求 URL 中的参数 SDKAppID 是否是自己的 SDKAppID。
其他安全相关事宜请参见 第三方回调简介:安全考虑 文档。

可能触发该回调的场景

App 用户通过客户端发送公众号消息。
App 管理员通过 REST API 发送公众号消息。

回调发生时机

即时通信 IM 后台把公众号消息下发给订阅者之前。

接口说明

请求 URL 示例

以下示例中 App 配置的回调 URL 为 https://www.example.com示例:
https://www.example.com?SdkAppid=$SDKAppID&CallbackCommand=$CallbackCommand&contenttype=json&ClientIP=$ClientIP&OptPlatform=$OptPlatform

请求参数说明

参数
说明
https
请求协议为 HTTPS,请求方式为 POST。
www.example.com
回调 URL。
SdkAppid
创建应用时在即时通信 IM 控制台分配的 SDKAppID。
CallbackCommand
固定为 OfficialAccount.CallbackBeforeSendMsg。
contenttype
固定值为 JSON。
ClientIP
客户端 IP,格式如:127.0.0.1。
OptPlatform
客户端平台,取值请参见 第三方回调简介:回调协议 中 OptPlatform 的参数含义。

请求包示例

{
"CallbackCommand": "OfficialAccount.CallbackBeforeSendMsg", // 回调命令
"Official_Account": "@TOA#_2J4SZEAEL", // 公众号用户 ID
"OnlineOnlyFlag": 1, //在线消息,为1,否则为0
"MsgBody": [ // 消息体,参见 TIMMessage 消息对象
{
"MsgType": "TIMTextElem", // 文本
"MsgContent": {
"Text": "red packet"
}
}
],
"CloudCustomData": "your cloud custom data",
"EventTime": 1670574414123 // 毫秒级别,事件触发时间戳
}

请求包字段说明

字段
类型
说明
CallbackCommand
String
回调命令。
Official_Account
String
公众号用户 ID。
OnlineOnlyFlag
Integer
在线消息,为1,否则为0。
MsgBody
Array
消息体,具体请参见 消息格式描述
CloudCustomData
String
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)。
EventTime
Integer
事件触发的毫秒级别时间戳。

应答包示例

允许发言

允许用户发言,同时也不修改即将下发的消息的内容。
{
"ActionStatus": "OK",
"ErrorInfo": "",
"ErrorCode": 0 // 0 为允许发言
}

禁止发言

不允许用户发言,该消息将不会下发,同时给调用方返回错误码 10016
{
"ActionStatus": "OK",
"ErrorInfo": "",
"ErrorCode": 1 // 1 为拒绝发言
}

静默丢弃

不允许用户发言,该消息将不会下发,但会给调用方返回成功,使调用方以为消息已经发出。
{
"ActionStatus": "OK",
"ErrorInfo": "",
"ErrorCode": 2 // 2 为静默丢弃
}

变动消息内容

如下的应答示例为:对公众号发送的消息进行了变动(增加了自定义消息)。即时通信 IM 后台将会下发经过变动之后的消息。App 后台可以基于这一特性在用户发送的消息中增加一些特殊内容,例如用户等级、头衔等信息。
{
"ActionStatus": "OK",
"ErrorInfo": "",
"ErrorCode": 0, // 必须为 0,只有这样,变动之后的消息才能正常下发
"MsgBody": [ // App 变动之后的消息,如果没有,则默认使用用户发送的消息
{
"MsgType": "TIMTextElem", // 文本
"MsgContent": {
"Text": "red packet"
}
},
{
"MsgType": "TIMCustomElem", // 自定义消息
"MsgContent": {
"Desc": "CustomElement.MemberLevel", // 描述
"Data": "LV1" // 数据
}
}
],
"CloudCustomData": "your cloud custom data"
}

应答包字段说明

字段
类型
属性
说明
ActionStatus
String
必填
请求处理的结果:
OK 表示处理成功
FAIL 表示失败
ErrorCode
Integer
必填
错误码:
0:允许发言
1:拒绝发言
2:静默丢弃
若业务希望拒绝发言的同时,将错误码 ErrorCode 和 ErrorInfo 传递至客户端,请将错误码 ErrorCode 设置在 [120001, 130000] 区间内。
ErrorInfo
String
必填
错误信息。
MsgBody
Array
选填
经过 App 变动之后的消息体,云通讯后台将把变动后的消息发送到公众号消息中,具体格式参见 消息格式描述
CloudCustomData
String
选填
消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到)。

参考