#通知服务设置

通知服务设置是用于整个YCM的服务(所有用户使用同一份配置),用于告警邮件的推送,巡检通知的推送等等。

# 邮箱设置

邮箱设置是用于整个YCM的邮箱服务,用于告警邮件的推送,巡检通知的推送等等。

点击系统设置通知服务设置方框,进入到邮箱设置界面。

输入想要配置的邮箱发信服务信息,目前支持SSL和TLS加密认证邮箱服务。

确认后点击验证并保存

点击之后会弹出相应的接收邮箱验证框,输入接收验证的邮箱。之后点击发送测试邮箱

  • 邮箱验证若没有点击验证并保存是无法启用的
  • 仅保存是无法启用邮箱的,仅记住当前邮箱输入的配置
  • 重置邮箱会清空当前邮箱的配置

邮箱配置的启停通过点击邮箱设置的启停按钮实现邮箱设置的开关,开启成功后所有配置好的推送服务将立刻开启。

# 短信设置

短信设置是用于整个YCM的短信服务,用于告警信息的推送,巡检通知的推送等等。

点击系统设置通知服务设置方框,下拉页面进入到短信设置界面。

# 新增短信服务

在短信设置页面点击新增短信服务按钮,进入创建短信服务页面。

输入想要配置的短信发信服务信息,目前支持深圳市政数局短信平台,联通短信平台和自定义程序。

  • 深圳市政数局短信平台

  • 联通短信平台

  • 自定义程序

填写信息后可以开启是否验证短信服务,输入接收短信测试短信的手机号码,点击确定。

# 启用短信服务

选择验证通过的短信服务,点击开启。短信服务同时只会生效一个,当开启某个短信服务时,其他短信服务自动关闭。

# 编辑短信服务

进入短信设置页面,选择某个已添加的短信服务,点击编辑。

编辑短信服务点击确认,需要重新验证该短信服务。

.

# 删除短信服务

进入短信设置页面,选择某个已添加的短信服务,点击删除。

# 自定义程序规格

短信服务支持自定义程序类型,YCM可以通过自定义的程序发送短信。

命令行参数如下:

参数名称 数据类型 约束 描述
phone string 必传 电话号码
msg string 必传 告警信息,base64编码(使用标准base64 RFC 4648)

示例:

# binary
send_sms --phone "12345678910" --msg "WUNNIGFsYXJtIG1lc3NhZ2U="

# python
python send_sms.py --phone "12345678910" --msg "WUNNIGFsYXJtIG1lc3NhZ2U="

程序获取msg告警信息后,需要将信息用base64进行解码得到原本的信息,然后再发送短信到对应的电话号码。

  • 自定义python程序示例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-

import argparse
import base64
import hashlib
import requests
import json
import time

unicom_endpoint = "http://127.0.0.1:9090/sms/v2/api/ssend"
unicom_id = "<id>"
unicom_user = "<user>"
unicom_pwd = "<password>"
unicom_sub_port = "<sub_port>"


def parse_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("-p", "--phone", type=str, help="phone number")
    parser.add_argument("-m", "--msg", type=str, help="send message, using base64 codec")
    args = parser.parse_args()
    if args.phone is None:
        print("argument 'phone' is none")
        exit(1)
    if args.msg is None:
        print("argument 'msg' is none")
        exit(1)
    return args


def sha256_encrypt(text):
    """
    对字符串进行SHA256 加密
    """
    sha256 = hashlib.sha256()
    sha256.update(text.encode('utf-8'))
    return sha256.hexdigest()


def gen_headers():
    """
    生成请求头
    """
    now_milli_time = str(int(round(time.time() * 1000)))
    sign = sha256_encrypt(unicom_user + unicom_pwd + now_milli_time)
    headers = {
        'content-type': 'application/json;charset=utf-8',
        'accept': 'application/json',
        'timestamp': now_milli_time,
        'sign': sign,
    }
    return headers


def gen_req(args):
    """
    生成请求体
    """
    message = base64.b64decode(args.msg)
    req = {
        'spNum': unicom_id,
        'content': str(message),
        'mobiles': args.phone,
        'userMsgId': "",
        "atTime": "",
        'subPort': unicom_sub_port,
    }
    json_req = json.dumps(req)
    return json_req


def send_sms(args):
    """
    发起短信请求
    """
    hds = gen_headers()
    req = gen_req(args)

    resp = requests.post(unicom_endpoint, data=req, headers=hds)
    print(resp.status_code)
    print(resp.content)
    resp.close()


if __name__ == "__main__":
    args = parse_args()
    send_sms(args)
  • 返回结果示例:
python3 send_sms.py --phone 13838004800 --msg c2VuZCBzbXMgdGVzdAo=
200
b'{"description":"send message success","result":"0000","taskid":"819396"}\n'