需求: 求人不如求己,告警信息发在某酱等第三方的告警,如果对方异常了或者突然收费了,我们还无法使用,所以我找了一晚上脚本,我们使用自己的脚本进行群晖nas消息推送。如果没有服务器的话,也可以使用群晖nas搭建一个php环境,我这920+就不让它遭这个醉了,做一个nas该做的事情
效果图展示
群晖NAS这里显示的通知结果也会发送给企业微信
微信告警通知界面
创建企业微信
如果已经有企业微信的童鞋,可以忽略本步骤,直接创建脚本
http://work.weixin.qq.com/
第一步注册
提示:这里简单的说一下,微信企业号和微信公众号是不一样的!
继续下一步
提示一下: 因为这步需要添加管理员的身份证号以及手机号,我这里就不截图了
二、配置微信企业号
当我们设置完微信号的信息之后,请继续跟我操作。中间可能步骤不是特别全,就是设置企业的信息
我们需要记录CorpID
我们点击通讯录,添加一个组,或者添加一个成员。成员可以使用微信邀请或者短信邀请
添加完管理员需要记录管理员账号
点进去
记录用户账号 不记录也是没得关系的
设置应用
同样也可以在微信插件里面二维码邀请关注加入通讯录
创建完成后
需要记录Agentld、Secret
这里不记录也没得关系,后面也可以查看
准备事项:
企业号有一个可以发送消息的应用,一个授权管理员,可以使用应用给成员发送消息
需要得到的信息
记录用户的账号
CorpID和Secret、Agentld
创建PHP Send发送脚本
这里脚本建议找一台服务器来处理,如果用群晖运行会担心发送失败的情况
第一种卡片式推送
<?php //i4t.com 群晖nas发送告警 $num = $_GET['num']; $passwd = $_GET['passwd']; $title = $_GET['title']; $description = $_GET['description']; // 声明页面 header header("Content-type:text/html;charset=utf-8"); // 获取 access_token function getToken(){ // 定义 id 和 secret $corpid='wwc13*******';//这里填写你的企业 ID $corpsecret='f2MBU****asdx***-asd**';//这里填写你刚创建的应用 secret // 读取 access_token include './access_token.php'; // 判断是否过期 if (time() > $access_token['expires']){ // 如果已经过期就得重新获取并缓存 $access_token = array(); $access_token['access_token'] = getNewToken($corpid,$corpsecret); $access_token['expires']=time()+7000; // 将数组写入 php 文件 $arr = '<?php'.PHP_EOL.'$access_token = '.var_export($access_token,true).';'.PHP_EOL.'?>'; $arrfile = fopen("./access_token.php","w"); fwrite($arrfile,$arr); fclose($arrfile); // 返回当前的 access_token return $access_token['access_token']; }else{ // 如果没有过期就直接读取缓存文件 return $access_token['access_token']; } } // 获取新的 access_token function getNewToken($corpid,$corpsecret){ $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={$corpid}&corpsecret={$corpsecret}"; $access_token_Arr = https_request($url); return $access_token_Arr['access_token']; } // curl 请求函数 function https_request ($url){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $out = curl_exec($ch); curl_close($ch); return json_decode($out,true); } // 发送应用消息函数 function send($data){ $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token='.getToken()); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, $data); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); return curl_exec($ch); } // 文本卡片消息体 $postdata = array( 'touser' => '@all', //不需要写联系人,会发送给所有人 'msgtype' => 'textcard', 'agentid' => '1000004',//这里填写你刚创建的应用 AgentId 'textcard' => array( 'title' => $title, 'description' => $description, 'num' => $num, 'url' => 'https://i4t.com', //这里的域名写不写都可以,可以写成群晖nas的域名 'passwd' => $passwd, ), 'enable_id_trans' => 0, 'enable_duplicate_check' => 0, 'duplicate_check_interval' => 1800 ); // 调用发送函数 echo send(json_encode($postdata)); // echo "$title, $description" ?>
第二种: 文本推送
<?php $num = $_GET['num']; $passwd = $_GET['passwd']; $content = $_GET['title']; $msg = $_GET['description']; $url = $_GET['down.frps.cn']; function curlPost($url,$data=""){ $ch = curl_init(); $opt = array( CURLOPT_URL => $url, CURLOPT_HEADER => 0, CURLOPT_POST => 1, CURLOPT_POSTFIELDS => $data, CURLOPT_RETURNTRANSFER => 1, CURLOPT_TIMEOUT => 20 ); $ssl = substr($url,0,8) == "https://" ? TRUE : FALSE; if ($ssl){ $opt[CURLOPT_SSL_VERIFYHOST] = 1; $opt[CURLOPT_SSL_VERIFYPEER] = FALSE; } curl_setopt_array($ch,$opt); $data = curl_exec($ch); curl_close($ch); return $data; } $corpid="wwc13*****7c750d"; //企业id $corpsecret="f2MBU****3NPTHo_****-****_oFTvLk"; //企业secret $Url="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$corpid&corpsecret=$corpsecret"; $res = curlPost($Url); $ACCESS_TOKEN=json_decode($res)->access_token; $Url="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$ACCESS_TOKEN"; $data="{"touser":"@all","msgtype":"text","agentid":1000004,"text":{"content":"$contentn$msg$url"},"safe":0}"; //此处ID需要修改,1000004修改为自己应用id $res = curlPost($Url,$data); $errmsg=json_decode($res)->errmsg; if($errmsg==="ok"){ echo "发送成功!"; }else{ echo "发送失败,".$errmsg; } ?>
文本推送和卡片参数一样,文本为http://send.frps.cn/index.php?num=10&passwd=i4t.com&title=标题&description=helloworld
配置Send脚本并测试
这里通知建议使用一台服务器,有php环境和web环境会方便很多。如果没有可以使用下面的腾讯云Serverless构建函数
温馨提示:脚本是参考下面大佬的文件,但是我原来的基础上做了修改,不建议直接拷贝它的,群晖有一些传参是必须要添加的
腾讯云Serverless构建php环境
我这里找一台服务器作为演示
因为使命环境的要求,我的php接口没法公开出来,不然我可以设置传参大家调用我的接口就可以。目前工信部是不允许这样操作的
环境我这里使用宝塔进行演示
双击index.php编辑文件,将我们上面的php文件按照备注进行修改
修改完毕后创建域名
访问下面的地址进行测试
http://send.frps.cn/index.php?num=777&passwd=123&title=i4t.com标题&description=内容
微信我们可以收到下面的通知,给大家截大概样子
这里我们如果点击卡片,会跳入到我们设置的url变量对应的域名 (我们可以设置为群晖nas的地址)
配置群晖Nas通知
这里我使用DSM 7.1进行演示,DSM 6的操作基本上大同小异
如果大家有疑问可以在文章下面评论一下,我会及时回答
首先登陆群晖控制面板
选择 通知设置
选择 短信通知
新增短信服务提供商
这里需要注意一点 description=这里后面必须写hello world,否则群晖检查不过去。其它按需设置即可
然后点击下一步
这里什么都不需要修改,直接下一步
这里的参数格式请和我保持一致! 不需要乱修改,这里的传参和代码绑定
点击寄送测试短信
微信查看结果
然后点击应用即可
配置应用通知
接下来需要在推送通知中配置
点击规则-->勾选短信 && 推送服务-->勾选应用
测试!
接下来进行测试,我们随便在Docker中下载的镜像即可 (我下载我之前的镜像)
下载完成后,群晖的通知已经显示下载完毕
我们可以去微信查看了
相关文章:
- Golang基础知识笔记
- Xtrabackup安装以及应用
- [PHP] – 性能加速 – 开启模块加速
- 老男孩Shell企业面试题30道 [答案]