Skip to content

ljcyt/OpenFeiShuApis

 
 

Repository files navigation

OpenFeiShuApis

飞书 PC/Web 内部接口的 Python 封装,通过浏览器 Cookie 调用飞书内部 HTTP protobuf 接口,连接 WebSocket 收发消息

Python 3.7+ Node.js 18+ License: MIT

这不是飞书官方 SDK。内部接口随时可能变化,只在学习、测试或你有授权的环境里用。

功能

  • 认证与基础:读取登录 Cookie、获取 CSRF token、获取当前用户信息
  • 消息发送:发文本消息、创建单聊会话、搜索用户或群组
  • 电话加急:封装 cmd=30000,对指定消息发起电话加急
  • 消息接收:WebSocket 实时接收消息并发送 ACK
  • 单发工具:single_send 按多个 chat_id 发送不同内容
  • 邮件工具:single_send/send_email.py SMTP 发送 HTML 邮件和附件

环境要求

  • Python 3.7+
  • Node.js 18+(PyExecJS 需要调用 static/fly_book.js

requirements.txt 只保留主项目实际用到的依赖,避免 protobuf 版本冲突。

项目结构

.
├── FlyBookApi.py          # HTTP API 封装
├── FlyBookAutoAsync.py    # async WebSocket 收消息入口
├── FlyBookAuto.py         # websocket-client 版本收消息入口
├── FlyBookRec.py          # 只接收并 ACK 的示例
├── builder/               # 请求头、参数、protobuf 构造和解析
├── static/                # protobuf 定义和 JS 签名/ID 生成
├── tools/                 # 命令行工具
├── utils/                 # Cookie 转换和 JS 调用
└── single_send/           # 单发消息和 SMTP 邮件脚本

安装

pip install -r requirements.txt

只用 single_send 的话:

pip install -r single_send/requirements.txt

配置 Cookie

登录飞书 Web,从浏览器请求里复制 Cookie,设置环境变量:

# Bash
export FEISHU_COOKIE="YOUR_FEISHU_COOKIE"

# PowerShell
$env:FEISHU_COOKIE = "YOUR_FEISHU_COOKIE"

不要把真实 Cookie、请求包、二维码、账号密码提交到仓库。

运行

验证当前登录用户:

python FlyBookApi.py

接收消息:

python FlyBookAutoAsync.py   # 异步,推荐
python FlyBookAuto.py        # 同步
python FlyBookRec.py         # 只接收并 ACK

搜索用户或群:

export FEISHU_COOKIE="YOUR_FEISHU_COOKIE"
export FEISHU_SEARCH_QUERY="用户名或群名"
python FlyBookApi.py

电话加急

需要提供目标消息的 message_id 和发送者的 from_id(要和 Cookie 对应的用户匹配)。

Python 调用:

from FlyBookApi import FlyBookApi, build_auth_from_env

auth = build_auth_from_env()
api = FlyBookApi()
resp = api.send_urgent_msg(
    auth,
    message_id="7597118448812018914",
    from_id="7379517647972433921",
    origin="https://your-tenant.feishu.cn",
    referer="https://your-tenant.feishu.cn/",
)
print(resp.hex())

命令行:

python tools/send_cmd30000.py \
  --message-id 7597118448812018914 \
  --from-id 7379517647972433921 \
  --origin https://your-tenant.feishu.cn \
  --referer https://your-tenant.feishu.cn/

也可以用本地 Cookie 文件:

python tools/send_cmd30000.py \
  --message-id 7597118448812018914 \
  --from-id 7379517647972433921 \
  --cookie-file cookie.txt

返回 protobuf 二进制,默认打印 hex。常见失败原因:Cookie 过期、from_id 不匹配、message_id 不存在或没权限、租户域名不对。

单发消息

cp single_send/message_config.example.json single_send/message_config.json
# 编辑填入 Cookie、chat_id 和消息内容
cd single_send
python send_message.py

邮件同理:

cp single_send/email_config.example.json single_send/email_config.json
python send_email.py --config email_config.json

建议用 smtp_password_env 从环境变量读 SMTP 密码。

Docker

docker build -t open-feishu-apis .
docker run -it --rm -e FEISHU_COOKIE="YOUR_FEISHU_COOKIE" open-feishu-apis bash

相对上游项目的变化

新增功能:

  • 电话加急:FlyBookApi.send_urgent_msg() / send_urgent_msg_response(),命令行工具 tools/send_cmd30000.py
  • single_send 单发工具,按多个 chat_id 发不同内容
  • SMTP 邮件脚本 single_send/send_email.py,支持 HTML 正文、抄送、密送和附件

工程优化:

  • 移除源码硬编码 Cookie,改为环境变量或本地文件读取
  • 新增 utils.fly_book_utils.load_cookie_str() 复用 Cookie 加载逻辑
  • Cookie 解析兼容 a=1;b=2a=1; b=2 两种格式
  • 修复 FlyBookAutoAsync.py 全局 auth 问题,改为 self.auth
  • 清理 __pycache__ / .pyc,更新 .gitignore
  • 移除与 protobuf==5.28.3 冲突的 blackboxprotobuf==1.0.1
  • 补充 websocketsPyExecJS 依赖
  • Dockerfile 显式安装 Node.js/npm

新增文档:

  • cmd30000.md — 电话加急的项目内调用方式
  • cmd30000_raw_call.md — 手工构造 cmd=30000 请求
  • single_send/README.md — 多目标单发和邮件脚本用法
  • 示例配置文件,避免真实信息入库

注意事项

  • Cookie 等于登录态,注意保管
  • 部分请求保留了 verify=False 复现原始抓包行为,生产环境别关 TLS 校验
  • 飞书内部接口不是稳定公开协议,字段、命令号、签名、protobuf 结构都可能变
  • Cookie 失效就重新登录,更新环境变量或配置文件

About

飞书算法逆向,飞书APIs,飞书AI机器人,定制企业AI Agent,接入各类AI平台

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages

  • Python 89.1%
  • JavaScript 10.5%
  • Dockerfile 0.4%