需求: 求人不如求己,告警信息发在某酱等第三方的告警,如果对方异常了或者突然收费了,我们还无法使用,所以我找了一晚上脚本,我们使用自己的脚本进行群晖nas消息推送。如果没有服务器的话,也可以使用群晖nas搭建一个php环境,我这920+就不让它遭这个醉了,做一个nas该做的事情
效果图展示
群晖NAS这里显示的通知结果也会发送给企业微信
微信告警通知界面
创建企业微信
如果已经有企业微信的童鞋,可以忽略本步骤,直接创建脚本
第一步注册
提示:这里简单的说一下,微信企业号和微信公众号是不一样的!
继续下一步
提示一下: 因为这步需要添加管理员的身份证号以及手机号,我这里就不截图了
二、配置微信企业号
当我们设置完微信号的信息之后,请继续跟我操作。中间可能步骤不是特别全,就是设置企业的信息
我们需要记录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\":\"$content\n$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
构建函数
温馨提示:脚本是参考下面大佬的文件,但是我原来的基础上做了修改,不建议直接拷贝它的,群晖有一些传参是必须要添加的
我这里找一台服务器作为演示
因为使命环境的要求,我的php接口没法公开出来,不然我可以设置传参大家调用我的接口就可以。目前工信部是不允许这样操作的
环境我这里使用宝塔进行演示
双击index.php编辑文件,将我们上面的php文件按照备注进行修改
修改完毕后创建域名
访问下面的地址进行测试
http://send.frps.cn/index.php?num=777&passwd=123&title=i4t.com标题&description=内容
- [ ] num任意id (传参需要为群晖需要有电话号,实际上不显示)
- [ ] passwd任意密码 (传参需要)
- [x] title发送通知标题 (这里随便写,后面我们修改群晖的即可)
- [x] description 发送内容 (这里随便写,后面由群晖自己生成)
微信我们可以收到下面的通知,给大家截大概样子
这里我们如果点击卡片,会跳入到我们设置的url变量对应的域名 (我们可以设置为群晖nas的地址)
配置群晖Nas通知
这里我使用DSM 7.1
进行演示,DSM 6
的操作基本上大同小异
如果大家有疑问可以在文章下面评论一下,我会及时回答
首先登陆群晖控制面板
选择 通知设置
选择 短信通知
新增短信服务提供商
这里需要注意一点 description=这里后面必须写hello world
,否则群晖检查不过去。其它按需设置即可
然后点击下一步
这里什么都不需要修改,直接下一步
这里的参数格式请和我保持一致! 不需要乱修改,这里的传参和代码绑定
- [x] 用户账号为title发送信息的标题,自己定义即可
- [ ] 密码随便写,什么密码都不是,只是需要这个值 (不可以不填)
- [ ] 手机号随便写,不可以不填
点击寄送测试短信
微信查看结果
然后点击应用即可
配置应用通知
接下来需要在推送通知中配置
点击规则
-->勾选短信
&& 推送服务
-->勾选应用
测试!
接下来进行测试,我们随便在Docker
中下载的镜像即可 (我下载我之前的镜像)
下载完成后,群晖的通知已经显示下载完毕
我们可以去微信查看了
短信测试发出但一直收不到
1.查看nginx日志,群晖如果发送短信会进行get请求
2.检查群晖消息推送配置是否都正确
3.群晖消息推送是否勾选消息已经推送,这2个都要勾选
4.下载个镜像测试,只要ui界面显示推送,那么群晖就可以收到。
截图部分需要勾选
直接测试就会提示命令运行失败[img]https://postimg.cc/cr9p09KR[/img],直接应用在测试就提示已发送但收不到推送[img]https://postimg.cc/yJbxRXrc[/img],这应该是群晖短息通知的问题吧
我还试了下bark测试也是同样的结果..
检查手动文件吧,我感觉是php这发送失败
我就是手动php全部成功才怀疑群晖问题的?
http://send.frps.cn/v1.php?num=10&passwd=i4t.com&title=标题&description=helloworld
你用我的接口测试一下吧,我看看能不能获取到
运行失败
这设置的没问题吧??
我这里可以收到?
?
你收到短信了吗?
我手动可以收到啊
就是群晖里设置就收不到,就一直运行失败
直接应用再测试提示已发送,但就是收不到推送!?
把这个文件删除,然后在调用。顺便看一下nginx日志,会有请求信息
你检查一下这里的应用id对不对,如果这里设置错误,也是可以发送成功的。但是不是发给你了,@all啥的,你可以把配置文件贴出来
手动能收到没道理会设置错误啊
这样,你把群晖配置界面都截图上传,我给你看一下。nginx日志在宝塔上也截图看一下
?
。
?
手动两次都成功收到短信
日志没反应
?
上图所示,和群晖没啥关系了,你手动php发送试一下。
http://send.frps.cn/v1.php?num=10&passwd=i4t.com&title=标题&description=helloworld
http://你的域名或者ip/文件.php?num=10&passwd=i4t.com&title=标题&description=helloworld
大佬,现在企业微信的新应用需要设置可信ip怎么解决?添加可信ip白名单,又要设置api接收消息或者设置可信域名(需要备案)
那就在应用中配置ip就可以,需要有公网ip或者frp服务器。 可信域名指的是https吧,我记得不用备案也可以
我看了一下最新的企业微信应用,你需要创建一个可信的ip,但是家用的固定ip会随时发生变化。我个人建议是等双11买一台公网服务器,不需要什么配置,把发送消息的服务部署在公网服务器,通过公网服务器进行发送。估计还是企业微信滥用的问题,导致他们出的这个
本地测试直接提示:{“errcode”:60020,”errmsg”:”not allow to access from your ip, hint: [1678960787612132XXXXXXXXX], from ip: 110.182XX.XX, more info at https://open.work.weixin.qq.com/devtool/query?e=60020“}应该是需要IP白名单。这个貌似也能设置,但是需要先:企业微信–应用管理—接收消息–设置API接收。这个怎么操作?希望指点一下。
应该是新版本的企业微信需要一个可信ip,也就是调用企业微信的服务器是需要有独立的公网ip。 我的企业微信是2016年注册的,目前一直不需要
要信任IP没有问题,可以设置信任IP,但是设置接收API的时候里面有个token和什么来着我忘记了,这两个不设置的话没办法保存,这个有办法给处理一下么。应该是php里设置的。
或者我加一下您,你给看看怎么弄?
我也是卡在这一步了。 URL填写的URL需要正确响应企业微信验证URL的请求 Token EncodingAESKey 白名单这个应该怎么设置? openapi回调地址请求不通过
感谢。已经成功。
成功了配置企业信任域名,上传提供的txt传到服务器 验证一下就可以了
什么txt,望告知
加个QQ?
知道是什么了