用Alertover实现群晖的实时消息推送

元宵节快乐~!

title

我们发送接收信息的渠道大多是 Email,短信。特别是服务报警这一块,短信虽好,但是太贵。而 Alertover 很好的解决了这个问题。

什么是Alertover ?

Alertover 是一个高效免费的团队消息中心,可以用来作为中小型创业团队或者公司的消息中心,随时随地,分级别、分组接收来自服务器预警,运营管理后台消息,提高技术团队,运营团队的消息响应速度。

优点:

  • 当然是免费!
  • 具有简单好用的API,可快速完成接入;
  • 全平台支持,具有PC、Android、iOS客户端,也支持浏览器扩展插件;
  • 支持多发送源,消息分级,声音提示;

官网(https://www.alertover.com/pages/api) 有详细的使用说明和代码样例。接入很方便的,我之前把它作为了 HomeAssistant 的消息组件,用来每天推送一次天气预报。

title

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

title

对于一些严重的错误,比如磁盘输入/输出错误USB 硬盘故障等等,如果我们想第一时间知道,可行的解决方案就是将 Alertover 封装成短信服务。

注册 Alertover

首先当然是要在 https://www.alertover.com/auth/register 注册账号,并登录后台管理你的相关ID。

title

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

title

添加成功后

title

添加 PHP 代码

关于群晖上搭建 WEB 网站,在家庭多媒体中心(5):查询篇 中有简单的介绍,这里不再赘述。

之所以选 PHP ,是因为群晖上配置简单,而且 Alertover 提供了示例代码 ,下面是参考了 synology-pushover.php 修改后的代码。这段代码我放在了 github 上,你可以在 https://github.com/wbsu2003/synology/blob/main/synology-alertover.php 找到。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
/************************************/
/********** CONFING START ***********/

// Only allow request made by localhost?
// Set this to false if this script is not running on your synology webserver (less secure)
$localOnly = true;

/********** CONFING END *************/
/************************************/
echo time();
// Validate httpHost and/or remote addr?
if ($localOnly) {
if ($_SERVER['HTTP_HOST'] != 'localhost') {
// Not locahost
echo 'Not locahost';
die;
}
}

// Set variables
$options = array(
'source' => isset($_GET['source']) ? $_GET['source'] : false,
'receiver' => isset($_GET['receiver']) ? $_GET['receiver'] : false,
'content' => isset($_GET['content']) ? $_GET['content'] : false,
'title' => isset($_GET['title']) ? $_GET['title'] : false
);
// Remove empty values
$options = array_filter($options);


// Quit if not exactly 4 get values were found
if (count($options) != 4) {
echo 'invalid options';
die;
}

// Do Alertovover curl
curl_setopt_array($ch = curl_init(), array(
CURLOPT_URL => "https://api.alertover.com/v1/alert",
CURLOPT_POSTFIELDS => $options,
CURLOPT_SAFE_UPLOAD => true,
));
curl_exec($ch);
curl_close($ch);
?>

上述代码添加到 Web 服务器的根目录。确保文件名是 synology-alertover.php

配置短信通知

控制面板 –> 通知设置 –> 短信,勾选 启用短信通知 之后,新增短信服务提供商 会高亮

title

点击 新增短信服务提供商 ,在 测试网址 中输入下面的示例

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- 开头的字符串;
title
receiver = 用户接受ID 或者 接收组ID –> 映射为 其他参数 –> 该参数需填入 用户接受ID 或者 接收组ID用户接受ID是以 u- 开头的字符串;而 接收组ID 是以 g- 开头的字符串;
title
title = 标题 –> 映射为 其他参数 –> 该参数需填入,我固定为了 synology,建议不动;
content = 消息内容 –> 映射为 短信内容 –> 该参数需填入,映射后会根据事件变化;

所以上面示例内容,除了 sourcereceiver 要根据自己注册的修改外,其他的可以不动,照抄就行

title

下一步中按下图设置即可

title

这样我们就创建好了一个自定义的短信提供商,并且指向了本地 Web 服务器上的Alertover 脚本

之所以设置这么多没用的参数,是因为群晖本身的格式需要,所以主界面的 用户账号密码电话号码 都可以随便填

title

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

title

如果你仔细看会发现内容并不是我们在 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 扩展

title

设置事件通知

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

title

直接勾选 短信,然后 保存

title

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

title

参考文档

Alertover
地址:https://www.alertover.com/

Synology Pushover notifications :: Styxit blog
地址:https://styxit.com/2014/05/10/synology-pushover.html