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 STARTTLSRFC 8314 邮件传输 TLS 建议

准备信息

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

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

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

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


配置流程

TIP

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

配置层级保存什么不要放什么
应用级渠道配置Webhook 地址、SMTP 地址、签名密钥、发件账号、请求头等协议配置messageTemplate、EMAIL 收件人、触发规则
dataset 级通知通道channelConfigId、触发规则、interfaceCodessceneCodetriggerConfig.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 级通知通道channelConfigIdinterfaceCodesmessageTemplate 等触发和内容配置。

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 只做历史数据兜底
渠道协议配置endpointUrlchannelConfig不同渠道会把这些字段转换成不同的 HTTP 请求或 SMTP 邮件

WARNING

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


按渠道配置

FEISHU Webhook

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

runtime 消费字段消费方式最终效果
Webhook URLendpointUrl作为 HTTP POST 目标地址
签名密钥channelConfig.signSecret生成飞书要求的 timestampsign
消息模板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有值时把 timestampsign 追加到 URL
@ 设置channelConfig.atAllchannelConfig.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,并且不会继续读取 ccListbccList

官方规范:RFC 3207 STARTTLSRFC 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>

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