Reusable SDK for Feishu bot messaging, Bitable, Docx, and Drive permissions.
Project description
feishu-bot-sdk
面向飞书机器人的轻量 Python SDK,提供:
- 飞书 tenant token 获取与缓存
- IM 消息能力(发送/回复/编辑/撤回/转发/合并转发/reaction/pin/批量/加急/卡片)
- 图片、文件、消息资源上传下载
- 云空间文件/素材上传下载、导入导出任务
- Drive 权限管理(成员、公开设置、密码、owner transfer)
- 多维表格能力(CSV 导入 + 表/字段/记录 CRUD + batch + 分页迭代)
- Wiki 知识库(space/node/member/search/task)与云文档内容导出(
docs/v1/content) - Markdown 追加写入 Docx
- 事件回调(Webhook)与长连接(WebSocket)
- 事件类型模型(IM、卡片、URL 预览、多维表格 record/field changed)
- 自适应限流器(按接口返回动态收敛/恢复)
- 同步 / 异步两套 API
安装
# pip
pip install feishu-bot-sdk
# uv
uv add feishu-bot-sdk
模块文档
- 文档索引(中文):
docs/README.md - 文档索引(英文):
docs/README_EN.md - 核心客户端与配置:
docs/zh/01-core-client.md - IM 消息与媒体:
docs/zh/02-im.md - Drive 文件与权限:
docs/zh/03-drive.md - 多维表格(Bitable):
docs/zh/04-bitable.md - 云文档(Docx/Docs Content):
docs/zh/05-docx-and-docs.md - Wiki 知识库:
docs/zh/06-wiki.md - 事件系统(Events/Webhook/WS):
docs/zh/07-events-webhook-ws.md - FeishuBotServer 长连接服务:
docs/zh/08-bot-server.md - 类型、异常与限流:
docs/zh/09-types-errors-rate-limit.md
1 分钟上手(同步)
from feishu_bot_sdk import FeishuClient, FeishuConfig, BitableService, DocxService
config = FeishuConfig(
app_id="cli_xxx",
app_secret="xxx",
base_url="https://open.feishu.cn/open-apis",
doc_url_prefix="https://your-tenant.feishu.cn/docx",
doc_folder_token="fldcnxxx", # 可选
member_permission="edit", # view/edit/full_access
rate_limit_enabled=True, # 默认开启
)
client = FeishuClient(config)
# 1) 发消息
client.send_text_message("ou_xxx", "open_id", "你好,来自 SDK")
# 2) CSV -> Bitable
bitable = BitableService(client)
app_token, app_url = bitable.create_from_csv("final.csv", "任务结果", "结果表")
bitable.grant_edit_permission(app_token, "ou_xxx", "open_id")
print(app_url)
# 2.1) 通用记录 CRUD
record = bitable.create_record(app_token, "tbl_xxx", {"任务名称": "跟进客户"})
bitable.update_record(app_token, "tbl_xxx", record["record"]["record_id"], {"任务名称": "已完成"})
for item in bitable.iter_records(app_token, "tbl_xxx", page_size=100):
print(item.get("record_id"))
# 3) Markdown -> Docx
docx = DocxService(client)
doc_id, doc_url = docx.create_document("任务报告")
docx.append_markdown(doc_id, "# 标题\n\n这是正文。")
docx.grant_edit_permission(doc_id, "ou_xxx", "open_id")
print(doc_url or doc_id)
异步用法
from feishu_bot_sdk import AsyncFeishuClient, AsyncBitableService, FeishuConfig
config = FeishuConfig(app_id="cli_xxx", app_secret="xxx")
client = AsyncFeishuClient(config)
bitable = AsyncBitableService(client)
await client.send_text_message("ou_xxx", "open_id", "hello async")
app_token, app_url = await bitable.create_from_csv("final.csv", "异步结果", "Sheet1")
await client.aclose()
IM 消息与媒体
from feishu_bot_sdk import FeishuClient, FeishuConfig, MediaService, MessageService
client = FeishuClient(FeishuConfig(app_id="cli_xxx", app_secret="xxx"))
message = MessageService(client)
media = MediaService(client)
sent = message.send_text(receive_id_type="open_id", receive_id="ou_xxx", text="你好")
image = media.upload_image("demo.png", image_type="message")
message.send_image(
receive_id_type="open_id",
receive_id="ou_xxx",
image_key=image["image_key"],
)
message.send_markdown(
receive_id_type="open_id",
receive_id="ou_xxx",
markdown="### 日报\n\n任务完成",
)
IM 高级能力
from feishu_bot_sdk import MessageService
message = MessageService(client)
message.add_reaction("om_xxx", "SMILE")
message.pin_message("om_xxx")
message.send_urgent_app("om_xxx", user_id_list=["ou_xxx"], user_id_type="open_id")
batch = message.send_batch_message(
msg_type="text",
content={"text": "批量通知"},
open_ids=["ou_xxx", "ou_yyy"],
)
print(batch.get("message_id"))
事件模型(Webhook / WS)
from feishu_bot_sdk import FeishuEventRegistry
registry = FeishuEventRegistry()
registry.on_bitable_record_changed(lambda event: print(event.table_id, len(event.action_list)))
registry.on_bitable_field_changed(lambda event: print(event.table_id, event.revision))
FeishuBotServer(一站式长连接服务)
from feishu_bot_sdk import FeishuBotServer
server = FeishuBotServer(app_id="cli_xxx", app_secret="xxx")
@server.on_im_message_receive
def on_message(event):
print("open_id:", event.sender_open_id, "text:", event.text)
@server.on_bot_menu
def on_menu(event):
print("menu:", event.event_key)
# 自动处理 SIGINT/SIGTERM,直到进程退出
server.run()
可用管理能力:
await server.start()/await server.stop():异步生命周期控制await server.run_forever():长连接常驻运行server.status():查看运行状态、最近事件、事件计数、最后错误server.on_event(...)/server.on_default(...):注册通用事件回调
Drive 文件与权限
from feishu_bot_sdk import DriveFileService, DrivePermissionService
drive = DriveFileService(client)
perm = DrivePermissionService(client)
uploaded = drive.upload_file("final.csv", parent_type="explorer", parent_node="fld_xxx")
task = drive.create_import_task(
{
"file_extension": "csv",
"file_token": uploaded["file_token"],
"type": "bitable",
"file_name": "导入结果",
"point": {"mount_type": 1, "mount_key": "fld_xxx"},
}
)
perm.add_member(
task["token"],
resource_type="bitable",
member_id="ou_xxx",
member_id_type="open_id",
perm="edit",
)
Wiki 与云文档内容
from feishu_bot_sdk import WikiService, DocContentService
wiki = WikiService(client)
docs = DocContentService(client)
spaces = wiki.list_spaces(page_size=10)
print(spaces.get("items", []))
results = wiki.search_nodes("项目周报", page_size=10)
print(results.get("items", []))
markdown = docs.get_markdown("doccn_xxx")
print(markdown[:200])
核心对象
FeishuClient/AsyncFeishuClient:飞书 API 基础客户端BitableService/AsyncBitableService:多维表格能力DocxService/AsyncDocxService:文档能力DocxDocumentService/AsyncDocxDocumentService:文档信息与分页获取文档块DocxBlockService/AsyncDocxBlockService:块 CRUD、批量更新与内容转换DriveFileService/AsyncDriveFileService:云空间文件、导入导出、素材接口DrivePermissionService/AsyncDrivePermissionService:成员、公开设置、密码与 owner transferMessageService/AsyncMessageService:消息管理MediaService/AsyncMediaService:媒体资源FeishuBotServer:长连接服务封装(回调注册 + 启停 + 状态管理)
英文说明见 README_EN.md。
示例脚本
uv run python examples/sync_demo.py --receive-id ou_xxx --receive-id-type open_id
uv run python examples/async_demo.py --receive-id ou_xxx --receive-id-type open_id
uv run python examples/webhook_server.py
uv run python examples/ws_listener.py
uv run python examples/bot_server_demo.py
uv run python examples/card_callback.py
uv run python examples/im_media_demo.py --receive-id ou_xxx --receive-id-type open_id --image ./demo.png
uv run python examples/im_advanced_demo.py --receive-id ou_xxx --receive-id-type open_id --urgent-user-id ou_xxx
uv run python examples/drive_demo.py --resource-token doccn_xxx --resource-type docx --member-id ou_xxx
uv run python examples/wiki_docs_demo.py --search-keyword 项目周报 --doc-token doccn_xxx
可选参数:
--csv final.csv:演示 CSV 导入 Bitable--markdown result.md:演示 Markdown 追加到 Docx
长连接注意事项
- 同一个应用实例支持最多 50 条长连接。
- 多个 client 同时在线时,事件/回调是随机投递到其中一个 client,不是广播模式。
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file feishu_bot_sdk-0.1.2.tar.gz.
File metadata
- Download URL: feishu_bot_sdk-0.1.2.tar.gz
- Upload date:
- Size: 41.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
154534c34bd5f0deff74c78d101692ddeee7947a5dfaebb93c818e65154e9e00
|
|
| MD5 |
f98fd664850f689aa9b1f5251a5a7c2c
|
|
| BLAKE2b-256 |
606f5614dc270b72128535b04479dab7eb0b2e37149ceb01ca69c2478c873897
|
Provenance
The following attestation bundles were made for feishu_bot_sdk-0.1.2.tar.gz:
Publisher:
release.yml on AndersonBY/feishu-bot-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
feishu_bot_sdk-0.1.2.tar.gz -
Subject digest:
154534c34bd5f0deff74c78d101692ddeee7947a5dfaebb93c818e65154e9e00 - Sigstore transparency entry: 1004873014
- Sigstore integration time:
-
Permalink:
AndersonBY/feishu-bot-sdk@15081eb136c1cd844b6cbb375837f346120fe870 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/AndersonBY
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@15081eb136c1cd844b6cbb375837f346120fe870 -
Trigger Event:
push
-
Statement type:
File details
Details for the file feishu_bot_sdk-0.1.2-py3-none-any.whl.
File metadata
- Download URL: feishu_bot_sdk-0.1.2-py3-none-any.whl
- Upload date:
- Size: 57.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
77aeb309bddc4d411a99bd24b32c99810856074922e1429645b389ebba6b9d65
|
|
| MD5 |
882b18505f294acd69b3e6984b58c468
|
|
| BLAKE2b-256 |
fd0ac762fdd6c2c036e2b6f85baedf77206e0ae7072cdcd85b4ac619c282184f
|
Provenance
The following attestation bundles were made for feishu_bot_sdk-0.1.2-py3-none-any.whl:
Publisher:
release.yml on AndersonBY/feishu-bot-sdk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
feishu_bot_sdk-0.1.2-py3-none-any.whl -
Subject digest:
77aeb309bddc4d411a99bd24b32c99810856074922e1429645b389ebba6b9d65 - Sigstore transparency entry: 1004873015
- Sigstore integration time:
-
Permalink:
AndersonBY/feishu-bot-sdk@15081eb136c1cd844b6cbb375837f346120fe870 -
Branch / Tag:
refs/tags/v0.1.2 - Owner: https://github.com/AndersonBY
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@15081eb136c1cd844b6cbb375837f346120fe870 -
Trigger Event:
push
-
Statement type: