Files
dromara--domain-admin/doc/source/manual/notify.md
T
2026-07-13 12:31:34 +08:00

508 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 通知配置
> 备注:如果点击`测试` 无法接收到消息,可尝试给`剩余天数` 设置一个比较大的值大
## 1、邮件
第一步:需要在 `系统管理/系统设置/邮箱设置` 中设置好系统发件邮件
> 如果需要对域名进行到期监控和邮件提醒,必须设置发件邮件
注意:
1. 如果使用的是163邮箱,密码处填写的是`授权码`
![](https://raw.githubusercontent.com/mouday/domain-admin/master/image/system-list.png)
第二步:填写收件人列表
![](https://raw.githubusercontent.com/mouday/domain-admin/master/image/notify-email.png)
需要填写json格式的数据,例如:
```json
[
"tom@qq.com",
"jack@qq.com"
]
```
## 2、WebHook
### 2.1、webhook发送微信消息
可以使用的微信推送平台有很多,可以参考
[微信推送消息通知接口汇总](https://pengshiyu.blog.csdn.net/article/details/124135877)
### 2.2、webhook发送钉钉消息
文档:[https://open.dingtalk.com/document/orgapp/custom-bot-send-message-type](https://open.dingtalk.com/document/orgapp/custom-bot-send-message-type)
webhook地址
```
https://oapi.dingtalk.com/robot/send?access_token=<access_token>
```
设置请求头
```json
{
"Content-Type": "application/json"
}
```
示例:SSL证书到期(文本格式)
```json
{
"msgtype": "text",
"text": {
"content": "以下证书临期,请检查:\n {% for row in list %}{{row.domain}} {{row.start_date or '-' }} ~ {{row.expire_date or '-' }} (剩余{{row.expire_days}}天)\n{% endfor %}"
}
}
```
示例:SSL证书到期(markdown格式)
```json
{
"msgtype": "markdown",
"markdown": {
"title": "SSL证书到期提醒",
"text": "### SSL证书到期提醒 🔔\n\n| 域名 | 到期 |\n| ---- | ---- |\n{% for row in list %}| {{row.domain}} | {{row.expire_date or '未知'}}({{row.expire_days}}天) |\n{% endfor %}\n\n> 请及时更新即将到期的SSL证书。"
}
}
```
示例:网站监控异常(markdown格式)
```json
{
"msgtype": "markdown",
"markdown": {
"title": "网站监控异常提醒",
"text": "{{monitor_row.title}} 监测异常,请检查:\n
请求URL<font color=\"red\">{{monitor_row.http_url}}</font>
重试次数:<font color=\"red\">{{monitor_row.allow_error_count}}</font>
状态:{% if monitor_row.status==2 %}<font color=\"red\">失败</font>{% elif monitor_row.status==1 %}<font color=\"green\">成功</font>{% else %}<font color=\"comment\">未知</font>{% endif %}"
}
}
```
可以参考 [@PanZongQing](https://github.com/PanZongQing) 分享的钉钉webhook配置:
[对接钉钉群内自定义webhook机器人发送告警注意事项](https://github.com/dromara/domain-admin/issues/47)
### 2.3、webhook发送Resend邮件
Resend 是一个为开发者提供的email 接口
工作原理:通过api接口使用HTTP协议发送邮件到Resend服务器,再通过Resend服务器使用SMTP协议发送邮件到目标邮箱
步骤:
1、注册账号:[https://resend.com/](https://resend.com/)
2、获取API Key
3、配置webhook
- 请求方法: POST
- 请求地址: https://api.resend.com/emails
- 请求头
```json
{
"Authorization": "Bearer <API Key>",
"Content-Type": "application/json"
}
```
- 请求体
```json
{
"from": "onboarding@resend.dev",
"to": "123456@qq.com",
"subject": "Hello World",
"html": "<p><strong>证书到期提醒</strong></p>"
}
```
### 2.4、webhook配置showdoc
showdoc是一个从服务器推送消息到手机的工具,可以通过api接口推送到微信服务号消息
注册地址:[https://push.showdoc.com.cn/](https://push.showdoc.com.cn/)
- 请求方法: POST
- 请求地址:
```bash
https://push.showdoc.com.cn/server/api/push/<API Key>
```
- 请求头
```json
{
"Content-Type": "application/json"
}
```
- 请求体
```json
{
"title": "域名到期提醒",
"content": "{% for row in list %}{{row.domain}} {{row.start_date or '-' }} - {{row.expire_date or '-' }} ({{row.expire_days}}){% endfor %}"
}
```
### 2.5、webhook发送飞书消息
模板示例由微信群友@kaka 提供
```json
{
"msg_type": "interactive",
"card": {
"config": {
"wide_screen_mode": true,
"enable_forward": true
},
"elements": [{
"tag": "div",
"text": {
"tag": "plain_text",
"content": "",
"lines": 1
}
,
"fields": [
{
"text": {
"tag": "lark_md",
"content": "**域名证书 **: <ul> {%- for row in list %} {%- if row.expire_days > 0 %} <li> {{row.domain}} {{"当前域名或证书 申请时间: "}} {{row.start_date or '-' }} - {{"到期时间: "}} {{row.expire_date or '-' }} {{"剩余: "}}( {% if row.expire_days > 0 %} {{row.expire_days}} {% endif %} ) {{"天; "}} {% endif %} {% endfor %} </li> </ul> "
}
}
]
},
{
"actions": [{
"tag": "button",
"text": {
"content": "域名或证书过期提醒 :玫瑰:",
"tag": "lark_md"
},
"url": "https://dc.console.aliyun.com/",
"type": "primary",
"value": {
"chosen": "approve"
}
}],
"tag": "action"
}],
"header": {
"title": {
"content": "域名或证书过期 告警",
"tag": "plain_text"
},
"template": "red"
}
}
}
```
### 2.6、webhook发送企业微信消息
文档:[https://developer.work.weixin.qq.com/document/path/99110](https://developer.work.weixin.qq.com/document/path/99110)
webhook地址
```
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=693a91f6-7xxx-4bc4-97a0-0ec2sifa5aaa
```
消息体
```json
{
"msgtype": "text",
"text": {
"content": "广州今日天气:29度,大部分多云,降雨概率:60%",
"mentioned_list":["wangqing","@all"],
"mentioned_mobile_list":["13800001111","@all"]
}
}
```
示例:监控证书到期(文本格式)
```json
{
"msgtype": "text",
"text": {
"content": "SSL证书到期提醒:{% for row in list %}{{row.domain}} {{row.start_date or '-' }} - {{row.expire_date or '-' }} ({{row.expire_days}}){% endfor %}"
}
}
```
示例:监控证书到期(markdown格式)
```json
{
"msgtype": "markdown",
"markdown": {
"title": "SSL证书到期提醒",
"content": "### SSL证书到期提醒 🔔\n\n| 域名 | 生效日期 | 到期日期 | 剩余天数 |\n| ---- | -------- | -------- | :--------: |\n{% for row in list %}| {{row.domain}} | {{row.start_date or '未知'}} | {{row.expire_date or '未知'}} | {{row.expire_days}}天 |\n{% endfor %}\n\n> 请及时更新即将到期的SSL证书,以确保网站安全性。"
}
}
```
示例:网站监控异常
```json
{
"msgtype": "markdown",
"markdown": {
"content": "{{monitor_row.title}}监测提醒,请相关同事注意。\n
>请求URL:<font color=\"red\">{{monitor_row.http_url}}</font>
>重试次数:<font color=\"red\">{{monitor_row.allow_error_count}}</font>
>状态:{% if monitor_row.status==2 %}<font color=\"red\">失败</font>{% elif monitor_row.status==1 %}<font color=\"green\">成功</font>{% else %}<font color=\"comment\">未知</font>{% endif %}"
}
}
```
## 3、企业微信
```json
{
"touser": "UserName",
"msgtype": "text",
"agentid": 1000001,
"text": {
"content": "你的域名证书即将到期\n点击查看<a href=\"http://www.demo.com/\">Domain Admin</a>"
}
}
```
自定义通知模板示例
```json
{
"touser": "UserName",
"msgtype": "text",
"agentid": 1000001,
"text": {
"content": "SSL证书到期提醒:\n{% for row in list %}{{row.domain}} {{row.group_name or '-'}} ({{row.expire_days}}){% endfor %}"
}
}
```
参考:[https://developer.work.weixin.qq.com/document/path/90236](https://developer.work.weixin.qq.com/document/path/90236)
## 4、钉钉
```json
{
"agent_id": "<agent_id>",
"userid_list": "<userid_list>",
"msg": {
"msgtype": "text",
"text": {
"content": "域名或证书过期提醒"
}
}
}
```
参考文档:[https://open.dingtalk.com/document/orgapp/asynchronous-sending-of-enterprise-session-messages](https://open.dingtalk.com/document/orgapp/asynchronous-sending-of-enterprise-session-messages)
## 5、飞书
```json
{
"receive_id": "<receive_id>",
"msg_type": "text",
"content": "{\"text\":\"域名或证书过期提醒\"}"
}
```
参考文档:[https://open.feishu.cn/document/server-docs/im-v1/message/create](https://open.feishu.cn/document/server-docs/im-v1/message/create)
## 6、模板和参数
采用`jinja2` 模板引擎
WebHook、企业微信、飞书、钉钉均支持自定义通知模板
### 6.1、通用示例
传入模板的参数示例:
```json
{
"list":[
{
"domain": "www.demo.com",
"start_date": "2023-06-01",
"expire_date": "2023-06-21",
"expire_days": 20
}
]
}
```
参数说明
| 参数 | 类型 | 说明 |
| -| - | - |
| domain | string | 域名/证书域名
| start_date | string | 生效时间
| expire_date | string | 过期时间
| expire_days | int | 剩余天数
> 备注:list仅包含满足通知条件的数据
示例
```json
{
"title": "域名到期提醒",
"content": "{% for row in list %}{{row.domain}} {{row.start_date or '-' }} - {{row.expire_date or '-' }} ({{row.expire_days}}){% endfor %}"
}
```
渲染结果
```json
{
"title": "域名到期提醒",
"content": "www.demo.com 2023-06-01 - 2023-06-21 (20)"
}
```
不同的事件参数稍有不同,会有其独特的参数
### 6.2、域名到期
```json
{
"list": [
{
"id": 9,
"user_id": 1,
"domain": "www.baidu.com",
"group_id": 9,
"group_name": "百度系",
"comment": "备注",
"start_time": "2010-08-28 04:11:35",
"expire_time": "2023-08-28 04:11:35",
"start_date": "2010-08-28",
"expire_date": "2023-08-28",
"expire_days": 5,
"domain_registrar": "厦门易名科技股份有限公司",
"domain_registrar_url": "https://www.ename.net/",
"icp_company": "北京百度网讯科技有限公司",
"icp_licence": "京ICP证030173号-1",
"tags": [
"企业服务",
"汽车服务"
],
"tags_str": "企业服务、汽车服务",
"is_auto_update": true,
"is_expire_monitor": true,
"create_time": "2023-07-20 22:59:20",
"update_time": "2023-08-22 16:01:13",
"update_time_label": "13分钟前"
}
]
}
```
### 6.3、SSL证书到期
```json
{
"list": [
{
"id": 3,
"user_id": 1,
"domain": "www.baidu.com",
"root_domain": "baidu.com",
"port": 443,
"group_id": 4,
"group_name": "百度系",
"comment": "备注字段",
"start_time": "2023-07-06 09:51:06",
"expire_time": "2024-08-06 09:51:05",
"start_date": "2023-07-06",
"expire_date": "2024-08-06",
"expire_days": 349,
"is_auto_update": true,
"is_expire_monitor": true,
"is_dynamic_host": false,
"create_time": "2023-08-22 16:28:19",
"update_time": "2023-08-22 16:28:19",
"update_time_label": "刚刚"
}
]
}
```
### 6.4、监控异常
异常通知和异常恢复通知的字段一致
```json
{
"monitor_row": {
"title": "名称",
"http_url": "请求URL",
"allow_error_count": 3,
"status": 2
},
"error": "报错信息"
}
```
参数说明
| 参数 | 类型 | 说明 |
| -| - | - |
| error | string | 报错信息
| monitor_row.title | string | 名称
| monitor_row.http_url | string | 请求URL
| monitor_row.allow_error_count | int | 重试次数
| monitor_row.status | int | 状态:0未知,1成功,2失败