影刀RPA新手教程:飞书集成实战——消息通知与多维表格读写

上个月公司要求做个电商监控流程:采集商品价格,异常就飞书告警,正常数据写飞书多维表格。

我第一次做的时候卡在飞书API认证上折腾了半天——AppId填了但表格连不上,后来发现是权限没开。这种坑踩过一次就记住了,这篇把飞书集成的完整流程讲清楚。


一、飞书消息通知:Webhook机器人

1. 配置Webhook机器人

飞书群机器人是最简单的通知方式,不需要创建应用,一个Webhook地址就能发消息。

配置步骤:

  1. 打开飞书群聊,点群设置
  2. 找到"群机器人",点"添加机器人"
  3. 选择"自定义机器人",起个名字
  4. 安全设置里选"签名校验"(更安全)或"自定义关键词"(最简单)
  5. 拿到Webhook地址,形如https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxx

Webhook地址就是机器人的云端地址,有了它就能通过网络找到机器人发消息。

2. 影刀里发送飞书消息

影刀有专门的"飞书群通知"指令,不用自己拼HTTP请求。

机器人地址:填刚才拿到的Webhook地址。

在这里插入图片描述

签名校验:如果机器人安全设置里勾了签名校验,这里填密钥。没勾就留空。

消息格式类型,四种:

  • 文本类型:纯文本消息,最简单。支持@联系人,写法是<at user_id="ou_xxx">名字</at>,@所有人写<at user_id="all">所有人</at>
  • 图片类型:需要AppId和AppSecret,图片10M以内
  • 富文本类型:支持飞书原格式内容,能排版、加链接、@人
  • 消息卡片类型:飞书独有格式,用飞书消息卡片搭建工具编辑,粘过来用

日常告警用文本类型就够了。要做得好看用消息卡片,卡片可以带按钮、分栏、带图。

3. 实际用法

采集到异常价格时发飞书通知:

如果 price > 正常价格上限:
    飞书群通知:
        机器人地址: webhook_url
        消息格式: 文本类型
        消息内容: f"价格异常!商品:{title},当前价格:{price},超过阈值:{max_price}"

文本内容里可以用Python模式拼接变量,点亮Python图标,写f"价格异常:{title} - {price}元"。


二、飞书在线表格:建立连接

飞书在线表格和多维表格是两回事。在线表格就是类似Excel的电子表格,多维表格是类似数据库的结构化表格。先说在线表格。

建立表格连接

影刀操作飞书表格前,必须先用"建立表格连接"指令生成飞书对象。

三个参数:

在这里插入图片描述

AppId:应用唯一标识。去飞书开放平台创建企业自建应用,在应用详情页获取。

AppSecret:应用密钥,创建应用时平台生成。

Spreadsheet:表格唯一标识。从飞书表格URL里取,比如https://sample.feishu.cn/sheets/shtcnmBA*****yGehy8,中间那串就是。

创建应用的完整流程

  1. 飞书开放平台创建企业自建应用(需要账号有权限,没权限找管理员申请)
  2. 获取AppId和AppSecret
  3. 添加相应权限(查看、编辑在线表格等)
  4. 创建版本并发布应用
  5. 切换飞书管理后台,审核应用
  6. 给文档添加应用(文档右上角"…"→更多→添加文档应用)
  7. 注意:表格需要有管理权限才能添加应用

这一步最容易漏的是第6步——应用创建好了但没加到文档里,结果连接时报权限不足。

飞书对象

连接成功后输出一个feishu_instance变量,后面的所有飞书表格操作指令都用这个对象。跟数据库连接对象一个道理,先连接后操作。


三、飞书在线表格读写

1. 读取表格数据

"读取表格数据"指令,读取指定区域的数据。

读取方式:单元格、区域、行、列四种。

  • 单元格:填A1,返回字符串

  • 行:填1,返回一维列表

  • 列:填A,返回一维列表

  • 在这里插入图片描述

  • 区域:填A1:B2,返回二维列表

读取格式:纯文本、公式计算值、公式、公式计算值(非格式化)。一般用纯文本就行,需要公式结果选公式计算值。

2. 追加表格数据

"追加表格数据"指令,往表格尾部加数据。

追加单元格:从哪个位置开始追加,选填,默认最后一个单元格。填A1就从A1开始。

追加内容:字符串或列表。填字符串追加一行的一列,填列表追加一行多列或多行多列——根据数据类型自动填充。

3. 写入表格数据

"写入表格数据"指令,往指定位置写数据。

写入区域:跟读取一样,单元格A1、行1、列A、区域A1:B2。

4. 其他操作

  • 读取总行/列数:知道表格有多少数据
  • 删除行列:删指定位置的行或列
  • 插入行列:在指定位置插入空行空列
  • 查找文本:在表格里找指定内容的位置
  • 单元格填充图片:往单元格里插图片

四、飞书多维表格

多维表格是飞书的结构化数据表,类似Airtable。跟在线表格的区别是:多维表格有字段类型(文本、数字、日期、单选、多选等),适合存结构化数据。

多维表格的标识

app_token:多维表格的唯一标识符。从多维表格URL里复制。

在这里插入图片描述

比如URL是https://xxx.feishu.cn/base/bascnxxxxxx,bascnxxxxxx就是app_token。

table_id:数据表的ID。一个多维表格里可以有多个数据表,每个表有自己的table_id。

多维表格触发器

影刀支持飞书多维表作为触发器——多维表格新增行记录时自动触发流程。

配置步骤:

  1. 飞书开放平台创建应用,开通权限:检索特定记录、获取数据表信息、订阅云文档事件
  2. 发布应用版本,审核通过
  3. 多维表格添加应用,设为"可管理"
  4. 影刀控制台新建高级任务计划,选"飞书多维表"→"新增行记录"
  5. 填AppId和AppSecret验证账号
  6. 填app_token,选数据表
  7. 获取回调URL,回到飞书开发者后台配置事件订阅
  8. 添加事件drive.file.bitable_record_changed_v1(多维表格记录变更)
  9. 发布应用版本
  10. 测试:在多维表格新增一行记录,看流程是否触发

用HTTP请求操作多维表格

影刀没有专门的多维表格读写指令(在线表格有,多维表格要用HTTP请求调API)。

获取token:

POST https://open.feishu.cn/open-apis/auth/v3/tenant_access_token/internal
Content-Type: application/json

{
    "app_id": "你的AppId",
    "app_secret": "你的AppSecret"
}

返回的tenant_access_token放在后续请求的Header里:Authorization: Bearer {token}。

查询记录:

GET https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records
Authorization: Bearer {token}

新增记录:

在这里插入图片描述

POST https://open.feishu.cn/open-apis/bitable/v1/apps/{app_token}/tables/{table_id}/records
Authorization: Bearer {token}
Content-Type: application/json

{
    "fields": {
        "商品名称": "手机壳",
        "价格": 29.9,
        "采集时间": "2024-06-26 10:00:00"
    }
}

fields里的key是字段名,value是对应类型的值。

更多飞书集成实战案例可以到 home.linyan.cloud 查看完整项目代码。


五、完整案例:电商采集→飞书告警→多维表格入库

流程设计

打开电商网页
循环相似元素(商品列表)
    获取文本内容(标题)
    获取文本内容(价格)
    价格转浮点数
    if price > 价格阈值:
        飞书群通知(文本告警)
    else:
        HTTP请求(新增多维表格记录)
    等待1-3秒随机延时
点击下一页
判断是否还有下一页

关键踩坑

坑1:token过期

飞书的tenant_access_token有效期2小时。如果你的流程跑了超过2小时,token会过期,后续请求全部401。

解决:每次循环前判断token是否快过期,快过期了重新获取。或者在HTTP请求返回401时重新获取token再重试。

坑2:权限不足

应用权限没开全。多维表格需要这些权限:

  • base:record:read(读取记录)
  • base:record:write(写入记录,需手动添加)
  • base:table:read(获取数据表信息)
  • 在这里插入图片描述

光在应用里开权限不够,还要在多维表格里把应用加为"可管理"。

坑3:字段类型不匹配

多维表格的字段有类型约束。你的价格字段是数字类型,你传字符串"29.9"进去会报错。

解决:传对应类型的数据。数字传float,日期传时间戳或格式化字符串,单选传选项名称字符串。

坑4:飞书在线表格vs多维表格选错

在线表格用"建立表格连接"指令,多维表格用HTTP请求调API。不要搞混了,两套体系完全不同。

在线表格适合做数据展示和简单存储,多维表格适合做结构化数据管理。采集数据入库用多维表格更合适,因为可以设置字段类型和视图筛选。

坑5:追加数据位置错误

飞书在线表格追加数据时,如果不填追加单元格位置,默认从最后一个有数据的单元格的下一行开始。但如果表格里有空行,它会从空行开始写,导致数据不连续。

解决:先读取总行数,然后指定从总行数+1的位置开始追加。


六、飞书集成 vs 其他通知方式

影刀还支持钉钉群通知和企业微信群通知,配置方式类似:

  • 钉钉:群机器人→添加机器人→获取Webhook地址+密钥
  • 企业微信:群机器人→添加机器人→获取Webhook地址
  • 飞书:群机器人→添加机器人→获取Webhook地址

选哪个看你们公司用哪个。飞书的优势是多维表格功能强,适合做数据看板。钉钉和企业微信更偏消息通知。

在这里插入图片描述

如果是简单的异常告警,三个都行。如果要数据入库+可视化看板,飞书多维表格是首选。


七、调试技巧

飞书集成出问题,排查顺序:

  1. 先测Webhook地址:用浏览器或Postman手动发一条请求,看机器人能不能收到消息
  2. 再测应用权限:用获取token接口看能不能正常返回token
  3. 最后测具体操作:用查询记录接口看能不能读到数据

HTTP请求的响应内容一定要打印日志看。返回的JSON里有错误码和错误信息,飞书的错误码可以在飞书官网查。

# 打印HTTP响应
print(f"状态码: {response.status_code}")
print(f"响应内容: {response.text}")

常见错误码:

  • 99991663:token无效或过期
  • 99991661:权限不足
  • 1254003:app_token不存在
  • 1254040:table_id不存在

内容标签:影刀RPA、飞书集成、Webhook机器人、多维表格、飞书在线表格、API认证、消息通知

作者:林焱

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐