Skip to main content

一个用于和飞书开放平台交互的python库

Project description

feishu-python-sdk

一个用于和飞书开放平台交互的python库 (feishu-python-sdk)

特性

  • Python3.7+, Type Hints!
  • Pydantic类型检查
  • 使用了黑科技,API同时支持同步调用和异步调用
  • 实现了订阅事件和卡片交互回调(其他开源库都没实现这个, 只能算feishu-client)
  • 除了标准API外,还封装了一些语法糖调用方法, 比如绕过200元素限制等等

TODO

  • <input type="checkbox" disabled="" /> 多写点测试, 目前coverage = 35%
  • <input type="checkbox" disabled="" /> 多实现点接口, 目前实现了机器人和消息相关

使用说明

pip install feishu-python-sdk

运行测试用例

export FEISHU_APP_ID=飞书应用的APP_ID
export FEISHU_APP_SECRET=飞书应用的APP_SECRET
export FEISHU_VERIFY_TOKEN=飞书应用“事件订阅”的VERIFY_TOKEN参数
export FEISHU_ENCRYPT_KEY=飞书应用“事件订阅”的ENCRYPT_KEY参数
PYTHONPATH=. pytest --cov

API调用示例

from feishu import FeishuClient
client = 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_loop

import asyncio
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)

from feishu import FeishuClient
client = 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的订阅事件并打印的服务只要这样即可

from feishu import setup_event_blueprint, Event
from flask import Flask, Blueprint

app = Flask(__name__)

PATH_EVENT = '/feishu/event/callback'
VERIFY_TOKEN = ''  # 为空则不校验verify_token
ENCRYPT_KEY = ''  # 飞书应用没启用encrypt_key的话可以不填


def on_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-sdk

git clone https://github.com/cyclone-robotics/feishu-python-sdk
cd feishu-python-sdk
pip install -e .

然后对feishu-python-sdk目录的修改就都可以直接在调用中生效了

API实现功能列表

  • <input type="checkbox" disabled="" /> 授权
    • <input type="checkbox" checked="" disabled="" /> 获取 app_access_token(企业自建应用)
    • <input type="checkbox" disabled="" /> 获取 app_access_token(应用商店应用)
    • <input type="checkbox" disabled="" /> 获取 tenant_access_token(企业自建应用)
    • <input type="checkbox" disabled="" /> 获取 tenant_access_token(应用商店应用)
    • <input type="checkbox" disabled="" /> 重新推送 app_ticket
  • <input type="checkbox" disabled="" /> 身份验证
    • <input type="checkbox" disabled="" /> 请求身份验证
    • <input type="checkbox" disabled="" /> 获取登录用户身份
    • <input type="checkbox" disabled="" /> 刷新access_token
    • <input type="checkbox" disabled="" /> 获取用户信息
  • <input type="checkbox" disabled="" /> 通讯录
    • <input type="checkbox" disabled="" /> 获取通讯录授权范围
    • <input type="checkbox" disabled="" /> 获取子部门列表
    • <input type="checkbox" disabled="" /> 获取子部门 ID 列表
    • <input type="checkbox" disabled="" /> 获取部门详情
    • <input type="checkbox" disabled="" /> 批量获取部门详情
    • <input type="checkbox" disabled="" /> 获取部门用户列表
    • <input type="checkbox" disabled="" /> 获取部门用户详情
    • <input type="checkbox" disabled="" /> 获取企业自定义用户属性配置
    • <input type="checkbox" disabled="" /> 批量获取用户信息
    • <input type="checkbox" disabled="" /> 新增用户
    • <input type="checkbox" disabled="" /> 更新用户信息
    • <input type="checkbox" disabled="" /> 删除用户
    • <input type="checkbox" disabled="" /> 新增部门
    • <input type="checkbox" disabled="" /> 更新部门信息
    • <input type="checkbox" disabled="" /> 删除部门
    • <input type="checkbox" disabled="" /> 批量新增用户
    • <input type="checkbox" disabled="" /> 批量新增部门
    • <input type="checkbox" disabled="" /> 查询批量任务执行状态
    • <input type="checkbox" disabled="" /> 获取应用管理员管理范围
    • <input type="checkbox" disabled="" /> 获取角色列表
    • <input type="checkbox" disabled="" /> 获取角色成员列表
  • <input type="checkbox" disabled="" /> 用户信息
    • <input type="checkbox" disabled="" /> 使用手机号或邮箱获取用户 ID
  • <input type="checkbox" disabled="" /> 应用信息
    • <input type="checkbox" disabled="" /> 获取应用管理权限
    • <input type="checkbox" disabled="" /> 获取应用在企业内的可用范围
    • <input type="checkbox" disabled="" /> 获取用户可用的应用
    • <input type="checkbox" disabled="" /> 获取企业安装的应用
    • <input type="checkbox" disabled="" /> 更新应用可用范围
    • <input type="checkbox" disabled="" /> 设置用户可用应用
  • <input type="checkbox" disabled="" /> 应用商店计费信息
    • <input type="checkbox" disabled="" /> 查询用户是否在应用开通范围
    • <input type="checkbox" disabled="" /> 查询租户购买的付费方案
    • <input type="checkbox" disabled="" /> 查询订单详情
  • <input type="checkbox" disabled="" /> 群组
    • <input type="checkbox" disabled="" /> 获取用户所在的群列表
    • <input type="checkbox" disabled="" /> 获取群成员列表
    • <input type="checkbox" disabled="" /> 搜索用户所在的群列表
  • <input type="checkbox" disabled="" /> 机器人
    • <input type="checkbox" checked="" disabled="" /> 批量发送消息
    • <input type="checkbox" checked="" disabled="" /> 发送文本消息
    • <input type="checkbox" checked="" disabled="" /> 发送图片消息
    • <input type="checkbox" checked="" disabled="" /> 发送富文本消息
    • <input type="checkbox" checked="" disabled="" /> 发送群名片
    • <input type="checkbox" disabled="" /> 消息撤回
    • <input type="checkbox" checked="" disabled="" /> 发送卡片通知
    • <input type="checkbox" checked="" disabled="" /> 群信息和群管理
      • <input type="checkbox" checked="" disabled="" /> 创建群
      • <input type="checkbox" checked="" disabled="" /> 获取群列表
      • <input type="checkbox" checked="" disabled="" /> 获取群信息
      • <input type="checkbox" checked="" disabled="" /> 更新群信息
      • <input type="checkbox" checked="" disabled="" /> 拉用户进群
      • <input type="checkbox" checked="" disabled="" /> 移除用户出群
      • <input type="checkbox" checked="" disabled="" /> 解散群
    • <input type="checkbox" checked="" disabled="" /> 机器人信息与管理
      • <input type="checkbox" checked="" disabled="" /> 拉机器人进群
  • <input type="checkbox" disabled="" /> 日历
    • <input type="checkbox" disabled="" /> 获取日历
    • <input type="checkbox" disabled="" /> 获取日历列表
    • <input type="checkbox" disabled="" /> 创建日历
    • <input type="checkbox" disabled="" /> 删除日历
    • <input type="checkbox" disabled="" /> 更新日历
    • <input type="checkbox" disabled="" /> 获取日程
    • <input type="checkbox" disabled="" /> 创建日程
    • <input type="checkbox" disabled="" /> 获取日程列表
    • <input type="checkbox" disabled="" /> 删除日程
    • <input type="checkbox" disabled="" /> 更新日程
    • <input type="checkbox" disabled="" /> 邀请/移除日程参与者

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for feishu-python-sdk, version 0.1.4
Filename, size File type Python version Upload date Hashes
Filename, size feishu-python-sdk-0.1.4.tar.gz (48.2 kB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Huawei Huawei PSF Sponsor Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page