字数 1771,阅读大约需 9 分钟
飞书机器人 -OpenClaw-OpenCode 搭建个人远程开发助手
为什么需要远程开发助手
通勤路上想到 bug 的修复方案,但无法立即访问电脑编码,这种场景很常见。
不用打开终端和 IDE,让 AI 帮你完成代码编写、错误排查、文档生成,这种需求也越来越多。
OpenClaw、OpenCode、飞书机器人这三者如何协作,构建一个可用的远程开发助手?
核心问题是:如何构建一个能随时随地接收开发指令、自动执行任务的 AI 系统。
这篇文章记录了我从零搭建远程开发助手的踩坑经历。
我已经将我的远程开发的 skill 上传到 gist,包括 opencode 执行开发任务和通知飞书的 python 脚本实现。
公众号留言:远程开发助手获取
核心概念
OpenClaw Skills:OpenClaw 的扩展机制,每个 Skill 是一个包含 SKILL.md 的目录,定义了 Agent 可以调用的工具和能力。Skills 支持三层加载优先级和动态过滤。
OpenCode Server:OpenCode 的 HTTP 服务器,暴露 OpenAPI 端点供客户端使用。支持会话管理、文件操作、工具调用等功能,特别重要的是提供同步和异步两种消息发送模式。
飞书机器人:通过飞书开放平台创建的自建应用,支持接收和发送消息、处理文件和图片等。使用 WebSocket 长连接,无需公网服务器。
异步执行:OpenCode 的 prompt_async 端点允许发送异步消息,不等待 Agent 执行完成就返回,适合处理长时间运行的任务。
技术关系
下面的架构图展示了飞书、OpenClaw 和 OpenCode 之间的技术关系:
在这个架构中,
• 飞书用户发送开发指令给飞书机器人, • 机器人通过 WebSocket 长连接将消息传递给 OpenClaw 网关。 • OpenClaw 网关加载并执行 Skills,其中 maxdo-opencode Skill 负责与 OpenCode Server 交互。 • OpenCode Server 通过 HTTP API 执行开发任务,并通过异步消息机制监控任务执行状态。 • 执行完成后,结果通过飞书机器人返回给用户。
实践路径
1. 准备飞书机器人
首先需要在飞书开放平台创建自建应用:
1. 访问飞书开放平台,用飞书账号登录 2. 创建企业自建应用,填写应用名称和描述 3. 启用机器人能力并给机器人命名 4. 配置权限,需要包含以下 scope: • im:chat(聊天能力) • im:message(消息发送) • im:resource(资源访问,用于图片和文件) • im:message:send_as_bot(以机器人身份发送消息) • im:message.p2p_msg:readonly(读取私聊消息) 5. 配置事件订阅,选择使用长连接接收事件,添加 im.message.receive_v1 事件 6. 记录 App ID 和 App Secret,发布应用
2. 安装和配置 OpenClaw
1. 安装 OpenClaw 2. 配置大模型 - 我使用 minimax coding plan,openclaw 在国内原生支持 3. 安装飞书插件: openclaw plugins install @m1heng-clawd/feishu4. 添加飞书渠道: openclaw channels add,选择 Feishu,粘贴 App ID 和 App Secret5. 重启网关: openclaw gateway restart6. 查看日志确认连接成功: openclaw logs --follow7. 首次对话时,机器人会返回配对码,运行 openclaw pairing approve feishu <配对码>授权
minimax coding plan 9 折优惠链接
🎁 MiniMax 好友立享 9折 专属优惠 + Builder 权益
👉 立即参与:
https://platform.minimaxi.com/subscribe/coding-plan?code=FSxkkT7wDi&source=linkopenclaw 的飞书 channel 配置
openclaw config set channels.feishu.appId "你的appId"
openclaw config set channels.feishu.appSecret "你的appSecret"
openclaw config set channels.feishu.enabled true
openclaw config set channels.feishu.connectionMode websocket
openclaw config set channels.feishu.dmPolicy pairing
openclaw config set channels.feishu.groupPolicy allowlist
openclaw config set channels.feishu.requireMention true
openclaw gateway restart下面的 3-4 步骤我已经开发调试好了,公众号留言:远程开发助手 获取
3. 开发 maxdo-opencode Skill
创建一个自定义 Skill 来调用 OpenCode Server:
1. 在 ~/.openclaw/skills 目录下创建 maxdo-opencode 文件夹 2. 创建 SKILL.md 文件,定义 Skill 的名称、描述和调用逻辑 3. 编写 Python 脚本,实现以下功能: • 调用 OpenCode Server 的 /session端点创建会话• 使用 /session/:id/prompt_async端点异步发送开发指令• 使用 /session/:id/message端点获取执行结果• 通过飞书 API 发送执行结果和状态更新
4. 配置 OpenCode Server
1. 启动 OpenCode Server: opencode serve --port 4096 --hostname 127.0.0.12. 可选 basic 认证: 1. OPENCODE_SERVER_USERNAME=用户名 2. OPENCODE_SERVER_PASSWORD=密码 3. 访问 http://localhost:4096 访问 UI 4. 确保服务器允许来自 OpenClaw 的请求
5. 踩坑与解决方案
在实际搭建过程中,可能会遇到以下问题:
问题 1:飞书机器人权限配置无效
• 原因:官方文档配置的权限可能不完整 • 解决方案:使用完整的权限 JSON 配置,包含所有必要的 scope • 权限列表需要包括 tenant 和 user 两部分,共 30+ 个 scope
问题 2:OpenClaw Token 消耗过大
• 原因:直接用提示词让 OpenClaw 执行 OpenCode 任务,需要大量 Token • 解决方案:改为使用 minimax 的 coding plan 套餐,月费 29 元,显著降低成本
问题 3:OpenCode 调用不稳定
• 原因:通过提示词让 OpenClaw 唤起 OpenCode 不稳定 • 解决方案:开发专门的 maxdo-opencode Skill,在 Skill 内直接调用 Python 脚本执行 OpenCode 任务
问题 4:任务执行结果无法及时获取
• 原因:使用同步 API 会导致超时 • 解决方案:使用 OpenCode 的 /session/:id/prompt_async端点异步执行,定期轮询状态
飞书机器人权限配置
{
"scopes": {
"tenant": [
"aily:file:read",
"aily:file:write",
"application:application.app_message_stats.overview:readonly",
"application:application:self_manage",
"application:bot.menu:write",
"cardkit:card:write",
"contact:contact.base:readonly",
"contact:department.base:readonly",
"contact:user.base:readonly",
"contact:user.employee_id:readonly",
"corehr:file:download",
"docs:document.content:read",
"event:ip_list",
"im:chat",
"im:chat.access_event.bot_p2p_chat:read",
"im:chat.members:bot_access",
"im:message",
"im:message.group_at_msg:readonly",
"im:message.group_msg",
"im:message.p2p_msg:readonly",
"im:message:readonly",
"im:message:send_as_bot",
"im:resource",
"sheets:spreadsheet",
"wiki:wiki:readonly"
],
"user": [
"aily:file:read",
"aily:file:write",
"contact:contact",
"contact:contact.base:readonly",
"contact:department.base:readonly",
"contact:department.hrbp:readonly",
"contact:department.organize:readonly",
"contact:job_title:readonly",
"contact:user.assign_info:read",
"contact:user.base:readonly",
"contact:user.department:readonly",
"contact:user.department_path:readonly",
"contact:user.dotted_line_leader_info.read",
"contact:user.email:readonly",
"contact:user.employee:readonly",
"contact:user.employee_id:readonly",
"contact:user.employee_number:read",
"contact:user.gender:readonly",
"contact:user.id:readonly",
"contact:user.job_family:readonly",
"contact:user.job_level:readonly",
"contact:user.phone:readonly",
"contact:user.subscription_ids:write",
"contact:user.user_geo",
"contact:user:search",
"contact:work_city:readonly",
"im:chat.access_event.bot_p2p_chat:read",
"mail:user_mailbox.mail_contact.mail_address:read",
"mail:user_mailbox.mail_contact.phone:read",
"mail:user_mailbox.mail_contact:read",
"mail:user_mailbox.mail_contact:write"
]
}
}总结与展望
核心要点
• OpenCode Server 通过 OpenAPI 端点暴露功能,特别重要的是异步执行能力 • 飞书机器人 使用 WebSocket 长连接,无需公网服务器,配置相对简单 • 配置飞书机器人权限时用完整的 JSON 配置,不要逐个添加容易出错 • 异步执行 是处理长时间运行任务的关键,可以避免 HTTP 超时问题 • 使用 minimax 的 coding plan 套餐降低 OpenClaw 的 Token 消耗 • 避免 openclaw 轮询导致 token 消耗,而是执行结果以 message 形式通知 openclaw channel • OpenClaw Skills 提供了三层优先级加载机制,支持灵活的扩展和管理 • Skill 封装 比直接提示词更稳定,建议将复杂逻辑封装在 Skill 中
飞书、OpenClaw 和 OpenCode 结合后,可以构建一个实用的远程开发助手,实现随时随地提交和执行开发任务。
目前对于需要 user-in-the-loop 还不支持,不支持需要用户确认的任务,待完善。
夜雨聆风