Package: feishu-python-sdk
feishu-python-sdk一个用于和飞书开放平台交互的python库 (feishu-python-sdk)特性Python3.7+, Type Hints!Pydantic类型检查使用了黑科技，API同时支持同步调用和异步调用实现了订阅事件和卡片交互回调(其他开源库都没实现这个, 只能算feishu-client)除了标准API外，还封装了一些语法糖调用方法, 比如绕过200元素限制等等TODO多写点测试, 目前coverage = 35%多实现点接口, 目前实现了机器人和消息相关使用说明pip install feishu-python-sdk运行测试用例exportFEISHU_APP_ID=飞书应用的APP_IDexportFEISHU_APP_SECRET=飞书应用的APP_SECRETexportFEISHU_VERIFY_TOKEN=飞书应用“事件订阅”的VERIFY_TOKEN参数exportFEISHU_ENCRYPT_KEY=飞书应用“事件订阅”的ENCRYPT_KEY参数PYTHONPATH=.pytest--covAPI调用示例fromfeishuimportFeishuClientclient=FeishuClient(app_id=...,app_secret=...)print(client.get_bot_info())# activate_status=<BotActivateStatus.INITIALIZED: 0> app_name='Chatbot测试'# avatar_url='https://s3-fs.pstatp.com/static-resource/v1/0a04c4b7-4edd-4cb3-a277-a1f6c609af4g'# ip_white_list=[] open_id='ou_b71f3874109c927c1c0a4f68ba512f69'如果配置了环境变量，初始化的时候也可以省略参数client=FeishuClient()更多API见apis目录在异步框架中调用API也可以异步调用，注意，异步调用需要在运行任意API之前先配置event_loopimportasyncioloop=asyncio.new_event_loop()asyncio.set_event_loop(loop)fromfeishuimportFeishuClientclient=FeishuClient(app_id=...,app_secret=...,run_async=True,event_loop=loop)print(loop.run_until_complete(client.get_bot_info()))有可能你会注意到同一个方法get_bot_info，它既能在同步下使用，又能在异步下使用。这是因为再内部实现了一个名为allow_async_call的decorator, 用于半动态生成所有API的async版本, async版本会自动使用async版本的网络调用, 并把函数的返回通过asyncio.ensure_future调用修改成asyncio.Future具体实现方式可以参考feishu.apis.base.allow_async_call, 以及feishu.client.request,feishu.client.fetch。订阅事件和卡片交互回调订阅事件需要在飞书后台开启订阅权限，然后配置回调地址，飞书会在更改配置以及应用、消息、群组等事件发生时向回调地址发送请求参见飞书文档https://open.feishu.cn/document/ukTMukTMukTM/uUTNz4SN1MjL1UzM所有飞书消息都定义在feishu.events中, 飞书发送的请求类似如下{"ts":"1502199207.7171419",// 事件发送的时间，一般近似于事件发生的时间。"uuid":"bc447199585340d1f3728d26b1c0297a",// 事件的唯一标识"token":"41a9425ea7df4536a7623e38fa321bae",// 即Verification Token"type":"event_callback",// event_callback-事件推送，url_verification-url地址验证"event":{...}// 不同事件此处数据不同}对应sdk的类型为events.Event, 本sdk提供了flask和sanic的blueprint, 通常只需要实现on_event方法即可以flask为例, 写一个flask的订阅事件并打印的服务只要这样即可fromfeishuimportsetup_event_blueprint,EventfromflaskimportFlask,Blueprintapp=Flask(__name__)PATH_EVENT='/feishu/event/callback'VERIFY_TOKEN=''# 为空则不校验verify_tokenENCRYPT_KEY=''# 飞书应用没启用encrypt_key的话可以不填defon_event(event:Event):print(event)event_app=Blueprint(name="event_app",import_name=__name__)setup_event_blueprint("flask",blueprint=event_app,path=PATH_EVENT,on_event=on_event,verify_token=VERIFY_TOKEN,encrypt_key=ENCRYPT_KEY)app.register_blueprint(event_app)if__name__=='__main__':app.run(host='0.0.0.0',port=9999)然后运行，并在飞书后台配好可以访问此地址http://HOST:9999/feishu/event/callback的服务，配置好以后试着和应用对话即可更简单的方法是，配置好环境变量后，直接运行以下代码python -m feishu.server这会启用event和action两种回调服务，方便后续做开发和调试其中action为飞书交互卡片的交互事件回调，具体文档可见https://open.feishu.cn/document/ukTMukTMukTM/uYjNwUjL2YDM14iN2ATN强烈建议看一下fesihu.server中的实现定制feishu-python-sdkgit clone https://github.com/cyclone-robotics/feishu-python-sdk
cd feishu-python-sdk
pip install -e .然后对feishu-python-sdk目录的修改就都可以直接在调用中生效了API实现功能列表授权获取 app_access_token（企业自建应用）获取 app_access_token（应用商店应用）获取 tenant_access_token（企业自建应用）获取 tenant_access_token（应用商店应用）重新推送 app_ticket身份验证请求身份验证获取登录用户身份刷新access_token获取用户信息通讯录获取通讯录授权范围获取子部门列表获取子部门 ID 列表获取部门详情批量获取部门详情获取部门用户列表获取部门用户详情获取企业自定义用户属性配置批量获取用户信息新增用户更新用户信息删除用户新增部门更新部门信息删除部门批量新增用户批量新增部门查询批量任务执行状态获取应用管理员管理范围获取角色列表获取角色成员列表用户信息使用手机号或邮箱获取用户 ID应用信息获取应用管理权限获取应用在企业内的可用范围获取用户可用的应用获取企业安装的应用更新应用可用范围设置用户可用应用应用商店计费信息查询用户是否在应用开通范围查询租户购买的付费方案查询订单详情群组获取用户所在的群列表获取群成员列表搜索用户所在的群列表机器人批量发送消息发送文本消息发送图片消息发送富文本消息发送群名片消息撤回发送卡片通知群信息和群管理创建群获取群列表获取群信息更新群信息拉用户进群移除用户出群解散群机器人信息与管理拉机器人进群日历获取日历获取日历列表创建日历删除日历更新日历获取日程创建日程获取日程列表删除日程更新日程邀请/移除日程参与者