Apache DolphinScheduler 企业微信告警接入全指南:插件配置、应用与群聊两种发送模式及源码原理解析
Apache DolphinScheduler 企业微信告警接入全指南插件配置、应用与群聊两种发送模式及源码原理解析【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler企业微信是 Apache DolphinScheduler 内置的告警渠道之一通过在「告警实例管理」中创建基于 WeChat 插件的告警实例即可将工作流Workflow执行结果以消息形式推送到企业微信。本文基于当前仓库中的 企业微信告警文档 与 dolphinscheduler-alert-wechat 插件源码系统讲解 WeChat 插件的配置参数、应用APP与群聊GROUP CHAT两种发送模式的差异与前置条件并深入剖析消息发送的底层调用链。读完本文你将能够独立完成企业微信告警渠道的创建、配置与排障。一、概览WeChat 告警插件的定位在 DolphinScheduler 的告警体系里告警渠道通过插件Plugin方式扩展。企业微信插件位于 dolphinscheduler-alert-wechat 模块其入口类WeChatAlertChannelFactory通过AutoService(AlertChannelFactory.class)被 SPI 机制自动发现因此在告警实例管理界面中会直接出现名为WeChat的告警插件。配置入口在告警实例管理里创建告警实例选择 WeChat 插件后即可看到如下配置表单二、核心配置参数详解WeChat 插件的全部参数由WeChatAlertParamsConstants定义并由WeChatAlertChannelFactory.params()组装成表单。下表按插件工厂源码顺序列出了全部字段表单字段配置键内部是否必填默认值含义与取值说明企业IDcorpId是无企业微信管理后台「我的企业」中获取的企业 ID密钥secret是无企业微信应用或「群聊机器人相关」的 Secret用户列表users否无应用模式下消息接收者多个 userId 用\|分隔all表示全员应用ID/群聊IDagentId/chatId是无应用模式下填应用的AgentId群聊模式下填群聊的chatid发送类型send.type是APP/应用单选APP/应用应用或GROUP CHAT/群聊群聊消息类型showType是MARKDOWN单选MARKDOWN或TEXT对应企业微信消息中的 markdown/text 消息类型字段的界面文案可参考 UI 国际化文件例如中文环境下corpId显示为「企业ID」、agentId/chatId显示为「应用ID或群聊ID」见 dolphinscheduler-ui/src/locales/zh_CN/security.ts。需要特别注意的是send.type发送类型参数它决定了走「向企业微信自定义应用发送」还是「向企业微信 API 创建的群聊发送消息」两条完全不同的推送路径对应枚举WeChatTypepublic enum WeChatType { APP(1, APP/应用), APPCHAT(2, GROUP CHAT/群聊), ... }代码出处WeChatType.java三、发送类型一应用APP3.1 模式说明「应用」模式通过企业微信的自定义应用进行通知支持两种接收范围向特定用户发送消息在users字段中用|分隔多个 userId例如userA|userB向所有人发送消息users字段填写all。从源码与文档可以确认当前版本还不支持按部门party和标签tag发送文档亦明确欢迎通过 PR 贡献代码来补齐该能力。应用模式配置示例3.2 前置条件创建自定义应用在配置前需先在企业微信中完成应用创建登录企业微信管理后台进入「应用管理 → 应用 → 自建」点击创建自定义应用创建成功后记录应用的AgentId并获取Secret将应用的可见范围设为「根」部门否则可能无法向目标用户发送消息。3.3 向指定用户发消息获取 userId应用模式下users字段接收的是企业微信的userId不是手机号、不是微信号。可通过企业微信官方接口「根据手机号获取 userId」查询接口会返回该手机号对应的企业成员userid将该值填入users字段即可。3.4 应用模式消息效果应用模式支持MARKDOWN与TEXT两种消息格式。告警结果在应用会话中以卡片形式呈现其中MARKDOWN消息渲染效果如下TEXT消息渲染效果如下四、发送类型二群聊GROUP CHAT4.1 模式说明「群聊」模式通过企业微信API 创建的群聊AppChat即「客户群/互联互通群」之外的 API 群聊进行通知消息会发送给该群聊下的所有人且不支持向特定用户单独发送消息。此时agentId/chatId字段填写的应是群聊的chatid而非应用的 AgentId。群聊模式配置示例4.2 前置条件通过 API 创建群聊群聊模式要求预先通过企业微信 API 创建群聊并获得chatid流程如下调用企业微信「创建群聊会话」接口appchat/create请求参数需包含群聊成员列表以 userId 标识、群名、群主等创建成功后接口返回chatid将其填入 DolphinScheduler 告警实例的agentId/chatId字段其中群成员的 userId 同样通过「根据手机号获取 userId」接口查询获得。4.3 群聊模式消息效果群聊模式同样支持MARKDOWN与TEXT两种格式消息会以机器人身份出现在该群聊会话中五、源码级解析消息发送的底层调用链了解配置后再看发送实现WeChatSender.java会更有把握排障。告警触发时WeChatAlertChannel.process()将告警参数封装为MapString, String创建WeChatSender并调用sendEnterpriseWeChat(title, content)。整个链路可以拆成四步5.1 第一步获取 access_tokenWeChatSender构造时会将corpId与secret填入固定的 Token 获取地址https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid{corpId}corpsecret{secret}URL 定义见 WeChatAlertConstants.java随后通过get()发起 GET 请求并解析响应中的access_token。若 Token 获取失败返回 null告警会直接以失败结束这是最常见的失败原因之一通常是corpId/secret配置错误。5.2 第二步按发送类型选择推送地址与消息体根据send.type的值分流对应两组不同的推送地址与消息结构发送类型推送接口消息体类关键字段APP/应用https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token{token}WechatAppMessagetouser用户列表、agentidAgentId、text/markdownGROUP CHAT/群聊https://qyapi.weixin.qq.com/cgi-bin/appchat/send?access_token{token}WechatAppChatMessagechatid群聊 ID、text/markdown两条推送 URL 同样定义在 WeChatAlertConstants.java 中。以应用模式为例发送时构造的WechatAppMessage会携带以下固定取值见 WechatAppMessage.javasafe 0非保密消息enable_id_trans 0不开启 ID 转译enable_duplicate_check 0不开启重复消息检查。群聊模式的WechatAppChatMessage则仅包含chatid、msgtype、text/markdown与safe 0见 WechatAppChatMessage.java。消息体究竟放入text还是markdown字段由告警实例配置的showType决定。5.3 第三步告警内容转为 MarkdownmarkdownText()方法会把告警内容一个 JSON 数组字符串例如[{id:69,name:...,State:SUCCESS,...}]逐条解析将每个键值对转换为以开头的 Markdown 引用行并拼接标题与换行符最终得到符合企业微信 markdown 语法的消息体。若内容无法解析为 JSON 数组发送会抛出异常并失败。5.4 第四步发送并校验结果最终通过post()以 UTF-8 编码 POST 消息体HTTP 客户端配置了HttpServiceRetryStrategy重试策略。响应会被解析为WeChatSendMsgResponse以errcode 0作为发送成功的唯一判据errcode非 0 时会将企业微信返回的errmsg原样带回AlertResult便于在告警记录中查看失败原因。一个典型的成功响应形如{errcode:0,errmsg:ok,invaliduser:}。5.5 测试用例佐证插件自带的单元测试 WeChatSenderTest.java 覆盖了TABLE表格与TEXT两种showType的发送路径测试用非真实的企业凭据corpId与secret均为占位字符串走完整发送链路断言结果为失败。这从侧面验证了只要企业凭据无效或网络不可达告警即判定失败可用于理解插件对配置错误的处理行为。六、接入流程速查按照以下顺序即可快速打通企业微信告警企业侧准备应用模式在管理后台创建自建应用记录AgentId与Secret可见范围设为根群聊模式通过官方 API 创建群聊获取chatid通过「根据手机号获取 userId」接口获取接收人 userId。DolphinScheduler 侧配置告警实例管理 → 新建告警实例 → 选择 WeChat 插件依次填写企业IDcorpId、密钥secret、用户列表users、应用ID/群聊IDagentId/chatId选择发送类型按需求在send.type中选APP/应用或GROUP CHAT/群聊并选择MARKDOWN或TEXT消息类型关联告警组将告警实例与告警组绑定在需要监控的工作流上配置告警策略触发后即可在企业微信收到消息。七、参考文档与延伸阅读应用发送接口说明https://work.weixin.qq.com/api/doc/90000/90135/90236群聊发送接口说明https://work.weixin.qq.com/api/doc/90000/90135/90248创建群聊接口说明https://developer.work.weixin.qq.com/document/path/90245根据手机号获取 userIdhttps://developer.work.weixin.qq.com/document/path/95402若需了解告警插件的整体架构与其他告警渠道Email、钉钉、飞书、Webhook 等的接入方式可在当前仓库的 docs/docs/zh/guide/alert 目录下继续查阅对应文档各插件的完整实现均位于 dolphinscheduler-alert-plugins 目录。【免费下载链接】dolphinschedulerApache DolphinScheduler is the modern data orchestration platform. Agile to create high performance workflow with low-code项目地址: https://gitcode.com/GitHub_Trending/dol/dolphinscheduler创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

固定电话验证:从正则到前后端实现,避开这些坑

固定电话验证:从正则到前后端实现,避开这些坑

前几天有个同事跑过来问我:“固定电话验证不就一个正则吗?你帮我写一个就行。”我没急着回答,而是打开工作邮箱翻出一份客户导入记录,屏幕上几条真实数据让他沉默了几秒:010-62245678转801 0755-12345678#666 &#xf…

2026/11/13 10:38:07 阅读更多 →
Spring Boot Actuator Heapdump信息泄露分析与实战

Spring Boot Actuator Heapdump信息泄露分析与实战

1. 为什么Spring Boot信息泄露如此常见1.1 开发框架的“默认信任边界”做安全评估这些年,Spring Boot是我见过最容易暴露敏感信息的框架之一。它内置的自动配置让开发很方便,但同样让很多人忽略了同一个问题:默认情况下框架不会帮你做任何对外…

2026/11/7 10:18:57 阅读更多 →
基于 awesome-codex-skills 的 Timely 自动化技能:通过 Rube MCP 驱动 Composio Timely 工具集

基于 awesome-codex-skills 的 Timely 自动化技能:通过 Rube MCP 驱动 Composio Timely 工具集

基于 awesome-codex-skills 的 Timely 自动化技能:通过 Rube MCP 驱动 Composio Timely 工具集 【免费下载链接】awesome-codex-skills A curated list of practical Codex skills for automating workflows across the Codex CLI and API. 项目地址: https://git…

2026/11/7 8:06:12 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻