钉钉(DingTalk)是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台,提供PC版,Web版,Mac版和手机版,支持手机和电脑间文件互传。钉钉因中国企业而生,帮助中国企业通过系统化的解决方案(微应用),全方位提升中国企业沟通和协同效率。(来自百度百科)
本文档主要介绍后台服务器通过钉钉自定义机器人向钉钉群定时发送信息
一、创建群自定义钉钉机器人
3.设置机器人姓名,设置安全模式
安全模式分为三种:(本次实验采用第一种自定义关键词)
①自定义关键词,含义当后台给钉钉机器人发送消息时,消息文本内容需要包含关键词中的内容才能发送成功。
②加签,含义根据官方文档给的是把timestamp+"\n"+密钥当做签名字符串,使用HmacSHA256算法计算签名,然后进行Base64 encode,最后再把签名参数再进行urlEncode,得到最终的签名(需要使用UTF-8字符集)
③IP地址段,分析应该是填写公网IP
4.完成之后会产生webhook地址,即后台发送信息的接口地址,牢记接口地址,谨防泄露
二、PHP对接钉钉机器人接口发送信息
1.内容概括:
使用PHP作为后端语言连接数据库及对接钉钉群聊机器人接口,为了便捷使用代码放到宝塔面板上建的网站上,通过宝塔上面的计划任务每分钟访问一次页面来判断当前是否为整点,并发送数据到接口
2.主服务页面代码
官方给的文档里面有curl命令发送信息,可以在Linux系统上做下测试
curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxx'\
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content":"我就是我, 是不一样的烟火"}}'
①测试数据库连通性
"."数据库连接:SUCCESS!"."");
echo "
";
echo ""."当前系统时间为:".date('Y-m-d H:i:s', time())."";
}
mysqli_query($conn,"set names utf8mb64"); //数据库编码格式
?>
②获取数据库数据PHP代码
"."数据库连接:SUCCESS!------成功跳转页面"."");
echo "
";
}
//-------------------------------------------------------------------
//时间函数部分
//-------------------------------------------------------------------
$start_time=strtotime(date("Y-m-d",time())); //当天开始时间
$end_time=$start_time+60*60*24-1; //当天结束之间
$start_time_1=date("Y-m-d H:i:s",$start_time);
$end_time=date("Y-m-d H:i:s",$end_time);
$day_hour = date('H', time());
$day_hour_start = date("Y-m-d H:i:s",$start_time+($day_hour-1)*3600);//2021-10-10 11:00:00
$day_hour_pre = date("Y-m-d H:i:s",$start_time+$day_hour*3600-1);//2021-10-10 11:59:59
//--------------------------------------------------------------------
//SQL部分
//--------------------------------------------------------------------
//总人数查询
$sql_select_count= "select sum(wocc.groupnum) peoples from v_WorkOffCard_Cursor wocc where 1=1 and wocc.ADDTIME >='".$start_time_1."' and wocc.ADDTIME <='".$day_hour_pre."'";
//查询出园人数
$sql_select_out = "select leaver_num from t_out_peoples top order by currentTime desc limit 1";
mysqli_query($conn,"set names utf8mb64"); //数据库编码格式
//$sql_select_count
$results_count = mysqli_query($conn, $sql_select_count);
while ($rows = mysqli_fetch_assoc($results_count)) {
$res_count[] = $rows; //人数
}
//$sql_select_out
$results_out = mysqli_query($conn, $sql_select_out);
while ($rows = mysqli_fetch_assoc($results_out)) {
$res_out[] = $rows; //出园
}
$times_day_count = $res_count[0][peoples];
//echo "今日入园总人数:".$times_day_count."人"."";
//出园总人数
$times_out = $res_out[0][leaver_num];
//在园人数
$times_in_park = $times_day_count - $times_out;
?>
③钉钉发送群聊信息代码
'text',//这是文件发送类型,可以根据需求调整
'text' => [
'content' => 'dingding',
],
];
//测试短信$msg1,修改发送文本信息
//定义数量
//获取当前小时数
$h_cuur = date('H', time());
$day_today = date('Y年m月d日', time());
$curr_today = date('Y-m-d H:i', time());
//10点发送数据
if($h_cuur == 10){
if($times_curr_start_end != ''){
$msg1[text][content] = $day_today."\n"."当前时间:".$curr_today."\n"."今日总入园人数为:".$times_day_count."人"."\n"."今日总出园人数为:".$times_out."人"."\n"."当前在园人数为:".$times_in_park."人";
$curl = curl_init();
}
}
//11点发送数据
if($h_cuur == 11){
if($times_curr_start_end != ''){
$msg1[text][content] = $day_today."\n"."当前时间:".$curr_today."\n"."今日总入园人数为:".$times_day_count."人"."\n"."今日总出园人数为:".$times_out."人"."\n"."当前在园人数为:".$times_in_park."人";
$curl = curl_init();
}
}
//12点
if($h_cuur == 12){
if($times_curr_start_end != ''){
$msg1[text][content] = $day_today."\n"."当前时间:".$curr_today."\n"."今日总入园人数为:".$times_day_count."人"."\n"."今日总出园人数为:".$times_out."人"."\n"."当前在园人数为:".$times_in_park."人";
$curl = curl_init();
}
}
}
//类型2:Markdown
$msg2 = [
"msgtype" => "markdown",
"markdown" => [
"title" => "dingding!杭州天气",
"text" => "#### 杭州天气 @13721424030 \n > 9度,西北风1级,空气良89,相对温度73%\n > \n > ###### 10点20分发布 [天气](https://www.dingtalk.com) \n"
],
"at" => [
"atMobiles" => [
"13721424030"
],
"atUserIds" => [
"user123"
],
"isAtAll" => false
]
];
//类型3:link
$msg3 = [
"msgtype" => "link",
"link" => [
"text" => "dingding这个即将发布的新版本,创始人xx称它为红树林。而在此之前,每当面临重大升级,产品经理们都会取一个应景的代号,这一次,为什么是红树林",
"title" => "时代的火车向前开",
"picUrl" => "",
"messageUrl" => ""
]
];
//调用curl函数发送信息
//$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($msg1));
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$res = curl_exec($curl);
curl_close($curl);
echo '返回发送结果:'."";
var_dump($res);
?>
三、钉钉群成功定时发送信息效果
备注:后续在钉钉群@钉钉机器人+字符串可以通过钉钉机器人发送信息到服务器,服务器收到顶顶群发送的信息后进行处理再通过钉钉机器人回复信息研究中,需要用到公网,在没有公网的情况下官方文档给出了内网穿透的解决方法,研究中...