最近在写一些 Python 自动化脚本,把结果直接推送到飞书群。
很日常:
脚本跑完,把结果法群里
给 OpenClaw 发指令
股票价格触发条件后,提醒一下
定时任务执行完,告诉一声
推送的流程也很简单:脚本跑完 -> Webhook -> 飞书群。
但真正跑起来后,问题开始出现:
本文想解决的问题是:
同样是用 Python 调飞书 Webhook,为什么有的消息排版稳定,有的却处处翻车?到底该怎么选,才能既稳定又好看?
1 一句话结论:代码直连,用群自定义机器人
如果你的消息来源是 Python / Node / Java 脚本,目标只是把结果发进群里,不涉及审批、流转、人工参与:
优先选群自定义机器人(open.feishu.cn)。它是飞书中,最接近消息直投的通道。
2 Webhook 本身并不复杂,复杂的是用谁接
先来了解 Webhook 的原理:
它是一个 URl, 用于接收 HTTP POST
用途:你往这儿发 JSON,对方收到就处理
关键点:接收端用什么系统来处理你的请求
2.1 两种常见 Webhook
2.1.1 群自定义机器人(推荐)
域名:open.feishu.cn
机制:请求 -> 校验 -> 直接投递到群
特点:
适合场景:
2.1.2 飞书捷径 / 集成平台
当你往它塞一段结构复杂的 JSON 消息卡片时,它会非常认真地尝试:
2.2 核心差别
3 分钟配置一个飞书推送
3.1 获取 Webhook url
在飞书群里:
正确的地址长这样:
https://open.feishu.cn/open-apis/bot/v2/hook/xxxx
如果你拿到的是 www.feishu.cn/flow/...,是飞书捷径,不适合直接塞复杂消息。
3.2 构造并发送消息卡片
下面这个例子,用 python 模拟的一个日常通知场景,消息通过 json 结构化。
import requestsimport jsonwebhook_url = "https://open.feishu.cn/open-apis/bot/v2/hook/你的ID"payload = { "msg_type": "interactive", "card": { "header": { "title": { "tag": "plain_text", "content": "盯盘监控提醒" }, "template": "red" }, "elements": [ { "tag": "markdown", "content": ( "**贵州茅台(600519)**\n" "信号:**SELL**\n" "原因:死叉\n\n" "**阿里巴巴-W(09988)**\n" "信号:**SELL**\n" "原因:均线压制" ) } ] }}requests.post( webhook_url, headers={"Content-Type": "application/json"}, data=json.dumps(payload), timeout=10)
飞书端获取的消息如下:
4 写在最后
Webhook 能不能稳定、排版能不能正常,关键是:你把消息交给了谁来处理。
群自定义机器人做的事情很单一:接住请求,把内容原样送进群里。而 Flow 更像一套流程系统,一旦用它来顺便发消息,复杂度就会被放大。
通道选对了,后面的试错成本,真的会少很多。
你现在用飞书接收消息吗?欢迎在评论区聊聊你的使用场景。