关于多种nas(群晖,威联通,truenas)的微信通知推送分享
目前的nas都自带了邮件通知及短信通知等方式,但我们可能更习惯的是微信接收通知,我这边因为几个nas都在用,对多种nas的微信通知推送进行了一些测试,现在分享一下自己这几天折腾的体会 。
目前的微信通知用得最多的可能是server酱,不过有些问题,目前server酱升级后对免费推送消息进行了限制,并且还需要关注他的公众号才行,这就用着有点不舒服, 虽然用别人的服务收费是天经地义的 。
再经过一番搜索之后,发现可以通过企业微信api来曲线救国实现消息推送
使用企业微信推送的流程大概就是
本地搭建web服务并开放接口--> nas使用自定义短信服务商指向本地web服务-->web服务转发请求到企业微信
-->企业微信推送-->微信接收
大概找了下,目前用得比较多的是使用nodered来实现,图形化编程,看上去实现起来还算简单
关于企业微信及应用的申请和nodered的搭建我就不再赘述,大家可以看站里其他文章
例如:https://post.smzdm.com/p/a9g4r4me/
不过可以注意到的是目前看到的文章使用了企业微信的相关应用的API搭配nodered插件接收消息,这个功能本意是在对外提供服务时更有安全保障,缺点是需要一个域名,相应的还需要公网ip, 对于没有公网的同学就不太友好
不过我们作为拥有者其实不必这么麻烦,使用corpId和corpSecret就可实现自己发送消息,就是需要处理下token问题,所以我对该方式稍微做了一些改动,在没有公网ip的情况下也能使用
提前说明下我对nodered及js不太熟悉,下面的方式是我自己摸索了一天测试出来的
吐槽下资料真不好找 ,估计js开发的会很熟悉
我自己测试使用通过,不过其中可能有bug或待优化的地方,各位有更好地欢迎分享
使用方法如下
我把nodered配置导出了json
百度网盘https://pan.baidu.com/s/1G7HLXEs6mR4f6kPwk_XQtA?pwd=q29u
密码 q29u
复制上述json,
修改获取token节点中的corpid和corpsecret为你企业微信的相应值
修改构造发送数据节点中的你的agentid为对应的agentid,注意agentid为数字
在nodered中选择导入
然后粘贴导入即可
导入成功后如下,直接部署即可
能力原因,这个流程有个小问题
每次发送消息都会先获取token,然后再发送,也就是两次http请求,所以耗时会长一些,我测试大概在500ms左右,同时我也没有做异常处理,有需要的自行修改。。(实在不想改了。。。。 )
还有个潜在问题是微信获取token的频率是有限制的,不过我看了下估计我们单人使用正常情况下基本不可能超出限制
说下我这边的服务url配置,有两个http入口
get: http://ip:1880/push?from=a&to=b&text=test2
其中ip为你安装nodered的ip,端口1880为nodered的端口,如果你不一样需要修改
from为发送方,在群晖和威联通里对应手机号,truenas中可自定义,
理论上在多台设备下可以分辨哪台设备的通知
to为接收者在企业微信中的id,向关注该应用所有人发送的话使用@all(一般用这个就行)
text为数据内容,由nas填充
post: http://ip:1880/push?from=测试&to=b
post主要针对truenas,url意义同上,数据体在body中,由nas填充,不需要关心
关于nodered方面的配置就到此为止了
下面说下nas方面的配置
群晖方面,到群晖控制面板--短信--新增短信服务提供商,如图
注意text后面需要写入hello world,群晖要求的
然后下一步,
请求标题可以不填,下一步
各参数类型如下,这儿实际上就是群晖会把对应的数据填充到参数里
其中电话和内容是必须的
然后保存,填入电话号码(可以乱填),点击寄送测试短信,正常的话就能收到微信推送了
我这里使用的是普通消息,卡片消息需要修改发送消息模块里的json模板
如图
然后是威联通,我们需要到通知中心--服务账户和设备配对--短信,如图
点击添加SMSC服务,然后在SMS提供商处选择custom自定义
由于服务器为我们自定义内网服务,所以不需要用户名和密码,只需要关注url模板这个地方
qnap和群晖不一样,填写的url如下
http://127.0.0.1:1880/push?from=@@PhoneNumber@@&text=@@Text@@&to=@all
其中的@@PhoneNumber@@ 和 @@Text@@ 是qnap自己的占位标志
在发送时系统会自动替换为手机号 和 具体内容点击提供商旁边的小飞机按钮发送测试短信,随便输入电话号码,点击发送就能收到了如图
收到如图
由于我自己在使用truenas scale ,所以也想着将turenas scale的通知也推送到微信上
方便进行统一查看,可惜找了一下,truenas有很多通知服务,不过大多是国外得到服务提供商
并且truenas还没有提供自定义短信供应商的服务
不过在我一个一个尝试这些服务的过程中,发现在Slack的服务那用的是webhook的形式发送的数据
理论上我们应该可以通过Slack的webhook指向我们自己的服务再转发到微信了
稍微测试了下,找到了发送数据的真正格式,类似于
{"text":"数据内容"}
请求方式是POST,这也就是为什么我在nodered中有两个http输入了
具体使用方式如下truenas主页面--通知服务
通知设置--通知服务
默认有email和snmp,我们添加一个服务
填写如下
然后点击 发送测试通知,配置正确的情况下就能收到通知了truenas发出的通知如图
总共花了大概一天的时间,基本达到这三种nas都能实现微信推送的目的,
由于对nodered的不了解导致有些小瑕疵,不过基本算是能用了
彩蛋
最近上班疯狂摸鱼,已经没心思工作了
想到反正也是搭建服务转发请求,为什么不自己写一个呢,
于是我就用java实现了一个web服务来转发,由于是java写的,所以不可避免的稍微占用内存一点。。。。
服务很简单,代码也是随便写的,能用就行。。。也是两个接口,转发对应的数据到企业微信
摸鱼搞的,各位轻喷,目前使用没问题,后面没变动的话基本不会去改它了。。。。
这里实现时我用的是卡片消息,看上去好看点
由于腾讯要求必须添加跳转url,默认我就跳转了百度首页
各位不点击详情就行
git地址 lepark2/wxpush (github.com)
最近网络疯狂抽风。。。本来不想搞git的,不过想来不上传你们怕是不敢用(反正来源不明的我是不敢)
为了方便大家使用,学习了下docker,打包了一个docker服务到dockerhub,
大家可以下载来试下dockerhub搜 lepark/wxpush那个就是
使用方法也说下
先docker pull lepark/wxpush:latest 拉取镜像
sudo docker run -p 50000:50000 -e corpid= 企业微信的corpid -e corpsecret=企业微信的corpsecret
-e agentid=企业微信应用的agentid -e wxpush:latest
群晖如图,添加端口,默认50000
然后修改环境变量对应即可
威联通类似,使用container station 搜索wxpush转发好端口,设置好环境变量即可
安装好后使用方法同上面的nodered,只需要修改url对应ip和端口为容器使用的即可
作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~
坚果爸爸
校验提示文案
值友4776067372
校验提示文案
爱薅羊毛的穷耗子
校验提示文案
无形之刃
校验提示文案
值友6546612384
校验提示文案
tsbd
校验提示文案
尺猴
校验提示文案
xuplus
校验提示文案
昵称不是纯数字
校验提示文案
技术宅是我梦想
校验提示文案
快乐糖豆Home
校验提示文案
一页破天书
校验提示文案
小小强
校验提示文案
ShineJun
校验提示文案
Hyerbolas
校验提示文案
芝麻大西瓜
校验提示文案
ilray
校验提示文案
值友6546612384
校验提示文案
值友6546612384
校验提示文案
德玛西亚草薙京
校验提示文案
一页破天书
校验提示文案
快乐糖豆Home
校验提示文案
我好像明白了丨
而且我端口填1880的话发送会失败,只能填1881才行
晚点试试下面的 WXpush
校验提示文案
值友8075034593
校验提示文案
值友8075034593
校验提示文案
白夜梦
校验提示文案
joeyzhou1980
校验提示文案
joeyzhou1980
校验提示文案
kaaye
校验提示文案
技术宅是我梦想
校验提示文案
技术宅是我梦想
校验提示文案
昵称不是纯数字
校验提示文案
灵KOYB
校验提示文案
ShineJun
校验提示文案
xuplus
校验提示文案
尺猴
校验提示文案
tsbd
校验提示文案
德玛西亚草薙京
校验提示文案
无形之刃
校验提示文案
爱薅羊毛的穷耗子
校验提示文案