内置通知渠道(系统消息 / 系统待办 / 邮件 / 短信)
消息模板的内置通知渠道指平台直接投递的四个渠道:系统消息(站内信)、系统待办、邮件、短信,无需任何插件即可启用。
概述
内置通知渠道(系统通知 / 站内信 / 邮件模板 / 短信模板 / Email / Sms)是消息模板 Properties 中的四组配置。每个渠道包含一个启用开关与消息内容;邮件、系统消息、系统待办有「主题」,短信只有「内容」。
各渠道投递目标:
| 渠道 | 投递方式 | 接收人依据 |
|---|---|---|
| 系统消息 | 平台站内信,登录后在消息中心查看 | 接收人用户 ID |
| 系统待办 | 平台待办中心 | 接收人用户 ID |
| 邮件 | SMTP 邮件服务 | 接收人用户账号信息中的邮箱 |
| 短信 | 平台对接的短信服务商 | 接收人用户账号信息中的手机号 |
邮件内容支持富文本(HTML),可在编辑器中排版;短信内容为纯文本。
配置项
在消息模板设置推屏中,每个渠道对应一张配置卡片:
| 配置项 | 说明 |
|---|---|
| 启用系统消息 | 开关,控制该模板是否投递系统消息 |
| 系统消息主题 | 必填(启用后),支持占位符 |
| 系统消息内容 | 必填(启用后),支持占位符 |
| 启用系统待办 | 开关,控制是否生成待办事项 |
| 系统待办主题 | 必填(启用后),支持占位符 |
| 系统待办内容 | 必填(启用后),支持占位符 |
| 启用邮件 | 开关,控制是否发送邮件 |
| 邮件主题 | 必填(启用后),支持占位符 |
| 邮件内容 | 必填(启用后),富文本,支持占位符 |
| 启用短信 | 开关,控制是否发送短信 |
| 短信内容 | 必填(启用后),纯文本,支持占位符 |
tip
占位符写法与变量来源统一见 消息模板总览 - 占位符。
使用场景
- 审批通过后同时发系统消息和邮件:开启两个渠道并分别配置内容
- 关键业务只做站内提醒:仅启用系统消息
- 对外客户通知:启用邮件或短信,内容中使用
{对象编码.字段编码}取业务数据
下一步
属性明细
以下内容面向技术实现与 AI 检索。
内置渠道属性表
存储于 MetaMessageTemplate.Properties(MessageTemplateProperties),均存储为字符串形式:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
SystemMessageEnable | string(bool) | 系统消息开关 | "true" / "false",缺省 "false" |
SystemMessageSubject | string | 系统消息主题 | 启用时必填,支持占位符 |
SystemMessageContent | string | 系统消息内容 | 启用时必填,支持占位符 |
SystemTodoEnable | string(bool) | 系统待办开关 | "true" / "false",缺省 "false" |
SystemTodoSubject | string | 系统待办主题 | 启用时必填,支持占位符 |
SystemTodoContent | string | 系统待办内容 | 启用时必填,支持占位符 |
EmailEnable | string(bool) | 邮件开关 | "true" / "false",缺省 "false" |
EmailSubject | string | 邮件主题 | 启用时必填,支持占位符 |
EmailContent | string | 邮件内容(HTML) | 启用时必填,支持占位符 |
SmsEnable | string(bool) | 短信开关 | "true" / "false",缺省 "false" |
SmsContent | string | 短信内容(纯文本) | 启用时必填,支持占位符;无主题字段 |
info
界面中的开关(布尔值)保存时会被序列化为字符串 "true" / "false" 存入 Properties。
存储示例
存储位置:消息模板 Properties(system_metamessagetemplate.Properties)。
{
"SystemMessageEnable": "true",
"SystemMessageSubject": "订单 {OrderNo} 已发货",
"SystemMessageContent": "您的订单 {Order.OrderNo} 已发货",
"SystemTodoEnable": "false",
"EmailEnable": "true",
"EmailSubject": "发货通知",
"EmailContent": "<p>您的订单 {Order.OrderNo} 已发货</p>",
"SmsEnable": "false"
}
服务端执行逻辑
消息触发时,NotificationService.NotifyAsync(server/Chameleon.Domain/NotificationService.cs)按 Properties 顺序分发:
- 系统消息 / 系统待办:对
Subject/Content执行占位符替换后,调用平台消息服务(SendMessageAsync/SendTodoAsync)投递给接收人。 - 邮件:占 位符替换后逐个接收人发送,邮件地址取接收人
UserAccount.Email;地址为空时跳过并记录 Warning 日志。邮件为异步发送,不阻塞主流程。 - 短信:占位符替换后逐个接收人发送,手机号取接收人
UserAccount.Phone;号码为空时跳过并记录 Warning 日志。短信为异步发送。
异常与校验
| 场景 | 行为 |
|---|---|
渠道开关为 false / 未配置 | 不投递该渠道 |
| 启用渠道但主题 / 内容为空 | 前端保存时校验必填,不允许保存 |
| 接收人缺少邮箱 / 手机号 | 跳过该接收人,记录 Warning 日志 |
| 邮件 / 短信发送失败 | 记录 Error 日志,不影响其他渠道 |
相关实现
- 实体与属性键:
server/Chameleon.Model/Entities/MetaMessageTemplate.cs - 消息调度:
server/Chameleon.Domain/NotificationService.cs - 渠道配置界面:
web/src/pages/Development/MetaMessageTemplate/MetaMessageTemplateSetting.tsx