跳到主要内容

自定义通知渠道

消息模板的自定义通知渠道(CustomNotificationChannels)允许通过 自定义通知发送插件 将消息投递到任意外部系统,如企业微信群机器人、钉钉、飞书、公司内部消息网关等。

概述​

自定义通知渠道(自定义通知 / 自定义消息渠道 / CustomNotificationChannels)是消息模板 Properties 中的一个数组配置:数组中的每一项对应一个渠道,绑定一个已启用的自定义通知发送插件,并独立配置主题与内容。

消息触发时,服务端对每个渠道执行占位符替换后调用对应插件脚本,由脚本完成实际投递。同一模板可配置多个自定义渠道;插件被禁用或删除后,引用它的渠道将被跳过并在界面标注提示。

配置项​

在消息模板设置推屏的「自定义通知渠道」卡片中配置:

配置项说明
渠道卡片每个已配置的渠道显示为一张卡片,标题为插件名称(附带「自定义渠道」标识)
消息主题卡片内必填项,支持占位符
消息内容卡片内必填项,支持占位符
添加渠道点击卡片列表底部的「添加渠道」,弹窗中选择渠道插件后确认,新渠道卡片追加到列表末尾
删除渠道点击渠道卡片右上角的删除按钮移除该渠道
信息
  • 弹窗中只会列出已启用的自定义通知发送插件;重复添加同一插件会被拦截并提示「该渠道已存在,请勿重复添加」。
  • 插件被删除或禁用后,渠道卡片会显示「插件已被删除或禁用」警示标识,消息触发时该渠道静默跳过。

使用场景​

  • 审批待办同步推送到企业微信群机器人
  • 通过内部消息网关 Webhook 通知业务系统
  • 同一消息同时投递多个第三方平台(配置多个渠道)

下一步​

属性明细​

以下内容面向技术实现与 AI 检索。

自定义渠道属性表​

存储于 MetaMessageTemplate.Properties.CustomNotificationChannels,数组项字段:

属性名类型含义取值/存储值
PluginKeystring渠道绑定的插件 Key,对应 ChameleonPlugin.Key必填;插件禁用或删除后触发时跳过
Subjectstring消息主题必填,支持占位符
Contentstring消息内容必填,支持占位符
信息

自定义渠道没有独立开关:存在于 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)执行:

  1. 将 CustomNotificationChannels 逐项转为 CustomNotificationRequest,对 Subject / Content 执行占位符替换。
  2. 查询所有已启用的 CustomNotificationSender 类型插件,按 Key 匹配 PluginKey。
  3. 构造脚本参数 DicParam(Subject/Content/Receiver/Link/BizDataId/MetaObjectCode/Scene + 插件 Config,请求值优先),执行插件脚本完成投递。
  4. 失败统一记录日志,不影响其他渠道。

异常与校验​

场景行为
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