pi-feishu

Pi extension: remote control Pi via Feishu (飞书) Bot API — WebSocket chat bridge using official Lark SDK

Packages

Package details

extension

Install pi-feishu from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-feishu
Package
pi-feishu
Version
1.1.5
Published
Jun 9, 2026
Downloads
not available
Author
surenkid
License
MIT
Types
extension
Size
70.3 KB
Dependencies
1 dependency · 1 peer
Pi manifest JSON
{
  "extensions": [
    "./src/index.ts"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

Pi-Feishu

npm version license

通过飞书官方 Bot API(WebSocket 长连接),将飞书作为聊天渠道远程控制 Pi Agent。

在飞书中给 Bot 发消息,Pi 自动接收并处理,响应实时回传到飞书。

功能

  • 使用飞书官方 Node.js SDK(@larksuiteoapi/node-sdk)WebSocket 长连接,稳定可靠
  • 工具执行进度实时推送:每次工具调用在飞书中显示可编辑的进度卡片
  • 中间文本推送:assistant 思考过程中的每一步文本都推送到飞书,不只是最终回复
  • Reaction 输入指示:处理中显示 Typing 表情,完成后自动移除
  • 媒体收发:图片、文件自动下载/上传,支持双向传递
  • Pi LLM 可主动发送文本、图片、文件到飞书(通过注册的工具)
  • 消息去重(12h TTL FIFO)+ 过期消息过滤(30min)
  • 支持多用户同时与 Bot 对话
  • 支持飞书(国内)和 Lark(海外)两种域名

安装

pi install npm:pi-feishu

配置

获取凭证

飞书开放平台创建应用,获取 App ID 和 App Secret。确保应用已开启机器人能力。

配置方式

支持三种配置方式,优先级从高到低:

1. CLI 标志

pi --feishu-app-id=cli_xxx --feishu-app-secret=xxx

2. 环境变量

export FEISHU_APP_ID="cli_xxx"
export FEISHU_APP_SECRET="xxx"

3. Pi settings.json(推荐)

.pi/settings.json(项目级)或 ~/.pi/agent/settings.json(全局)中添加:

{
  "feishu": {
    "appId": "cli_xxx",
    "appSecret": "xxx",
    "domain": "feishu",
    "encryptKey": "",
    "verificationToken": ""
  }
}

字段名支持 camelCase(appId)和 snake_case(app_id)两种写法。项目级配置覆盖全局配置。

配置项说明

字段 环境变量 CLI 标志 必需
App ID FEISHU_APP_ID --feishu-app-id
App Secret FEISHU_APP_SECRET --feishu-app-secret
域名 FEISHU_DOMAIN --feishu-domain 否,默认 feishu
加密密钥 FEISHU_ENCRYPT_KEY --feishu-encrypt-key
验证令牌 FEISHU_VERIFICATION_TOKEN --feishu-verification-token

domain 可选 feishu(国内)或 lark(海外),默认 feishu

启动

pi

Pi 启动时会自动加载 pi-feishu 扩展并通过 WebSocket 连接飞书。在飞书中给 Bot 发消息即可开始使用。

管理命令

在 Pi 中使用 /feishu 命令管理连接:

命令 说明
/feishu start 启动飞书 Bot 连接
/feishu stop 断开连接
/feishu status 查看连接状态
/feishu config 查看当前配置
/feishu help 显示帮助

消息流程

一次典型的工具调用对话,飞书端看到的消息如下:

用户: 帮我查看当前目录的文件

Bot:                                    [进度卡片,原地更新]
  执行中 (1)
  Shell ...

Bot:                                    [进度卡片更新]
  工具调用
  Shell

Bot:                                    [最终回复]
  当前目录下有以下文件:
  - src/index.ts
  - src/feishu-client.ts
  ...

事件映射

Pi 事件 飞书动作
入站消息 添加 Typing Reaction + 转发给 Pi
tool_execution_start 创建/更新进度卡片
tool_execution_end 更新进度卡片(标记完成/失败)
turn_end(含工具调用) 发送中间文本(回复模式)
turn_end(纯文本) 发送最终回复(新消息)
agent_end 移除 Typing Reaction

注册的 Pi 工具

Pi LLM 可以主动调用以下工具向飞书发送内容:

工具名 说明
send_to_feishu 发送文本消息到飞书
send_image_to_feishu 上传并发送图片到飞书
send_file_to_feishu 上传并发送文件到飞书

消息类型支持

入站类型 说明 资源下载
text 纯文本 --
post 富文本(Markdown) --
image 图片 自动下载到本地
file 文件 自动下载到本地
audio 语音 自动下载到本地
video 视频 自动下载到本地
sticker 表情 --
interactive 卡片消息 --
出站类型 说明
post 富文本(Markdown,支持分块)
interactive 进度卡片(可编辑更新)
image 图片消息(通过 image_key)
file 文件消息(通过 file_key)

架构

+---------------------+   WebSocket (SDK)   +--------------------+
|   飞书 Bot 网关      | <-----------------> |  Pi Extension      |
|   open.feishu.cn    |   EventDispatcher   |  (feishu-client)   |
+---------------------+                     +---------+----------+
                                                      |
                                                      | sendUserMessage()
                                                      | on("turn_end")
                                                      | on("tool_execution_*")
                                                      v
                                             +--------------------+
                                             |  Pi Agent Core     |
                                             |  (LLM + Tools)     |
                                             +--------------------+

项目结构

pi-feishu/
+-- src/
|   +-- index.ts           # Pi 扩展主入口,事件处理,工具注册
|   +-- feishu-client.ts   # 飞书 WebSocket 客户端封装
|   +-- types.ts           # 类型定义
+-- package.json
+-- README.md

开发

npm install
npm run typecheck
pi -e ./src/index.ts --feishu-app-id=YOUR_ID --feishu-app-secret=YOUR_SECRET

注意事项

  1. App Secret 请妥善保管,不要提交到版本控制
  2. 应用需要在飞书开放平台开启「机器人」能力
  3. 单条消息最大 4000 字符(飞书限制),长消息自动分块
  4. 进度卡片内容限制约 3500 字符,超出部分自动截断
  5. 媒体文件下载到系统临时目录(/tmp/feishu-media/)

License

MIT