跳到主要内容

通知与消息

NeoMind 通过消息系统把设备告警、规则触发、AI Agent 分析结果、系统事件统一推送到你配置的渠道。所有消息都会先进入应用内消息中心,再转发到启用的外部渠道。支持 7 个外部消息渠道(Webhook、邮件、Telegram、企业微信、钉钉、Slack、飞书),可同时多渠道分发,并对每个渠道单独配置消息过滤规则。

消息系统位于左侧导航的 Messages(铃铛图标)。两个页签:Messages(消息中心,浏览历史告警)和 Channels(渠道配置)。

支持的渠道

渠道类型用途鉴权方式可禁用
Webhook通用 HTTP转发到任意 HTTP 端点(自建系统、IFTTT、n8n、AlertManager),UI 支持为端点配置鉴权头URL + 5 种鉴权(UI 侧配置,转为请求头)
Email(邮件)SMTP标准邮件通知SMTP 用户名 / 密码
TelegramBot API海外团队即时通知Bot Token
企业微信(WeCom)群机器人国内企业协作群机器人 Webhook Key
钉钉(DingTalk)自定义机器人国内企业协作Access Token + 加签
SlackIncoming Webhook国际团队协作Webhook URL
飞书(Feishu)自定义机器人国内企业协作Hook ID + 加签
备注

NeoMind 不支持短信(SMS)。需要短信告警请用 Webhook 渠道对接第三方短信网关(如 Twilio、阿里云短信)。

界面概览

Messages 页签(消息中心)

进入 Messages 页面,默认显示消息中心:

消息中心列表 — 严重度、状态、分类、来源、操作

每条消息包含:

字段说明
严重度(Severity)info / warning / critical / emergency(颜色由浅到深)
标题消息标题
正文消息内容(点击行展开查看完整内容)
分类(Category)alert(告警)/ system(系统)/ business(业务)/ notification(通知)+ 后端可扩展任意分类
来源(Source)触发来源:device / rule / telemetry / schedule / llm / system
状态(Status)active / acknowledged / resolved / archived
时间创建时间与最后更新时间
操作Acknowledge / Resolve / Archive / Delete

筛选:点击右上角 Filter 按钮打开筛选 Popover,可按严重度(多选)、状态(多选)、分类(多选)筛选,已激活的筛选以 chip 形式显示在工具栏。

Channels 页签(渠道管理)

切换到 Channels 页签查看所有渠道:

渠道列表 — 渠道名、类型、状态、统计、操作

页面顶部显示统计卡片(总渠道数 / 启用数 / 渠道类型数),下方是渠道列表。每个渠道卡片显示:

  • 渠道名 + 类型图标:标识渠道
  • 启用开关:一键启用 / 禁用渠道
  • 测试按钮:内联显示测试结果(成功 / 失败 + 原因)
  • 操作菜单:View(查看详情)/ Edit(编辑)/ Configure Filter(配置过滤)/ Manage Recipients(管理收件人,仅 Email)/ Enable | Disable / Delete

配置渠道

点击 Create 按钮打开全屏渠道编辑器:

渠道编辑器 — 左侧类型选择,右侧配置表单(默认选中 Webhook)

编辑器采用左右分栏布局:

  • 左侧边栏:列出 7 种渠道类型,点击切换
  • 右侧表单:显示当前选中类型的配置字段

渠道只负责外部转发;无论是否配置渠道,所有消息都会保存在应用内消息中心(Messages 页签),可在 Web UI 右上角铃铛查看。

通用字段

所有外部渠道都需要:

字段说明
Name(渠道名)唯一标识,用于规则 / Agent 引用。建议用小写连字符(如 ops-feishu
Enabled(启用)是否启用。禁用的渠道不会收到任何消息

Webhook 渠道

最灵活的渠道,可对接任意 HTTP 端点。

Webhook 渠道配置 — URL、方法、鉴权类型、超时
字段说明示例
URL接收消息的 HTTP(S) 端点,NeoMind 以 POST 方式推送https://api.example.com/alerts
Authentication鉴权类型:none / bearer / basic / apikey / custom见下表
Headers自定义请求头(custom 鉴权下使用){"X-Tenant": "factory1"}
Timeout(secs)HTTP 超时,默认 30,最大 30030

鉴权类型详解(UI 侧的配置项,保存时统一转换为 HTTP 请求头):

类型附加字段适用场景
none公开端点、内网无鉴权
bearerBearer TokenOAuth 2.0、JWT
basicUsername + PasswordHTTP Basic Auth
apikeyAPI Key + Header Name(默认 X-API-Key第三方 API 网关
custom自定义 Headers 表(键值对)自定义签名、多 Header 组合

Email 渠道

邮件渠道配置 — SMTP 主机、端口、发件人、认证
字段说明示例
SMTP ServerSMTP 服务器地址smtp.gmail.com
SMTP Port端口(默认 587,STARTTLS)465(SSL)/ 587(STARTTLS)
UsernameSMTP 登录用户名alert@example.com
PasswordSMTP 登录密码或应用专用密码••••••••
From Address发件人地址(一般同 Username)alert@example.com
收件人(Recipients)单独管理

Email 渠道保存后,在渠道操作菜单点 Manage Recipients 添加收件人列表。这样无需重新打开渠道编辑器即可增删收件人。

Telegram 渠道

Telegram 渠道配置 — Bot Token、Chat ID
字段说明获取方式
Bot TokenTelegram Bot 的访问令牌在 Telegram 里 @BotFather 创建 Bot 后获得,格式 123456:ABC-DEF...
Chat ID接收消息的会话 ID(群组或私聊)把 Bot 加入群组后访问 https://api.telegram.org/bot<TOKEN>/getUpdates 查看

私聊 Chat ID 是你的用户 ID(纯数字)。群组 Chat ID 通常以 - 开头(如 -1001234567890)。

企业微信(WeCom)渠道

字段说明获取方式
Key群机器人 Webhook URL 的 Key 部分(不是完整 URL群设置 → 添加群机器人 → 复制 Webhook URL,取 key= 后的参数值

NeoMind 内部拼接为 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=<KEY>,所以只填 Key 即可

钉钉(DingTalk)渠道

字段说明获取方式
Access Token群机器人 Webhook URL 的 access_token群设置 → 智能群助手 → 添加自定义机器人 → 复制 Webhook URL,取 access_token= 后的值
Secret(可选)加签密钥机器人安全设置选「加签」,复制 Secret 填入。强烈建议启用加签,否则机器人可能被恶意调用
备注

启用加签后,NeoMind 使用 HMAC-SHA256 计算签名,按钉钉协议追加 timestampsign 到 URL。

Slack 渠道

字段说明获取方式
Webhook URLSlack Incoming Webhook 完整 URLhttps://api.slack.com/apps → Create New App → Incoming Webhooks → 启用 → 复制 URL

URL 形如 https://hooks.slack.com/services/T000/B000/XXXX

飞书(Feishu)渠道

字段说明获取方式
Hook ID群机器人 Webhook URL 的 hook_id 部分(不是完整 URL群设置 → 群机器人 → 添加自定义机器人 → 复制 Webhook URL,取 open.feishu.cn/open-apis/bot/v2/hook/ 之后的 UUID
Secret(可选)加签密钥机器人安全设置选「签名校验」,复制 Secret
备注

启用签名后,NeoMind 按飞书协议计算 timestampsign 字段并加入请求体。

测试渠道

保存后,在渠道列表点 Test 按钮,NeoMind 发送一条测试消息并内联显示结果:

  • ✅ 成功:显示 HTTP 状态码或渠道返回的响应
  • ❌ 失败:显示错误原因(连接超时、鉴权失败、Chat ID 不存在等)

建议先 Test 再启用,避免配置错误导致后续告警静默失败。

渠道过滤器

每个渠道可单独配置消息过滤规则,决定哪些消息会发到该渠道。在渠道操作菜单点 Configure Filter 打开过滤配置对话框:

渠道过滤器配置 — 来源类型、分类、最低严重度

过滤器分三组:

1. Source Types(来源类型)

多选,决定哪些来源触发的消息会被转发:

来源说明
device设备相关(上线 / 离线 / 数据异常)
rule规则引擎触发
telemetry遥测数据阈值告警
schedule计划任务触发
llmAI Agent / Chat 触发
system系统级事件(扩展崩溃、存储告警)

空 = 接收所有来源(默认)。

2. Categories(分类)

多选消息分类:

  • alert — 告警类(设备异常、阈值越限)
  • system — 系统类(服务状态、扩展事件)
  • business — 业务类(订单、流程)
  • notification — 通用通知

空 = 接收所有分类(默认)。后端可扩展自定义分类,自定义分类也会出现在列表中。

3. Minimum Severity(最低严重度)

下拉单选,过滤掉低于该级别的消息:

接收的严重度
(空)全部(info / warning / critical / emergency)
info全部
warningwarning / critical / emergency
criticalcritical / emergency
emergency仅 emergency

典型用法

  • 邮件渠道:最低 warning(过滤掉 info 噪声)
  • 飞书 / 钉钉群:最低 critical(只接收重要告警)
  • Webhook → 监控大盘:全部(保留完整数据)
未配置过滤器 = 接收所有消息

新创建的规则通知默认会进所有启用渠道,需要用过滤器做分级路由。

触发通知的方式

消息不会孤立产生,它由其他模块触发:

1. 规则引擎触发(最常用)

自动化规则 中配置 notify 动作:

{ "type": "notify", "message": "sensor-01 温度 {value}°C 已超过阈值 30°C", "severity": "critical" }

完整规则结构见 自动化规则

notify 动作生成的消息会进所有启用渠道,由每个渠道的过滤器决定是否转发。所以创建规则后,记得配置关键渠道的过滤器。

2. AI Agent 触发

AI Agent 在分析后决定是否发通知:

  • Free 模式 Agent:在 prompt 里写「检测到异常时通过邮件通知运维组」,Agent 调用 message 工具
  • Focused 模式 Agent:自动判断数据异常并触发告警

3. AI Chat 手动触发

直接在 Chat 里说「发一条飞书消息告诉组里 3 号机离线了」,LLM 会调用消息工具。

4. 系统事件

部分系统级事件(设备掉线、扩展崩溃停止自启、存储空间不足)会自动进消息中心,并按各渠道过滤器转发。

消息生命周期

消息有 4 个状态,构成完整的处置工作流:

active → acknowledged → resolved → archived
状态说明操作
Active(活动)新消息,待处理自动进入
Acknowledged(已确认)运维人员已知悉,正在处理Acknowledge
Resolved(已解决)问题已修复Resolve
Archived(已归档)归档保留,不再活跃Archive

操作

  • 单条:在消息行直接点对应按钮
  • 批量:用筛选器过滤出一批消息后批量操作
  • 删除:Delete 会从数据库移除(不可恢复,归档更安全)

CLI 管理

NeoMind CLI 提供 message 子命令管理消息和渠道:

# 列出最近 20 条消息(--severity / --status 过滤)
neomind message list --limit 20

# 查看消息详情
neomind message get <message_id>

# 发送一条系统消息(用于测试投递链路)
neomind message send --title "测试告警" --body "手动创建的测试消息" --severity warning

# 确认(标记已读)/ 删除消息
neomind message read <message_id>
neomind message delete <message_id>

# 列出所有渠道
neomind message channel-list

# 查看渠道类型及各类型的配置字段
neomind message channel-types
neomind message channel-type-schema feishu

# 创建渠道(--config 传完整 JSON,或用可重复的 --param k=v)
neomind message channel-create --name ops-feishu --type feishu \
--config '{"hook_id":"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx","secret":"secxxxxxxxx"}'

# 更新渠道(修改配置 / 启用禁用等)
neomind message channel-update --name ops-feishu --config '{"enabled":false}'

# 测试渠道(发送测试消息)
neomind message channel-test ops-feishu

# 删除渠道
neomind message channel-delete ops-feishu

消息模板支持 {value}{source_id} 插值;渠道过滤(按来源 / 类别 / 最低级别)在 Web UI 的渠道编辑面板中配置。

REST API

所有功能均可通过 HTTP API 调用(默认端口 9375):

REST API 完整示例
# 列出消息
curl http://localhost:9375/api/messages?limit=20 \
-H "X-API-Key: $NEOMIND_API_KEY"

# 创建消息
curl -X POST http://localhost:9375/api/messages \
-H "X-API-Key: $NEOMIND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "高温告警",
"message": "sensor-01 温度 35°C 超阈值",
"severity": "critical",
"category": "alert",
"source_type": "rule"
}'

# 列出渠道
curl http://localhost:9375/api/messages/channels \
-H "X-API-Key: $NEOMIND_API_KEY"

# 创建渠道(name + channel_type + 配置字段平铺在同一层)
curl -X POST http://localhost:9375/api/messages/channels \
-H "X-API-Key: $NEOMIND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "ops-webhook",
"channel_type": "webhook",
"url": "https://api.example.com/alerts",
"headers": {"Authorization": "Bearer xxx"},
"timeout_secs": 30,
"enabled": true
}'

# 更新渠道(修改配置 / 启用禁用等)
curl -X PUT http://localhost:9375/api/messages/channels/ops-webhook \
-H "X-API-Key: $NEOMIND_API_KEY" \
-H "Content-Type: application/json" \
-d '{"config": {"url": "https://api.example.com/alerts", "enabled": false}}'

# 测试渠道
curl -X POST http://localhost:9375/api/messages/channels/ops-webhook/test \
-H "X-API-Key: $NEOMIND_API_KEY"

# 启用 / 禁用
curl -X PUT http://localhost:9375/api/messages/channels/ops-webhook/enabled \
-H "X-API-Key: $NEOMIND_API_KEY" \
-H "Content-Type: application/json" \
-d '{"enabled": false}'

# 配置过滤器
curl -X PUT http://localhost:9375/api/messages/channels/ops-webhook/filter \
-H "X-API-Key: $NEOMIND_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"source_types": ["rule"],
"categories": ["alert"],
"min_severity": "warning"
}'

# 查看过滤器
curl http://localhost:9375/api/messages/channels/ops-webhook/filter \
-H "X-API-Key: $NEOMIND_API_KEY"

# 邮件收件人管理(每次添加一个收件人)
curl -X POST http://localhost:9375/api/messages/channels/ops-email/recipients \
-H "X-API-Key: $NEOMIND_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email": "ops@example.com"}'

curl http://localhost:9375/api/messages/channels/ops-email/recipients \
-H "X-API-Key: $NEOMIND_API_KEY"

# 删除收件人
curl -X DELETE http://localhost:9375/api/messages/channels/ops-email/recipients/ops@example.com \
-H "X-API-Key: $NEOMIND_API_KEY"

# 消息状态变更
curl -X POST http://localhost:9375/api/messages/<message_id>/acknowledge \
-H "X-API-Key: $NEOMIND_API_KEY"

# 删除渠道
curl -X DELETE http://localhost:9375/api/messages/channels/ops-webhook \
-H "X-API-Key: $NEOMIND_API_KEY"

发送与去重

消息创建后即固定保存在消息中心;随后对每个启用的渠道发送一次(先过该渠道的过滤器):

  • 无自动重试:某条渠道发送失败(超时、鉴权失败、目标返回错误)只记录日志,不会自动重试。可在渠道上点 Test 验证连通性。需要重试语义的数据转发请用数据推送(带指数退避重试与投递历史)。
  • 去重窗口:同一 (标题, 来源, 严重度) 的消息在 60 秒内只向渠道发送一次,防止规则高频触发引发通知风暴;消息本身仍会进消息中心。
  • 语义错误检测:渠道测试会检查目标返回体(如飞书 / 钉钉的 code != 0、Telegram 的 ok: false),HTTP 200 但语义失败同样判为失败。

典型场景

场景 1:关键告警多渠道冗余

  • 邮件渠道:过滤器 min_severity = critical,收件人 oncall@example.com
  • 飞书渠道:过滤器 min_severity = critical,加签启用
  • Webhook 渠道:转发到 AlertManager 做二次路由

规则触发 critical 告警时,三个渠道同时接收,单点失败不漏报。

场景 2:分级通知

渠道过滤器用途
邮件min_severity = warning运维邮件列表
飞书min_severity = critical24/7 运维群
Slacksource_types = ["llm"]Agent 分析结果频道
Webhookcategories = ["alert"]转发到监控大盘

场景 3:仅应用内通知(不打扰)

  • 不创建任何外部渠道,所有消息默认进应用内消息中心
  • 用 Web UI 右上角铃铛查看历史
  • 适合开发 / 测试环境

最佳实践

  • 先 Test 再启用:新建渠道后先测试,避免配置错误导致后续告警静默失败
  • 关键告警多渠道冗余:同时配邮件 + 飞书 / 钉钉,避免单点失败
  • 分级过滤:用渠道过滤器做严重度路由,Info 只进应用内,Critical 才发邮件 / 群通知
  • 启用加签:钉钉、飞书机器人务必启用加签,防止机器人 URL 泄露被恶意调用
  • 合理去重:规则里设置 cooldown 防止传感器抖动刷屏;消息系统自带 60 秒去重窗口兜底
  • 收件人独立管理:Email 渠道用 Manage Recipients 增删收件人,无需重新打开渠道编辑器
  • Webhook 对接统一告警平台:用 Webhook 渠道对接 AlertManager、Home Assistant、n8n 等平台,由平台负责二次路由和静默规则

与其他模块联动

模块说明
自动化规则notify 动作触发消息,按渠道过滤器路由
AI AgentAgent 分析后调用 message 工具发通知
设备管理设备上线 / 离线 / 数据异常自动触发消息
扩展管理扩展崩溃等系统事件进消息中心
数据推送数据推送负责数据流;消息系统负责告警流

最后更新: 2026-09-08