☰
炸了!Claude Code接入飞书机器人,手机就能远程写代码、改配置
2026/9/28 4:03:22 网站建设 项目流程

1. 为什么要把 Claude Code 塞进飞书机器人

先说清楚这件事到底解决什么问题。Claude Code 是一个跑在终端里的编码助手,能力很强,但它有个硬性前提:你得坐在电脑前,打开终端,敲命令。可现实是,很多灵感或者紧急修改需求,恰恰出现在你离开工位的时候——地铁上、会议间隙、甚至躺床上突然想起某个配置写错了。

飞书机器人在这里扮演的角色,就是一个「消息中转站」。你在手机飞书里发一条消息,这条消息通过飞书的自定义机器人 Webhook 推送到你本机运行的一个小服务,这个服务再把指令交给 Claude Code 执行,执行完的结果原路返回,显示在飞书对话里。整个过程你不需要远程桌面,不需要 SSH 客户端,只要飞书能发消息就行。

适合谁用?三类人最合适:一是经常需要临时改配置、跑脚本的运维或后端;二是手头有台常开的开发机、想随时随地让 AI 帮忙写点代码的开发者;三是想把 Claude Code 的能力开放给团队里不熟悉终端的人,让他们通过飞书对话就能触发任务。

我试过把这套流程跑通之后,最直观的感受是:以前必须「回到电脑前」才能做的事,现在变成「掏出手机发条消息」。下面我把飞书 Webhook 配置、Claude Code 侧接收脚本骨架、settings.json 关键字段,以及一条端到端验证动作完整拆开讲。

2. TaoToken 前置准备:先把模型通道打通

Claude Code 本身只是一个客户端框架,它需要背后有一个能调用 Claude 系列模型的通道。这里用 TaoToken 来做这件事,它的作用是提供兼容 Anthropic 接口的模型调用能力,让你不用自己折腾复杂的鉴权链路。

你需要先拿到一个 API Key。操作路径是:访问官网 https://taotoken.net/?utm_source=taotoken_aicg_blog_end&utm_medium=csdn&utm_campaign=rewrite&utm_content= ,注册登录后进入控制台,在 API Keys 页面创建一个新的 Key。这个 Key 就是后面 Claude Code 调用模型时的凭证。

拿到 Key 之后,Claude Code 侧需要配置两个环境变量或者写进 settings.json:一个是 API 的基础地址,指向 https://taotoken.net/api ;另一个是刚才创建的 API Key。这两项配好,Claude Code 才能正常发起模型请求。

如果你还没决定用哪个模型,可以先去模型对话页面试试手感,确认模型响应符合预期再接入。对于长期要跑编码任务的场景,建议了解一下 Coding Plan,它在持续调用时更划算。这些入口都在控制台里能找到,具体链接我放在文末 CTA 部分。

注意:API Key 属于敏感凭证,不要直接硬编码在会提交到 Git 的脚本里。建议用环境变量或者单独的本地配置文件承载。

3. 飞书自定义机器人 Webhook 配置

飞书这边要做两件事:创建一个自定义机器人,拿到它的 Webhook 地址;然后配置好消息推送的格式。整个过程在飞书群设置里完成。

3.1 创建自定义机器人并获取 Webhook

进入你想要接收通知的飞书群(建议单独建一个群,比如叫「CC 远程助手」),点击群设置,找到「群机器人」,选择「添加机器人」,然后选「自定义机器人」。给它起个名字,比如「CC智能助手」,头像随意。

创建完成后,飞书会给你一个 Webhook 地址,格式类似:

https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

这个地址就是你的消息入口。同时飞书会提供几种安全设置,建议至少开启「签名校验」,这样别人拿到你的 Webhook 也不能随便发消息。签名校验需要一个 Secret,飞书会一并给你。

3.2 消息发送格式

飞书自定义机器人支持文本、富文本、卡片等多种消息类型。最简单的文本消息体长这样:

{ "msg_type": "text", "content": { "text": "这里是要发送的内容" } }

如果你开启了签名校验,发送时需要在请求头或请求体里带上签名。签名算法是:把时间戳和 Secret 拼接,做 HMAC-SHA256,再 Base64 编码。下面是一个 Python 计算签名的示例:

import hashlib import base64 import hmac import time def gen_sign(secret, timestamp): string_to_sign = f"{timestamp}\n{secret}" hmac_code = hmac.new( string_to_sign.encode("utf-8"), digestmod=hashlib.sha256 ).digest() return base64.b64encode(hmac_code).decode("utf-8") timestamp = str(int(time.time())) sign = gen_sign("你的Secret", timestamp)

拿到 sign 和 timestamp 后,放进请求体:

{ "timestamp": "1700000000", "sign": "计算出来的签名", "msg_type": "text", "content": { "text": "拉取今日热点" } }

3.3 接收飞书消息的两种模式

这里有个关键点容易搞混:自定义机器人的 Webhook 是「只出不进」的,也就是说你只能通过它往飞书发消息,没法用它接收用户在飞书里发的消息。要接收用户消息,需要走飞书开放平台的事件订阅,配置一个能公网访问的回调地址。

对于本机运行的场景,公网回调不太方便。所以实际落地时有两种做法:

第一种是「轮询模式」:你的本机服务定时去拉取飞书某个群的消息列表,发现有新指令就执行。这种方式不需要公网地址,但有一定延迟。

第二种是「事件订阅 + 内网穿透」:配置飞书事件订阅,把回调指向你本机的一个地址。但内网穿透涉及的工具和配置这里不展开,且需要注意合规使用。

考虑到小白友好和可跟做,下面我用「轮询 + Webhook 回传」的组合来写脚本骨架。你发指令到飞书群,本机服务轮询到新消息,执行 Claude Code,再通过 Webhook 把结果发回群里。

4. Claude Code 侧接收脚本骨架

这个脚本是整个方案的核心。它做三件事:轮询飞书群消息、调用 Claude Code 执行指令、把结果通过 Webhook 发回飞书。

4.1 环境依赖

pip install requests

Claude Code 本身需要已经安装并配置好,确保在终端里直接运行claude能正常进入交互。如果你用的是桌面版或者带预置配置的版本,确认它的命令行入口可用即可。

4.2 脚本骨架

import time import json import subprocess import requests import hashlib import base64 import hmac # 飞书自定义机器人 Webhook FEISHU_WEBHOOK = "https://open.feishu.cn/open-apis/bot/v2/hook/你的webhook" FEISHU_SECRET = "你的签名Secret" # 飞书群消息拉取相关(需要飞书应用凭证,这里用占位) APP_ID = "你的AppID" APP_SECRET = "你的AppSecret" CHAT_ID = "你的群ChatID" # 记录已处理的消息ID,避免重复执行 processed_ids = set() def gen_sign(secret, timestamp): string_to_sign = f"{timestamp}\n{secret}" hmac_code = hmac.new( string_to_sign.encode("utf-8"), digestmod=hashlib.sha256 ).digest() return base64.b64encode(hmac_code).decode("utf-8") def send_to_feishu(text): timestamp = str(int(time.time())) sign = gen_sign(FEISHU_SECRET, timestamp) body = { "timestamp": timestamp, "sign": sign, "msg_type": "text", "content": {"text": text} } resp = requests.post(FEISHU_WEBHOOK, json=body, timeout=10) return resp.json() def get_tenant_token(): url = "https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal" body = {"app_id": APP_ID, "app_secret": APP_SECRET} resp = requests.post(url, json=body, timeout=10) return resp.json().get("tenant_access_token") def fetch_messages(token): url = f"https://open.feishu.cn/open-apis/im/v1/messages?container_id_type=chat&container_id={CHAT_ID}&page_size=10" headers = {"Authorization": f"Bearer {token}"} resp = requests.get(url, headers=headers, timeout=10) return resp.json().get("data", {}).get("items", []) def run_claude_code(prompt): # 调用 Claude Code 命令行,非交互模式执行 result = subprocess.run( ["claude", "-p", prompt], capture_output=True, text=True, timeout=300 ) return result.stdout or result.stderr def main_loop(): while True: try: token = get_tenant_token() messages = fetch_messages(token) for msg in messages: msg_id = msg.get("message_id") if msg_id in processed_ids: continue processed_ids.add(msg_id) # 解析消息文本 content = json.loads(msg.get("body", {}).get("content", "{}")) text = content.get("text", "").strip() if not text: continue # 执行并回传 output = run_claude_code(text) send_to_feishu(f"执行结果:\n{output[:2000]}") except Exception as e: send_to_feishu(f"执行出错:{e}") time.sleep(10) if __name__ == "__main__": main_loop()

这个骨架里,run_claude_code用的是claude -p非交互模式,直接把 prompt 传进去,拿到标准输出。实际使用时你可以根据 Claude Code 的具体命令行参数调整。

4.3 settings.json 关键字段

Claude Code 的配置文件通常放在用户目录下的.claude/settings.json。和本方案相关的关键字段主要是模型通道和权限控制:

{ "env": { "ANTHROPIC_BASE_URL": "https://taotoken.net/api", "ANTHROPIC_API_KEY": "你的TaoToken API Key" }, "permissions": { "allow": [ "Read", "Write", "Bash(git*)", "Bash(npm*)" ], "deny": [ "Bash(rm -rf*)", "Bash(curl*)" ] } }

env里的两个字段负责把模型请求指向 TaoToken 的接口。permissions是安全闸门,建议把危险命令放进deny,只放开你信任的操作。这一步很重要,因为飞书消息是远程触发的,万一有人误发或者恶意发指令,权限控制能兜底。

注意:ANTHROPIC_API_KEY建议通过环境变量注入,而不是明文写在 settings.json 里。如果一定要写,确保这个文件不会被同步到云端或提交到仓库。

5. 端到端验证:手机发一条消息触发本地编码

配置完成后,做一次完整验证。这一步的目标是:在手机飞书里发一条指令,本机 Claude Code 执行,结果回到飞书对话。

5.1 启动接收服务

在本机终端里运行上面的脚本:

python feishu_cc_bridge.py

看到它开始循环轮询就说明服务起来了。建议用nohup或screen让它后台常驻:

nohup python feishu_cc_bridge.py > bridge.log 2>&1 &

5.2 发送验证指令

打开手机飞书,进入你配置了机器人的群,发送一条简单指令,比如:

在当前目录创建一个 hello.py,内容打印 hello from feishu

这条消息会被脚本轮询到,然后交给 Claude Code 执行。执行完成后,飞书群里会收到一条回传消息,显示执行结果。

5.3 检查执行结果

回到本机,看看当前目录下是否真的生成了hello.py:

cat hello.py

如果看到文件内容正确,说明整条链路通了。同时飞书群里应该也收到了类似「执行结果:已创建 hello.py」的回复。

5.4 验证权限控制

再发一条被deny的指令,比如:

执行 rm -rf /tmp/test

如果权限配置生效,Claude Code 会拒绝执行,飞书里回传的应该是拒绝信息而不是真的删除了文件。这一步验证的是安全兜底是否有效。

6. 本篇常见错排查

跑这套流程时,最容易卡在几个地方。下面按现象列出来,方便你对照排查。

6.1 飞书收不到回传消息

先检查 Webhook 地址和签名。最常见的是签名计算错误,或者时间戳和签名不匹配。飞书要求时间戳和服务器时间差距不能太大,本机时间不准会导致签名校验失败。用date命令确认本机时间是否正确。

另一个可能是消息体格式不对。飞书对 JSON 结构比较严格,msg_type和content必须匹配。文本消息的content.text不能为空。

6.2 脚本拉不到飞书消息

轮询模式依赖飞书开放平台的消息接口,需要正确的tenant_access_token和chat_id。chat_id获取方式是在群设置里查看,或者通过接口查询。如果 token 过期,需要重新获取,脚本里每次循环都重新拿一次 token 就是为了避免这个问题。

如果接口返回权限错误,检查飞书应用是否开通了「获取群组信息」「读取消息」等相关权限。

6.3 Claude Code 执行超时或无输出

claude -p非交互模式在任务复杂时可能耗时较长。脚本里的timeout=300是 5 分钟,如果任务更久需要调大。另外确认 Claude Code 在终端里单独运行是否正常,如果单独运行都报错,那问题在 Claude Code 配置而不是桥接脚本。

模型通道配置错误也会导致无输出。检查ANTHROPIC_BASE_URL是否指向 https://taotoken.net/api ,以及 API Key 是否有效。可以先用模型对话页面确认 Key 能正常调用。

6.4 权限拒绝导致任务无法完成

如果发现 Claude Code 总是拒绝执行某些操作,检查settings.json里的permissions.allow列表。默认情况下 Claude Code 对写文件和执行命令比较保守,需要显式放开。但放开的同时一定要用deny兜住危险操作,这个平衡要自己把握。

6.5 消息重复执行

轮询模式下,如果processed_ids没有正确记录,同一条消息可能被执行多次。脚本里用message_id去重,确保每个消息只处理一次。如果服务重启,processed_ids会清空,可能导致历史消息被重新执行。生产使用时可以把已处理 ID 持久化到本地文件或数据库。

排查完这些,基本就能稳定运行了。如果接入过程中遇到模型通道相关的问题,可以直接去 API Keys 页面检查 Key 状态,或者对照接入文档确认参数格式。需要验证模型响应是否正常,用模型对话页面发一条测试消息最快。长期跑编码任务的话,Coding Plan 的入口在控制台里,按需选择即可。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询