☰
国庆七天搭建飞书企微自动化工作流:WorkBuddy实战指南
2026/10/4 9:04:05 网站建设 项目流程

1. 为什么我要在国庆七天折腾这套自动化工作流

国庆七天假,说长不长说短不短。出门堵在高速上看车尾灯,不如在家把一直想搭但没时间搭的自动化工作流给落地了。我平时的工作状态是这样的:飞书里堆着各种需求文档和表格,企微里是团队沟通和审批流,两边来回切换,手动搬运数据搬到手软。尤其是每周的周报汇总、任务分发、进度同步这几件事,纯手工操作至少吃掉我每天一个半小时。

这次我用的核心工具是 WorkBuddy,配合飞书开放平台和企微的机器人能力,把"数据采集→处理→分发→通知"这条链路整个串起来。整套方案不需要你有多深的编程功底,零基础也能跟着走,因为大部分逻辑都是靠配置和少量脚本完成的。我踩过的坑、试错的路径、最终跑通的方案,全部在这篇里摊开讲。

你可能会问,为什么是 WorkBuddy 而不是别的?原因很直接:它对飞书和企微的接口适配做得比较完整,支持多维表格读写、机器人消息推送、待办创建这些高频操作,而且它的 skill 机制让你可以把常用操作封装成可复用的模块。说白了,你不需要从零写一个中间层,它已经帮你把大部分脏活干完了。

这篇文章适合三类人看:一是每天在飞书和企微之间反复横跳的运营和项目经理;二是想入门 AI 自动化但不知道从哪下手的技术小白;三是已经在用 WorkBuddy 但只停留在单点操作、没串成完整工作流的人。我会从环境搭建讲到完整链路跑通,每一步都给出为什么这么做的理由,以及我实际踩过的坑。

2. 动手之前先把这三样东西的关系理清楚

2.1 WorkBuddy 在链路里到底扮演什么角色

很多人第一次接触 WorkBuddy 会把它当成一个"AI 聊天工具",这个理解偏了。它更像是一个自动化调度中枢,核心能力是接收指令、调用接口、处理数据、触发动作。你可以把它想象成一个坐在你工位旁边的助理,你告诉它"把飞书表格里今天新增的任务同步到企微群里,并且给每个负责人发一条待办提醒",它就按这个逻辑去执行。

它的 skill 机制是关键。一个 skill 本质上是一组预定义的操作逻辑,比如"读取飞书多维表格指定视图的数据"是一个 skill,"向企微机器人 webhook 发送 markdown 消息"也是一个 skill。你把多个 skill 串联起来,就形成了一条完整的工作流。这种设计的好处是你不需要每次从头写代码,常用的操作直接调用现成的 skill 就行。

我在实际使用中发现,WorkBuddy 对飞书多维表格的支持尤其成熟。多维表格本身就是飞书里最适合做数据管理的组件,支持多种字段类型、视图过滤、自动化触发。WorkBuddy 能直接读取指定视图的数据,也能写入新记录,这就打通了"数据源"这一环。

2.2 飞书开放平台:你的数据仓库和触发源

飞书在这套方案里承担两个角色:数据存储和事件触发。数据存储靠的是多维表格,你把需要流转的数据放在表格里,比如任务清单、客户名单、进度跟踪表。事件触发靠的是飞书开放平台的事件订阅机制,当表格数据发生变化时,可以触发一个回调,通知 WorkBuddy 去处理。

这里有个细节值得展开说。飞书多维表格的 API 分为两类:一类是读取类接口,用来拉取表格数据;另一类是写入类接口,用来新增或更新记录。读取类接口需要你提供 app_token 和 table_id,这两个参数分别对应多维表格的唯一标识和数据表的唯一标识。获取方式是在多维表格的 URL 里找,具体位置我后面会详细讲。

飞书开放平台还有一个很实用的能力是机器人。你可以在飞书群里添加一个自定义机器人,通过 webhook 地址向群里推送消息。这个能力在"通知"环节特别好用,比如任务状态变更时自动在群里发一条提醒。

2.3 企微机器人:消息触达的最后一公里

企微的机器人能力和飞书类似,也是通过 webhook 地址向群聊推送消息。但企微的机器人对消息格式的支持和飞书略有不同,它支持文本、markdown、图片、图文等多种类型。我在实际使用中主要用 markdown 类型,因为可以带格式,看起来清晰。

企微机器人有一个限制需要注意:每个机器人每分钟最多发送 20 条消息。这个限制在低频场景下无所谓,但如果你要做批量任务分发,比如一次性给 50 个人发待办提醒,就得做限流处理。我的做法是在 WorkBuddy 的工作流里加一个简单的延时逻辑,每发 5 条暂停 3 秒,实测下来很稳。

还有一个容易忽略的点:企微机器人的 webhook 地址里包含一个 key 参数,这个 key 是机器人的唯一标识,泄露了别人就能往你的群里发消息。所以这个地址不要硬编码在公开的代码仓库里,建议放在环境变量或者配置文件里。

3. 环境搭建:从零到能跑通第一条消息

3.1 WorkBuddy 的安装与初始化配置

WorkBuddy 的安装方式取决于你用的平台。Windows 用户直接下载安装包,双击运行就行。安装完成后第一次启动会让你选择工作目录,这个目录用来存放你的 skill 配置、日志文件和临时数据。我建议单独建一个目录,比如D:\workbuddy-workspace,不要放在系统盘的用户目录下,因为日志文件会越积越多。

安装完成后需要做几项初始化配置。第一项是模型配置,WorkBuddy 需要连接一个大语言模型来理解你的指令。你可以选择接入云端模型或者本地模型,云端模型响应快但需要网络,本地模型隐私好但对硬件有要求。我用的云端方案,配置好 API 地址和密钥就行。

第二项是skill 目录配置。WorkBuddy 的 skill 文件通常放在工作目录下的skills文件夹里,每个 skill 是一个独立的配置文件。你可以在设置里指定 skill 目录的路径,确保它指向正确的位置。

第三项是日志级别。调试阶段建议把日志级别设为 debug,这样能看到每一步的详细输出,方便排查问题。等流程跑稳了再调回 info 级别,减少日志量。

注意:WorkBuddy 的配置文件里可能包含 API 密钥和 webhook 地址,这些敏感信息不要截图发到公开渠道,也不要用在线工具做格式转换。

3.2 飞书多维表格的创建与 API 凭证获取

飞书多维表格的创建很简单,在飞书里新建一个多维表格,按你的业务需求设计字段。我以"任务管理"为例,建了这么几个字段:任务名称(文本)、负责人(人员)、截止日期(日期)、状态(单选:待处理/进行中/已完成)、优先级(单选:高/中/低)。

字段建好之后,需要获取 API 调用凭证。具体路径是:打开多维表格,点击右上角的"..."菜单,选择"更多",然后找到"开发者"选项。在这里你能看到 app_token 和 table_id。app_token 是整个多维表格的唯一标识,table_id 是具体某个数据表的标识。把这两个值记下来,后面配置 WorkBuddy 的 skill 时要用。

飞书开放平台还需要你创建一个应用,获取 app_id 和 app_secret。路径是登录飞书开放平台,进入开发者后台,创建企业自建应用。创建完成后在"凭证与基础信息"页面能看到这两个值。然后需要在"权限管理"里开通多维表格相关的权限,具体包括bitable:app(读写多维表格)和im:message(发送消息)。权限开通后需要发布版本才能生效,这一步很多人会忘。

3.3 企微机器人的创建与 webhook 获取

企微机器人的创建路径是:进入企微群聊,点击右上角的"...",选择"群机器人",然后"添加机器人"。创建完成后会得到一个 webhook 地址,格式是https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx。这个地址就是你的消息推送入口。

企微机器人支持的消息类型里,我推荐用 markdown 类型。它的语法和标准 markdown 略有差异,比如标题用#号,加粗用**,但表格支持有限。如果你需要发结构化数据,建议用文本类型配合换行符来排版,或者用图文消息类型。

测试机器人是否可用很简单,用 curl 发一条消息就行:

curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key" \ -H "Content-Type: application/json" \ -d '{"msgtype":"text","text":{"content":"测试消息"}}'

如果群里能看到这条消息,说明机器人配置正确。如果报错,常见原因是 key 不对或者机器人被移出了群聊。

4. 核心工作流拆解:从数据采集到消息分发

4.1 第一步:用 WorkBuddy 读取飞书多维表格数据

读取飞书多维表格的数据,核心是调用飞书的 API。WorkBuddy 的 skill 机制让你不需要手写 HTTP 请求,只需要在 skill 配置文件里声明你要调用的接口和参数。我写了一个名为read_bitable_records的 skill,配置大概长这样:

name: read_bitable_records description: 读取飞书多维表格指定视图的记录 params: app_token: "你的app_token" table_id: "你的table_id" view_id: "你的view_id" action: type: http method: GET url: "https://open.feishu.cn/open-apis/bitable/v1/apps/{{app_token}}/tables/{{table_id}}/records" headers: Authorization: "Bearer {{access_token}}" query: view_id: "{{view_id}}" page_size: 100

这里有几个关键点。第一,access_token需要先通过 app_id 和 app_secret 换取,飞书的 token 有效期是 2 小时,过期需要重新获取。WorkBuddy 支持在 skill 里配置 token 自动刷新逻辑,你只需要在全局配置里填好 app_id 和 app_secret 就行。

第二,view_id是可选的。如果你不指定视图,它会返回表格里所有记录。但实际使用中我强烈建议指定视图,因为你可以通过视图过滤掉不需要的数据,减少后续处理的数据量。比如我建了一个"待处理任务"视图,只显示状态为"待处理"的记录,这样 WorkBuddy 拉到的数据就是干净的。

第三,page_size最大是 100,如果数据超过 100 条需要做分页处理。WorkBuddy 的 skill 支持循环调用,你可以在配置里加一个pagination字段,它会自动处理分页逻辑。

4.2 第二步:数据清洗与格式转换

从飞书拉到的原始数据是 JSON 格式,字段值可能是嵌套结构。比如"负责人"字段返回的是一个数组,里面包含用户的 open_id 和姓名。你需要把它转换成企微机器人能识别的格式。

我写了一个简单的转换逻辑,用 WorkBuddy 的脚本 skill 来实现。核心思路是遍历每条记录,提取需要的字段,拼装成 markdown 格式的文本。比如:

def format_task_message(record): fields = record.get("fields", {}) task_name = fields.get("任务名称", "未命名任务") owner = fields.get("负责人", [{}])[0].get("name", "未分配") deadline = fields.get("截止日期", "无截止日期") priority = fields.get("优先级", "中") message = f"**任务:{task_name}**\n" message += f"负责人:{owner}\n" message += f"截止日期:{deadline}\n" message += f"优先级:{priority}\n" return message

这段代码的逻辑很直白,但有一个坑要注意:飞书返回的日期字段是时间戳格式(毫秒级),你需要转换成可读的日期字符串。转换方法是用 Python 的datetime模块:

from datetime import datetime timestamp = fields.get("截止日期", 0) if timestamp: deadline = datetime.fromtimestamp(timestamp / 1000).strftime("%Y-%m-%d") else: deadline = "无截止日期"

还有一个坑是"负责人"字段。如果任务没有分配负责人,这个字段可能返回空数组或者 None,直接取[0]会报错。所以要做空值判断,我上面的代码里用了[{}]作为默认值来避免这个问题。

4.3 第三步:通过企微机器人推送消息

消息推送这一步相对简单,就是把上一步生成的 markdown 文本通过 webhook 发出去。WorkBuddy 里我配置了一个send_wecom_message的 skill:

name: send_wecom_message description: 向企微群机器人发送 markdown 消息 params: webhook_key: "你的机器人key" content: "{{message_content}}" action: type: http method: POST url: "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key={{webhook_key}}" headers: Content-Type: "application/json" body: msgtype: "markdown" markdown: content: "{{content}}"

这里有个细节:企微机器人的 markdown 语法不支持所有标准 markdown 特性。比如它不支持表格,不支持代码块高亮,标题只支持一级到三级。所以你在拼装消息内容时要注意这些限制,避免发出去的消息格式错乱。

另外,如果你要发送的消息比较长,企微机器人有长度限制,markdown 类型最大 4096 字节。超过这个长度消息会被截断。我的做法是把长消息拆成多条发送,每条控制在 3000 字节以内。

4.4 第四步:把整条链路串起来

前面三步是独立的 skill,现在需要把它们串成一条完整的工作流。WorkBuddy 的工作流配置支持顺序执行和条件分支。我的配置逻辑是这样的:

name: daily_task_sync description: 每日任务同步工作流 steps: - skill: read_bitable_records output: raw_records - skill: format_task_message input: raw_records output: formatted_messages - skill: send_wecom_message input: formatted_messages loop: true delay: 3000

loop: true表示对每条格式化后的消息都执行一次发送操作,delay: 3000表示每条消息之间间隔 3 秒,避免触发企微的限流。

这条工作流可以手动触发,也可以配置定时触发。WorkBuddy 支持 cron 表达式,比如0 9 * * 1-5表示周一到周五每天早上 9 点执行。我把它设成了每天早上 9 点跑一次,这样团队一上班就能看到当天的任务清单。

5. 踩坑实录:那些让我折腾到凌晨两点的报错

5.1 飞书 token 过期导致的 401 错误

这个问题我遇到的最频繁。飞书的 access_token 有效期是 2 小时,如果你的工作流执行时间超过 2 小时,或者两次执行间隔超过 2 小时,token 就会过期,API 调用返回 401 错误。

我最初的解决方案是在每次调用前手动刷新 token,但这样代码很冗余。后来发现 WorkBuddy 支持在全局配置里设置 token 自动刷新,只需要填好 app_id 和 app_secret,它会在 token 快过期时自动重新获取。配置方式是在config.yaml里加一段:

feishu: app_id: "你的app_id" app_secret: "你的app_secret" auto_refresh_token: true refresh_ahead_seconds: 300

refresh_ahead_seconds: 300表示提前 5 分钟刷新,避免临界过期的情况。

5.2 企微机器人消息发送频率超限

前面提到企微机器人每分钟最多 20 条消息。我一开始没注意这个限制,一次性发了 30 条任务提醒,结果后面的消息全部发送失败,返回错误码 45009。

排查这个问题的过程比较曲折。我先检查了 webhook 地址,确认没问题;又检查了消息格式,也没问题。后来在企微的 API 文档里翻到了频率限制的说明,才定位到原因。

解决方案就是在工作流里加延时。WorkBuddy 的delay参数单位是毫秒,我设成 3000 毫秒,也就是每条消息间隔 3 秒。这样一分钟最多发 20 条,刚好卡在限制以内。如果你要发的消息更多,可以把延时调大,或者分批执行。

5.3 多维表格字段类型不匹配导致的解析失败

飞书多维表格的字段类型很丰富,有文本、数字、单选、多选、日期、人员、附件等等。不同类型的字段返回的数据结构不一样。我一开始没注意这个问题,代码里统一按字符串处理,结果遇到日期字段和人员字段就报错。

比如日期字段返回的是时间戳数字,你直接当字符串用会得到一串看不懂的数字。人员字段返回的是数组,里面包含用户的 open_id、name、avatar 等信息。单选字段返回的是字符串,多选字段返回的是数组。

我的解决方案是写一个字段类型映射表,根据字段类型做不同的处理:

字段类型返回数据结构处理方式
文本字符串直接使用
数字数字转字符串
单选字符串直接使用
多选字符串数组用逗号拼接
日期时间戳(毫秒)转日期字符串
人员对象数组提取 name 字段
附件对象数组提取 url 字段

这个映射表让我后续处理数据时省了很多事,遇到新字段类型只需要查表就行。

5.4 WorkBuddy skill 加载失败的问题排查

有一次我修改了 skill 配置文件后重启 WorkBuddy,发现 skill 没有生效,工作流执行时报"skill not found"。排查过程如下:

第一步,检查 skill 文件是否在正确的目录下。WorkBuddy 默认从工作目录下的skills文件夹加载 skill,如果你的文件放在别的地方,需要在配置里指定路径。

第二步,检查 skill 文件的格式是否正确。YAML 格式对缩进很敏感,一个空格不对就会解析失败。我建议用支持 YAML 语法高亮的编辑器来写配置文件,能直观地看到缩进问题。

第三步,检查 skill 名称是否重复。如果你定义了两个同名的 skill,WorkBuddy 只会加载其中一个,另一个会被忽略。这个问题的隐蔽性很强,因为不会报错,只是行为不符合预期。

第四步,查看 WorkBuddy 的日志。日志里会记录 skill 加载的详细过程,包括加载了哪些文件、哪些失败了、失败原因是什么。把日志级别调到 debug 能看到最详细的信息。

6. 进阶玩法:让工作流更智能的几个思路

6.1 用 AI 自动生成任务摘要

前面讲的工作流是把飞书表格里的原始数据直接推送到企微。但原始数据往往比较零散,读起来不够直观。我后来加了一个 AI 处理环节,让 WorkBuddy 调用大语言模型对任务列表做摘要。

具体做法是在工作流里插入一个ai_summarize的 skill,把格式化后的任务列表作为输入,让模型生成一段简洁的摘要。比如原始数据是 10 条任务,模型会输出类似"今日共有 10 项任务,其中高优先级 3 项,涉及设计、开发和测试三个环节,最紧急的是 XXX 任务,截止今天下午 6 点"这样的摘要。

这个摘要放在消息的最前面,团队成员一眼就能看到重点,不用逐条阅读。实测下来,这个改动能显著提升消息的阅读率。

6.2 根据任务状态自动触发不同的通知渠道

不是所有任务都需要发到企微群里。比如低优先级的任务,发到群里反而会造成信息噪音。我的做法是在工作流里加条件判断,根据任务的优先级和状态决定发送渠道。

高优先级任务:同时发送到企微群和相关负责人私聊。 中优先级任务:只发送到企微群。 低优先级任务:只记录到飞书表格,不发送通知。

WorkBuddy 的条件分支配置大概是这样的:

steps: - skill: read_bitable_records output: records - condition: "{{records.priority}} == '高'" then: - skill: send_wecom_message target: "group" - skill: send_wecom_message target: "private" - condition: "{{records.priority}} == '中'" then: - skill: send_wecom_message target: "group"

这种条件分支让工作流更灵活,也避免了信息过载。

6.3 把执行日志回写到飞书表格

工作流执行过程中会产生日志,比如哪些任务推送成功了、哪些失败了、失败原因是什么。这些日志如果只存在本地,排查问题时要翻文件,很不方便。我的做法是把日志回写到飞书多维表格里,建一个"执行日志"表,每次工作流执行完就写入一条记录。

这样做的另一个好处是可以做统计分析。比如你可以统计每周的推送成功率,看看有没有频繁失败的环节需要优化。飞书多维表格自带图表功能,拉个趋势图很直观。

回写日志的 skill 配置和读取类似,只是把 HTTP 方法从 GET 改成 POST,body 里带上要写入的字段值。

6.4 用定时任务实现无人值守

前面说的都是手动触发或者简单定时触发。如果你想做到完全无人值守,可以用 WorkBuddy 的定时任务功能配合系统级的计划任务。比如在 Windows 上可以用任务计划程序,在 Linux 上可以用 crontab,定时启动 WorkBuddy 并执行指定的工作流。

我的配置是每天早上 8:50 启动 WorkBuddy,执行daily_task_sync工作流,9:00 之前完成所有消息推送。这样团队一上班就能看到当天的任务安排,不需要任何人手动操作。

需要注意的是,无人值守场景下要做好错误处理。如果某个环节失败了,要有重试机制和告警机制。我的做法是在工作流最后加一个"检查执行结果"的步骤,如果有失败的任务,就发一条告警消息到管理员群。

7. 一些让我少走弯路的实操心得

先说一个关于调试的技巧。WorkBuddy 的工作流调试起来其实不太方便,因为它不像写代码那样可以打断点。我的做法是把工作流拆成多个独立的 skill,每个 skill 单独测试通过后再串联。比如先单独测试read_bitable_records能不能拉到数据,再单独测试send_wecom_message能不能发出消息,最后再串起来。这样出问题的时候能快速定位是哪个环节的毛病。

另一个心得是关于配置文件的版本管理。WorkBuddy 的 skill 配置文件会随着你的需求不断修改,改着改着就忘了哪个版本是能跑的。我建议用 Git 来管理这些配置文件,每次修改前先提交一个版本,出问题了可以随时回滚。配置文件里如果有敏感信息,可以用环境变量替代,Git 里只存模板文件。

还有一个容易被忽略的点是时区问题。飞书返回的日期时间戳是 UTC 时间,你转换成日期字符串的时候如果不处理时区,可能会差几个小时甚至一天。我的做法是在转换时统一加上 8 小时的偏移量,确保日期准确。

最后说一个关于消息可读性的经验。企微机器人的消息如果太长,大家往往只看开头就划走了。所以我把最重要的信息放在最前面,用加粗和换行突出显示。比如任务摘要放在第一行,紧急任务用红色标记(企微 markdown 支持<font color="warning">标签),详细列表放在后面。这样即使只看前两行,也能抓住重点。

这套工作流我从国庆第一天开始搭,到第三天基本跑通,后面几天一直在优化细节。现在它每天帮我处理任务同步和通知,省下来的时间够我多喝两杯咖啡。如果你也在飞书和企微之间来回折腾,不妨试试这个方案,踩过的坑我都帮你填平了。

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

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

立即咨询