恒美微站
首页
关于我们
建站服务
主题模板
案例展示
资讯中心
联系我们
基于OpenClaw与飞书API构建企业级AI办公自动化助手实战
首页
资讯中心
/
基于OpenClaw与飞书API构建企业级AI办公自动化助手实战
基于OpenClaw与飞书API构建企业级AI办公自动化助手实战
发布时间:2026/8/26 8:21:33
1. 项目概述当“摸鱼”遇上AI一个真实可用的办公助手诞生记“上班偷懒”这四个字说出来可能有点政治不正确但我想每个在格子间里奋斗过的朋友都或多或少有过这样的念头那些重复、繁琐、耗时却又不得不做的“杂活”如果能有个帮手就好了。比如每天手动整理几十份会议纪要从海量文档里找一份半年前的合同或者盯着屏幕等一个永远不知道何时会来的审批通知。这些任务不创造核心价值却实实在在地消耗着我们的时间和精力。我最近折腾出来的这个名叫「小龙虾」的AI助手就是为了解决这些痛点。它的核心目标不是替代你的核心工作而是帮你“自动化”那些琐碎的、重复的、低价值的办公流程让你能把更多精力聚焦在真正需要思考和创造的事情上。你可以把它理解为一个24小时在线、任劳任怨、且精通你公司各种办公软件的“数字实习生”。这个项目的技术核心是围绕OpenClaw这个开源AI Agent框架展开的。简单来说OpenClaw就像一个“大脑”的调度中心它本身不直接产生智能但它能连接和指挥各种“专业工具”我们称之为Skill。我做的就是为这个“大脑”配置了理解我们办公场景的能力通过大语言模型并让它学会了操作我们最常用的协同工具——飞书。最终实现的效果是我可以在飞书里像跟同事聊天一样给「小龙虾」下达指令它就能自动去完成一系列任务。举个例子以前我每周一要花半小时手动把销售同事散落在飞书群里的周报汇总到一个多维表格里。现在我只需要在飞书里「小龙虾」说一句“把上周销售群里的所有周报链接整理到‘销售周报汇总表’里并提取关键数据填充。” 剩下的就交给它了。这就是我所说的“偷懒”——把时间还给更有价值的工作。2. 核心思路与技术选型为什么是OpenClaw飞书在决定动手之前我调研过不少方案。市面上有成品的RPA机器人流程自动化工具也有各种SaaS化的AI办公助手。但前者往往价格不菲且灵活性欠佳后者则可能涉及数据安全和定制化的问题。作为一个喜欢折腾且对数据隐私有点在意的技术从业者自建一个轻量、可控、能深度集成内部工具的助手成了最理想的选择。2.1 为什么选择OpenClaw作为核心框架OpenClaw在众多开源AI Agent框架中脱颖而出主要基于以下几点考量架构清晰易于理解OpenClaw采用了经典的“规划-执行”Agent架构。它接收到你的自然语言指令后会先由大模型进行“思考”规划拆解成一系列可执行的原子步骤比如1. 读取飞书消息2. 解析消息中的链接3. 访问链接获取文档内容…然后调用对应的Skill去“执行”。这种结构非常符合人类解决问题的逻辑调试和扩展起来也直观。Skill生态与灵活性它的核心能力建立在Skill之上。社区已经提供了大量预置Skill例如网页搜索、文件读写、数据库查询等。更重要的是你可以用Python非常方便地开发自定义Skill。这意味着我可以为飞书、钉钉、公司内部的CRM系统专门编写Skill让「小龙虾」真正融入我的工作流。对大模型的良好抽象OpenClaw本身不绑定特定的大模型它通过标准接口与模型对话。这意味着我可以根据需求、预算和响应速度自由选择后端。无论是直接调用云端API如GPT-4、DeepSeek还是在本地部署开源模型如Qwen、Llama都能无缝接入。这为成本控制和数据安全提供了极大灵活性。注意在调研时我也遇到过一些关于OpenClaw的错误信息比如网络热词中出现的openclaw llamap svr operator(): got exception这类报错。这通常是环境配置或模型连接问题并非框架本身缺陷。这反而提醒我们自建系统需要一定的技术排错能力。2.2 为什么深度集成飞书选择飞书作为主要交互和操作平台几乎是国内办公环境下的必然选择统一入口无感使用我的团队所有沟通、文档、会议、审批都在飞书上。将助手集成到飞书机器人意味着不需要让同事学习新的工具。他们只需要像普通同事一样「小龙虾」下达指令体验非常自然。开放的API能力飞书开放平台提供了极其完备的API涵盖消息、通讯录、日历、云文档、多维表格、审批等几乎所有功能。这为开发强大的自定义Skill提供了坚实的基础。我想让助手自动创建会议、更新表格、转发通知都能找到对应的API实现。信息上下文丰富助手作为机器人存在于飞书群聊中它可以天然地获取到对话的上下文信息。当我让它“总结一下刚才大家讨论的要点”时它可以直接读取历史消息而不需要我手动复制粘贴。技术栈最终拍板基于以上分析我的技术栈确定为OpenClawAgent框架 本地/云端大模型思考引擎 自定义飞书Skill手和脚 Docker一键部署与环境隔离。这个组合在功能、灵活性、可控性和易用性之间取得了很好的平衡。3. 从零到一的部署实战手把手搭建你的「小龙虾」理论讲完我们来点实在的。下面是我从零搭建「小龙虾」助手的完整过程你可以跟着一步步操作。我的基础环境是一台Ubuntu 22.04的云服务器但使用Docker后整个过程在Mac或Windows上通过Docker Desktop也基本一致。3.1 基础环境与依赖准备首先确保你的机器上已经安装了Docker和Docker Compose。这是实现“一键部署”的关键能避免各种Python版本、依赖库冲突的噩梦。# 更新系统包 sudo apt-get update sudo apt-get upgrade -y # 安装Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh sudo usermod -aG docker $USER # 将当前用户加入docker组避免每次sudo newgrp docker # 刷新组权限 # 安装Docker Compose sudo curl -L https://github.com/docker/compose/releases/download/v2.24.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose sudo chmod x /usr/local/bin/docker-compose # 验证安装 docker --version docker-compose --version接下来我们需要获取OpenClaw的代码。推荐直接从GitHub克隆最新版本社区活跃更新和修复比较及时。git clone https://github.com/openclaw-ai/OpenClaw.git cd OpenClaw3.2 核心配置详解连接大脑与手脚OpenClaw的配置主要在两个文件.env环境变量和config.yml主配置。我们逐一拆解。第一步配置大模型大脑打开项目根目录下的.env.example文件复制一份命名为.env。这里我们以使用OpenAI兼容API的本地模型比如用Ollama部署的Qwen为例。cp .env.example .env编辑.env文件关键配置如下# 模型配置 - 这里指向你本地Ollama服务的地址和模型名 OPENAI_API_BASEhttp://host.docker.internal:11434/v1 # Docker容器内访问宿主机Ollama OPENAI_API_KEYollama # 如果使用Ollamakey可以任意填写非空即可 OPENAI_MODEL_NAMEqwen2.5:7b # 你本地Ollama中拉取的模型名称 # 飞书机器人配置 - 需要去飞书开放平台创建应用获取 FEISHU_APP_IDcli_xxxxxx FEISHU_APP_SECRETxxxxxxxx FEISHU_VERIFICATION_TOKENxxxxxx FEISHU_ENCRYPT_KEYxxxxxx # 如果启用了加密需要填写重要提示OPENAI_API_BASE中的host.docker.internal是Docker的一个特殊域名指向宿主机。这确保了在Docker容器内运行的OpenClaw能访问到宿主机上运行的Ollama服务。如果你将Ollama也部署在另一个Docker容器中则需要使用Docker网络功能让它们在同一个自定义网络中互通。第二步创建飞书应用并获取凭证这是让「小龙虾」能接入飞书的关键步骤一步都不能错。登录 飞书开放平台 点击“创建企业自建应用”。填写应用名称如“我的AI助手小龙虾”、描述等基本信息。在“凭证与基础信息”页面你会找到App ID和App Secret将它们填入上面的.env文件。在“事件订阅”页面点击“启用事件订阅”。这里需要配置请求地址 URL填写你服务器的公网IP或域名加上OpenClaw飞书事件接收的路径例如https://your-server.com/feishu/event。在本地测试时你需要使用内网穿透工具如ngrok生成一个临时HTTPS地址因为飞书只回调HTTPS地址。Verification Token自己生成一个随机字符串填入并同步到.env的FEISHU_VERIFICATION_TOKEN。Encrypt Key如果需要更高安全性可以启用加密生成Key后填入.env。在“权限管理”页面为应用添加所需权限。至少需要im:message接收与发送单聊、群聊消息、im:message.group_at_msg接收群聊中机器人的消息、im:message.p2p_msg接收单聊消息。如果你需要它操作文档还需添加drive:drive等相关权限。在“事件订阅”页面订阅所需事件。至少订阅“接收消息”下的im.message.receive_v1事件。最后在“版本管理与发布”页面创建一个版本并申请发布。通常需要企业管理员审核。在测试阶段你可以直接将应用添加到“测试企业”无需发布即可在指定群组或与指定人员试用。第三步调整Docker Compose配置OpenClaw项目通常自带docker-compose.yml。我们需要检查并确保网络配置正确以便容器能访问宿主机服务。一个简化版的配置示例如下version: 3.8 services: openclaw: build: . container_name: openclaw restart: unless-stopped ports: - 8000:8000 # 将容器内端口映射到宿主机 extra_hosts: - host.docker.internal:host-gateway # 关键让容器能解析到宿主机 env_file: - .env volumes: - ./storage:/app/storage # 持久化存储避免数据丢失 - ./logs:/app/logs3.3 一键启动与验证配置完成后启动服务就变得非常简单# 在OpenClaw项目根目录下执行 docker-compose up -d使用docker-compose logs -f openclaw查看实时日志如果没有报错看到服务启动成功的提示就说明OpenClaw框架本身运行正常。接下来是验证飞书连接在飞书开放平台你的应用后台“事件订阅”页面点击“保存”后飞书会向你配置的请求地址发送一个带有challenge参数的验证请求。OpenClaw的服务应该能自动处理并返回成功从而完成“验证”步骤。你可以在日志中看到相关记录。将你的应用机器人添加到一个飞书群聊中。在群里机器人并发送“你好”你应该能在服务器的日志中看到接收到消息的事件并且机器人可能会尝试回复如果配置了简单的问候Skill。至此你的「小龙虾」助手就有了身体Docker容器、基础神经OpenClaw框架和感官飞书连接。但它现在还不太聪明因为还没教它具体做事Skill和给它一个更强的大脑优化模型调用。4. 核心能力赋予开发自定义Skill与优化模型交互框架跑通只是第一步让「小龙虾」真正能帮你干活需要开发自定义Skill并优化与大模型的交互逻辑。4.1 开发你的第一个飞书Skill自动汇总文档链接假设我们实现开头提到的场景自动抓取群聊中的文档链接并汇总。我们需要创建一个Skill。在OpenClaw项目中Skill通常放在skills/目录下。我们创建一个feishu_link_collector.py# skills/feishu_link_collector.py import re import logging from typing import Dict, Any from openclaw.skill import BaseSkill, SkillMetadata logger logging.getLogger(__name__) class FeishuLinkCollectorSkill(BaseSkill): 飞书群聊文档链接收集与汇总Skill metadata SkillMetadata( namefeishu_link_collector, description从飞书群聊消息中提取文档链接并整理到指定的多维表格中。, inputs{ group_id: 飞书群聊的open_id, days: 回溯查找消息的天数默认为1今天, table_id: 飞书多维表格的table_id }, output返回成功整理的文档数量及列表。 ) def __init__(self, feishu_client): # 初始化时注入一个飞书API客户端这个客户端在其他地方配置好 self.client feishu_client async def execute(self, inputs: Dict[str, Any]) - Dict[str, Any]: group_id inputs.get(group_id) days int(inputs.get(days, 1)) table_id inputs.get(table_id) if not all([group_id, table_id]): return {success: False, error: Missing required parameters: group_id or table_id} try: # 1. 调用飞书API获取群聊历史消息 messages await self.client.get_group_messages(group_id, days) # 2. 使用正则表达式从消息中提取飞书文档链接 doc_links [] pattern rhttps://[a-zA-Z0-9.-]*\.feishu\.cn/(docs|sheet)/([a-zA-Z0-9]) for msg in messages: matches re.findall(pattern, msg[content]) for match in matches: doc_type, doc_token match doc_links.append({ type: doc_type, token: doc_token, title: fDocument_{doc_token[:8]}, # 可后续调用API获取真实标题 raw_message: msg[content][:100] # 截取消息片段 }) # 3. 将提取的链接信息写入飞书多维表格 added_records [] for link in doc_links: record { fields: { 文档类型: link[type], 文档Token: link[token], 来源消息: link[raw_message], 收集时间: {date: datetime.now().isoformat()} } } # 调用飞书多维表格API添加记录 result await self.client.add_table_record(table_id, record) if result.get(success): added_records.append(link[token]) # 4. 返回执行结果 return { success: True, message: f成功从群聊{group_id}中收集到{len(doc_links)}个文档链接已将{len(added_records)}条记录添加到表格。, data: { total_links_found: len(doc_links), records_added: added_records } } except Exception as e: logger.error(fFeishuLinkCollectorSkill执行失败: {e}, exc_infoTrue) return {success: False, error: str(e)}这个Skill定义了它需要什么参数群ID、表格ID以及它会做什么。接下来需要在OpenClaw的配置中注册这个Skill并注入配置好的飞书客户端。实操心得开发Skill时输入输出定义要清晰。大模型规划者会根据你的指令和Skill的metadata描述来决定是否调用以及如何传参。良好的描述能极大提高调用的准确性。4.2 优化模型指令与规划能力OpenClaw依赖大模型将用户的自然语言指令“整理上周销售群的周报链接到表格”分解成Skill调用序列。为了让模型更好地理解我们的场景和Skill我们需要编写高质量的System Prompt系统提示词。在config.yml或通过环境变量我们可以配置一个强大的系统提示词agent: system_prompt: | 你是一个专业的办公自动化助手名叫「小龙虾」。你的核心能力是操作飞书和处理办公文档。 你可以调用的工具Skill如下 1. feishu_link_collector: 从指定的飞书群聊中提取文档链接并整理到多维表格。需要参数group_id群聊ID table_id表格ID days回溯天数可选。 2. feishu_send_message: 向飞书用户或群组发送消息。需要参数receive_id接收者ID msg_type消息类型 content内容。 3. web_search: 在互联网上搜索信息。需要参数query搜索查询词。 4. document_summarizer: 总结一个在线文档的核心内容。需要参数doc_url文档链接。 用户指令可能很口语化你需要 1. 准确理解用户的意图识别其想完成的任务。 2. 将任务拆解成具体的、可顺序执行的步骤。 3. 为每个步骤选择合适的工具并精确提取或推断出该工具所需的参数。 4. 如果用户指令中缺少必要参数如群ID你应该主动询问用户而不是盲目猜测。 请用JSON格式输出你的思考过程和行动计划。这个提示词明确了助手的角色、可用工具、工具用途和参数以及思考规则。这能显著提升大模型规划动作的准确性和可靠性。4.3 处理复杂指令与多轮对话有时用户的指令很复杂比如“帮我看看昨天项目群里的讨论把关于预算的部分找出来总结一下发给我和项目经理”。这可能需要组合多个Skill并且涉及信息筛选和加工。OpenClaw支持工作流Workflow或通过模型的链式思考Chain-of-Thought来处理。在实践中我倾向于在自定义Skill内部处理复杂逻辑而不是完全依赖模型规划。例如我可以开发一个feishu_topic_summarizerSkill它内部会做以下几件事调用飞书API获取历史消息。利用大模型对消息进行主题分类和筛选例如识别哪些消息与“预算”相关。对筛选出的消息进行总结。调用消息发送Skill将总结结果发给指定人员。这样对OpenClaw的规划器来说它只需要调用一个feishu_topic_summarizerSkill并传入group_id,topic,recipients等参数即可降低了规划的复杂度提高了成功率。5. 避坑指南与效能提升让「小龙虾」稳定可靠地工作在实际部署和运行过程中我踩过不少坑也总结了一些让助手更“好用”的经验。5.1 常见部署与运行问题排查飞书事件订阅验证失败症状在飞书开放平台保存事件订阅配置时提示“URL验证失败”。排查首先确保你的服务已启动且在公网可访问curl https://your-server.com/feishu/event应返回OpenClaw的相关响应而非404。其次检查服务器防火墙和安全组确保8000端口或你映射的端口已开放。查看OpenClaw容器日志docker-compose logs -f openclaw看是否收到了飞书的验证请求。通常日志会打印出收到的请求体。最常见原因.env文件中的FEISHU_VERIFICATION_TOKEN与飞书后台填写的Verification Token不一致。必须完全一致包括大小写。机器人收不到消息或无法回复症状在群里机器人说话服务器日志无任何反应。排查确认机器人已成功添加到群聊。在飞书应用后台“权限管理”中确认已添加并开通了im:message等相关权限。权限开通后需要在“版本管理”中发布新版本或重新申请生效。检查事件订阅是否已成功订阅im.message.receive_v1事件。使用飞书开放平台的“事件追踪”功能可以查看事件是否成功发送到你的服务器。OpenClaw调用大模型超时或报错症状日志中出现openai.error.APITimeoutError或openclaw llamap svr operator(): got exception类似错误。排查网络问题如果使用本地Ollama确保OPENAI_API_BASE地址正确且宿主机防火墙允许容器访问如使用host.docker.internal。可以进入容器内部docker exec -it openclaw bash然后curl http://host.docker.internal:11434测试连通性。模型问题确认Ollama中模型已正确拉取和运行 (ollama list,ollama run qwen2.5:7b)。尝试在Ollama中直接与模型对话看是否正常。配置问题检查.env中的OPENAI_MODEL_NAME是否与Ollama中的模型名完全一致。5.2 性能、安全与成本优化建议使用轻量级本地模型对于办公自动化这类任务对模型的创意和推理深度要求并非极致但对响应速度和成本敏感。使用7B或14B参数量的量化模型如Qwen2.5-7B-Instruct, Llama-3.2-3B-Instruct在消费级显卡甚至CPU上都能获得不错的响应速度且完全免费数据不出本地。Skill的异步与超时处理在开发Skill时尤其是涉及网络请求如调用飞书API、访问网页的操作务必使用异步编程async/await并为请求设置合理的超时时间。避免一个缓慢的Skill阻塞整个Agent的运行。敏感信息处理助手可能会接触到群聊消息、文档内容等。在Skill中尽量避免在日志里完整打印敏感数据。对于需要存储的信息考虑加密存储或仅存储必要的元数据。设置操作权限与确认机制对于高风险操作比如“删除文件”、“发送全员通知”可以在Skill中设计二次确认逻辑。例如当用户要求删除某个重要文档时助手可以先回复“即将删除XXX文档此操作不可逆请回复‘确认’以继续。”日志与监控做好日志记录将OpenClaw的运行日志、Skill的执行日志统一收集如输出到文件并用ELK或Grafana Loki收集。这便于问题回溯和了解助手的使用情况。5.3 扩展思路让「小龙虾」更强大基础功能稳定后你可以考虑以下扩展方向打造一个真正个性化的超级助手集成知识库RAG让「小龙虾」能够回答关于公司内部制度、产品文档、技术手册的问题。可以将公司Confluence、Wiki、PDF手册等资料向量化后存入数据库如ChromaDB当用户提问时先检索相关文档片段再让大模型基于这些片段生成答案。这需要开发一个rag_querySkill。连接更多工具除了飞书可以开发连接邮箱自动分类邮件、发送摘要、日历智能安排会议、项目管理工具自动更新任务状态、代码仓库生成提交摘要等的Skill。实现自动化工作流结合像n8n或Apache Airflow这样的工作流调度工具让「小龙虾」不仅能响应指令还能定时触发任务。例如每天上午9点自动抓取指定数据源生成日报并发送到群聊每周五下午自动提醒团队成员提交周报。加入语音交互通过集成飞书的语音消息识别API未来甚至可以做到在飞书里直接给「小龙虾」发语音指令让它完成工作体验更加无缝。搭建「小龙虾」的过程更像是在精心训练一位数字同事。从最初的蹒跚学步基础部署到教会它第一项技能开发Skill再到优化它的沟通和理解能力调优Prompt最终让它能独立、可靠地处理一系列任务。这个过程中节省下来的时间以及从繁琐事务中解放出来的注意力就是最大的回报。技术本身不是目的用技术提升工作效率和生活品质才是我们折腾的意义所在。