Skip to Content

37b 飞书机器人与 MCP 搭建

上一篇: 37a 全景架构与决策框架 | 下一篇: 37c 多维表格自动化

本篇从零搭建 Agent 基础设施:安装 OpenClaw、创建飞书应用、配置消息通道(飞书 WebSocket / Lark Webhook)、接入 MCP 工具层,最终完成一个端到端的 Hello World 验证。这是后续所有 Skill 和工作流的前置基础。


1. OpenClaw 安装与配置

1.1 系统要求

项目最低要求推荐配置
操作系统Linux / macOSUbuntu 22.04+
Node.js18+20 LTS
内存2GB4GB+
磁盘1GB 可用空间10GB+(含记忆和日志)
网络可访问飞书 API稳定的外网连接

1.2 安装

# 全局安装 OpenClaw npm install -g openclaw # 验证安装 openclaw --version # 初始化项目目录 mkdir ~/hackquest-agent && cd ~/hackquest-agent openclaw init

初始化后的目录结构:

hackquest-agent/ ├── .openclaw/ │ ├── config.json ← 主配置文件 │ ├── memory/ ← 记忆系统存储目录 │ └── logs/ ← 运行日志 ├── skills/ ← Skill 文件目录 │ └── example.md ← 示例 Skill └── mcp/ ← MCP 配置目录 └── servers.json ← MCP Server 配置

1.3 daemon 模式配置

生产环境需要 OpenClaw 以 daemon 模式持久运行:

# 启动 daemon 模式 openclaw daemon start # 查看运行状态 openclaw daemon status # 停止 openclaw daemon stop # 查看日志 openclaw daemon logs --tail 100

主配置文件 .openclaw/config.json

{ "name": "hackquest-agent", "model": { "provider": "anthropic", "model": "claude-sonnet-4-20250514", "fallback": "claude-haiku-4-20250514" }, "daemon": { "enabled": true, "port": 3100, "logLevel": "info", "maxConcurrent": 5 }, "memory": { "enabled": true, "persistPath": ".openclaw/memory" }, "plugins": [], "mcp": { "configPath": "mcp/servers.json" } }

注意model 字段中的模型名称请以 OpenClaw 官方文档为准,不同版本支持的模型列表可能不同。


2. 飞书/Lark 应用创建

2.1 创建应用

  1. 登录 飞书开放平台 (国内版)或 Lark Developer (国际版)
  2. 进入「开发者后台」→「创建企业自建应用」
  3. 填写应用信息:
    • 应用名称:HackQuest AI Agent
    • 应用描述:团队 AI 助手,覆盖需求管理、数据分析、团队协作等场景
  4. 记录 App IDApp Secret,后续配置需要

2.2 权限配置

在「权限管理」页面开通以下权限:

权限分类权限标识说明用途
消息im:message:send_as_bot以机器人身份发送消息所有 Skill 的消息回复
消息im:message:receive接收消息接收用户指令
消息im:message:read读取消息获取消息上下文
群组im:chat:create创建群组自动创建项目群
群组im:chat:member管理群成员自动拉人入群
多维表格bitable:app多维表格全部权限需求/缺陷/迭代表操作
文档docx:document:readonly读取文档RAG 知识库索引
知识库wiki:wiki:readonly读取知识库RAG 知识库索引
日历calendar:calendar日历读写会议安排、提醒
通讯录contact:user.base:readonly读取用户基本信息人员匹配

2.3 事件订阅

在「事件订阅」页面配置需要监听的事件:

事件事件标识触发时机
接收消息im.message.receive_v1用户 @机器人 或私聊发消息
消息已读im.message.message_read_v1用户已读机器人消息
多维表格记录变更drive.file.bitable_record_changed_v1多维表格记录增删改
群成员变更im.chat.member.user.added_v1新成员加入群组

2.4 机器人配置

在「机器人」页面:

  • 启用机器人功能
  • 设置机器人头像和描述
  • 配置消息卡片回调地址(Lark Webhook 模式需要)

3. 消息通道方案:飞书 vs Lark

这是架构搭建中最关键的决策点之一。飞书(国内版)和 Lark(国际版)在消息通道上有本质区别:

3.1 方案对比

维度飞书(国内版)WebSocketLark(国际版)Webhook 回调Lark 轮询模式
连接方式WebSocket 长连接HTTP POST 回调定时 HTTP GET
是否需要公网 IP❌ 不需要✅ 需要(或用隧道)❌ 不需要
消息延迟<100ms<500ms取决于轮询间隔(秒级~分钟级)
实现复杂度低(OpenClaw 插件直接支持)中(需部署 HTTP 服务)低(但延迟高)
稳定性高(自动重连)高(需处理重试和幂等)中(可能丢消息)
适用场景国内团队首选国际团队 / HackQuest 场景低频通知场景
月成本¥0¥0(Cloudflare Tunnel 免费)¥0

3.2 飞书(国内版):WebSocket 长连接

飞书原生支持 WebSocket 长连接,OpenClaw 的 feishu 插件可以直接使用,无需公网 IP,配置最简单:

{ "plugins": [ { "name": "feishu", "config": { "appId": "cli_xxxxxxxxxxxx", "appSecret": "xxxxxxxxxxxxxxxxxxxxxxxx", "mode": "websocket", "eventTypes": [ "im.message.receive_v1", "drive.file.bitable_record_changed_v1" ] } } ] }

配置完成后 OpenClaw 会自动建立 WebSocket 连接,接收飞书事件并路由到对应 Skill。

3.3 Lark(国际版):Webhook 回调方案

Lark 国际版不支持 WebSocket 长连接,需要通过 Webhook 回调接收事件。推荐使用 Cloudflare Tunnel 将本地服务暴露到公网:

架构示意:

Lark 服务器 → HTTPS → Cloudflare Tunnel → localhost:3100 → OpenClaw

步骤 1:安装 Cloudflare Tunnel

# macOS brew install cloudflared # Linux curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o cloudflared chmod +x cloudflared sudo mv cloudflared /usr/local/bin/ # 登录 Cloudflare(首次使用) cloudflared tunnel login # 创建隧道 cloudflared tunnel create hackquest-agent # 配置隧道路由 cloudflared tunnel route dns hackquest-agent agent-webhook.hackquest.io

步骤 2:配置隧道

创建 ~/.cloudflared/config.yml

tunnel: <TUNNEL_ID> credentials-file: ~/.cloudflared/<TUNNEL_ID>.json ingress: - hostname: agent-webhook.hackquest.io service: http://localhost:3100 - service: http_status:404
# 启动隧道(生产环境用 systemd 管理) cloudflared tunnel run hackquest-agent

步骤 3:配置 OpenClaw feishu 插件(Webhook 模式)

{ "plugins": [ { "name": "feishu", "config": { "appId": "cli_xxxxxxxxxxxx", "appSecret": "xxxxxxxxxxxxxxxxxxxxxxxx", "mode": "webhook", "webhookPort": 3100, "webhookPath": "/lark/event", "verificationToken": "xxxxxxxxxxxxxxxx", "encryptKey": "xxxxxxxxxxxxxxxx", "eventTypes": [ "im.message.receive_v1", "drive.file.bitable_record_changed_v1" ] } } ] }

步骤 4:在 Lark 开放平台配置回调地址

在「事件订阅」页面设置请求地址为:

https://agent-webhook.hackquest.io/lark/event

Lark 会发送一个 challenge 验证请求,OpenClaw 的 feishu 插件会自动处理验证。

3.4 Lark 替代方案对比

如果不想用 Cloudflare Tunnel,还有其他选择:

方案优点缺点推荐度
Cloudflare Tunnel免费、稳定、自动 HTTPS依赖 Cloudflare 服务⭐⭐⭐⭐⭐
ngrok配置简单免费版域名随机变化,需付费固定⭐⭐⭐
云服务器直接部署无需隧道需要购买公网 IP 服务器⭐⭐⭐⭐
Lark 事件 → 消息队列 → OpenClaw解耦、可靠架构复杂,需要额外中间件⭐⭐
轮询模式最简单,无需公网延迟高,可能丢消息

4. MCP 工具层配置

MCP(Model Context Protocol)是 Agent 与外部工具交互的标准协议。OpenClaw 内置 MCP Client,只需在配置文件中声明 MCP Server 即可使用。

4.1 MCP Server 配置文件

编辑 mcp/servers.json

{ "mcpServers": { "lark-mcp": { "command": "npx", "args": ["-y", "@anthropic/lark-mcp@latest"], "env": { "LARK_APP_ID": "cli_xxxxxxxxxxxx", "LARK_APP_SECRET": "xxxxxxxxxxxxxxxxxxxxxxxx", "LARK_BASE_URL": "https://open.feishu.cn" } }, "github": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-github"], "env": { "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxx" } }, "postgres": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-postgres"], "env": { "POSTGRES_CONNECTION_STRING": "postgresql://readonly:password@localhost:5432/hackquest" } } } }

注意

  • 飞书国内版使用 https://open.feishu.cn,Lark 国际版使用 https://open.larksuite.com
  • MCP Server 的包名和参数请以各项目 GitHub README 为准,版本可能更新
  • 数据库连接建议使用只读账户,详见 37g 数据分析与运营 Agent

4.2 MCP 工具能力矩阵

MCP Server核心能力对应 Skill 组
lark-mcp消息发送/接收、多维表格 CRUD、文档读取、知识库读取、日历管理、通讯录查询所有 Skill
githubPR 查看/创建/审查、Issue 管理、代码搜索、Actions 触发、分支管理代码 Skill
postgresSQL 查询执行、Schema 查看数据分析 Skill

4.3 验证 MCP 连接

# 查看已配置的 MCP Server openclaw mcp list # 测试单个 MCP Server 连接 openclaw mcp test lark-mcp openclaw mcp test github openclaw mcp test postgres # 查看某个 MCP Server 提供的工具列表 openclaw mcp tools lark-mcp

5. 端到端 Hello World 测试

5.1 编写第一个 Skill

创建 skills/hello-world.md

# hello-world 当用户发送包含"你好"、"hello"、"测试"的消息时,回复一条欢迎消息。 ## 触发条件 用户消息包含"你好"、"hello"、"hi"、"测试"等问候词。 ## 执行步骤 1. 识别用户的飞书昵称 2. 回复一条包含用户昵称的欢迎消息 3. 简要介绍自己能做什么 ## 输出格式 回复消息格式: - 第一行:问候语 + 用户昵称 - 第二行:自我介绍(一句话) - 第三行:列出 3-5 个核心能力 ## 示例输出 你好,张三!👋 我是 HackQuest AI Agent,你的团队智能助手。 我可以帮你: • 创建和管理需求/缺陷 • 查询项目数据和生成报表 • 搜索知识库回答问题 • 查看 GitHub PR 和代码 • 生成工作总结和 OKR 报告

5.2 加载并测试

# 重新加载 Skill(如果 daemon 已运行,Skill 会自动热加载) openclaw skill reload # 查看已加载的 Skill 列表 openclaw skill list # 本地测试(不经过飞书,直接在终端对话) openclaw chat > 你好

5.3 飞书端验证

  1. 在飞书中搜索机器人名称 HackQuest AI Agent
  2. 发送私聊消息:你好
  3. 预期:机器人在 1-2 秒内回复欢迎消息
  4. 在群组中 @机器人:@HackQuest AI Agent 测试
  5. 预期:机器人在群组中回复

5.4 验证 MCP 工具调用

创建一个测试 Skill 验证 MCP 工具是否正常工作:

# test-mcp 测试 MCP 工具连接是否正常。 ## 触发条件 用户消息包含"测试 MCP"、"测试工具"。 ## 执行步骤 1. 调用 lark-mcp 获取当前用户信息 2. 调用 github MCP 获取仓库列表 3. 汇总测试结果 ## 输出格式 以表格形式展示每个 MCP 工具的连接状态: | 工具 | 状态 | 说明 |

6. 常见问题排错

6.1 OpenClaw 安装问题

问题原因解决方案
npm install -g 权限不足全局安装需要权限使用 sudo npm install -g openclaw 或配置 npm prefix
Node.js 版本不兼容OpenClaw 要求 Node 18+使用 nvm 安装指定版本:nvm install 20
daemon 启动失败端口被占用检查端口:lsof -i :3100,修改配置中的端口号
内存不足LLM 调用消耗内存确保至少 2GB 可用内存,或使用更轻量的模型

6.2 飞书/Lark 连接问题

问题原因解决方案
WebSocket 连接失败App ID/Secret 错误检查配置文件中的凭证是否正确
收不到消息事件事件订阅未配置在开放平台检查事件订阅是否已启用
Webhook 验证失败verification token 不匹配确认 verificationToken 与开放平台一致
Cloudflare Tunnel 连接不上隧道未启动或 DNS 未生效检查 cloudflared tunnel run 是否正常,等待 DNS 传播
机器人无响应权限不足检查是否开通了 im:message:send_as_bot 权限
Lark 长连接报错Lark 不支持 WebSocket切换到 Webhook 回调模式,参考 3.3 节

6.3 MCP 工具问题

问题原因解决方案
MCP Server 启动失败依赖未安装确保 npx 可用,检查网络连接
lark-mcp 认证失败Token 过期或权限不足重新获取 App Secret,检查权限配置
GitHub MCP 无法访问仓库Token 权限不足生成新的 PAT,确保包含 repo 权限
PostgreSQL 连接超时网络不通或凭证错误检查连接字符串,确认数据库可达

7. 工具与资源推荐

工具用途价格链接
OpenClawAgent 运行时开源免费GitHub 
Cloudflare Tunnel内网穿透免费文档 
ngrok内网穿透(备选)免费版可用 / Pro $10/月官网 
lark-mcp飞书 MCP Server开源免费GitHub 
GitHub MCP ServerGitHub MCP Server开源免费GitHub 
nvmNode.js 版本管理开源免费GitHub 

下一篇: 37c 多维表格自动化 — 设计需求/缺陷/迭代多维表格 Schema,实现 Skill 自动创建和 CRUD 操作

Last updated on