飞书Python SDK 三步上手:装好 lark-oapi,10 分钟发出第一条消息
【免费下载链接】oapi-sdk-pythonLarksuite development interface SDK项目地址: https://gitcode.com/gh_mirrors/oa/oapi-sdk-python
飞书Python SDK(包名lark-oapi)是飞书开放平台官方服务端开发套件,封装了消息、通讯录、审批等 60 多个产品的 API 调用,外加事件订阅与 token 缓存,把 REST 接口调用压缩成几行 Python 代码。
项目速览:它到底能帮你做什么
自己裸调飞书接口时,你得逐一手动处理:tenant_access_token 怎么获取、事件推送的 CHALLENGE 校验怎么应答、AES 加密的负载怎么解密。lark-oapi 把这一整条链路装进了一个client对象:请求签名、token 自动续期、事件分发全部下沉到 lark_oapi/core/ 底层,你只管写业务。发消息、拉通讯录、发起审批,都用client.im.v1.message.create这类属性路径直接调用,不需要记 REST 细节。
上图是对照关系:文档里的接口 URL 路径与 SDK 调用路径一一对应,看接口文档时不用来回换算。
三步跑起来
- 环境准备:Python ≥ 3.8,无需其他前置依赖。
- 安装:一条命令即可:
python3 -m pip install lark-oapi- 第一次成功调用:给群发一条文本消息。消息相关的请求模型都在 lark_oapi/api/im/v1/ 下:
import lark_oapi as lark from lark_oapi.api.im.v1 import * client = lark.Client.builder().app_id("cli_xxx").app_secret("SECRET").build() request = CreateMessageRequest.builder().receive_id_type("chat_id") \ .request_body(CreateMessageRequestBody.builder() .receive_id("oc_xxx").msg_type("text") .content('{"text":"hello"}').build()).build() print(client.im.v1.message.create(request))想对照源码,可执行git clone https://gitcode.com/gh_mirrors/oa/oapi-sdk-python,仓库里samples/目录按场景放了可运行样例。
能力版图
| 目录 | 职责一句话 |
|---|---|
lark_oapi/api/ | 60 多个产品 API,按"产品 + 版本号"组织(im、contact、approval、bitable 等) |
lark_oapi/event/ | 事件分发器:验签、应答 CHALLENGE、按事件名路由到你的回调函数 |
lark_oapi/core/ | 地基层:access_token 缓存、HTTP 传输、日志脱敏 |
lark_oapi/ws/ | WebSocket 长连接客户端,订阅事件不再依赖公网回调地址 |
lark_oapi/channel/ | 机器人通道模块(已标记 legacy,新能力迁往独立包) |
samples/ | 各场景可运行样例:Flask 事件、卡片回调、长连接模式 |
从Demo到生产
🤖群机器人自动回复。痛:裸调 REST 要自己管 token 过期、receive_id 类型参数,写错一个就发不出去。接法:client.im.v1.message.create(request)一行发信,响应里直接带 message_id。效果:回复逻辑就是一个普通函数,群机器人当天上线。
接收并处理消息事件。痛:平台第一次推的是 CHALLENGE 校验请求,后面才跟加密负载,手动解析校验容易浪费半天。接法:用EventDispatcherHandler注册回调,验签解密 SDK 代劳:
handler = lark.EventDispatcherHandler.builder(lark.ENCRYPT_KEY, lark.VERIFICATION_TOKEN, lark.LogLevel.DEBUG) \ .register_p2_im_message_receive_v1(do_p2_im_message_receive_v1) \ .build()效果:每个事件类型对应独立回调函数,新增事件只要多注册一行。
开发环境没有公网 IP。痛:事件订阅要求可访问的请求地址,本机或内网机器配不出来。接法:换长连接模式,lark_oapi/ws/ 里的客户端主动向平台拨出连接。效果:cli.start()一句,事件就开始推送,咱们在笔记本上就能开发联调。
配置与凭证
认证链路很短:把app_id+app_secret交给 SDK,它自动获取并缓存 tenant_access_token(租户级凭证),过期自动刷新,你不用写任何 token 逻辑。若订阅事件,还需在控制台"事件订阅"页取 Encrypt Key 和 Verification Token 两个值:
客户端初始化就是一条链式调用:lark.Client.builder().app_id(...).app_secret(...).build()。如果你的服务挂在 Flask 上,lark_oapi/adapter/flask/ 里的请求解析工具可以直接接住平台推送的原始报文。
常见踩坑速查
- 报
code 99991663、token 无效 → app_id 或 secret 抄错、环境变量名混用 → 打印环境变量复核,确认 ID 以 cli_ 开头 - 接口返回
access denied→ 权限范围没开通 → 在控制台"权限管理"启用对应 scope 并发布新版本 - 事件订阅只收到 CHALLENGE、没有业务事件 → 请求地址没填或 Verification Token 不一致 → 在"事件订阅"页填请求地址,保持 Token 与代码中一致
- 抛
UnmarshalException→ 平台响应字段类型有变动 → 升级 lark-oapi 到最新版,或拿原始响应手动处理 - 长连接模式启动即失败 → APP_ID / APP_SECRET 未注入 → 启动前把环境变量配齐再调
start()
下一步
🚀一键注册应用:lark.register_app走设备流扫码建应用,可预填权限范围与事件订阅,省去控制台手工点选。
ClientAssertion 无密钥模式:用外部签名服务提供的 JWT 断言替代 app_secret,适合自研应用统一密钥托管。
长连接上生产:WebSocket 模式开发与生产同一套 API,多实例部署时注意负载均衡分摊连接。
样例库:samples/下的可运行样例逐个跑一遍,是熟悉各场景最快的方式。
先把samples/event/flask_sample.py拷下来跑起来,把应用凭证的三个值替换进去,事件回调十分钟就能打通。卡住某个接口时,去lark_oapi/api/下对应产品的版本目录查,每个接口都有现成的请求/响应模型,照着填空即可。
【免费下载链接】oapi-sdk-pythonLarksuite development interface SDK项目地址: https://gitcode.com/gh_mirrors/oa/oapi-sdk-python
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考