---
id: EXP-010
sequence: 10
number: "010"
kind: experience
slug: feishu-cli-doudou
label: 经验 010
category: AI 协作
topics:
  - 飞书 CLI
  - 豆豆
  - OAuth
  - AI 指挥
  - 权限治理
audience: 想让 AI 代办飞书事务，又不想被授权弹窗、机器人身份和界面遥控反复打断的人
read_minutes: 9
title: 把飞书交给豆豆：国内版、CLI、本人身份一次打通
subtitle: 不让 AI 猜窗口；把端点、身份、权限、对象和回读写成一条可验收的指挥协议
summary: 国内版飞书要先锁定 feishu 品牌和国内端点，再用官方 lark-cli 分清 user 与 bot。本文给出从安装、授权、精确找人、幂等发送到回读验收的最短路径，以及一段可直接写入全局规则的提示词。
published_at: "2026-08-12"
updated_at: "2026-08-12"
version: v1.0
verification: verified
visibility: public
publication_state: published
legacy_path: ""
public_url: https://aixlg.com/exp/feishu-cli-doudou/
wechat_url: ""
source_href: https://aixlg.com/exp/feishu-cli-doudou/
source_cta: 复制国内版飞书 CLI 指挥协议
article_state: v1.0 命令路径已按官方 lark-cli 1.0.86 本机实测；租户审批和具体资源 ACL 仍以读者自己的飞书环境为准
takeaways:
  - 国内版飞书必须显式使用 feishu 品牌，不能和国际版 Lark 端点混用
  - 代表本人操作用 user，应用通知用 bot；身份要贯穿整条命令链
  - 联系人、消息、任务、文档等业务操作统一走官方 CLI / OpenAPI，CLI 失败不退回界面遥控
  - 授权、发送和完成必须分别验收；Scope 全开不等于拥有每一份具体资源的 ACL
  - 写入先锁定精确对象，支持时 dry-run，带幂等键，成功后按返回 ID 回读
deliverables:
  - 国内版飞书 CLI 的最短安装与授权路径
  - user / bot 身份判断表
  - 一套精确找人、幂等发送、回读验收命令
  - 可直接写进 AI 全局规则的豆豆指挥提示词
source_refs:
  - https://github.com/larksuite/cli
  - https://github.com/larksuite/cli/blob/main/skills/lark-shared/SKILL.md
  - https://open.feishu.cn/document/mcp_open_tools/feishu-cli/embed-feishu-cli-in-agent
replaces: []
revisions:
  - version: v1.0
    date: "2026-08-12"
    note: 首次公开国内版飞书 CLI、本人身份、授权自治、精确对象、幂等写入和回读验收的完整指挥协议。
audio: []
---

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

## 什么时候用

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

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

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

## 怎么做

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

安装官方 CLI：

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

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

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

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

### 2. 先选身份，再选命令

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

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

### 3. 一次授权，分层验收

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

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

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

~~~bash
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. 找到唯一对象，再写入

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

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

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

先预演：

~~~bash
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 回读：

~~~bash
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 的全局规则，只需一次：

~~~text
以后所有飞书事项都按中国大陆版执行，统一使用官方 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 的动作，仍保留本人硬闸。

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

以后日常只要自然说：

~~~text
用我的飞书身份找到腾龙网维里和我聊过的张三，先确认唯一对象，再把“今晚 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 不会因为复制本文而自动放开。
