通过PHP对接钉钉自定义机器人定时发送消息完整版

钉钉(DingTalk)是阿里巴巴集团专为中国企业打造的免费沟通和协同的多端平台,提供PC版,Web版,Mac版和手机版,支持手机和电脑间文件互传。钉钉因中国企业而生,帮助中国企业通过系统化的解决方案(微应用),全方位提升中国企业沟通和协同效率。(来自百度百科)

本文档主要介绍后台服务器通过钉钉自定义机器人向钉钉群定时发送信息

一、创建群自定义钉钉机器人

1.打开钉钉群设置,找到智能群助手

 2.选择添加机器人,自定义机器人

 

 

 

 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":"我就是我, 是不一样的烟火"}}'

①测试数据库连通性

<?php
/*
  测试数据库连接
*/

//链接数据库配置开始
$mysql_server_name = ''; //改成自己的mysql数据库服务器
$mysql_username = '';    //改成自己的mysql数据库用户名
$mysql_password = '';    //改成自己的mysql数据库密码
$mysql_database = '';    //改成自己的mysql数据库名
$conn=mysqli_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_database);

//连接数据库错误提示, '数据库连接:SUCCESS'
if (mysqli_connect_errno($conn)) { 
    die("连接 MySQL 失败: " . mysqli_connect_error()); 
}else{
	echo("<b>"."数据库连接:SUCCESS!"."</b>");
	echo "<br/>";
	echo "<b>"."当前系统时间为:".date('Y-m-d H:i:s', time())."</b>";
}
mysqli_query($conn,"set names utf8mb64"); //数据库编码格式
?>

 ②获取数据库数据PHP代码

<?php
/*
    获取数据部分
*/
//-------------------------------------------------------------------
//链接数据库配置
//-------------------------------------------------------------------
$mysql_server_name = ''; //改成自己的mysql数据库服务器
$mysql_username = '';    //改成自己的mysql数据库用户名
$mysql_password = '';    //改成自己的mysql数据库密码
$mysql_database = '';    //改成自己的mysql数据库名	$conn=mysqli_connect($mysql_server_name,$mysql_username,$mysql_password,$mysql_database); 
//连接数据库错误提示
if (mysqli_connect_errno($conn)) { 

    die("连接 MySQL 失败: " . mysqli_connect_error()); 

}else{
	echo("<b>"."数据库连接:SUCCESS!------成功跳转页面"."</b>");
	echo "<br/>";
}
//-------------------------------------------------------------------
//时间函数部分
//-------------------------------------------------------------------
$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."人"."</br>";


//出园总人数
$times_out = $res_out[0][leaver_num];
//在园人数
$times_in_park = $times_day_count - $times_out;


?>

③钉钉发送群聊信息代码

<?php
/*
    钉钉群聊接口发送消息
*/
include 'test_mysql_check.php';
//以下是钉钉推送消息配置
//webhook:https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx
$url = 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxxxxxxxxxxx';

//使用关键字
//类型1:文本
$msg1 = [
    'msgtype' => '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 > ![screenshot](http://www.dianyingxiaozhen.cn/ext/images/pc_index_banner1.jpg)\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 '返回发送结果:'."</br>";
var_dump($res);

?>

三、钉钉群成功定时发送信息效果

 备注:后续在钉钉群@钉钉机器人+字符串可以通过钉钉机器人发送信息到服务器,服务器收到顶顶群发送的信息后进行处理再通过钉钉机器人回复信息研究中,需要用到公网,在没有公网的情况下官方文档给出了内网穿透的解决方法,研究中...

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值