飞书消息收发测试项目。参考 lark-coding-agent-bridge,但不对接 LLM,仅做固定内容回复。
- 首次运行通过扫码创建 PersonalAgent 飞书应用(
@larksuite/channel的registerApp) - 用户授权后通过 WebSocket 接收消息
- 固定回复规则:
- 收到
ping→ 回复pong - 其他消息 → 回复
hello world(可在配置中修改preferences.defaultReply)
- 收到
- 斜杠命令:
/cmd <shell>— 在本机执行 shell 命令并返回输出(如/cmd pwd);长命令会先在同一条消息显示「正在执行…」并刷新耗时,完成后原地替换为结果/help— 显示命令帮助
- Node.js >= 20.12
# 安装依赖
npm install
# 开发运行(直接执行 TypeScript 源码,无需 build)
npm run dev
# 或单次运行
npm startnpm run dev 会监听 src/ 变更并自动重启;改代码后保存即可,不用手动 build。
生产/发布前再打包:
npm run build
npm run start:dist扫码完成后,配置会保存到 ~/.chat-devops/config.json。
在飞书中找到刚创建的应用,发私聊消息或在群里 @ 机器人:
- 发
ping→ 收到pong - 发任意其他内容 → 收到
hello world
node bin/chat-devops.mjs run \
--app-id cli_xxxxxxxxxxxx \
--app-secret <your-secret> \
--tenant feishu国际版 Lark:
node bin/chat-devops.mjs run --app-id cli_xxx --app-secret <secret> --tenant lark配置文件默认路径:~/.chat-devops/config.json
可通过环境变量 FEISHU_DEVOPS_HOME 修改数据目录。
{
"accounts": {
"app": {
"id": "cli_xxxxxxxxxxxx",
"secret": "xxxxxxxx",
"tenant": "feishu"
}
},
"preferences": {
"requireMentionInGroup": true,
"defaultReply": "hello world"
}
}requireMentionInGroup:群中是否必须 @ 机器人才响应(默认true);私聊始终响应defaultReply:非ping消息时的固定回复内容cmdEnabled:是否允许/cmd(默认true)cmdTimeoutSeconds:/cmd超时秒数(默认300,最大1800)cmdProgressIntervalSeconds:/cmd执行中状态刷新间隔(默认5秒;设为0则只显示初始「正在执行」不周期性刷新,最大60)
安全提示:
/cmd会在运行 bot 的本机执行任意 shell 命令,仅建议在可信环境使用。
src/
├── bot/
│ ├── wizard.ts # 扫码创建应用(来自 lark-coding-agent-bridge)
│ ├── channel.ts # WebSocket 连接与消息处理
│ └── reply.ts # 固定回复逻辑
├── cli/
│ ├── index.ts # CLI 入口
│ ├── start.ts # 启动流程
│ └── bootstrap.ts # 配置引导
├── config/ # 配置读写
├── platform/ # 原子写入
└── utils/
└── feishu-auth.ts # 凭证校验
| 参考项目 (lark-coding-agent-bridge) | 本项目 |
|---|---|
| Claude/Codex agent 适配 | 无 LLM,固定文本回复 |
| 多 profile、加密 keystore | 单配置文件,明文 secret(0600 权限) |
| 流式卡片、slash 命令 | 简单 text 回复 |
| lark-cli 预检、后台 daemon | 仅前台 run 命令 |