飞书推荐用lark-oapi SDK(需鉴权、事件处理或权限控制),微信仅支持Webhook(简单无状态但功能受限);选错方案将导致频繁报错。

飞书和微信机器人推送本质不同:飞书推荐用 lark-oapi SDK(适合长期维护、需事件处理或权限控制的场景),微信必须走 Webhook(简单、无状态、但功能受限)。选错方案,后面会反复踩坑。
飞书用 lark-oapi 还是直接 requests.post?
两者都能发消息,但适用阶段完全不同:
-
lark-oapi封装了 token 自动刷新、请求签名、响应解包、错误码映射,适合需要调用im:message:send_as_bot等需鉴权接口的正式应用;比如你要发消息给单个用户(open_id)、撤回消息、读取群成员,必须用它 - 纯 Webhook(
https://open.feishu.cn/open-apis/bot/v2/hook/xxx)只支持向群聊发消息,且不校验身份——只要 URL 泄露,任何人可发。适合测试、CI/CD 通知等“只写不读”的轻量场景 - 常见错误:用 Webhook 却想发给
open_id,报错errcode: 99991684(“receive_id_type not supported”);反过来,用lark-oapi却传 Webhook 地址当app_id,初始化直接抛ValueError
微信 Webhook 必须加 timeout 和异常捕获
企业微信 Webhook 表面简单,但生产环境极易卡死或静默失败:
一站式排查小程序隐私授权报错(errno 104 / buttonId is wrong 等)+ 标准修改模式。适用:隐私协议配置、隐私弹窗不弹、授权报错、隐私接口调用失败。已抽离具体项目,适用于任何微信小程序。
- 必须设
timeout=(3, 7):3 秒连不上就放弃,7 秒内没响应也中断。否则 crontab 里积压进程越来越多 - 不能只看
response.status_code == 200,得检查返回 JSON 里的errcode字段:errcode: 0才真成功;errcode: 40014是 key 错误,errcode: 45009是每分钟超 20 条限频 -
mentioned_list必须是列表,不是字符串——写成"@all"会被忽略,得写成["@all"];大小写敏感,["@ALL"]无效 - Webhook 地址绝不能硬编码,必须从
os.getenv("WECHAT_WEBHOOK")读,且.env文件要进.gitignore
飞书 lark-oapi 初始化时最容易漏的三件事
跑不通第一步,90% 是这三个点没对:
立即学习“Python免费学习笔记(深入)”;
-
app_id必须是cli_xxx格式(自建应用 ID),不是 Webhook 地址里的hook/xxx;填错会报invalid app_id - 权限点没开通:在开放平台控制台 → 应用配置 → 权限管理里,必须勾选
im:message:send_as_bot,否则create接口返回errcode: 99991683(“permission denied”) - 没调
.build():Client.builder().app_id(...).app_secret(...)后必须链式调用.build(),否则client.im.v1.message.create()会报AttributeError: 'Builder' object has no attribute 'im'
Webhook 方案看着快,但一旦要 @人、传文件、区分发送对象,就得切回 SDK;而 SDK 初始化那几行,漏一个参数就卡住半天。别省那几分钟,先看清凭证类型和权限边界再敲代码。


















