SDK 文档

服务端 API

发单聊消息之前回调

最近更新时间:2020-05-20 17:46:50

功能描述

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, // 消息的发送时间戳,单位为秒 
    "MsgKey": "48374_2837546_1557481126", //消息的唯一标识,可用于 REST API 撤回单聊消息
    "MsgBody": [ // 消息体,参见 TIMMessage 消息对象
        {
            "MsgType": "TIMTextElem", // 文本
            "MsgContent": {
                "Text": "red packet"
            }
        }
    ]
}

请求包字段说明

字段 类型 说明
CallbackCommand String 回调命令
From_Account String 消息发送者 UserID
To_Account String 消息接收者 UserID
MsgSeq Integer 消息序列号,用于标记该条消息(32位无符号整数)
MsgRandom Integer 消息随机数,用于标记该条消息(32位无符号整数)
MsgTime Integer 消息的发送时间戳,单位为秒
单聊消息优先使用 MsgTime 进行排序,同一秒发送的消息则按 MsgSeq 排序,MsgSeq 值越大消息越靠后
MsgKey String 该条消息的唯一标识,可根据该标识进行 REST API 撤回单聊消息
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 后台将把修改后的消息发送给好友,具体格式参见 消息格式描述

参考

目录