发单聊消息之前回调

最近更新时间:2019-08-19 11:51:39

功能描述

App 后台可以通过该回调实时监控用户的单聊消息,包括:

  • 对发单聊消息进行实时记录(例如记录日志,或者同步到其他系统)。
  • 拦截用户的单聊发言请求。
  • 修改用户发言内容(例如敏感词过滤,或者增加一些 App 自定义信息)。

注意事项

  • 要启用回调,必须配置回调 URL,并打开本回调对应的开关,配置方法详见 第三方回调配置 文档。
  • 回调的方向是即时通信 IM 后台向 App 后台发起 HTTPS POST 请求。
  • App 后台在收到回调请求之后,务必校验请求 URL 中的参数 SDKAppID 是否是自己的 SDKAppID。
  • 若同时开启发单聊消息之前和之后两种回调,且发单聊消息之前回调返回禁止发言,则发单聊消息之后回调将不会被触发。
  • 若同时开启发单聊消息之前和之后两种回调,且发单聊消息之前回调修改了消息体,则发单聊消息之后回调将使用修改过的消息进行回调。
  • 其他安全相关事宜请参考 第三方回调简介:安全考虑 文档。

可能触发该回调的场景

  • App 用户通过客户端发送单聊消息。
  • App 管理员通过 REST API (sendmsg 接口)发送单聊消息。

回调发生时机

即时通信 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 固定为:C2C.CallbackBeforeSendMsg
contenttype 请求包体固定为 JSON
ClientIP 客户端 IP,格式如:127.0.0.1
OptPlatform 客户端平台,取值参见 第三方回调简介:回调协议 中 OptPlatform 的参数含义

请求包示例

{
    "CallbackCommand": "C2C.CallbackBeforeSendMsg", // 回调命令
    "From_Account": "jared", // 发送者
    "To_Account": "Jonh", // 接收者
    "MsgSeq": 48374, // 消息序列号
    "MsgRandom": 2837546, // 消息随机数
    "MsgTime": 1557481126, // 消息的发送时间戳,单位为秒 
    "MsgBody": [ // 消息体,参见 TIMMessage 消息对象
        {
            "MsgType": "TIMTextElem", // 文本
            "MsgContent": {
                "Text": "red packet"
            }
        }
    ]
}

请求包字段说明

字段 类型 说明
CallbackCommand String 回调命令
From_Account String 消息发送者 Identifier
To_Account String 消息接收者 Identifier
MsgSeq Integer 消息序列号,用于标记该条消息
MsgRandom Integer 消息随机数,用于标记该条消息
MsgTime Integer 消息的发送时间戳,单位为秒
MsgBody Array 消息体,详情请参见 消息格式描述

应答包示例(允许发言)

允许用户发言,同时也不修改即将下发的消息的内容。

{
    "ActionStatus": "OK",
    "ErrorInfo": "",
    "ErrorCode": 0 // 0 为允许发言
}

应答包示例(禁止发言)

不允许用户发言,该消息将不会下发,同时给用户(即消息发送者)返回错误码20006

{
    "ActionStatus": "OK",
    "ErrorInfo": "",
    "ErrorCode": 1 // 1 为拒绝发言
}

应答包示例(修改消息内容)

如下的应答示例为:对用户发送的单聊消息进行了修改(增加了自定义消息),即时通信 IM 后台将会下发经过修改之后的消息。App 后台可以基于这一特性在用户发送的消息中增加一些特殊内容,例如用户等级、头衔等信息。
示例:

{
    "ActionStatus": "OK",
    "ErrorInfo": "",
    "ErrorCode": 0, // 必须为0,只有这样,修改之后的消息才能正常下发
    "MsgBody": [ // App 修改之后的消息,如果没有,则默认使用用户发送的消息
        {
            "MsgType": "TIMTextElem", // 文本
            "MsgContent": {
                "Text": "red packet"
            }
        },
        {
            "MsgType": "TIMCustomElem", // 自定义消息
            "MsgContent": {
                "Desc": " CustomElement.MemberLevel ", // 描述
                "Data": " LV1" // 数据
            }
        }
    ]
}

应答包字段说明

字段 类型 属性 说明
ActionStatus String 必填 请求处理的结果,OK 表示处理成功,FAIL 表示失败
ErrorCode Integer 必填 错误码,0为允许发言;1为拒绝发言。若业务希望拒绝发言的同时,将错误码 ErrorCode 和 ErrorInfo 传递至客户端,请将错误码 ErrorCode 设置在 [120001, 130000] 区间内
ErrorInfo String 必填 错误信息
MsgBody Array 选填 经过 App 修改之后的消息体,即时通信 IM 后台将把修改后的消息发送给好友,具体格式参见 消息格式描述

参考