手把手教你用飞书 CLI 做自动化,我的早晚必备工具
下载与安装步骤
飞书 CLI 这东西,我第一次接触是在一个技术群里看到别人分享的。说实话,一开始我没太当回事,觉得不就是个命令行工具嘛。直到后来我发现自己每天要重复做好多机械操作,比如整理会议记录、批量发送飞书消息、甚至定时拉取飞书文档做备份,这才想起去试试。找安装包很简单,直接去飞书开放平台找到开发者工具区域,点本页下载按钮,就能拿到对应系统的安装程序。Windows 系统是个 exe,Mac 是 dmg 包,Linux 用户给的是 tar.gz。我当时用的是 Mac,双击 dmg 后把图标拖进 Applications 文件夹,然后在终端里敲 `lark-cli --version`,看到版本号输出来的时候,心里踏实了。有个坑得提醒你:如果你的系统是 macOS Catalina 及以上,第一次运行可能会被 Gatekeeper 拦住,这时候去系统偏好设置-安全性与隐私里点「仍要打开」就行,不是什么大事。
安装完后别急着用,记得先配环境变量。如果你用的是 zsh(现在大部分 Mac 都默认 zsh),在 `~/.zshrc` 里加一行 `export PATH="/Applications/LarkCli.app/Contents/Resources:$PATH"`,保存后执行 `source ~/.zshrc`。Windows 用户一般安装程序会自动加进 PATH,但如果终端里找不到命令,去环境变量里手动添一下安装目录。Linux 用户解压后把二进制文件放到 `/usr/local/bin` 就行。我当初折腾了十分钟才搞定,后来才发现官网的文档里其实写得很清楚,只是我跳过去了。
初始化认证与基本配置
装好之后第一步就是登录认证。飞书 CLI 的本质是通过 API 调用飞书的各种服务,所以你得先拿到一个 token。在终端里输入 `lark-cli auth`,它会弹出一个浏览器窗口让你扫码登录。这里有个细节:如果你用的是企业版飞书,确保扫码的账号有相应权限,比如能创建应用、发消息。我第一次就栽了,用个人小号扫码,结果后面调用飞书机器人接口时报 403,折腾了半天才发现是权限不够。后来换成工作账号重新认证,一切顺畅。
认证成功后,会生成一个本地配置文件,默认在 `~/.lark-cli/config.json` 里。你可以手动编辑这个文件,比如修改默认的 `app_id` 和 `app_secret`。很多人不知道飞书 CLI 其实支持多租户配置,就是你可以同时管理多个飞书账号。具体做法是在认证时加个 `--profile` 参数,比如 `lark-cli auth --profile work` 和 `lark-cli auth --profile personal`,之后用的时候指定 `--profile work` 就行了。这对那些在多个公司或者项目组里来回切换的人来说,简直是救命功能。我偶尔还会用 `lark-cli config set` 命令来调整超时时间,默认是 30 秒,如果你网络不太稳定,可以设到 60 秒,省得老是断连。
用 CLI 自动发送消息
这应该是飞书 CLI 最实用的功能之一。每天早上一睁眼,我得给团队发个今日待办清单,之前都是手动复制粘贴,烦得要死。后来我用 `lark-cli message send` 命令,配合一个简单的 shell 脚本,彻底解放了双手。具体命令长这样:`lark-cli message send --chat_id=oc_xxxx --msg_type=text --content="今日任务:检查服务器日志、更新项目文档"`。那个 `chat_id` 怎么找到?去飞书群里右键群聊设置,拉到最下面能看到群二维码和 ID,复制出来就是。如果你懒得找,也可以用 `lark-cli chat list` 列出所有你参与的群,它会显示群名和 ID,直接挑就行。
消息格式不只文本,我还试过富文本和消息卡片。富文本用 `--msg_type=post`,后面跟一个 JSON 文件路径,里面定义标题、加粗、链接这些。卡片更炫酷,用 `--msg_type=interactive`,但那个 JSON 结构复杂些,我建议先从官网抄一个模板,改改参数就行了。有一个坑:飞书对消息频次有限制,单个机器人每分钟不能超过 5 条消息。我第一次写脚本时没注意,循环发 20 条,结果被 ban 了半小时。后来学乖了,在脚本里加个 `sleep 12` 秒的间隔,稳得很。
文档自动化备份与下载
我手上有个项目需要每周备份飞书文档,主要是产品需求文档和会议纪要。用飞书 CLI 做这事简直不要太爽。先拿文档 token:每个飞书文档都有一个唯一的 token,在 URL 里能看到,比如 `https://bytedance.feishu.cn/docs/doccnZvZvZvZvZvZv...`,那个 `doccn` 开头的一串就是。然后执行 `lark-cli doc export --token=doccnZvZvZv --format=markdown --output=./backup/`,它会直接把文档转成 markdown 文件保存到本地。支持格式还有 pdf、docx、txt,看场景选。我一般用 markdown 方便 git 版本管理,但发给客户时用 pdf。
不过要注意,飞书文档里如果嵌了图片或者表格,导出 markdown 时图片会被转成一个链接,而不是直接下载到本地。如果你需要离线查看,我建议先导出成 pdf 或者用 `--include-attachment` 参数,但那个参数在早期版本里不支持,现在不确定。我自己的办法是写个后处理脚本,用 `wget` 把图片链接下载下来,再替换 markdown 里的引用路径。还有一点,批量导出时别一次性发太多请求,飞书 API 有频率限制,我通常一次处理 10 个文档,停顿 5 秒再继续。
定时任务的设置与注意事项
自动化不能光靠手动敲命令,得让它自己跑。我把飞书 CLI 的脚本和系统的 cron 任务绑在一起。Mac 和 Linux 用户直接 `crontab -e`,加一行比如 `0 9 * * 1-5 /usr/local/bin/lark-cli message send --chat_id=oc_xxx --msg_type=text --content="早上好,记得站会"`,这代表工作日每天上午 9 点发提醒。Windows 用户可以用任务计划程序,不过得注意路径要写全,最好把飞书 CLI 的绝对路径写上,因为计划任务的环境变量可能和终端不一样。
一个让我踩过坑的地方:cron 执行时默认用的是 sh 而不是 bash,而且环境变量不完整。我第一次写脚本时用了 `#!/bin/bash`,但没指定 PATH,结果运行时报 `lark-cli: command not found`。后来在脚本开头加一句 `export PATH="/usr/local/bin:$PATH"` 就解决了。还有一个细节:脚本里如果需要用到文件路径,一定用绝对路径,别用相对路径。比如把文档导出到 `~/backup/`,在 cron 里要写成 `/Users/你的用户名/backup/`,不然文件会跑丢。我用的是个人 Mac,所以 `~` 能识别,但有些 Linux 发行版未必,还是写死最保险。
多账号切换与团队协作
工作中难免要兼顾多个飞书空间,比如一个是公司主组织,另一个是项目组临时建的。飞书 CLI 的多配置文件功能救了命。每个配置对应一个 `--profile`,你可以在不同终端窗口里分别跑不同的任务,不会相互干扰。比如我让电脑每天凌晨 3 点用公司的配置拉取监控数据生成日报,同时另一个定时任务用项目组的配置给客户群发周报。操作很简单:`lark-cli --profile company auth` 和 `lark-cli --profile project auth` 分别认证一次,之后调用任何命令时加 `--profile` 参数就行。
团队协作方面,我建议把所有脚本放到一个共享 git 仓库里,但注意不要把 token 和 secret 硬编码到脚本里。我是用环境变量来管理敏感信息,在 `.bashrc` 里 `export FEISHU_PROFILE="work"`,脚本里直接读 `$FEISHU_PROFILE`。还有个好处是别人 fork 仓库后不需要改代码,只需要配置自己的环境变量。如果你们团队用 CI/CD,可以在流水线里设置这些变量,让飞书 CLI 自动往群里发构建结果。我见过最骚的操作是把飞书 CLI 和 Jenkins 集成,构建失败时自动 @ 责任人,比邮件提醒快多了。
常用排错与性能优化
用久了肯定会遇到各种幺蛾子。最常见的错误是 `Error: 403`,这通常是 token 过期或者权限不够。排查思路很简单:先重新跑一次 `lark-cli auth` 刷新凭证,如果还 403,就去飞书开发者后台看看应用权限有没有勾选对应的 API。我之前有个脚本要读取群成员列表,但忘了在后台开启 `im:chat:readonly` 权限,所以一直报错,开启之后就好了。另一个常见问题是网络超时,可以用 `--timeout` 参数调整,比如 `lark-cli doc export --token=xxx --timeout=60`,或者在配置文件的 `request_timeout` 字段里统一设置。
性能上,如果你要批量处理大量文档,我建议用 `lark-cli` 的并发模式。虽然官方没直接说支持,但你可以用 `xargs` 或者 `parallel` 配合进程控制。比如 `cat doc_tokens.txt | xargs -P 3 -I {} lark-cli doc export --token={} --format=pdf`,这样同时处理 3 个文档,速度翻倍。但要小心,并发数太高会被 API 限制,我试过开到 10,结果被限速了 5 分钟。稳妥起见控制在 3 以下,文档体积大的话再加个 `sleep 2` 的间隔。另外,脚本里尽量别在循环里重复执行认证,认证一次后在有效期内(通常是 1 小时)复用就行,能省不少时间。