Python SDK加速飞书应用开发集成
oapi-sdk-python是飞书开放平台的官方Python SDK,支持API调用、事件订阅和卡片交互等核心功能。该SDK提供简洁接口和丰富示例,适用于Python 3.7及以上版本,支持自建和商店应用开发。它简化了飞书应用的开发流程,有助于开发者快速集成飞书开放能力。
为帮助开发者更便捷地使用飞书开放能力开发应用,简化接入飞书开放平台时的操作步骤,开放平台提供了统一的服务端 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 调用。
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 客户端后,我们可以使用 client.业务域.版本.资源.方法名称
来定位具体的 API 方法,然后对特定的 API 发起调用。
飞书开放平台开放的所有 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))
更多示例可参考:请求示例
在每次发起 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) 方法参数用于签名验证和消息解密使用,可在 开发者后台 ->「事件订阅」中查看。
需要注意的是,在注册处理器时,例如使用 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 注册自定义事件。
更多示例可参考:事件回调
关于卡片行为相关的知识,可以点击这里查看
开发者可以使用以下代码处理卡片回调,示例中使用 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 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。
深度推理能力全新升级,全面对标OpenAI o1
科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。
一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型
Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。
字节跳动发布的AI编程神器IDE
Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。
AI助力,做PPT更简单!
咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。
选题、配图、成文,一站式创作,让内容运营更高效
讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。
专业的AI公文写作平台,公文写作神器
AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。
OpenAI Agents SDK,助力开发者便捷使用 OpenAI 相关功能。
openai-agents-python 是 OpenAI 推出的一款强大 Python SDK,它为开发者提供了与 OpenAI 模型交互的高效工具,支持工具调用、结果处理、追踪等功能,涵盖多种应用场景,如研究助手、财务研究等,能显著提升开发效率,让开发者更轻松地利用 OpenAI 的技术优势。
高分辨率纹理 3D 资产生成
Hunyuan3D-2 是腾讯开发的用于 3D 资产生成的强大工具,支持从文本描述、单张图片或多视角图片生成 3D 模型,具备快速形状生成能力,可生成带纹理的高质量 3D 模型,适用于多个领域,为 3D 创作提供了高效解决方案。
一个具备存储、管理和客户端操作等多种功能的分布式文件系统相关项目。
3FS 是一个功能强大的分布式文件系统项目,涵盖了存储引擎、元数据管理、客户端工具等多个模块。它支持多种文件操作,如创建文件和目录、设置布局等,同时具备高效的事件循环、节点选择和协程池管理等特性。适用于需要大规模数据存储和管理的场景,能够提高系统的性能和可靠性,是分布式存储领域的优质解决方案。
最新AI工具、AI资讯
独家AI资源、AI项目落地
微信扫一扫关注公众号