自定义通知渠道
消息模板的自定义通知渠道(CustomNotificationChannels)允许通过 自定义通知发送插件 将消息投递到任意外部系统,如企业微信群机器人、钉钉、飞书、公司内部消息网关等。
概述
自定义通知渠道(自定义通知 / 自定义消息渠道 / CustomNotificationChannels)是消息模板 Properties 中的一个数组配置:数组中的每一项对应一个渠道,绑定一个已启用的自定义通知发送插件,并独立配置主题与内容。
消息触发时,服务端对每个渠道执行占位符替换后调用对应插件脚本,由脚本完成实际投递。同一模板可配置多个自定义渠道;插件被禁用或删除后,引用它的渠道将被跳过并在界面标注提示。
配置项
在消息模板设置推屏的「自定义通知渠道」卡片中配置:
| 配置项 | 说明 |
|---|---|
| 渠道卡片 | 每个已配置的渠道显示为一张卡片,标题为插件名称(附带「自定义渠道」标识) |
| 消息主题 | 卡片内必填项,支持占位符 |
| 消息内容 | 卡片内必填项,支持占位符 |
| 添加渠道 | 点击卡片列表底部的「添加渠道」,弹窗中选择渠道插件后确认,新渠道卡片追加到列表末尾 |
| 删除渠道 | 点击渠道卡片右上角的删除按钮移除该渠道 |
info
- 弹窗中只会列出已启用的自定义通知发送插件;重复添加同一插件会被拦截并提示「该渠道已存在,请勿重复添加」。
- 插件被删除或禁用后,渠道卡片会显示「插件已被删除或禁用」警示标识,消息触发时该渠道静默跳过。
使用场景
- 审批待办同步推送到企业微信群机器人
- 通过内部消息网关 Webhook 通知业务系统
- 同一消息同时投递多个第三方平台(配置多个渠道)
下一步
属性明细
以下内容面向技术实现与 AI 检索。
自定义渠道属性表
存储于 MetaMessageTemplate.Properties.CustomNotificationChannels,数组项字段:
| 属性名 | 类型 | 含义 | 取值/存储值 |
|---|---|---|---|
PluginKey | string | 渠道绑定的插件 Key,对应 ChameleonPlugin.Key | 必填;插件禁用或删除后触发时跳过 |
Subject | string | 消息主题 | 必填,支持占位符 |
Content | string | 消息内容 | 必填,支持占位符 |
info
自定义渠道没有独立开关:存在于 CustomNotificationChannels 数组中即生效,从数组移除即停用。
存储示例
存储位置:消息模板 Properties(system_metamessagetemplate.Properties)。
{
"CustomNotificationChannels": [
{
"PluginKey": "wecom-bot-sender",
"Subject": "订单发货通知",
"Content": "订单 {Order.OrderNo} 已发货,物流单号 {Order.TrackingNo}"
},
{
"PluginKey": "dingtalk-webhook",
"Subject": "发货提醒",
"Content": "订单 {OrderNo} 已发货"
}
]
}
服务端执行逻辑
消息触发时,NotificationService.SendCustomNotificationAsync(server/Chameleon.Domain/NotificationService.cs)执行:
- 将
CustomNotificationChannels逐项转为CustomNotificationRequest,对Subject/Content执行占位符替换。 - 查询所有已启用的
CustomNotificationSender类型插件,按Key匹配PluginKey。 - 构造脚本参数
DicParam(Subject/Content/Receiver/Link/BizDataId/MetaObjectCode/Scene+ 插件Config,请求值优先),执行插件脚本完成投递。 - 失败统一记录日志,不影响其他渠道。
异常与校验
| 场景 | 行为 |
|---|---|
PluginKey 为空 / 插件已禁用 / 插件已删除 | 跳过该渠道,记录 Warning 日志 |
| 主题 / 内容为空 | 前端保存时校验必填,不允许保存 |
| 插件脚本执行异常 | 记录 Error 日志,不影响其他渠道 |
| 添加渠道时插件重复 | 前端拦截,提示「该渠道已存在,请勿重复添加」 |
相关实现
- 实体与属性键:
server/Chameleon.Model/Entities/MetaMessageTemplate.cs(MessageTemplateProperties.CustomNotificationChannels) - 消息调度:
server/Chameleon.Domain/NotificationService.cs - 插件类型枚举:
server/Chameleon.Model/Enums/PluginTypeEnum.cs(CustomNotificationSender = 3) - 渠道配置界面:
web/src/pages/Development/MetaMessageTemplate/MetaMessageTemplateSetting.tsx