飞书机器人与Claude Code交互:从手机指令到AI处理的全自动流程
在日常开发中,我们经常需要快速查询代码问题、生成文档或执行简单的编程任务。想象一下这样的场景——你正坐在咖啡厅,突然想到一个代码逻辑需要验证,拿出手机,给一个飞书机器人发条消息,然后就能收到AI助手的专业解答。这篇文章就来聊聊,怎么搭建一个飞书机器人,当你在手机飞书App上发送消息时,该消息会传递给运行在电脑上的Claude Code(一个智能编码助手),处理完成后直接把结果回复到你的飞书会话中。

通过这个方案,你可以:
- 在手机上随时向AI提问编程问题
- 让AI帮你调试代码、解释概念、生成代码片段
- 无需打开电脑终端,即可利用强大的AI编码能力
实现方案概览
整体流程其实不复杂:
1. **飞书机器人接收消息**:在飞书创建一个自定义机器人,配置事件订阅。当用户@机器人或私聊发送消息时,飞书会把这些消息推送到我们的服务。
2. **消息处理中间件**:我们编写一个Python程序,利用飞书开放平台的SDK接收消息,然后将内容转发给Claude Code。
3. **Claude Code处理**:Claude Code是一个命令行AI助手,我们通过SDK调用它,传入用户的问题,获取回答。
4. **回复消息**:Python程序将Claude Code的回答通过飞书API回复给用户。
所有组件都运行在本地电脑上(或任何可联网的服务器),不需要云服务。
操作步骤
前置准备
- 一台可运行Docker的电脑(Linux/Mac/Windows均可)
- 一个飞书企业或开发者账号(用于创建应用和机器人)
- (可选)本地已部署Ollama或其他兼容OpenAI格式的模型服务;若没有,也可使用Claude官方API(需修改配置)
第一步:创建并进入Claude Code容器
Claude Code是一个基于Claude的AI编码助手,但官方通常需要通过命令行使用。为了简化环境配置,我们使用Docker容器来运行它。容器内已经预装了Claude Code所需的依赖。
为什么用Docker?理由很简单——Docker可以隔离环境,避免污染本地系统,同时确保所有依赖版本一致。即使你电脑上没有Python或Node.js环境,也能轻松运行。
执行以下命令:
```
docker run -it --net=host -v $PWD:/home -w /home --rm swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/hi20240217/pub:claude_code /bin/bash
```
这条命令做了几件事:
- `-it`:以交互模式运行,让你能操作容器内的命令行
- `--net=host`:使用宿主机的网络,方便容器内访问本地服务(如Ollama)
- `-v $PWD:/home`:将当前目录挂载到容器的`/home`目录,这样容器内可以访问宿主机上的文件(如后续的Python脚本)
- `-w /home`:工作目录设为`/home`
- `--rm`:容器退出后自动删除,避免残留
- `swr.cn-north-4.myhuaweicloud.com/...`:使用的镜像地址,包含了Claude Code及其依赖
进入容器后,先取消袋里设置(如果有的话):
```
unset http_proxy
unset https_proxy
```
配置Claude Code使用本地模型
Claude Code默认使用Anthropic的API,但我们可以通过环境变量让它调用兼容OpenAI格式的本地模型(比如Ollama)。假设你在本地8000端口运行了Ollama服务(例如通过`ollama serve`),并且已有模型如`qwen3.5:9b`。
设置环境变量:
```
export ANTHROPIC_BASE_URL="http://127.0.0.1:8000" # Ollama兼容OpenAI的地址
export ANTHROPIC_AUTH_TOKEN="" # 本地模型不需要认证令牌
export ANTHROPIC_API_KEY="" # 同上
export USE_MODEL="qwen3.5:9b" # 你想使用的模型名称
export ANTHROPIC_DEFAULT_SONNET_MODEL=$USE_MODEL
# 以下变量全部指向同一模型,简化配置
export ANTHROPIC_DEFAULT_OPUS_MODEL=$USE_MODEL
export ANTHROPIC_DEFAULT_HAIKU_MODEL=$USE_MODEL
export ANTHROPIC_REASONING_MODEL=$USE_MODEL
export ANTHROPIC_MODEL=$USE_MODEL
export ANTHROPIC_SMALL_FAST_MODEL=$USE_MODEL
export API_TIMEOUT_MS=600000 # 超时时间,本地模型可能较慢
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1 # 禁止非必要流量,确保隐私
```
这些环境变量告诉Claude Code SDK:所有请求都发往本地的Ollama,使用指定的模型。
测试Claude Code是否正常工作
运行以下命令,让Claude Code回答一个简单问题:
```
IS_SANDBOX=1 claude --dangerously-skip-permissions -p "你是谁" --output-format text
```
如果配置正确,你应该看到类似如下的输出:
```
我是 Claude agent,由 Anthropic 构建。我是一个交互式智能助手,专注于帮助完成软件工程和编程任务,例如:
- 调试代码
- 添加新功能
- 重构代码
- 解释代码
- 解答编程问题
- 辅助开发工作
你今天需要我帮你做什么呢?
```
这说明Claude Code已经就绪,可以接受指令了。
第二步:安装Python依赖
我们的消息中间件是用Python编写的,需要安装两个库:
```
pip3 install claude_agent_sdk --break-system-packages
pip3 install lark_oapi --break-system-packages
```
- `claude_agent_sdk`:Claude Code的Python SDK,封装了与Claude Code交互的细节,让我们可以在Python代码中轻松调用Claude Code并获取回复。
- `lark_oapi`:飞书开放平台官方Python SDK,用于接收飞书事件、发送消息等。
参数`--break-system-packages`是pip的一个选项,允许在系统Python环境中安装包而不触发警告(如你的系统是较新的Linux发行版)。当然,你也可以使用虚拟环境(venv)来管理依赖。
第三步:获取飞书应用的凭证
要让飞书机器人接收和发送消息,你需要在飞书开发者后台创建一个应用,并获取`APP_ID`和`APP_SECRET`。
1. 登录飞书开发者后台,点击“创建应用”→“企业自建应用”,填写应用名称等信息。
2. 创建完成后,进入应用详情页,在“凭证与基础信息”中可以看到`App ID`和`App Secret`。
3. 还需要配置“事件订阅”:
- 在“事件订阅”页面,开启“接收消息”事件(`im.message.receive_v1`)。
- 因为我们是本地运行,无法提供公网HTTPS地址,所以需要使用WebSocket方式接收事件(下文脚本中已实现)。飞书支持通过WebSocket连接接收事件,无需公网地址。
4. 在“权限管理”中添加机器人需要的权限:`im:message`(读取和发送消息)和`im:message:send_as_bot`(以机器人身份发送消息)。记得版本发布并审核。
得到APP_ID和APP_SECRET后,在本地创建一个`.env`文件来保存它们:
```
cat > .env << "EOF"
APP_ID=<你的APP_ID>
APP_SECRET=<你的APP_SECRET>
EOF
```
第四步:编写并运行中间件脚本
现在,我们编写一个Python脚本,它将完成以下任务:
- 使用飞书SDK通过WebSocket连接到飞书服务器,监听消息事件。
- 当收到新消息时,将消息内容放入队列,由工作线程处理。
- 工作线程调用Claude Code处理消息,并通过飞书API回复用户。
脚本解释
脚本的核心逻辑其实很直观:
1. **初始化飞书客户端**:使用你的APP_ID和APP_SECRET创建一个飞书客户端,通过WebSocket连接接收事件。
2. **消息处理函数**:当收到用户消息时,提取消息内容,放入一个队列中。
3. **工作线程**:从队列中取出消息,调用Claude Code的Python SDK进行处理,然后将结果通过飞书API发送回用户。
记得在飞书开发者后台配置好事件订阅和权限,并确保你的应用已经发布审核通过。
常见问题
- **Claude Code没有输出或超时**:检查本地模型服务是否正常运行,环境变量是否配置正确。可以先用命令行测试Claude Code是否正常工作。
- **飞书机器人无法接收消息**:确认APP_ID和APP_SECRET是否正确,事件订阅是否开启,权限是否已经分配。
- **WebSocket连接失败**:检查网络连接,飞书WebSocket服务可能需要一些网络配置,确保没有防火墙阻止连接。
总结
从手机发条消息到飞书机器人,再由Claude Code处理并回复,整个过程看似复杂,但拆解开来其实很清晰。核心就是三件事:配置Claude Code容器、获取飞书应用凭证、编写中间件脚本。这个方案最大的价值在于,它让AI编码助手真正做到了“随叫随到”——不用打开电脑终端,不用切换环境,手机一掏就能解决问题。
当然,这个流程还有很大的扩展空间。比如,你可以添加更多飞书的事件处理(如图片、文件),或者让Claude Code执行更复杂的任务(如运行代码、修改文件)。期待看到你们在这个基础上的更多创意。