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),仅供参考
