群晖DSM自带的短信通知为clickatell,并不好用。目前找到了一个比较简单的方案,使用短信宝API给群晖添加短信通知。
首先注册一个短信宝账号:http://www.smsbao.com/
接着,使用如下接口就可以发送短信了
http://api.smsbao.com/sms?u=[你的用户名]&p=[md5(你的密码)]&m=[手机号]&c=[urlencode(短信内容)]
例如用户名为admin,密码为admin,发给13800138000,内容为“【测试】测试信息”,请求如下接口即可:
http://api.smsbao.com/sms?u=admin&p=21232f297a57a5a743894a0e4a801fc3&m=13800138000&c=%E3%80%90%E6%B5%8B%E8%AF%95%E3%80%91%E6%B5%8B%E8%AF%95%E4%BF%A1%E6%81%AF
直接将这个接口放入群晖后台会有问题,因为平台要求短信内容必须以“【公司名】”开头。且群晖会添加一个+86的前缀,短信宝并不识别。
这里可以使用PHP写一个中转API:
<?php
if(!isset($_GET['p']) || !isset($_GET['u']) || !isset($_GET['m']) || !isset($_GET['c'])){
die('invalid param');
}
$p = $_GET['p'];
$u = $_GET['u'];
$m = urldecode($_GET['m']);
$c = urldecode($_GET['c']);
// 如果不以【开头,则取【$_GET['from']】
if($c[0] != "【" && isset($_GET['from'])){
$c = "【" . $_GET['from'] . "】" . $c;
}
$c = urlencode($c);
// 去掉+86前缀
$m = str_replace('+86', '', $m);
$url = "https://api.smsbao.com/sms?u=$u&p=$p&m=$m&c=$c";
echo file_get_contents($url);
将这个文件重命名为SendSmsApi.php,放在自己的服务器上,或者群晖的webstation里均可。
在群晖的设置中找到通知-短信-新增短信服务提供商,填写测试网址为
https://服务器域名/SendSmsApi.php?from=NAS&p=21232f297a57a5a743894a0e4a801fc3&u=admin&m=13800138000&c=Hello+World
from参数是短信前缀,可以随便填,范围是2-6个字符。
点击下一步,按照如图设置即可
接着选中你添加的短信服务商,并填写你账号的用户名和md5加密后的密码
电话号码用下面这两种方法输入均可正常工作
点击测试,你将收到一条测试信息。在短信宝后台-请求记录中可以看到发信历史记录