前置需求:1.所使用的电话语音功能,需要支持查询电话语音的状态(未接通/拒接/已接通 等)
2.所有的告警需要有对应的负责人,一个人循环CALL也行:A/B/C/D…………

该程序实现的需求:
当zabbix产生告警时,根据负责人清单中的顺序,进行电话语音告警推送,每人重复N(当前代码N=3)次,直到其中一次语音被接通。
例子:
某个告警有负责人:A/B/C,告警产生后,首先将给A发送语音,如果A未接通,将在T(当前代码T=120s)时间后再次发送语音告警,如果N次语音都没有接通,则将通知人替换成B,依次类推,任何一次电话被接通则停止语音推送。

思路:
1.生成一个process清单,里面纪录了当前所有需要打call的信息。(本程序用的纯文件存储)
2.每10秒轮询一次这个process清单,根据里面的信息,查看历史的call是否成功接收,没收继续call并更新相关信息,收了就删掉对应process。
3.写一个独立的脚本,提供给zabbix调用,用来新建process

几个通用的变量:
type:根据zabbix的特性,分为了host,ip和triggerid,分别对应zabbix里面的host,ip和告警的tirggerid,方便更贴近公司内部监控逻辑要求。
key_value:为告警所属关键字,和type一起,用来识别该告警将会发给哪一些人。
phoneNum:告警联系人的手机号

代码文件:

联系人文件:
${type}_call.list
存储该类type的联系人清单及联系顺序,格式如下:
${key_value} 第一个phoneNum 第二个人的phoneNum ………………第N个人的phoneNum
举例:

process文件,当前实现方式是放在了一个文件夹里面,每个文件都是一个process
格式如下:
文件名:$type.$key_value
文件内容格式:
$1:上次更新的时间,纪录上次打call的时间
$2:type
$3:key_value
$4:当前打call的手机号
$5:当前联系人的顺位
$6:本条process剩余多少次轮询
$7:短信发送内容
举例:

生成process的脚本

轮询process的脚本:

与zabbix的交互见另外一篇:

后续需化的点:
1.将每个人的通话次数,重复call的间隔时间,做成变量话。
2.需要支持电话语音内容包含空格等特殊字符
3.将整个功能服务化,就是不用crontable那种,配置好第三方语音的脚本后,直接启动起来就好。



如果想赏钱,可以用微信扫描下面的二维码,一来能刺激我写博客的欲望,二来好维护云主机的费用; 另外再次标注博客原地址 itnotebooks.com 感谢!

Golang Terraform 创建阿里云ECS云主机

封装NewTerraform方法 将Terraform的环境相关信息都在这个方法内定义完成 1. Terraform工作目录定义 2. Plugins初始化,考虑到在线初始化太慢,这里是提前下...

阅读全文

Golang text/template 渲染terraform文件

定义模板 这里定义的是阿里云的ECS,考虑通用性,未使用扩展模块,而是使用了循环生成的方式提高灵活性,所以传入的是一个列表 range . 对于当前这个模板来说...

阅读全文

Golang 钉钉企业聊天机器人

定义钉钉企业机器人回调数据模型 用于接收钉钉企业机器人回掉时使用的数据 Go type ATUser struct { DingtalkId string `jso...

阅读全文

欢迎留言