流程引擎在事件执行后,如何把结果可靠地传递给相关人员?本文介绍一套消息触达设计:按设备划分内容类型、以 Token 保证链接可安全打开,并客观列出该设计的适用边界。
流程消息 = 在事件执行过程中,把执行的内容与结果,传递给该流程实例上相关人员的过程。
典型场景:发送成功时,把提醒推给当事人(下一节点接收人)、其他节点人员(如申请人)、以及表单字段上的人员。
对比项 | 只跑事件、不推消息 | 流程消息体系 |
|---|---|---|
用户感知 | 业务已变,人不知晓 | 人在合适通道被触达 |
配置位置 | 外挂 / 事件脚本里硬编码通知 | 独立消息配置,按事件挂接 |
通道扩展 | 每加一种 IM 就改业务代码 | 设备可插拔,内容模板复用 |
打开工作 | 手工拼 URL、难鉴权 | 统一超链接 + Token 校验 |
主张一:消息是事件的一等产出,不是售后补丁。 发送成功、工作到达、退回、移交、流程结束——这些时钟点上,消息与业务脚本并列配置。
主张二:事件管逻辑,消息管触达。 不要在二开里到处
Port_SendMsg散落;优先用消息模板绑定事件,二开只补例外。主张三:人、内容、设备三分离。 「发给谁」「说什么」「用哪类设备接」各自可配,组合而不是绑死。
主张四:能打开,才算送达。 消息不是纯文本广播;内容里应有可点开的超链接,且链接必须经 Token 校验合法性。
维度 | 事件 | 消息 |
|---|---|---|
分类 | 流程事件 / 节点事件 | 流程消息 / 节点消息 |
挂接点 | SendWhen、SendSuccess、FlowOverAfter… | 同一套事件标记(EventNo) |
职责 | 校验、改数据、调外部系统 | 选人、组文案、推设备 |
配置入口 | 节点/流程事件、外挂 | 节点消息、流程消息 |
用户点击发送 → 引擎流转成功(SendSuccess / WorkArrive)
│
├─ 当事人:下一节点接收人(待办提醒)
├─ 相关人:申请人、指定节点处理人、抄送人等
└─ 字段人:表单上「经办人」「抄送对象」等字段人员
│
└─ 按消息设备分发(站内信 / IM / 短信 / 邮件 / 企微 / 钉钉 / 飞书 / App…)推送对象思路 | 含义 | 典型用途 |
|---|---|---|
当前待办人 | 下一节点(或当前)应处理的人 | 工作到达、发送成功 |
指定节点工作人员 | 历史上在某节点办过的人 | 知会申请人上级节点 |
指定人员 / 角色 / 部门 | 配置名单或组织范围 | 合规抄送、监察 |
按 SQL / 数据源 | 动态算出接收人 | 复杂组织规则 |
表单字段 | 字段值即人员编号 | 业务自选抄送人 |
流程发起人 | Starter | 「办完了通知申请人」 |
消息设备 = 用于接受消息的载体。
设备类型 | 适合内容形态 | 说明 |
|---|---|---|
站内信 | 邮件格式(标题 + 正文) | 系统内提醒中心、可回看 |
即时通讯(IM) | 短消息 | 企业内部 IM、会话提醒 |
手机短信 | 短消息 | 强触达、内容宜短 |
邮件 | 邮件格式 | 标题 + 富文本正文 + 链接 |
企业微信 | 短消息为主 | 组织内工作通知 |
钉钉 | 短消息为主 | 组织内工作通知 |
飞书 | 短消息为主 | 组织内工作通知 |
App 推送 | 短消息为主 | 移动端角标 / 推送栏 |
设计要点:设备是通道,不是业务。同一条消息配置,可勾选多种设备;全局开关与节点级勾选可并存,便于「公司默认策略 + 流程个性策略」。
根据场景不同,内容分为两类:
类型 | 结构 | 适合设备 |
|---|---|---|
短消息 | 一段内容输出 | 短信、IM、企微 / 钉钉 / 飞书、App |
邮件格式 | 标题 + 主体内容 | 站内信、邮件 |
设计记录 R1:内容类型按「设备消费能力」划分,不按「业务事件」划分。 同一
SendSuccess事件,可同时启用短消息模板与邮件模板;不是为每个事件发明第三种格式。
字段语义(抽象) | 短消息 | 邮件格式 |
|---|---|---|
标题 | 可有可无(部分设备用摘要) | 必需 |
正文 | 一段文本 | 主体内容(可较长) |
超链接 | 内嵌或附后 | 正文中的 {Url} |
事件消息内容需要支持个性化设置,通常包含:
{Title}、@WebUser.Name 等变量 示例(语义示意):
有新工作{{Title}}需要您处理,发送人:@WebUser.Name,打开{Url} 新工作{{Title}},发送人@WebUser.Name 您好,有新工作需要处理,点击这里打开 {Url}打开超链接:消息设备上的链接,必须能安全打开目标页面——需要带 Token(加密字符串),用于身份与合法性校验。
设计要求:
要求 | 说明 |
|---|---|
可点开 | 邮件 / 站内信 / IM 卡片都能落到同一「打开工作」语义 |
可校验 | Token 与人员、WorkID、节点等信息绑定,拒绝伪造链接 |
可替换 | URL 中可含接收人占位(如按人替换 Emp),一人一链 |
可跨端 | PC、移动、第三方 App WebView 共用打开协议 |
没有 Token 的链接,不应被视为合格的流程消息出口。
事件执行完后,按 EventNo 匹配消息条目再推送。
业务二开与消息推送都挂在 SendSuccess 等点上,但存储与配置界面分离,避免「改通知必须改代码」。
同一产品能力,两级挂接,实施时按粒度选型。
轴 | 配置什么 | 为何独立 |
|---|---|---|
人 | PushWay:待办人 / 字段 / SQL / 指定人… | 组织规则变化频繁 |
文案 | SMSDoc / MailTitle / MailDoc | 话术与合规文案常改 |
设备 | 站内信、邮件、钉钉、企微… | 企业 IT 通道各不相同 |
IM/短信吃不了长 HTML;邮件/站内信又需要标题与主体。 双轨模板是故意的产品决策,降低「一条内容适配所有设备」的失败率。
每个事件类型提供默认标题/正文模板;未配置时仍可提醒。 配置了则覆盖默认——保证「开箱能用」,也保证「项目可定制」。
消息先写入统一消息表(带 MsgFlag / MsgType / WorkID),再按设备发送。 流程结束、删除等节点可清理过期待办提醒,避免「流程已结束,站内信还在催」。
打开 URL 携带 Token(或等价安全串)。 从消息点进系统 = 受控登录/打开工作,而不是裸露 WorkID 的公开地址。
纯机器执行的节点(无人待办)在到达/发送成功时,可不推送人工消息——消息是给人的,不是给自动机的。
以下用该 BPM 平台开源引擎 该引擎(.NET) 与 该引擎(Java) 说明上述思想如何落地。二者消息模型同源:事件名、PushMsg 配置、平台系统表 落库、设备分发思想一致,差异主要在语言与宿主集成。
服务端 ExecEvent 在执行节点/流程事件后,进入「处理消息推送」:
WorkArrive、SendSuccess、ReturnAfter、ShitAfter、FlowOverAfter 等) HisPushMsgs(或流程的 PushMsgs) EventNo == doType 匹配条目 PushMsg.DoSendMessage(...) 生成文案并分发这直接对应本文「事件与消息同时钟、分配置」。
PushMsg能力 | 落点 |
|---|---|
挂接事件 | EventNo(与节点/流程事件列表一致) |
推给谁 | PushWayNo:TodoEmps / Field / NodeWorker / BySQL / SpecEmpNo / Starter 等 |
短消息 | IsEnableSMS + SMSDoc |
邮件格式 | IsEnableEmail + MailTitle + MailDoc |
设备勾选 | Msg(站内)、DD(钉钉)、WeChat(企微)、邮件/短信等 |
打开链接 | DoSendMessage 生成 OpenUrl,经 Port_SendMessage 写入 |
管理端:
NodeExt → PushMsgs) FlowExt → PushMsgs) NMGener)PushMsg.MailTitle / MailDoc / SMSDoc 在空配置时按事件给出默认模板,例如发送成功:有新工作{{Title}}需要您处理, 发送人:@WebUser.No, @WebUser.Name,打开{Url} 新工作{{Title}},发送人@WebUser.No,@WebUser.Name {Url} 等运行时替换 {Title}、{FlowName}、{NodeName}、@WebUser.*,并支持表单字段表达式继续替换。
SMSDev2Interface.Port_SendMessage 写入 SMS 实体:
Title、DocOfEmail MobileInfo OpenUrl、PushModel、提醒规则等实际发往邮件 / 钉钉 / 企业微信等时,由 SMS.SendMessage 结合全局开关与消息上的 PushType 决定走哪些设备;亦可经 OverrideEvent.SendToEmail / SendToDingDing / SendToWeiXin 做企业定制。
PushMsg.DoSendMessage 生成打开地址(示意):
HostVue3URL + "#/WF/Port?DoWhat=OF&Token=" + GUID_WorkID_{EmpStr}_NodeID要点:
Token(此处为安全串 sid)绑定工作与接收人占位 {EmpStr},一人一链 这对应本文主张四:「能打开,且打开可鉴权」。
思想 | 在该引擎中的落点 |
|---|---|
流程消息定义 | 事件后的 PushMsg 推送 |
流程消息 / 节点消息 | Flow.PushMsgs / Node.HisPushMsgs |
消息设备 | 站内信、邮件、钉钉、企微等 + OverrideEvent 扩展 |
短消息 / 邮件格式 | SMSDoc vs MailTitle+MailDoc |
内容个性化 | 默认模板 + 变量替换 |
打开超链接 | OpenUrl + Token/sid 校验语义 |
统一出口 | Port_SendMessage → 平台系统表 |
同一事件点上:
能力 | 做什么 |
|---|---|
前端/后端外挂、事件配置 | 业务校验、改接收人、调 ERP |
流程/节点消息 | 通知人、选设备、组文案、给链接 |
二者并列,不互相替代。需要个性化通知时优先配 PushMsg;只有通道或文案规则引擎覆盖不了时,再在二开里调用 Port_SendMsg / Port_SendMessage。
该 BPM 平台对流程消息的态度很明确:
事件发生了,相关人就该被通知到;通知要分人、分文案、分设备,并且点开链接必须能安全打开工作——消息不是日志,而是流程体验的一部分。
以该引擎为证:流程消息与节点消息、短消息与邮件格式、多消息设备、Token 打开链路,都是源码里可配置、可运行、可交付的工程现实。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。