feishu
快速开始¶
FeishuClient 是一个异步客户端,统一管理应用凭证、令牌的自动获取与缓存,以及带自动重试的 HTTP 传输。推荐通过 async with 使用,以便自动释放底层连接。消息接口以接收者为第一个参数(其 ID 类型会自动推断),消息内容为第二个参数;client.im.send 还会根据内容的形态自动推断消息类型(msg_type)。
| Python | |
|---|---|
应用凭证也可以通过环境变量 FEISHU_APP_ID / FEISHU_APP_SECRET 提供,此时可省略构造参数:async with FeishuClient() as client: ...。
命名空间¶
各业务能力按资源划分到不同命名空间下,每个命名空间提供「裸动词」式的 CRUD 方法(如 create / get / update / delete / list)。常用入口:
| 命名空间 | 说明 |
|---|---|
client.im |
即时消息:发送、回复、编辑、撤回、转发消息 |
client.contact.users / client.contact.departments |
通讯录:用户与部门 |
client.bitable.tables |
多维表格:数据表、字段与记录 |
client.calendar.events |
日历:日程与参与人 |
client.approval.instances |
审批:审批实例与任务 |
client.drive.files |
云空间:文件的上传、下载、复制与删除 |
此外还有 client.docx(新版文档)、client.sheets(电子表格)、client.wiki(知识库)、client.board.whiteboards(画板)、client.vc(视频会议)、client.task(任务)、client.oauth(用户身份 OAuth)、client.cards(卡片构建器)等命名空间。
| Python | |
|---|---|
接收事件¶
要接收飞书推送的事件(如「接收消息」),先用 EventDispatcher 按事件类型注册异步处理函数,Webhook 接收器与长连接两种接入方式共用同一套处理函数。
| Python | |
|---|---|
方式一:Webhook 接收器。 当应用有公网回调地址时,用 create_event_app 生成一个可独立运行的 Starlette 应用,默认带签名新鲜度(防重放)与去重保护,以任意 ASGI 服务器(如 uvicorn)运行即可:
| Python | |
|---|---|
方式二:长连接(WebSocket)。 当应用没有公网回调地址时,用 feishu.ws.WsClient 主动与飞书建立一条持久 WebSocket 连接(对标 Slack 的 Socket Mode),事件经该连接推送:
| Python | |
|---|---|
长连接依赖可选的 websockets 包,可通过 pip install open-feishu[ws] 安装。
安装¶
从 PyPI 安装最新的稳定版本:
| Bash | |
|---|---|
如果需要使用 feishu-mcp 命令,请安装 MCP 可选依赖:
| Bash | |
|---|---|
从源代码安装最新版本:
| Bash | |
|---|---|
许可证¶
SPDX-License-Identifier: AGPL-3.0-or-later
feishu
¶
feishu.RetryPolicy
dataclass
¶
传输层重试策略。
定义对可重试错误(HTTP 5xx 与 429 限流、网络错误)的最大重试次数与退避时间。
退避采用指数增长并以 max_delay 封顶;启用 jitter 时在区间内随机抖动以避免
雷鸣效应。若服务器给出了限流重置提示,则优先使用该提示值(同样以 max_delay 封顶)
作为等待时间。max_elapsed 为整个重试过程的总耗时预算上限,一旦累计退避耗时超过该值
便不再继续重试,避免在持续故障时无限拖延。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
int
|
最大尝试次数(含首次请求),默认 3。 |
3
|
|
float
|
退避基准时间(秒),默认 0.5。 |
0.5
|
|
float
|
单次退避时间上限(秒),默认 30.0。 |
30.0
|
|
bool
|
是否对退避时间施加随机抖动,默认 |
True
|
|
float | None
|
整个重试过程的总退避耗时预算上限(秒);为 |
None
|
示例:
| Python Console Session | |
|---|---|
源代码位于: feishu/_transport.py
| Python | |
|---|---|
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | |
default
classmethod
¶
default() -> RetryPolicy
delay
¶
delay(attempt: int, reset_after: float | None) -> float
计算第 attempt 次重试前应等待的秒数。
若提供了 reset_after(服务器限流重置提示),则采用该值并以 max_delay 封顶,
防止异常大的服务端提示导致过长等待;否则按 base_delay * 2 ** (attempt - 1)
指数退避并以 max_delay 封顶,启用 jitter 时再在 [0, delay] 区间内随机取值。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
|
int
|
当前重试序号,从 1 开始。 |
必需 |
|
float | None
|
服务器给出的限流重置等待秒数;为 |
必需 |
返回:
| 类型 | 描述 |
|---|---|
float
|
建议等待的秒数。 |
示例:
| Python Console Session | |
|---|---|