用Alertover实现群晖的实时消息推送
元宵节快乐~!

我们发送接收信息的渠道大多是 Email,短信。特别是服务报警这一块,短信虽好,但是太贵。而 Alertover 很好的解决了这个问题。
什么是Alertover ?
Alertover 是一个高效免费的团队消息中心,可以用来作为中小型创业团队或者公司的消息中心,随时随地,分级别、分组接收来自服务器预警,运营管理后台消息,提高技术团队,运营团队的消息响应速度。
优点:
- 当然是免费!
- 具有简单好用的API,可快速完成接入;
- 全平台支持,具有PC、Android、iOS客户端,也支持浏览器扩展插件;
- 支持多发送源,消息分级,声音提示;
官网(https://www.alertover.com/pages/api) 有详细的使用说明和代码样例。接入很方便的,我之前把它作为了 HomeAssistant 的消息组件,用来每天推送一次天气预报。

而群晖原本只设置了 邮件通知,本身也挺好用的,只是实时性比较差

对于一些严重的错误,比如磁盘输入/输出错误、USB 硬盘故障等等,如果我们想第一时间知道,可行的解决方案就是将 Alertover 封装成短信服务。
注册 Alertover
首先当然是要在 https://www.alertover.com/auth/register 注册账号,并登录后台管理你的相关ID。

Alertover 以组织为单位管理成员、发送源、和接收组。我用于 HomeAssistant 当时建的组织就叫 ha,因为通知的对象没有变化,所以没有再新建组织,只是添加了发送源 synology

添加成功后

添加 PHP 代码
关于群晖上搭建
WEB网站,在家庭多媒体中心(5):查询篇 中有简单的介绍,这里不再赘述。
之所以选 PHP ,是因为群晖上配置简单,而且 Alertover 提供了示例代码 ,下面是参考了 synology-pushover.php 修改后的代码。这段代码我放在了 github 上,你可以在 https://github.com/wbsu2003/synology/blob/main/synology-alertover.php 找到。
| 1 | 
 | 
上述代码添加到 Web 服务器的根目录。确保文件名是 synology-alertover.php。
配置短信通知
控制面板 –> 通知设置 –> 短信,勾选 启用短信通知 之后,新增短信服务提供商 会高亮

点击 新增短信服务提供商 ,在 测试网址 中输入下面的示例
| 1 | http://localhost/synology-alertover.php?user=username&pwd=password&to=123456&source=发送源ID&receiver=接收组ID&title=synology&content=Hello+World | 
其中
user =username–> 映射为用户账号–> 该参数无用,凑数用的,可以随便填,建议不动;
pwd =password–> 映射为密码–> 该参数无用,凑数用的,可以随便填,建议不动;
to =123456–> 映射为电话号码–> 该参数无用,凑数用的,可以随便填,建议不动;
source =发送源ID–> 映射为其他参数–> 该参数需填入发送源ID,这是一串以s-开头的字符串;
receiver =用户接受ID或者接收组ID–> 映射为其他参数–> 该参数需填入用户接受ID或者接收组ID,用户接受ID是以u-开头的字符串;而接收组ID是以g-开头的字符串;
title =标题–> 映射为其他参数–> 该参数需填入,我固定为了synology,建议不动;
content =消息内容–> 映射为短信内容–> 该参数需填入,映射后会根据事件变化;
所以上面示例内容,除了 source 和 receiver 要根据自己注册的修改外,其他的可以不动,照抄就行

下一步中按下图设置即可

这样我们就创建好了一个自定义的短信提供商,并且指向了本地 Web 服务器上的Alertover 脚本
之所以设置这么多没用的参数,是因为群晖本身的格式需要,所以主界面的 用户账号、密码、电话号码 都可以随便填

点 寄送测试短信,如果一切顺利,您很快会在 Alertover 设备上收到了一条通知。

如果你仔细看会发现内容并不是我们在 content 中填的 Hello World,这就是需要映射的原因
代码调试
为了安全性,代码是不能在非 localhost 模式下运行的,也就是不能用域名、IP方式运行,所以如果你要调试,可以将 $localOnly 改为 false,之后就可以在浏览器中运行了
| 1 | $localOnly = false; | 
在浏览器中输入
| 1 | http://群晖IP/synology-alertover.php?user=username&pwd=password&to=123456&source=发送源ID&receiver=接收组ID&title=synology&content=Hello+World | 
如果返回
| 1 | { "code": 0, "msg": "ok" } | 
就说明没问题了,如果返回
| 1 | invalid options | 
那请你检查问号 ? 后的参数,如果返回
| 1 | Fatal error: Call to undefined function curl_setopt_array() in /volume1/web/synology-alertover.php on line 41 | 
就是下一个问题要说的,需要包含 curl 扩展
可能存在的问题
如果设置无误,但是却一直收不到消息,检查下 Web station 的 高级设置 –> 扩展名 中是否包含了 curl 扩展

设置事件通知
控制面板 –> 通知设置 –> 高级设置,你会发现短信有很多事件是不发送的。

直接勾选 短信,然后 保存

接下来你就可以实时的收到各种消息推送了

参考文档
Alertover
地址:https://www.alertover.com/Synology Pushover notifications :: Styxit blog
地址:https://styxit.com/2014/05/10/synology-pushover.html
 
    
