Python是运维监控与自动化脚本中常用的语言。用Python接入互亿无线预警通知接口,可以把Zabbix、Prometheus告警或巡检脚本结果,通过短信或语音发出。本文给出可直接运行的示例,基于标准库urllib,无需安装第三方依赖。…
Python是运维监控与自动化脚本中常用的语言。用Python接入互亿无线预警通知接口,可以把Zabbix、Prometheus告警或巡检脚本结果,通过短信或语音发出。本文给出可直接运行的示例,基于标准库urllib,无需安装第三方依赖。
Python接入的接口与参数
短信接口地址 https://api.ihuyi.com/sms/Submit.json ,语音接口 https://api.ihuyi.com/voice/vm 。核心参数都是account、password、mobile、content四个。
- account:控制台获取的APIID;
- password:控制台获取的APIKEY;
- mobile:接收手机号,多号可用逗号分隔;
- content:短信内容或语音TTS文本。
Python发送短信告警代码示例
下面用urllib.parse与urllib.request实现POST请求,适合直接放在巡检脚本里:
import urllib.parse, urllib.request, json
def send_sms(mobile, content):
url = "https://api.ihuyi.com/sms/Submit.json"
data = urllib.parse.urlencode({
"account": "你的APIID",
"password": "你的APIKEY",
"mobile": mobile,
"content": content
}).encode("utf-8")
req = urllib.request.Request(url, data=data)
with urllib.request.urlopen(req, timeout=10) as resp:
return json.loads(resp.read().decode("utf-8"))
r = send_sms("13800138000", "服务器disk-01磁盘使用率超过90%,请尽快清理")
print(r) # code为2表示提交成功
如果项目已用requests库,只需把请求部分替换为requests.post,逻辑一致。
Python接入注意事项
- 请求设置timeout,避免告警接口阻塞巡检主流程;
- account与password从环境变量读取,不要硬编码;
- 返回code=2表示提交成功,其余错误码记录日志排查;
- 语音接口地址换成/voice/vm即可,参数相同。
带错误处理与重试的封装
上面的示例是骨架,生产环境还需要处理网络异常与返回码。下面这个版本加上了超时、异常捕获、返回码判断与失败重试,适合直接放进Zabbix或Prometheus告警脚本:
import urllib.parse, urllib.request, json, time, logging
API_ID = os.environ.get("IHUYI_APIID")
API_KEY = os.environ.get("IHUYI_APIKEY")
URL = "https://api.ihuyi.com/sms/Submit.json"
def send_sms(mobile, content, retry=2):
data = urllib.parse.urlencode({
"account": API_ID, "password": API_KEY,
"mobile": mobile, "content": content
}).encode("utf-8")
for attempt in range(retry + 1):
try:
req = urllib.request.Request(URL, data=data)
with urllib.request.urlopen(req, timeout=10) as resp:
r = json.loads(resp.read().decode("utf-8"))
if r.get("code") == 2:
return r
logging.warning("提交失败 %s", r)
except Exception as e:
logging.error("请求异常: %s", e)
time.sleep(2)
return None
运行方式与依赖说明
该示例只用到Python标准库,Python 3.6以上可直接运行,无需pip安装第三方包。运行前在环境变量中设置IHUYI_APIID与IHUYI_APIKEY,避免密钥硬编码进脚本。
常见报错排查
- urlopen超时:检查服务器出站443端口是否通畅;
- 返回code非2:打印完整返回体,对照msg定位,常见是手机号格式或模板未报备;
- 中文乱码:确认data以utf-8编码;
- 语音播报无声:把URL换成 https://api.ihuyi.com/voice/vm 即可。
把这段函数放进你的监控脚本,服务器告警就能自动打电话。前往注册免费试用获取APIID与APIKEY。