小龙哥经验包 · 经验 010

不让 AI 猜窗口;把端点、身份、权限、对象和回读写成一条可验收的指挥协议

把飞书交给豆豆:国内版、CLI、本人身份一次打通

国内版飞书要先锁定 feishu 品牌和国内端点,再用官方 lark-cli 分清 user 与 bot。本文给出从安装、授权、精确找人、幂等发送到回读验收的最短路径,以及一段可直接写入全局规则的提示词。

一句话结论:把飞书交给 AI,不是让它学会点窗口,而是给它一条硬规则——国内版、官方 CLI、身份显式、对象唯一、写入幂等、结果回读。

什么时候用

你希望 AI 帮你找人、发消息、查任务、读文档、改知识库、排日程或处理审批时,用这套方法。

如果只是让飞书里的一句话进入 Codex,那是消息通道,走 WebSocket、事件订阅或可靠网关;如果 AI 要真的操作飞书里的业务资源,才进入本文的 CLI 控制面。两层可以配合,不能混成“遥控飞书客户端”。

本文默认你使用中国大陆版飞书。国际版 Lark 的账号和端点不同,不要混用。验证码、实名、付款、法律确认和不可逆高风险动作仍由本人处理;普通 OAuth、Scope 补齐和 Token 刷新,可以按你预先写下的授权规则交给 AI 静默完成。

怎么做

1. 先锁国内版,不要让 AI 猜

安装官方 CLI:

npx @larksuite/cli@latest install
lark-cli --version

初始化时显式写 feishu,并给工作账号一个稳定配置名:

lark-cli config init --new --brand feishu --name work

看到 accounts.feishu.cnopen.feishu.cnmcp.feishu.cn 才是国内版链路。若出现国际版 Lark 端点,先修配置,不要带着错误品牌继续授权。

2. 先选身份,再选命令

你想做什么身份关键前提
以本人名义发消息、读本人日历、云盘、邮箱--as user应用后台 Scope + 本人 OAuth,两层都要有
让应用机器人发通知、管理机器人可见资源--as bot应用后台 Scope,不需要本人 OAuth
上一步用哪种身份拿到 ID,下一步继续消费沿用原身份每条命令都显式写 --as,不依赖默认值

权限报错不是切换身份的理由。本人权限不足,就补本人权限;机器人权限不足,就补机器人 Scope。偷偷换身份,也许命令会成功,但发信人、资源归属和可见范围已经变了。

3. 一次授权,分层验收

如果目标就是把常用飞书域一次打通:

lark-cli auth login --profile work --domain all --no-wait --json

命令会返回国内版授权地址。AI 能在已经登录的受管浏览器中完成普通同意,就直接完成;遇到验证码、实名或只能由本人做的身份确认,再只交还那一个闸门。授权结束后,不要凭“网页显示成功”收工:

lark-cli auth status --profile work --json --verify
lark-cli doctor --profile work
lark-cli auth check --profile work --scope "im:message.send_as_user contact:user:search"

这里要分清三件事:应用后台已经开通 Scope、当前用户已经 OAuth、目标文档或群对当前身份有 ACL。前两项全开,也不会自动得到每一份私有资源。

4. 找到唯一对象,再写入

同名联系人不能靠猜。先用本人身份搜索,并尽量加“聊过、内部成员”等过滤:

lark-cli contact +search-user \
  --profile work \
  --query "张三" \
  --has-chatted \
  --exclude-external-users \
  --as user \
  --json

只有姓名、组织、是否聊过和 open_id 能共同锁定唯一对象时才继续。群聊同理:最终发送使用精确 chat_id,不用群名临时再猜一次。

先预演:

lark-cli im +messages-send \
  --profile work \
  --user-id "ou_xxx" \
  --text "今晚 7 点见。" \
  --as user \
  --idempotency-key "source-msg-20260812-001" \
  --dry-run

确认收件人、正文和身份后,用同一个幂等键去掉 --dry-run 真正发送。幂等键来自稳定的来源消息 ID 或任务 ID,不能每次重试都随机换一个。

发送成功会返回 message_id。最后按这个 ID 回读:

lark-cli im +messages-mget \
  --profile work \
  --message-ids "om_xxx" \
  --as user \
  --json

回读里的发件人、收件会话和正文都一致,才叫送达闭环。CLI 超时、返回未知或回读不一致时停止,不自动重发,也不回退机器人或客户端界面。

容易踩坑

  • 把飞书当成 Lark。网页能打开,不代表 OAuth 和 API 会落到同一租户。
  • 只看“521 项权限已开”。应用 Scope、用户 OAuth、资源 ACL 是三层,不能互相代替。
  • 省略 --as。CLI 可能按默认配置选身份,结果由机器人发出,或资源归机器人所有。
  • 用名字直接发。重名、外部联系人和历史会话都可能让“张三”不是你以为的张三。
  • 发送超时就重试。没有稳定幂等键和回读时,最容易制造重复消息。
  • CLI 报错就点客户端。界面点击难审计、难幂等、难回读,也会抢走正在使用的键盘和鼠标。
  • 把“豆豆全权处理”理解成无边界。授权自治解决的是少打扰,不是取消付款、法律、不可逆删除和身份硬闸。

验收标准

  • lark-cli auth status --json --verify 显示目标用户已验证,Token 有效。
  • lark-cli doctor 通过,端点属于国内版飞书。
  • 关键 Scope 用 auth check 逐项通过;具体资源 ACL 另行实测。
  • 联系人或群只命中一个精确对象,不靠名字猜。
  • 写操作能 dry-run,创建或发送带稳定幂等键。
  • 成功后按返回 ID 回读,身份、对象和内容一致。
  • 失败时真实停止,没有机器人代发、界面补点、未知投递重试或重复消息。

可复用提示词

把下面这段写进 AI 的全局规则,只需一次:

以后所有飞书事项都按中国大陆版执行,统一使用官方 lark-cli / OpenAPI,客户端界面遥控默认禁用。

联系人、群、消息、任务、文档、知识库、多维表格、日历、会议、审批、邮箱、权限和附件都先走 CLI。初始化显式使用 brand=feishu,不得混用国际版 Lark 端点。

每条命令必须显式选择 --as user 或 --as bot,并让身份贯穿整条工作流。以我本人名义操作时使用 user;权限不足就修原身份的 Scope、OAuth 或资源 ACL,不得换机器人绕过,也不得退回界面点击。

写入前解析唯一对象;支持时先 dry-run;创建或发送使用稳定幂等键;成功后按返回 ID 回读。重名、权限不足、投递未知或回读不一致时停止,不自动重发。

普通 OAuth、Scope、Token 刷新和资源访问授权,在当前明确业务目标内由你静默判断并完成,不要打扰我。验证码、实名/活体、银行卡与真实付款、法律确认、不可逆删除,以及 CLI 明确标为 high-risk-write 的动作,仍保留本人硬闸。

最后只告诉我:做成了什么、用的身份、回读证据和剩余风险;不要汇报中间过程。

以后日常只要自然说:

用我的飞书身份找到腾龙网维里和我聊过的张三,先确认唯一对象,再把“今晚 7 点见”发给他。全程 CLI,dry-run、幂等发送并回读;如果对象不唯一或投递未知就停。

来源与修订

安装、认证、user / bot 身份、命令层级、JSON 成功信封和 dry-run 以飞书官方维护的 larksuite/cli 仓库为准;Scope、OAuth、资源 ACL、授权拆分和高风险写入边界以官方 lark-shared Skill 为准。企业需要接入自己的凭据库、审计或请求拦截时,参考飞书开放平台的 CLI Agent 嵌入文档。

本文命令于 2026 年 8 月 12 日按官方 lark-cli 1.0.86 实测。CLI 仍会更新,具体命令以本机 --help 和官方文档为准;租户管理员审批、组织策略和具体资源 ACL 不会因为复制本文而自动放开。

READERS / RESPONSE

读到这里,留一点温度。

觉得有帮助,就送一朵小红花;有自己的经历,也欢迎写在下面。

次阅读 朵小红花 条评论

评论

写下想说的话

0/500

无需登录;评论发布后会公开显示。

还没有评论。欢迎留下第一句。

SOURCES / REVISIONS

来源与修订都留在明处。

小修沿用当前地址;路线被推翻时另开新篇,旧结论不会被静默抹掉。

  1. v1.0

    首次公开国内版飞书 CLI、本人身份、授权自治、精确对象、幂等写入和回读验收的完整指挥协议。