Skip to content

Webhook ​

这篇解决什么 ​

系统里没有单独的「Webhook 配置」菜单,也没有飞书 / 企微群机器人客户端。现成能力是短信渠道里的「调试(钉钉)」:把本该发到手机的内容,推到钉钉群。

读完能改 DebugDingTalkSmsClient、在后台配 access_token / 加签密钥,并按同一套适配器给飞书、企微补出站推送。默认端口 48080,管理端前缀 /admin-api。PC 开发页 http://127.0.0.1:5800。

示意图:后台只维护渠道行;业务仍调短信发送 API。渠道编码是 DEBUG_DING_TALK 时,出站打钉钉 Webhook,不打短信网关。

名称说明仓库路径
调试客户端钉钉自定义机器人,msgtype=textruoyi-office/yudao-module-system/.../sms/core/client/impl/DebugDingTalkSmsClient.java
渠道枚举DEBUG_DING_TALK 显示名「调试(钉钉)」.../sms/core/enums/SmsChannelEnum.java
客户端工厂switch 里创建上述客户端.../sms/core/client/impl/SmsClientFactoryImpl.java
渠道表@TableName("system_sms_channel").../dal/dataobject/sms/SmsChannelDO.java
渠道接口@RequestMapping("system/sms-channel").../controller/admin/sms/SmsChannelController.java
渠道页菜单「短信渠道」,路由 /system/messages/sms/sms-channelruoyi-office-vben/apps/web-antd/src/views/system/sms/channel/
前端 API/system/sms-channel.../src/api/system/sms/channel/
字典system_sms_channel_code,值 DEBUG_DING_TALK字典类型 DICT_TYPE.SYSTEM_SMS_CHANNEL_CODE

官方菜单 id:1093 短信管理,1094 短信渠道。按钮权限:system:sms-channel:query / create / update / delete。完整短信链路见 短信配置。

管理端入口 ​

没有 /infra/webhook 页面。出站机器人目前只挂在短信渠道上。打开系统管理 → 消息中心 → 短信管理 → 短信渠道,能看到「调试(钉钉)」这一行。

短信渠道列表

本系统截图:短信渠道列表。编号 4「测试渠道」的渠道编码是「调试(钉钉)」。

新增短信渠道

本系统截图:点「新增短信渠道」。渠道编码下拉来自字典 system_sms_channel_code,选「调试(钉钉)」后按下一节填账号和密钥。

名称说明仓库路径
列表 / 表单签名、编码、账号、密钥、回调 URLviews/system/sms/channel/data.ts
保存 VOsignature / code / apiKey / apiSecret / callbackUrl.../vo/channel/SmsChannelSaveReqVO.java
发送入口校验模板和渠道,落日志后再异步 doSendSms.../service/sms/SmsSendServiceImpl.java

列表会露出密钥

渠道页直接展示 apiKey / apiSecret。库备份、导出、越权打开这一页都能看到。权限只给运维;机器人 access_token 和加签密钥不要写进文档,也不要提交进仓库。

钉钉调试渠道 ​

system_sms_channel 带 @TenantIgnore,全实例共用。调试渠道把字段挪作机器人凭证,不再表示云短信账号。

按 SmsChannelDO 画出的关系:模板必须挂一个渠道;日志冗余渠道编码。调试渠道的 callback_url 用不上。

名称说明仓库路径
code必须是 DEBUG_DING_TALKSmsChannelEnum
apiKey机器人 Webhook 的 access_tokenSmsChannelDO.apiKey
apiSecret机器人「加签」密钥,构造函数里非空校验SmsChannelDO.apiSecret
callbackUrl钉钉客户端不解析回执,可空DebugDingTalkSmsClient#parseSmsReceiveStatus
signature渠道必填,调试路径不发给钉钉SmsChannelSaveReqVO

发送时 SmsSendServiceImpl#doSendSms 按渠道 id 取客户端。DebugDingTalkSmsClient#sendSms 组一条文本:

  1. 地址:https://oapi.dingtalk.com/robot/send?access_token={apiKey}&timestamp={毫秒}&sign={签名}
  2. 签名:timestamp + "\n" + secret,HMAC-SHA256 后再 Base64,算法见 钉钉自定义机器人
  3. 正文:msgtype=text,内容带「模拟短信」、手机号、短信日志编号、模板参数

getSmsTemplate 直接返回审核通过,方便本地保存模板。parseSmsReceiveStatus 抛 UnsupportedOperationException,平台回执接口不要指向这条渠道。

只用来省短信费

模板页「测试」、登录发码、工作流通知,只要绑了这条渠道,群里只会收到模拟文本,手机收不到真短信。生产验证码必须换阿里云 / 腾讯云 / 华为云 / 七牛,见 短信配置。

飞书与企微 ​

SmsChannelEnum 只有五种:DEBUG_DING_TALK、ALIYUN、TENCENT、HUAWEI、QINIU。没有飞书、没有企微。统一消息中心同样没有群机器人渠道。

名称说明仓库路径
消息渠道枚举站内信 / 短信 / 邮件 / App 推送 / 微信订阅yudao-module-system/.../enums/msg/MsgChannelEnum.java
已实现适配器只有前三个.../service/msg/channel/*ChannelAdapter.java
派发器按 channel 找适配器,没有就记 NO_ADAPTER.../service/msg/channel/MessageChannelDispatcher.java
IoT 告警注释里预留 webhook 4,枚举未落地yudao-module-iot-api/.../alert/IotAlertReceiveTypeEnum.java

三家官方出站地址不同,不要互相套字段。

名称说明仓库路径
钉钉自定义机器人access_token + 加签,已有客户端DebugDingTalkSmsClient;开放平台
飞书自定义机器人群里加机器人拿 Webhook,可加签无客户端;飞书开放平台
企微消息推送原「群机器人」。POST .../cgi-bin/webhook/send?key=无客户端;企微开发者中心

企微这条文档以 developer.work.weixin.qq.com 为准。key 等于写入权限,泄漏后任何人都能往群里灌消息。

要做成正式通知渠道,不要再往 SmsChannelEnum 里塞平台。按统一消息中心加枚举值和 MessageChannelAdapter:getChannel() 返回新值,send 里 POST 官方 Webhook,成功返回 MsgChannelSendResult,失败抛异常由派发器落库。

这三处不是群机器人

社交登录的钉钉 / 企微是 OAuth,枚举在 SocialTypeEnum(DINGTALK、WECHAT_ENTERPRISE),页面是系统管理 → 社交客户端。JustAuth 里虽有 AuthFeishuRequest,SocialTypeEnum 没有飞书值。yudao-module-weiwork 是企微智能客服(托管账号、会话、关键词),入口在 /admin-api/weiwork/**,不能当群机器人用。

配置与操作 ​

没有 Webhook 菜单。管理员在 短信渠道 选「调试(钉钉)」,填机器人 access_token 和加签密钥。保存后该渠道的 SmsSendApi 推到群,不发手机。

入站回执仍是 /system/sms/callback/{channel}。不要和三方登录客户端搞混。开启见 基建功能设计。截图见上文渠道。

相关篇 ​

联系我们

获取报价、演示和二开方案

微信咨询二维码

微信咨询

17156169080

添加时备注「RuoYi Office」

在线体验商业版