ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

炸了!Claude Code接入飞书机器人,手机就能远程写代码、改配置

炸了!Claude Code接入飞书机器人,手机就能远程写代码、改配置 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_sourcetaotoken_aicg_blog_endutm_mediumcsdnutm_campaignrewriteutm_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), digestmodhashlib.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 requestsClaude 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), digestmodhashlib.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, jsonbody, timeout10) 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, jsonbody, timeout10) return resp.json().get(tenant_access_token) def fetch_messages(token): url fhttps://open.feishu.cn/open-apis/im/v1/messages?container_id_typechatcontainer_id{CHAT_ID}page_size10 headers {Authorization: fBearer {token}} resp requests.get(url, headersheaders, timeout10) return resp.json().get(data, {}).get(items, []) def run_claude_code(prompt): # 调用 Claude Code 命令行非交互模式执行 result subprocess.run( [claude, -p, prompt], capture_outputTrue, textTrue, timeout300 ) 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 21 5.2 发送验证指令打开手机飞书进入你配置了机器人的群发送一条简单指令比如在当前目录创建一个 hello.py内容打印 hello from feishu这条消息会被脚本轮询到然后交给 Claude Code 执行。执行完成后飞书群里会收到一条回传消息显示执行结果。5.3 检查执行结果回到本机看看当前目录下是否真的生成了hello.pycat 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非交互模式在任务复杂时可能耗时较长。脚本里的timeout300是 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 的入口在控制台里按需选择即可。
返回列表