README ¶
notify4g
notify api for sms/voice/qywx/mail/dingtalk
build
for release:
./gb.py
for local./gb.py -t linux
for linux version
$ ./gb.py -h
usage: gb.py [-h] [-t {linux,local}] [-u] [-b BINARY]
building go
optional arguments:
-h, --help show this help message and exit
-t {linux,local}, --target {linux,local}
target OS, default local
-u, --upx enable upx compression if it is available
-b BINARY, --binary BINARY
binary name, default base of current dir
for dev:
go get github.com/bingoohuang/statiq
./buildres.sh
statiq -src=res
go fmt ./...;sh build.sh
Startup example
./notify4g -i -s "~/notify4g/snapshot"
to init ctl shell scripts.- or by
export NOTIFY4G_SNAPSHOTDIR=~/notify4g/snapshotenv
to specified snapshotDir.
Build Rpm
make package-standalone
snapshots
outer network required
dysmsapi.aliyuncs.com:80
oapi.dingtalk.com:443
yun.tim.qq.com:443
cloud.tim.qq.com:443
qyapi.weixin.qq.com:443
mail.capmail.cn:25
Curl scripts
curl 'http://127.0.0.1:11472/notify/sms100' --data '{"templateParams":{"code":"1234"},"mobiles":["18678901234"],"retry":0}'
Request & Response Examples
API document style refers to White House Web API Standards.
API Resources
所有API都可以通过界面点击,然后在Chrome的开发工具的Network中查看详情。
- 获得直接发送通知的请求体样例 GET /raw/:channel
- 直接根据配置和内容发送通知 POST /raw/:channel
- 获取配置详情 GET /config/:configID
- 获得指定渠道配置样例 GET /config/:configID/:channel
- 新增/保存配置 POST /config/:configID
- 删除配置 DELETE /config/:configID
- 获得指定配置请求体样例 GET /notify/:configID
- 根据配置发送请求 POST /notify/:configID
GET /raw/:channel
GET /raw/aliyunsms
Response body:
{
"config": {
"accessKeyID": "BvXitpxZTiQPBPJNHzKEyUtZX",
"accessKeySecret": "EaouuhLQvkjvBpcqjySEaDtZp",
"templateCode": "jHsEdCAyjQiwwKfKTIAyMwhLd",
"signName": ""
},
"data": {
"templateCode": "",
"templateParams": {
"VIbvxqDAKzYvRCOugkfSTdBii": "HUzqgIrkvrpoUvwfOnPkYWJCc",
"nSodfKtCBsGOdFcFIfhRfKkQD": "MhBpCGIHwwFSTrekZojpWHHRj"
},
"signName": "",
"mobiles": [
"13640030119"
]
}
}
GET /raw/dingtalkrobot
Response body:
{
"config": {
"accessToken": "bmluXMmkzbKJXhHvRYnPWEFon"
},
"data": {
"message": "uxuNAGIvNfwPHCppEJGAFbbJb",
"atMobiles": [
"16231720931",
"12123690368"
],
"atAll": true
}
}
GET /raw/qcloudsms
Response body:
{
"config": {
"sdkappid": "VIsOIVUTXKvmznGCfpklQBsHl",
"appkey": "jyuRWrnndYwTzEQIDtpaulCEv",
"tplID": 58,
"sign": "",
"tmplVarNames": [
"NtAOrrDyTQZprXHlRyMKIQVrJ"
]
},
"data": {
"params": [
"DfQeutEzaCfShlItCeaEkTUGF",
"DZiVFEPPlMANVxGwaCVjypmXA"
],
"mobiles": [
"15923459113",
"18923435937"
]
}
}
GET /raw/qcloudvoice
Response body:
{
"config": {
"sdkappid": "dqpaGfzwZsdYPeOyCsiCnHuLe",
"appkey": "HQFbAYSZWVMAhuzBkneOovYpv",
"tplID": 39,
"playTimes": 49,
"tmplVarNames": [
"KyzjUzrBFcqQjedfJRHYoDbOG",
"nflOHIkugcnZOrqBkSazNWfPP"
]
},
"data": {
"params": {
"RIsCQnfJqlpSCwrkkFbdBFIFj": "XXcLBedVQEUDCnYApsnqfVPTL"
},
"mobile": "13534814833"
}
}
GET /raw/qywx
Response body:
{
"config": {
"corpID": "uCgrmJMtqLPBCFhsvjTArsMmL",
"corpSecret": "gRHZGuimGqaWdWaBWJwkTAShU",
"agentID": "GjqWAhwRbpeHnQNxTNgmJjnxD"
},
"data": {
"msg": "SlooidCOblAgkzyWhxDcYtLJJ",
"userIds": [
"yFeNmhPfjtisROYMvzGXHlQpd",
"CUSPjJkWEEfDDKDOfOhAXkqgJ"
]
}
}
GET /raw/mail
Response body:
{
"config": {
"smtpAddr": "xaQHabaoaboiqLQkrhnMSwTGo",
"smtpPort": 94,
"from": "CEVyoTJ@zTADH.biz",
"username": "gQVadOOpmwpHnlIyfsCCBulVP",
"pass": "NvMQhtbtbJgCkOErmOqWRCSKa"
},
"data": {
"subject": "kfYENjIqRgtAsNATTewtSQJtK",
"message": "nbUGDoWZCCUeCgZnqaHOhlDUc",
"to": [
"RyBZMmL@NbhCr.net",
"fKggIDs@WHkmM.net"
]
}
}
GET /raw/sms
Response body:
{
"config": {
"configIds": [
"NCCNkSbvLCcEBYPRpErzuHOzu",
"qJoxwNVZfRxOytgzHbfYLSnNg"
],
"random": false,
"retry": 0
},
"data": {
"templateParams": {
"CAatGFIenVaglyBHaqLGDVNDm": "HmVmUYwDzaKJZvYwyMqYAAowJ",
"uCbSRZgyNkgIntizzDrIHVOiy": "TNvBcIHcgrHoiKEGjEsktAKmn"
},
"mobiles": [
"14509804092"
],
"retry": 0
}
}
POST /raw/:channel
POST /raw/aliyunsms
Request body:
{
"config": {
"accessKeyID": "pGkWHwdlIFPxNbwOuzqqHudVk",
"accessKeySecret": "MuIuTxqaaqPFOqNtVZGGxyIVJ",
"templateCode": "SMS_11111",
"signName": "xx编程网"
},
"data": {
"templateCode": "",
"templateParams": {
"code": "123456"
},
"signName": "",
"mobiles": [
"11350758197",
"12414111245"
]
}
}
Response body:
{
"status": 200,
"message": "OK",
"data": {
"channel": "aliyunsms",
"raw": {
"outId": "yOpBUzo90hnezrhs",
"code": "OK",
"message": "OK",
"requestID": "E4F3D966-002D-4D5D-BFA5-10E547334434",
"bizID": "831713858682882984^0"
}
}
}
POST /raw/dingtalkrobot
Request body:
{
"config": {
"accessToken": "RICScixPcBbEJRMdcvNPTqkUr"
},
"data": {
"message": "WYouyJaLExAVGGWpTVumZgXhZ",
"atMobiles": [
"10707297593",
"18621963646"
],
"atAll": false
}
}
Response body:
{
"status": 200,
"message": "OK",
"data": {
"channel": "dingtalkrobot",
"raw": {
"code": 0,
"message": ""
}
}
}
POST /raw/qcloudsms
Request body:
{
"config": {
"sdkappid": "erKoSpOlNAKZgTBwZWsyKuSHt",
"appkey": "aQtuUztXdxpTFcPsdnowkiBUK",
"tplID": 34,
"sign": "",
"tmplVarNames": [
"oIpzKCYbQmBEaiWXeCPOYwFEG"
]
},
"data": {
"params": [
"QxIiueXozjhTVNMhdANVnYMvR"
],
"mobiles": [
"14432444366"
]
}
}
Response body:
{
"status": 200,
"message": "OK",
"data": {
"channel": "qcloudsms",
"raw": {
"result": 0,
"errmsg": "OK",
"ext": "",
"detail": [
{
"fee": 1,
"mobile": "18551855099",
"nationcode": "86",
"sid": "2019:6646899365302911964",
"result": 0,
"errmsg": "OK"
}
]
}
}
}
POST /raw/qcloudvoice
Request body:
{
"config": {
"sdkappid": "nCQtPPaOBnGymUUMmcjWRvxra",
"appkey": "jdWinpYVkCusHaznjRBxSghoq",
"tplID": 15,
"playTimes": 1,
"tmplVarNames": ["AppName", "WarnSrc", "WithMinutes", "Warning", "Min", "Max"]
},
"data": {
"params": {
"AppName": "demo", "WarnSrc": "host1", "WithMinutes": "5分", "Warning": "可用内存不足", "Min": "100M", "Max": "200M"
},
"mobile": "13388093706"
}
}
Response body:
{
"status": 200,
"message": "OK",
"data": {
"channel": "qcloudvoice",
"raw": {
"result": 0,
"errmsg": "OK",
"callid": "bef3d1ce-7df8-11e9-aa35-52540075d5e6",
"ext": ""
}
}
}
POST /raw/qywx
Request body:
{
"config": {
"corpID": "TavUQCHdZPmNTkeszuHITWFai",
"corpSecret": "YiomBBitrBsEqINJYLpSnpXIe",
"agentID": "1000002"
},
"data": {
"msg": "DPhnPBkYHnKTIltUTvqZqriNS",
"userIds": [
"huangjinbing"
]
}
}
Response body:
{
"status": 200,
"message": "OK",
"data": {
"channel": "qywx",
"raw": {
"errcode": 0,
"errmsg": "ok",
"invaliduser": "",
"invalidparty": "",
"invalidtag": ""
}
}
}
POST /raw/mail
Request body:
{
"config": {
"smtpAddr": "iPtbQlchfAcisTedBhGwWsoZz",
"smtpPort": 2,
"from": "ExTWPRT@gYNcz.org",
"username": "xfAdFgSoGYsPsupEGKPUqnIzf",
"pass": "lBPKGnydFjkaGjBrEdufObPwt"
},
"data": {
"subject": "jagoWiJBpkulohboaWqPgZZMo",
"message": "PycUxHOvIUqKuHhcJouyJPsUL",
"to": [
"mCypiaF@TOuRk.net",
"jrrEYOi@FQMlD.ru"
]
}
}
Response body:
{
"status": 200,
"message": "OK",
"data": {
"channel": "mail",
"raw": null
}
}
{
"status": 400,
"message": "dial tcp: lookup TfdZkPmcNDQFtfAEdRQfgzQkZ: no such host",
"data": {
"channel": "mail",
"raw": null
}
}
POST /raw/sms
Request body:
{
"config": {
"configIds": [
"as100",
"qs200"
],
"random": true,
"retry": 0
},
"data": {
"templateParams": {
"code": "123456"
},
"mobiles": [
"14509804092"
],
"retry": 0
}
}
Response body:
{
"status": 200,
"message": "OK",
"data": {
"channel": "aliyunsms",
"raw": {
"outId": "9q2hoGoxwyoBM4wx",
"code": "OK",
"message": "OK",
"requestID": "6A8F6D26-AE2B-475F-B603-3886454F0587",
"bizID": "410500758684794600^0"
}
}
}
{
"status": 200,
"message": "OK",
"data": {
"channel": "qcloudsms",
"raw": {
"result": 0,
"errmsg": "OK",
"ext": "",
"detail": [
{
"fee": 1,
"mobile": "14509804092",
"nationcode": "86",
"sid": "8:fCI6QdTlfniajRq3qCK20190524",
"result": 0,
"errmsg": "OK"
}
]
}
}
}
Click to show internal directories.
Click to hide internal directories.