前言:
为了更好的管理和控制App,IM提供了第三方回调功能,配置使用后,即时通信IM会向App后台服务器发送请求,App后台可以根据收到的回调处理业务逻辑、数据处理存储、功能控制干预,比如禁止该消息下发、用户登录状态的实时变更等。即时通信 IM 目前支持的回调请参见 回调命令列表
配置回调:
1.准备一台云服务器,并放通443、80、9000端口,安装nginx服务、PHP环境
2.登录IM控制台,回调配置里配置回调url设置事件回调
回调地址必须是可以ping通的地址,且域名中不能使用下划线_,如果没有域名备案可以使用外网IP地址作为域名配置。 双向认证的目的是只能从即时通信IM后台回调访问,无法通过客户端或浏览器直接访问。 如何关闭回调:1.取消所有回调事件;2.更改回调地址,配置成无法接收的地址。
4.下载HTTPS双向认证证书、CA 证书,并将下载的Crt、Key、CA证书本地文件上传至服务器。Nginx双向认证文档
5.修改 nginx.conf 配置文件
代码语言:txt复制 server {
listen 443 default_server;
listen [::]:443 default_server;
server_name XX.XX.XX.XX; # 域名或外网IP地址
ssl_certificate XX.XX.XX.XX.crt; # 腾讯给第三方签发的证书
ssl_certificate_key XX.XX.XX.XX.key; # 和证书配对的私钥
ssl_verify_client on; # 验证请求来源
ssl_client_certificate TencentQQAuthCA.crt; # 腾讯认证的 CA 证书
location / {
root /var/html/;
index index.html index.htm callback.php;
}
}
server {
listen 80;
server_name XX.XX.XX.XX; # 域名或外网IP地址
error_log /var/log/nginx/callback_error.log error;
root /var/html/;
location / {
index index.html index.htm callback.php;
}
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
可以不配置双向认证,不配置也可以收到回调请求,双向认证只是为了更安全。 不配置双向认证取消ssl_verify_client on; ssl_client_certificate TencentQQAuthCA.crt; 即可。
6.在/var/html/路径下配置接收回调的PHP文件,并在同文件夹下创建callback.log文件用于保存收到的回调信息
代码语言:txt复制<!DOCTYPE HTML>
<html>
<body>
<?php
$json = file_get_contents("php://input");
$data = json_decode($json, true);
if($data){
$callback_file = fopen("callback.log", "a ") or die("open_file_error!");
fwrite($callback_file,var_export($data,true));
fwrite($callback_file, "n================================================n");
fclose($callback_file);
}else{
echo 'Hello Word!';
}
?>
</body>
</html>
测试验证回调:
使用Rest Api或客户端发消息验证是否可以收到回调(此处以单聊消息为例)
代码语言:txt复制array (
'MsgBody' =>
array (
0 =>
array (
'MsgType' => 'TIMTextElem', // 消息类型
'MsgContent' =>
array (
'Text' => '测试是否可以收到单聊消息',// 消息内容
),
),
),
'CallbackCommand' => 'C2C.CallbackBeforeSendMsg', // 回调事件类型
'From_Account' => 'liyao', // 发送方userid
'To_Account' => 'test3', // 接收方userid
'MsgRandom' => 1156579512, // 消息随机数
'MsgSeq' => 17649, // 消息ID
'MsgTime' => 1613897890, // 消息发送时间
'MsgKey' => '17649_1156579512_1613897890', // 消息唯一标识
)
1.触发场景:
通过客户端发送单聊消息
通过Rest Api发送单发单聊消息
Rest Api 批量发单聊消息不会触发单聊回调
2. 可实现的功能:
可以通过该回调实时监控用户的单聊消息(记录日志等)
拦截用户的单聊发言请求(业务侧自行实现安全打击功能)
修改发言内容(例如过滤敏感词)
如果同时配置发言前回调和发言后回调,并且通过发言前回调禁止发言,则此时不会收到发言后回调