功能说明
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 | 固定为 Group.CallbackBeforeSendMsg |
contenttype | 固定值为 JSON |
ClientIP | 客户端 IP,格式如:127.0.0.1 |
OptPlatform |
请求包示例
{"CallbackCommand": "Group.CallbackBeforeSendMsg", // 回调命令"GroupId": "@TGS#2J4SZEAEL", // 群组 ID"Type": "Community", // 群组类型"From_Account": "jared", // 发送者"Operator_Account":"admin", // 请求的发起者"Random": 123456, // 随机数"OnlineOnlyFlag": 1, //在线消息,为1,否则为0;直播群忽略此属性,为默认值0。"MsgBody": [ // 消息体,参见 TIMMessage 消息对象{"MsgType": "TIMTextElem", // 文本"MsgContent": {"Text": "red packet"}}],"CloudCustomData": "your cloud custom data","TopicId":"@TGS#_@TGS#cQVLVHIM62CJ@TOPIC#_TestTopic",// 话题的 ID, 仅支持话题的社群适用此选项"EventTime": 1670574414123//毫秒级别,事件触发时间戳}
请求包字段说明
字段 | 类型 | 说明 |
CallbackCommand | String | 回调命令 |
GroupId | String | 产生群消息的群组 ID |
Type | String | |
From_Account | String | 消息发送者 UserID |
Operator_Account | String | 请求发起者 UserID,可以用来识别是否为管理员请求的 |
Random | Integer | 发消息请求中的 32 位随机数 |
OnlineOnlyFlag | Integer | 在线消息,为1,否则为0;直播群忽略此属性,为默认值0 |
MsgBody | Array | 消息体,具体参见 消息格式描述 |
CloudCustomData | String | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
TopicId | String | 话题的 ID,若具有此选项表示在话题内发言,仅支持话题的社群适用此选项 |
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 设置在 [10100, 10200] 区间内 |
ErrorInfo | String | 必填 | 错误信息 |
MsgBody | Array | 选填 | |
CloudCustomData | String | 选填 | 消息自定义数据(云端保存,会发送到对端,程序卸载重装后还能拉取到) |
参考
REST API:在群组中发送普通消息