[TOC]
日常有几个URL需要监控是否可达,由于比较简单,自己写了个脚本,使用curl
查询URL是否可用。如果不可用,需要发送邮件、短信、微信等方式通知。
发送邮件方式很多,现在的手机APP和邮箱也都能做到有了邮件实时提醒。比如163和邮箱大师,发送邮件给163,邮箱大师可以做到实时提醒,做为通知的首选方式。
发送短信需要短信网关,也要收费,不可行。
发送微信,查了很多资料,公众号和订阅号发送条数为个位数,不够用。微信企业号有人数限制,每天发送的信息为人数*30条/天,可以试一下。
申请微信企业号
微信企业号官网 申请,注意一个账号只能申请公众号、订阅号、企业号其中一种,并且申请好了,就不能更改,这里一定要申请企业号。
申请的时候,要你提供组织代码证明,个人的应用,没有,选择最后一项,民间组织,只要提供身份证号以及手机验证就可以了。
新建一个应用、配置以及必须的参数
申请好企业号以后,看起来企业号的应用模型是这样的:
一个企业号对应多个应用
一个企业号对应一个组织(通信录),一个组织下可以有部门,每个部门里面有个人,每个个人可以有标签(TAG)
一个应用可以指定管理员,可以指定部门或者标签下的个人访问
在应用中心新建一个应用,选择
消息型应用
,可以接受微信消息,填好应用名称等必要的参数,指定可以访问的部门或者标签,应用就建好了。在
设置 - 权限管理
新建管理组,管理刚才应用的权限。命令行发消息的时候,也是使用这个权限进行发送的。最低的权限是对通信录有查看的权限,对应用有发消息的权限。
必要的参数:
在权限管理界面,记录下
corpid
和secret
在应用中心点击刚建好的应用,记录下
应用ID
如果发消息给指定的人员(部门或者标签),在通信录中,记下标签的
ID
或者部门的ID
接口
接口文档地址http://qydev.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5
使用建立连接和发送消息两个功能。
建立连接采用主动调用模式,发送消息为发送文本消息。
大致流程为:
通过corpid和secret,建立连接,取得access token。JSON格式,GET方法
通过access token,POST一个JSON数据,JSON数据包括发送对象、发送内容、应用ID,返回也为一个JSON包,包含errcode和errmsg,返回也为一个JSON包,包含errcode和errmsg
实现
使用SHELL编写脚本,用到两个工具
curl
和jq
。jq
用来处理JSON格式的数据,官方网站为https://stedolan.github.io/jq/。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
37URL_GET_TOKEN="https://qyapi.weixin.qq.com/cgi-bin/gettoken"
URL_SEND_MSG="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token="
CORP_ID="XXXXXXXXXXXXXX"
SECRET="XXXXXXXXXXXXXXX"
TOTAG=1
AGENTID=2
MSG='{'
MSG=$MSG'"totag":"'$TOTAG'",'
MSG=$MSG'"text":{"content":"'$1'"},'
MSG=$MSG'"safe":"0",'
MSG=$MSG'"agentid":'$AGENTID','
MSG=$MSG'"msgtype":"text"'
MSG=$MSG'}'
TOKEN=$(curl -s "$URL_GET_TOKEN?corpid=$CORP_ID&corpsecret=$SECRET" | jq -r .access_token)
if [ -z $TOKEN ]; then
echo Get token error, maybe network issue
exit 100
fi
return=$(curl -s -X POST -d "$MSG" $URL_SEND_MSG$TOKEN)
if [ -z "$return" ]; then
echo Send msg error, maybe network issue
exit 101
else
errcode=$(echo $return | jq -r .errcode)
if [[ $errcode -ne 0 ]]; then
errmsg=$(echo $return | jq -r .errmsg)
echo Send msg error, with error $errcode: $errmsg
exit 102
else
echo ok
fi
fi第一个curl使用GET方法取得TOKEN,直接在URL中拼装corpid和corpsecret,返回JSON格式,用jq取得access_token。
第二个curl使用POST发送消息,在URL中拼装token,在-d参数中发送JSON数据。
MSG为发送消息的JSON包,包括了发送对象totag
,发送消息text
,应用IDagentid
,safe
和msgtype
为固定值。
发送好以后,校验返回值,如果为空,说明URL没有访问到,如果不为空,jq
取得errcode,errcode为0,说明发送成功,errcode不为0,说明发送不成功,打印errcode和errmsg。