Skip to content

TIP

这篇文档帮你完成系统消息通知配置。你可以按渠道准备机器人或 SMTP 信息,再创建应用级渠道配置和 dataset 级通知通道,最后用一次真实操作检查是否发送成功。

什么时候用消息通知 ​

当系统里的数据新增、修改、删除或特定接口被调用后,需要把结果推送到群、Webhook 接收方或邮箱时,使用消息通知。

你想完成的事推荐渠道配置重点
把业务变更推到飞书群FEISHU Webhook准备飞书自定义机器人 Webhook 地址和安全设置
把业务变更推到钉钉群DINGTALK准备钉钉自定义机器人 Webhook、加签或关键词规则
把通知交给外部系统处理WEBHOOK按接收方 HTTP API 准备 URL、Header、鉴权和请求体要求
把通知发给固定邮箱或按角色解析出的邮箱EMAIL准备 SMTP 发件配置,并确认收件人来源

TIP

本文只写飞书 Webhook 模式,不展开飞书 APP 模式。飞书 APP 通知涉及应用授权、可见范围和接收人解析,配置口径与群机器人不同。


先选通知渠道 ​

先确认通知要发到哪里,再准备对应渠道的官方配置。

渠道适合场景官方配置规范
FEISHU Webhook飞书群内接收业务通知飞书自定义机器人使用指南
DINGTALK钉钉群内接收业务通知钉钉自定义机器人创建与安装
WEBHOOK发送到自建服务、自动化平台或第三方 HTTP 入口按接收方官方 HTTP API 文档确认 URL、Header、鉴权和请求体
EMAIL发送邮件通知,适合审批、告警、结果抄送RFC 3207 STARTTLS、RFC 8314 邮件传输 TLS 建议

准备信息 ​

  • [ ] 已确认要配置的应用和 dataset。

  • [ ] 已确认触发通知的接口编号,优先使用 triggerConfig.interfaceCodes。

  • [ ] 已准备渠道侧 Webhook、签名密钥或 SMTP 发件配置。

  • [ ] 已准备消息标题、摘要、字段展示和跳转按钮。


配置流程 ​

TIP

消息通知分两层配置:先创建应用级渠道配置,再创建 dataset 级通知通道。不要把消息模板写进应用级渠道配置。

配置层级保存什么不要放什么
应用级渠道配置Webhook 地址、SMTP 地址、签名密钥、发件账号、请求头等协议配置messageTemplate、EMAIL 收件人、触发规则
dataset 级通知通道channelConfigId、触发规则、interfaceCodes、sceneCode、triggerConfig.messageTemplate、EMAIL 收件目标真实密钥、SMTP 密码、机器人 token 明文展示给无关人员

步骤 1:创建应用级渠道配置 ​

在通知渠道配置入口选择渠道类型,填写该渠道的协议配置。保存后会得到一个应用级渠道配置 ID。

json
{
  "channelType": "FEISHU",
  "channelConfig": {
    "webhookUrl": "https://open.feishu.cn/open-apis/bot/v2/hook/<BOT_TOKEN>",
    "signSecret": "<SIGN_SECRET>"
  }
}

完成后,检查列表里是否出现该渠道配置,并确认状态可用。

步骤 2:创建 dataset 级通知通道 ​

在目标 dataset 下创建通知通道,选择上一步得到的 channelConfigId,再配置触发接口和消息模板。

json
{
  "channelConfigId": "<CHANNEL_CONFIG_ID>",
  "channelType": "FEISHU",
  "triggerConfig": {
    "sceneCode": "DATASET_CHANGE",
    "interfaceCodes": ["DATA_CREATE", "DATA_UPDATE"],
    "messageTemplate": {
      "mode": "CUSTOM",
      "version": "v1",
      "templateType": "STANDARD_CARD",
      "theme": "blue",
      "title": "${event.operation} 通知",
      "summary": "数据已发生变化",
      "facts": [
        {"label": "数据集", "value": "${context.datasetName}"},
        {"label": "操作人", "value": "${event.operatorName}"}
      ]
    }
  }
}

步骤 3:启用通道并触发一次真实操作 ​

启用通知通道后,在对应 dataset 上执行一次会命中 interfaceCodes 的操作。看到目标群或邮箱收到消息,说明配置生效。

WARNING

新配置优先使用 triggerConfig.interfaceCodes 描述 CRUD 或接口触发范围。operations 只作为历史兼容概念,不作为新配置口径。


操作流程 ​

TIP

这一节把消息通知配置拆成两个独立页面:先在应用级页面注册通知渠道,再在 dataset 页面注册通知通道。渠道注册保存协议配置;通道注册保存触发规则和消息模板。

页面注册对象保存内容
渠道管理应用级通知渠道Webhook 地址、签名密钥、SMTP 等协议配置。
dataset 消息通知dataset 级通知通道channelConfigId、interfaceCodes、messageTemplate 等触发和内容配置。

Step 1:注册应用级通知渠道 ​

TIP

完成这个场景后,应用里会出现一个可复用的 FEISHU Webhook 渠道配置。后续多个 dataset 通知通道都可以绑定它。

  1. 打开应用管理里的“通知配置”,进入“渠道管理”列表。
  2. 点击“新增通知渠道”。页面右侧会打开新增抽屉。
  3. 渠道类型选择“飞书”,填写配置名称、描述、端点地址和渠道配置。
  4. 点击“创建”。回到列表后,看到新渠道出现在第一行,说明渠道注册完成。
字段填写内容注意事项
配置名称填写便于识别的名称。建议带业务场景或测试时间,方便在通道注册时选择。
端点地址填写飞书自定义机器人 Webhook 地址。截图和客户文档中只展示打码值。
渠道配置填写协议相关 JSON,例如机器人模式和签名密钥。这里只放协议配置,不写 messageTemplate。

渠道注册截图 ​

渠道注册界面

图片展示的是消息通知操作流程中渠道管理界面。左侧导航栏选中“应用配置”下的“渠道管理”…

图片展示的是消息通知操作流程中渠道管理的新增通知渠道界面。左侧为应用管理导航栏,选中“渠道管理”…


Step 2:注册 dataset 级通知通道 ​

TIP

完成这个场景后,当前 dataset 会新增一条通知通道。runtime 会根据 interfaceCodes 命中触发接口,再通过绑定的应用级渠道发送消息。

  1. 打开目标 dataset,切换到“消息通知”页签。
  2. 点击“新通知”。页面右侧会打开新增通知抽屉。
  3. 填写通知名称和说明,勾选需要触发通知的接口。
  4. 在“通知渠道”中选择前面注册的应用级渠道。
  5. 填写消息标题和消息内容,保持状态为“启用”。
  6. 点击“创建”。回到列表后,看到新通道出现在第一行,说明通道注册完成。
字段填写内容runtime 消费方式
触发接口勾选数据新增、数据更新等接口。保存到 triggerConfig.interfaceCodes。
通知渠道选择应用级通知渠道。保存为 channelConfigId,用于找到协议配置。
消息标题和内容填写要发送给接收方的标题和正文。保存到 triggerConfig.messageTemplate。

通道注册截图 ​

图片展示的是RabbitBase平台中“请假记录表”数据集的消息通知页面。页面上方有平台导航栏,左侧是数据集分类及名称…

图片展示的是消息通知操作流程中注册dataset级通知通道的界面。左侧为应用管理页面,选中“消息通知”下的“通知记录列表”…

WARNING

这组截图只验证注册流程和列表状态,没有触发真实消息发送。需要发送验收时,请使用专门的测试机器人和测试数据。


调用规则 ​

运行态只读取已经落到通知通道里的字段。配置页面可以按业务组织表单,但最终要确认这些字段已经落到运行态能消费的位置。

消费点运行态读取字段结果
CRUD 触发匹配triggerConfig.interfaceCodes当前接口编号命中后才发送通知
手动触发匹配triggerConfig.sceneCode场景编码一致后才发送通知
消息模板解析triggerConfig.messageTemplate作为新模板主来源;channelConfig.messageTemplate 只做历史数据兜底
渠道协议配置endpointUrl、channelConfig不同渠道会把这些字段转换成不同的 HTTP 请求或 SMTP 邮件

WARNING

operations 不参与当前运行态匹配。新配置不要依赖它判断新增、修改或删除。


按渠道配置 ​

FEISHU Webhook ​

用于把通知发送到飞书群。runtime 按 Webhook 群机器人方式发送飞书 interactive 卡片,不展开飞书 APP 模式。

runtime 消费字段消费方式最终效果
Webhook URLendpointUrl作为 HTTP POST 目标地址
签名密钥channelConfig.signSecret生成飞书要求的 timestamp 和 sign
消息模板triggerConfig.messageTemplate渲染卡片标题、主题色、摘要、字段和按钮
json
{
  "channelType": "FEISHU",
  "endpointUrl": "https://open.feishu.cn/open-apis/bot/v2/hook/<BOT_TOKEN>",
  "channelConfig": {
    "signSecret": "<SIGN_SECRET>"
  },
  "triggerConfig": {
    "interfaceCodes": ["DATA_CREATE"],
    "messageTemplate": {
      "mode": "CUSTOM",
      "version": "v1",
      "templateType": "STANDARD_CARD",
      "theme": "blue",
      "title": "数据变更通知",
      "summary": "有一条数据已新增"
    }
  }
}
json
{
  "msg_type": "interactive",
  "timestamp": "<EPOCH_SECONDS>",
  "sign": "<FEISHU_SIGN>",
  "card": {
    "header": {
      "template": "blue",
      "title": {"tag": "plain_text", "content": "数据变更通知"}
    },
    "elements": [
      {"tag": "div", "text": {"tag": "lark_md", "content": "有一条数据已新增"}}
    ]
  }
}

官方规范:飞书自定义机器人使用指南。

DINGTALK ​

用于把通知发送到钉钉群。runtime 会把标准消息模板渲染成钉钉 markdown 消息。

runtime 消费字段消费方式最终效果
Webhook URLendpointUrl作为 HTTP POST 目标地址
签名密钥channelConfig.signSecret有值时把 timestamp 和 sign 追加到 URL
@ 设置channelConfig.atAll、channelConfig.atMobiles写入钉钉消息体的 at 字段
消息模板triggerConfig.messageTemplate渲染 markdown 标题、正文、字段和链接
json
{
  "channelType": "DINGTALK",
  "endpointUrl": "https://oapi.dingtalk.com/robot/send?access_token=<ACCESS_TOKEN>",
  "channelConfig": {
    "signSecret": "<SIGN_SECRET>",
    "atAll": false,
    "atMobiles": ["13800000000"]
  },
  "triggerConfig": {
    "interfaceCodes": ["DATA_UPDATE"],
    "messageTemplate": {
      "mode": "CUSTOM",
      "version": "v1",
      "templateType": "STANDARD_CARD",
      "theme": "orange",
      "title": "数据更新通知",
      "summary": "有一条数据已更新"
    }
  }
}
json
{
  "msgtype": "markdown",
  "markdown": {
    "title": "数据更新通知",
    "text": "### 数据更新通知\n\n有一条数据已更新"
  },
  "at": {
    "isAtAll": false,
    "atMobiles": ["13800000000"]
  }
}

官方规范:钉钉自定义机器人创建与安装。

WEBHOOK ​

用于把通知发送到自建服务或第三方 HTTP 入口。runtime 会把标准消息和原始触发 payload 一起发给接收方。

runtime 消费字段消费方式最终效果
请求地址endpointUrl作为 HTTP POST 目标地址
请求头channelConfig.headers当前 runtime 直发路径不消费;不要把 Header 鉴权写成已生效能力
消息模板triggerConfig.messageTemplate渲染 message 对象
触发上下文触发时的 payload原样放入请求体的 payload 对象

TIP

如果接收方必须使用 Header、签名或 Bearer Token,请先确认运行态是否已实现对应能力;当前直发路径不会读取 channelConfig.headers。

json
{
  "channelType": "WEBHOOK",
  "endpointUrl": "https://example.com/notification/webhook",
  "channelConfig": {
    "headers": {
      "Authorization": "Bearer <TOKEN>"
    }
  },
  "triggerConfig": {
    "interfaceCodes": ["DATA_CREATE"],
    "messageTemplate": {
      "mode": "CUSTOM",
      "version": "v1",
      "templateType": "STANDARD_CARD",
      "theme": "blue",
      "title": "数据新增通知",
      "summary": "请处理新增数据"
    }
  }
}
json
{
  "channel": {
    "channelCode": "<CHANNEL_CODE>",
    "channelName": "业务通知",
    "channelType": "WEBHOOK"
  },
  "message": {
    "templateType": "STANDARD_CARD",
    "theme": "blue",
    "title": "数据新增通知",
    "summary": "请处理新增数据",
    "facts": [],
    "actions": []
  },
  "payload": {
    "interfaceCode": "DATA_CREATE",
    "recordId": "<RECORD_ID>"
  }
}

EMAIL ​

用于发送邮件通知。EMAIL 不走 HTTP Webhook,调用时 会把 endpointUrl 解析成 SMTP/SMTPS 主机和端口。

runtime 消费字段消费方式最终效果
SMTP 地址endpointUrl解析 smtp:// 或 smtps:// 的 host、port、SSL
SMTP 配置channelConfig.username/password/from/auth/startTls/ssl创建 SMTP 连接和发件身份
收件人、抄送、密送triggerConfig.emailTargets作为固定收件目标
动态接收人triggerConfig.audiences非空时优先生成主收件人,并清空 cc/bcc
邮件模板triggerConfig.messageTemplate.subject/content优先生成邮件主题和正文;缺失时回退标准卡片模板
json
{
  "channelType": "EMAIL",
  "endpointUrl": "smtps://smtp.example.com:465",
  "channelConfig": {
    "username": "<SMTP_USERNAME>",
    "password": "<SMTP_PASSWORD>",
    "from": "notice@example.com",
    "auth": true,
    "startTls": false,
    "ssl": true
  },
  "triggerConfig": {
    "interfaceCodes": ["DATA_CREATE", "DATA_UPDATE"],
    "emailTargets": {
      "recipients": ["user@example.com"],
      "ccList": [],
      "bccList": [],
      "subjectPrefix": "[业务通知]",
      "fromName": "小系统通知"
    },
    "messageTemplate": {
      "subject": "数据变更通知",
      "content": "请查看本次数据变更:${event.recordId}"
    }
  }
}
text
SMTP:
  host=smtp.example.com
  port=465
  ssl=true
  auth=true
Mail:
  from=notice@example.com
  to=user@example.com
  subject=[业务通知] - 数据变更通知
  html/text=请查看本次数据变更:<RECORD_ID>

WARNING

EMAIL 当前运行态口径是 audiences 优先。只要 triggerConfig.audiences 非空,系统会用它解析主收件人,不再合并 emailTargets.recipients,并且不会继续读取 ccList 和 bccList。

官方规范:RFC 3207 STARTTLS、RFC 8314 邮件传输 TLS 建议。


内容占位符解释 ​

标准占位符 ​

SQL
${event.appCode}         触发通知的应用编码                                    
${event.datasetCode}     触发通知的数据集编码                                  
${event.operation}       数据操作类型,如新增、更新、删除、读取                
${event.interfaceCode}   触发通知的数据接口事件码,如 DATA_CREATE、DATA_UPDATE 
${event.recordId}        触发通知的业务记录 ID

事件消息信息详情占位符 ​

WARNING

需要注意的是,${event.record}占位符仅在触发接口类型为数据新增(Create)和数据更新(Update)的时候会生效

SQL
${event.record}                                    事件消息信息详情
${event.record.****}                               其中****指代操作数据的具体字段
${event.record.createUserId_label.****}            可以实现业务信息的多层选择

例如:需要通知显示:供应商渠道信息------>变量选择:$

检查结果 ​

配置完成后,用一次真实触发检查是否生效。

  • [ ] 目标 dataset 的通知通道状态为启用。

  • [ ] 触发操作命中了 triggerConfig.interfaceCodes 中的接口编号。

  • [ ] 群机器人、Webhook 接收方或邮箱收到了消息。

  • [ ] 消息标题、摘要、字段和按钮内容符合 triggerConfig.messageTemplate。

  • [ ] 失败时能在运行态日志里看到渠道类型、通道信息和错误原因。

现象优先检查处理方式
没有收到消息通道是否启用、interfaceCodes 是否命中先用一次确定会触发的新增或修改操作复现
群机器人返回鉴权失败Webhook、签名密钥、关键词或 Header按对应官方机器人文档重新复制配置
EMAIL 没有收件人audiences 是否为空,或是否能解析出邮箱动态收件人为空时,改用 emailTargets.recipients 配固定收件人
EMAIL 抄送或密送没有生效audiences 是否非空如果需要使用 cc/bcc,不要同时配置非空 audiences

常见问题 ​

messageTemplate 应该写在哪里? ​

写在 dataset 级通知通道的 triggerConfig.messageTemplate。不要写进应用级 channelConfig。

channelConfigId 是什么? ​

它是应用级渠道配置的引用 ID。dataset 级通知通道通过它复用 Webhook、SMTP、签名密钥或发件账号等协议配置。

新配置还要写 operations 吗? ​

不需要。新配置用 triggerConfig.interfaceCodes 表达触发接口。operations 只用于理解历史配置。

EMAIL 固定收件人和 audiences 会合并吗? ​

不会。audiences 非空时优先作为主收件人来源,固定收件人、抄送和密送不会合并进本次发送。

文档里能写真实密钥吗? ​

不能。Webhook 地址中的机器人令牌、签名密钥、SMTP 密码、访问密钥、登录态凭证、内部测试账号都不要写进客户文档。需要示例时使用 <PLACEHOLDER>。

基于飞书知识库同步生成,内容以飞书源文档为准