使用 Java 调用飞书自定义机器人 Webhook
在自动化运维或业务通知场景中,将系统状态推送到飞书群聊非常实用。这里分享一个基于 Java 实现飞书自定义机器人消息推送的完整方案,重点解决签名校验和富文本卡片构建的问题。
一、配置飞书机器人
首先需要在飞书后台创建并获取必要的凭证。
-
邀请机器人进群 进入目标群组,点击右上角更多按钮选择设置,添加自定义机器人。
-
获取 Webhook 地址 在安全设置区域,复制机器人的 Webhook 地址。格式通常为:
https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxxxxxxxxxx⚠️ 注意:请妥善保存此地址,切勿提交到 Git 仓库或发布在公开博客上,防止泄露后被恶意调用。
-
配置签名密钥 在安全设置中选择签名校验,系统会提供一个默认密钥。你也可以点击重置更换新密钥。后续代码中的
secret参数即为此处的值。

二、Java 端实现逻辑
1. 时间戳计算
飞书要求请求头中包含当前时间戳(秒级)。直接使用 System.currentTimeMillis() / 1000 在某些时区环境下可能产生偏差,建议使用标准库处理。
long seconds = LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant().getEpochSecond();
2. 生成签名
签名算法采用 HmacSHA256,签名字符串格式为 timestamp\nsecret。
private static String genSign(String secret, long timestamp) throws NoSuchAlgorithmException, InvalidKeyException {
// 构造签名字符串:时间戳 + 换行 + 密钥
String stringToSign = timestamp + "\n" + secret;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(stringToSign.getBytes(StandardCharsets.UTF_8), ));
[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8));
Base64.encodeBase64String(signData);
}


