2026/6/16
群自定义 Webhook 机器人(最简单,仅单向推送)
适用场景:项目告警、日志推送、CI/CD 通知、定时消息,只能项目主动发消息到飞书群,无法 @机器人交互
优点:5 分钟配置,无需开放平台、无需发布、无需权限审核;
限制:仅所在群可用,不能私聊、不能接收用户指令、功能单一。
群内创建Webhook机器人
方案 2:企业自建应用机器人(全功能,双向交互)
适用场景:项目指令交互、问答机器人、工单联动、审批回调、@机器人自动回复、私聊 / 跨群推送
优点:支持接收用户消息、主动私聊员工、读取群信息、卡片 / 文件 / 富媒体、完整 API;
步骤:开放平台创建应用→开启机器人→配置权限→事件订阅 / 长连接→发布上线→代码对接。
开放平台自建机器人配置页
二、方案 1:Webhook 机器人快速接入(项目推送消息)
- 飞书客户端创建 Webhook
打开飞书目标群 → 右上角「群设置」→「群机器人」→「添加机器人」→「自定义机器人」
填写机器人名称、描述,开启签名校验(推荐,防伪造请求),复制两个关键参数:
Webhook 地址(POST 请求地址)
签名密钥 Sign Secret
把机器人添加到群内,保存配置。 - 项目代码示例(Python/Java/Curl)
(1)Python 推送文本消息(带签名校验)
python
运行
import requests
import time
import hmac
import hashlib
import base64
配置参数
WEBHOOK_URL = "你的webhook地址"
SIGN_SECRET = "你的签名密钥"
def gen_feishu_sign(secret: str) -> tuple[str, str]:
timestamp = str(int(time.time()))
s = f"{timestamp}\n{secret}"
h = hmac.new(s.encode("utf-8"), digestmod=hashlib.sha256).digest()
sign = base64.b64encode(h).decode("utf-8")
return timestamp, sign
def send_feishu_text(content: str):
ts, sign = gen_feishu_sign(SIGN_SECRET)
body = {
"timestamp": ts,
"sign": sign,
"msg_type": "text",
"content": {"text": content}
}
resp = requests.post(WEBHOOK_URL, json=body)
print(resp.json())
调用:项目异常告警
if name == "main":
send_feishu_text("【项目告警】数据库连接超时,请及时处理!")
(2)Java 极简推送
java
运行
import com.alibaba.fastjson2.JSON;
import java.net.HttpURLConnection;
import java.net.URL;
import java.io.OutputStream;
import java.util.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
public class FeishuHookUtil {
private static final String WEBHOOK = "你的webhook地址";
private static final String SECRET = "签名密钥";
// 生成签名
public static String genSign(String ts) throws Exception {
String str = ts + "\n" + SECRET;
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(SECRET.getBytes(), "HmacSHA256"));
byte[] res = mac.doFinal(str.getBytes());
return Base64.getEncoder().encodeToString(res);
}
public static void sendText(String text) throws Exception {
long ts = System.currentTimeMillis() / 1000;
String sign = genSign(String.valueOf(ts));
String json = JSON.toJSONString(Map.of(
"timestamp", ts,
"sign", sign,
"msg_type", "text",
"content", Map.of("text", text)
));
HttpURLConnection conn = (HttpURLConnection) new URL(WEBHOOK).openConnection();
conn.setRequestMethod("POST");
conn.setRequestProperty("Content-Type", "application/json");
conn.setDoOutput(true);
try (OutputStream os = conn.getOutputStream()) {
os.write(json.getBytes());
}
System.out.println(conn.getResponseCode());
}
}
(3)curl 测试(终端直接发消息)
bash
运行
不带签名(仅测试用,生产必须开签名)
curl -X POST -H "Content-Type:application/json" -d '{
"msg_type":"text",
"content":{"text":"测试项目推送消息"}
}' "你的webhook地址"
3. 常见问题
发消息无响应:机器人未加入群、URL 复制不全、签名时间戳超过 1 小时;
400 / 签名错误:本地服务器时间和标准时间不同步;
限制:每分钟最多 20 条消息,高频推送需限流。
浙公网安备 33010602011771号