oapi-sdk-python

oapi-sdk-python

Python SDK加速飞书应用开发集成

oapi-sdk-python是飞书开放平台的官方Python SDK,支持API调用、事件订阅和卡片交互等核心功能。该SDK提供简洁接口和丰富示例,适用于Python 3.7及以上版本,支持自建和商店应用开发。它简化了飞书应用的开发流程,有助于开发者快速集成飞书开放能力。

飞书开放接口SDKPythonAPIGithub开源项目

飞书开放接口 SDK

为帮助开发者更便捷地使用飞书开放能力开发应用,简化接入飞书开放平台时的操作步骤,开放平台提供了统一的服务端 SDK。开发者可使用 SDK 快速开发功能,提高开发效率。

安装

pip install lark-oapi -U

支持 Python 3.7 及以上版本

简单示例

import lark_oapi as lark # 创建客户端 client = lark.Client.builder().app_id("APP_ID").app_secret("APP_SECRET").build() # 构造请求对象 request = lark.contact.v3.GetUserRequest.builder().user_id("7be5fg9a").build() # 发起请求 response = client.contact.v3.user.get(request)

更多示例可参考:请求示例

API 客户端

开发者在调用 API 前,需要先创建一个 API 客户端,然后才能基于该客户端发起 API 调用。

创建客户端

  • 自建应用
import lark_oapi as lark client = lark.Client.builder() \ .app_id("APP_ID") \ .app_secret("APP_SECRET") \ .build()
  • 商店应用
import lark_oapi as lark client = lark.Client.builder() \ .app_id("APP_ID") \ .app_secret("APP_SECRET") \ .app_type(lark.AppType.ISV) \ .build()

客户端配置项

创建 API 客户端时,可以对客户端进行一些配置,比如设置日志级别、HTTP 请求超时时间等。

import lark_oapi as lark client = lark.Client.builder() \ .app_id("APP_ID") \ .app_secret("APP_SECRET") \ .domain(lark.FEISHU_DOMAIN) \ # 域名,默认为 https://open.feishu.cn .timeout(3) \ # 客户端超时时间,单位秒,默认永不超时 .app_type(lark.AppType.ISV) \ # 应用类型,默认为自建应用;若设为 ISV 需在 request_option 中配置 tenant_key .app_ticket("xxxx") \ # 获取 app_access_token 的凭证,app_type = ISV 时需配置 .enable_set_token(False) \ # 是否允许手动设置 token,默认不开启;开启后需在 request_option 中配置 token .cache(Cache()) \ # 自定义缓存,默认使用预置的本地缓存 .log_level(lark.LogLevel.DEBUG) \ # 日志级别,默认为 WARNING .build()

API 调用

创建完 API 客户端后,我们可以使用 client.业务域.版本.资源.方法名称 来定位具体的 API 方法,然后对特定的 API 发起调用。

client_expr

飞书开放平台开放的所有 API 列表,可点击这里查看

基本用法

如下示例,我们通过 client 调用 通过手机号或邮箱获取用户 ID 接口。

# Code generated by Lark OpenAPI. import lark_oapi as lark from lark_oapi.api.contact.v3 import * client = lark.Client.builder() \ .app_id("APP_ID") \ .app_secret("APP_SECRET") \ .log_level(lark.LogLevel.DEBUG) \ .build() # 构造请求对象 request: BatchGetIdUserRequest = BatchGetIdUserRequest.builder() \ .user_id_type("open_id") \ .request_body(BatchGetIdUserRequestBody.builder() .emails(["xxxx@bytedance.com"]) .mobiles(["15000000000"]) .build()) \ .build() # 发起请求 response: BatchGetIdUserResponse = client.contact.v3.user.batch_get_id(request) # 处理失败返回 if not response.success(): lark.logger.error( f"client.contact.v3.user.batch_get_id failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}") # 处理业务结果 lark.logger.info(lark.JSON.marshal(response.data, indent=4))

更多示例可参考:请求示例

Request 配置项

在每次发起 API 调用时,可以设置请求级别的一些参数,比如传递 userAccessToken、自定义 headers 等。

import lark_oapi as lark from lark_oapi.api.contact.v3 import * # 创建客户端 import lark_oapi as lark from lark_oapi.api.contact.v3 import * # 创建客户端 client = lark.Client.builder() \ .enable_set_token(True) \ .log_level(lark.LogLevel.DEBUG) \ .build() # 构造请求对象 request: BatchGetIdUserRequest = BatchGetIdUserRequest.builder() \ .user_id_type("open_id") \ .request_body(BatchGetIdUserRequestBody.builder() .emails(["xxxx@bytedance.com"]) .mobiles(["15000000000"]) .build()) \ .build() # 设置请求选项 headers = {"key1": "value1", "key2": "value2"} req_opt = lark.RequestOption.builder()\ .tenant_access_token("t-g1047hjTXIZKCBFYWXUCK3D2LJWZYCWYL7USXXXX")\ .headers(headers)\ .build() # 发起请求 response: BatchGetIdUserResponse = client.contact.v3.user.batch_get_id(request, req_opt) # 处理失败返回 if not response.success(): lark.logger.error( f"client.contact.v3.user.batch_get_id failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}") # 处理业务结果 lark.logger.info(lark.JSON.marshal(response.data, indent=4))

如上使用 RequestOptions 的 Builder 模式构建请求级别的参数。下表展示了所有可设置的选项:

<table> <thead align=left> <tr> <th> 配置选项 </th> <th> 描述 </th> </tr> </thead> <tbody align=left valign=top> <tr> <th> <code>tenant_key</code> </th> <td>租户 key,商店应用必须设置该选项。</td> </tr> <tr> <th> <code>user_access_token</code> </th> <td>用户 token,创建 Client 时 enable_set_token 需要设置为 True。</td> </tr> <tr> <th> <code>tenant_access_token</code> </th> <td>租户 token,创建 Client 时 enable_set_token 需要设置为 True。</td> </tr> <tr> <th> <code>app_access_token</code> </th> <td>应用 token,创建 Client 时 enable_set_token 需要设置为 True。</td> </tr> <tr> <th> <code>headers</code> </th> <td>自定义请求头,这些请求头会被透传到飞书开放平台服务端。</td </tr> </tbody> </table>

原生方式调用

部分老版本接口,由于没有元数据信息,所以无法生成对应的 SDK 模型,需要使用原生方式调用。

如下示例,使用 client 原生方式同样调用 通过手机号或邮箱获取用户 ID 接口。

import lark_oapi as lark # 创建客户端 client = lark.Client.builder() \ .app_id("APP_ID") \ .app_secret("APP_SECRET") \ .log_level(lark.LogLevel.DEBUG) \ .build() # 构造请求对象 request: lark.BaseRequest = lark.BaseRequest.builder() \ .http_method(lark.HttpMethod.POST) \ .uri("/open-apis/contact/v3/users/batch_get_id") \ .token_types({lark.AccessTokenType.TENANT}) \ .queries([("user_id_type", "open_id")]) \ .body({"emails": ["xxxx@bytedance.com"], "mobiles": ["15000000000"]}) \ .build() # 发起请求 response: lark.BaseResponse = client.request(request) # 处理失败返回 if not response.success(): lark.logger.error( f"client.request failed, code: {response.code}, msg: {response.msg}, log_id: {response.get_log_id()}") # 处理业务结果 lark.logger.info(str(response.raw.content, lark.UTF_8))

更多示例可参考:原生调用

处理消息事件回调

了解消息订阅相关的知识,可以 点击这里

获取飞书开放平台开放的所有事件列表,可以 点击这里

基本用法

开发者订阅消息事件后,可以使用下面代码,对飞书开放平台推送的消息事件进行处理。

如下示例中使用 flask 启动 httpServer,如使用其他 web 框架,只需处理 http 出入参转换即可。

from flask import Flask import lark_oapi as lark from lark_oapi.adapter.flask import * from lark_oapi.api.im.v1 import * app = Flask(__name__) def do_p2_im_message_receive_v1(data: P2ImMessageReceiveV1) -> None: print(lark.JSON.marshal(data)) def do_customized_event(data: lark.CustomizedEvent) -> None: print(lark.JSON.marshal(data)) 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) \ .register_p1_customized_event("这里填入你要自定义订阅的 event 的 key,例如 out_approval", do_customized_event) \ .build() @app.route("/event", methods=["POST"]) def event(): resp = handler.do(parse_req()) return parse_resp(resp) if __name__ == "__main__": app.run(port=7777)

其中 EventDispatcherHandler.builder(encrypt_key: str, verification_token: str) 方法参数用于签名验证和消息解密使用,可在 开发者后台 ->「事件订阅」中查看。

console 需要注意的是,在注册处理器时,例如使用 register_p2_im_message_receive_v1 注册接收消息事件回调时,其中的 P2 表示消息协议版本。目前飞书开放平台有两种消息协议,分别是 1.0 和 2.0。

如下图所示,开发者在注册消息处理器时,需要从事件列表中查看自己需要的是哪种协议的事件。

如果是 1.0 的消息协议,则注册处理器时需要找以 register_p1_xxxx 开头的。如果是 2.0 的消息协议,则注册处理器时需要找以 register_p2_xxxx 开头的。

如果在 SDK 中未找到处理器,可以使用 register_p1_customized_event 或 register_p2_customized_event 注册自定义事件。

event_prot

更多示例可参考:事件回调

处理卡片行为回调

关于卡片行为相关的知识,可以点击这里查看

基本用法

开发者可以使用以下代码处理卡片回调,示例中使用 flask 启动 httpServer,如使用其他 web 框架,只需处理 http 出入参转换即可。

from typing import Any from flask import Flask import lark_oapi as lark from lark_oapi.adapter.flask import * app = Flask(__name__) def do_interactive_card(data: lark.Card) -> Any: print(lark.JSON.marshal(data)) content = { "header": { "title": { "tag": "plain_text", "content": "更新卡片成功" }, "template": "green" }, "elements": [ { "tag": "div", "text": { "tag": "lark_md", "content": "**Success!\n成功啦😄**" } }, ] } return content handler = lark.CardActionHandler.builder(lark.ENCRYPT_KEY, lark.VERIFICATION_TOKEN, lark.LogLevel.DEBUG) \ .register(do_interactive_card) \ .build() @app.route("/card", methods=["POST"]) def card(): resp = handler.do(parse_req()) return parse_resp(resp) if __name__ == "__main__": app.run(port=7777)

更多示例可参考:事件回调

扩展示例

我们还基于 SDK 封装了常用的 API 组合调用及业务场景示例,如:

更多示例可参考:https://github.com/larksuite/oapi-sdk-python-demo

许可证

MIT

加入讨论群

点击或扫码加入讨论群

<img src="https://yellow-cdn.veclightyear.com/835a84d5/508fd616-c45c-46a6-8a6e-f1046236f6ed.png" width="200" alt="讨论群">

编辑推荐精选

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

openai-agents-python

openai-agents-python

OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。

openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。

Hunyuan3D-2

Hunyuan3D-2

高分辨率纹理 3D 资产生成

Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。

3FS

3FS

一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。

3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。

下拉加载更多