lark-workflow-crm
微型团队 CRM 工作流
CRITICAL — 开始前 MUST 先用 Read 工具读取 ../lark-shared/SKILL.md,其中包含认证、权限处理
适用场景
- "帮我创建一个CRM系统" / "搭建销售管理" / "新建CRM"
- "新增客户:北京星辰科技,对接人王总" / "客户建档"
- "给北京星辰创建商机:ERP采购,50万" / "商机跟进"
- "跟进记录:今天电话联系了王总,约下周三面访"
- "看看销售漏斗" / "本月赢单了多少" / "业绩排行"
- "生成今天的销售日报" / "本周跟进汇总"
- "创建客户登记表单" / "咨询表单"
- "创建销售看板" / "销售仪表盘"
- "跟进提醒" / "超时预警" / "赢单报喜" / "每周销售简报"
前置条件
仅支持 user 身份。执行前确保已授权:
lark-cli auth login --domain base,im,contact
系统架构
微型团队 CRM (lark-workflow-crm)
│
├── 数据层:飞书多维表格 (Bitable)
│ ├── 客户信息主表 (customers) — 客户档案
│ ├── 商机管理表 (opportunities) — 销售漏斗
│ └── 跟进记录表 (follow_ups) — 沟通记录
│
├── 计算层
│ ├── 赢单概率建议 (formula) — 根据商机阶段自动建议概率
│ ├── 商机天数 (formula) — 距商机创建的天数
│ ├── 客户商机数量 (formula) — 关联商机计数
│ ├── 客户累计赢单金额 (formula) — 关联赢单金额汇总
│ └── 商机跟进次数 (formula) — 关联跟进计数
│
├── 关联关系(双向)
│ ├── customers ↔ opportunities — 一个客户多个商机
│ ├── customers ↔ follow_ups — 跟进记录关联客户
│ └── opportunities ↔ follow_ups — 跟进记录关联商机
│
├── 视图层
│ ├── 商机阶段看板 (Kanban) — 按阶段分列拖拽
│ ├── 我的商机 — 当前用户负责的商机
│ ├── 跟进时间线 — 按时间倒序的跟进记录
│ └── 本月赢单 — 当月赢单列表
│
├── 仪表盘
│ ├── 销售漏斗 (funnel) — 各阶段商机数量
│ ├── 本月赢单金额 (statistics) — SUM WHERE 阶段=赢单
│ ├── 商机总金额 (statistics) — 在途商机金额
│ ├── 客户数量 (statistics) — 总客户数
│ ├── 阶段分布 (pie) — 各阶段占比
│ ├── 负责人业绩排行 (column) — 赢单金额排行
│ └── 本周跟进 (table) — 本周跟进记录
│
├── 表单
│ └── 客户咨询登记表 — 客户自助提交咨询
│
├── 交互层:用户自然语言指令
│ ├── 系统初始化 → 创建 Base + 表 + 字段 + 关联 + 视图 + 仪表盘 + 表单
│ ├── 日常操作 → 客户建档 / 商机管理 / 跟进记录
│ └── 数据分析 → 漏斗查询 / 业绩统计 / 销售日报
│
└── 通知层:飞书消息
├── 每日跟进提醒
├── 超时未跟进预警
├── 赢单报喜通知
└── 每周销售简报
Agent 核心规则
- 只使用
lark-cli base +...原子命令 — 不走lark-cli api直接调用 - 建表必须先建空表再逐个加字段 —
+table-create不带--fields参数,先建空表再用+field-create逐个加字段,每次间隔 1.5 秒 - 关联字段必须使用双向关联 —
bidirectional: true,否则无法在公式中做跨表聚合 - 跨表计算优先使用 formula 字段 — 公式字段是 lookup 的超集,能用 formula 就不用 lookup
- 公式字段创建前先读 guide — 读取
../lark-base/references/formula-field-guide.md +data-query的 table-id 放在 DSL 中 — 不支持--table-id参数,需放在--dsl的datasource.table.tableId中+data-query只支持存储字段 — 不支持公式字段、lookup 字段、关联字段做聚合- 写记录前先拿字段结构 —
+field-list确认字段名和类型 - 表名/字段名精确匹配 — 禁止凭自然语言猜测,必须来自
+table-list/+field-list返回值 +xxx-list禁止并发 — 所有 list 命令串行执行- 写入串行 + 间隔 —
+record-upsert串行,间隔 0.5-1 秒 - 分页拉取 —
+record-list --limit 200,用 offset 分页 - 跟进记录中提及阶段变更时同步更新商机 — 用户说"推进到方案报价"时,更新对应商机的商机阶段字段
- 创建仪表盘前先读 guide — 读取
../lark-base/references/dashboard-block-data-config.md - 创建表单前先读 guide — 读取
../lark-base/references/lark-base-form-create.md
Phase 1:系统初始化
Step 1.1: 创建 Base
lark-cli base +base-create --name "微型团队CRM" --as user
记录返回的 base_token(后续所有命令需要)。
Step 1.2: 创建数据表(先建空表,间隔 2 秒)
IMPORTANT:不要使用
--fields参数一次性创建多字段,容易触发限流。
# 表 1:客户信息主表
lark-cli base +table-create --base-token "<base_token>" --name "客户信息" --as user
sleep 2
# 表 2:商机管理表
lark-cli base +table-create --base-token "<base_token>" --name "商机管理" --as user
sleep 2
# 表 3:跟进记录表
lark-cli base +table-create --base-token "<base_token>" --name "跟进记录" --as user
Step 1.3: 获取各表 table_id
lark-cli base +table-list --base-token "<base_token>" --as user
记录各表的 table_id。
Step 1.4: 逐个添加存储字段(每创建一个间隔 1.5 秒)
客户信息表字段
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"text","name":"客户名称"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"select","name":"客户类型","multiple":false,"options":[{"name":"个人客户"},{"name":"企业客户"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"text","name":"联系人"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"text","name":"手机号","style":{"type":"phone"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"text","name":"邮箱","style":{"type":"email"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"select","name":"行业","multiple":false,"options":[{"name":"互联网"},{"name":"金融"},{"name":"教育"},{"name":"制造业"},{"name":"零售"},{"name":"其他"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"select","name":"公司规模","multiple":false,"options":[{"name":"1-10人"},{"name":"11-50人"},{"name":"51-200人"},{"name":"200人以上"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"select","name":"来源渠道","multiple":false,"options":[{"name":"主动咨询"},{"name":"转介绍"},{"name":"展会"},{"name":"线上广告"},{"name":"社群"},{"name":"其他"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"text","name":"地址"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"user","name":"负责人","multiple":false}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"select","name":"重要程度","multiple":false,"options":[{"name":"高"},{"name":"中"},{"name":"低"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"select","name":"客户状态","multiple":false,"options":[{"name":"活跃"},{"name":"沉睡"},{"name":"流失"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" --json '{"type":"text","name":"备注"}' --as user
sleep 2
商机管理表字段
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"text","name":"商机名称"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"number","name":"商机金额","style":{"type":"currency","precision":2,"currency_code":"CNY"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"select","name":"商机阶段","multiple":false,"options":[{"name":"待接触"},{"name":"需求确认"},{"name":"方案报价"},{"name":"商务谈判"},{"name":"赢单"},{"name":"丢单"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"user","name":"负责人","multiple":false}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"datetime","name":"预计成交日期","style":{"format":"yyyy-MM-dd"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"text","name":"竞争对手"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"select","name":"丢单原因","multiple":false,"options":[{"name":"价格"},{"name":"功能"},{"name":"竞品"},{"name":"无预算"},{"name":"项目取消"},{"name":"其他"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"select","name":"商机来源","multiple":false,"options":[{"name":"新开发"},{"name":"老客户增购"},{"name":"转介绍"}]}' --as user
sleep 2
# 添加系统字段:创建时间(公式字段"商机天数"依赖此字段)
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" --json '{"type":"created_at","name":"创建时间","style":{"format":"yyyy-MM-dd HH:mm"}}' --as user
跟进记录表字段
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" --json '{"type":"select","name":"跟进方式","multiple":false,"options":[{"name":"电话"},{"name":"微信"},{"name":"面访"},{"name":"邮件"},{"name":"视频会议"},{"name":"其他"}]}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" --json '{"type":"text","name":"跟进摘要"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" --json '{"type":"text","name":"客户反馈"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" --json '{"type":"text","name":"下一步计划"}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" --json '{"type":"datetime","name":"下次跟进时间","style":{"format":"yyyy-MM-dd HH:mm"}}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" --json '{"type":"user","name":"跟进人","multiple":false}' --as user
sleep 1.5
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" --json '{"type":"select","name":"商机阶段变更","multiple":false,"options":[{"name":"无变更"},{"name":"推进到下一阶段"},{"name":"退回上一阶段"},{"name":"赢单"},{"name":"丢单"}]}' --as user
sleep 1.5
# 添加系统字段:创建时间(公式字段"最后跟进时间"依赖此字段)
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" --json '{"type":"created_at","name":"创建时间","style":{"format":"yyyy-MM-dd HH:mm"}}' --as user
Step 1.5: 创建双向关联字段(每创建一个间隔 2 秒)
CRITICAL:关联字段必须使用
bidirectional: true,否则无法在公式/lookup 中做跨表聚合。
# 商机管理表 → 客户信息表
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--json '{"type":"link","name":"关联客户","link_table":"客户信息","bidirectional":true,"bidirectional_link_field_name":"关联商机"}' \
--as user
sleep 2
# 跟进记录表 → 客户信息表
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" \
--json '{"type":"link","name":"关联客户","link_table":"客户信息","bidirectional":true,"bidirectional_link_field_name":"跟进记录"}' \
--as user
sleep 2
# 跟进记录表 → 商机管理表
lark-cli base +field-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" \
--json '{"type":"link","name":"关联商机","link_table":"商机管理","bidirectional":true,"bidirectional_link_field_name":"跟进记录"}' \
--as user
sleep 2
Step 1.6: 创建公式字段
IMPORTANT:创建公式字段前 MUST 先读取
../lark-base/references/formula-field-guide.md,创建后追加--i-have-read-guide
商机管理表:赢单概率建议
根据商机阶段自动建议赢单概率。
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--json '{"type":"formula","name":"赢单概率建议","expression":"SWITCH([商机阶段], \"待接触\", 10, \"需求确认\", 30, \"方案报价\", 50, \"商务谈判\", 75, \"赢单\", 100, 0)"}' \
--i-have-read-guide \
--as user
sleep 2
商机管理表:商机天数
距商机创建的天数。
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--json '{"type":"formula","name":"商机天数","expression":"DAYS(NOW(), [创建时间])"}' \
--i-have-read-guide \
--as user
sleep 2
客户信息表:客户商机数量
通过关联字段跨表计数。
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" \
--json '{"type":"formula","name":"商机数量","expression":"COUNTA([关联商机])"}' \
--i-have-read-guide \
--as user
sleep 2
客户信息表:客户累计赢单金额
通过公式跨表条件聚合。
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" \
--json '{"type":"formula","name":"累计赢单金额","expression":"SUM([关联商机].[商机金额].FILTER([关联商机].[商机阶段] = \"赢单\"))"}' \
--i-have-read-guide \
--as user
sleep 2
客户信息表:最后跟进时间
取跟进记录中最近一次跟进时间。
lark-cli base +field-create --base-token "<base_token>" --table-id "<customers_table_id>" \
--json '{"type":"formula","name":"最后跟进时间","expression":"MAX([跟进记录].[创建时间])"}' \
--i-have-read-guide \
--as user
sleep 2
注意:跟进记录表的
创建时间是created_at系统字段,公式中通过双向关联字段[跟进记录]引用。确保跟进记录表已创建created_at系统字段(Step 1.4 中已添加)。
商机管理表:跟进次数
通过关联字段跨表计数。
lark-cli base +field-create --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--json '{"type":"formula","name":"跟进次数","expression":"COUNTA([跟进记录])"}' \
--i-have-read-guide \
--as user
如果公式中使用
created_at系统字段,需要用+table-get获取实际系统字段名(可能叫"创建时间"),确保公式中的字段名与+field-list返回值一致。
Step 1.7: 创建视图
视图 1:商机阶段看板(Kanban)
lark-cli base +view-create --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--json '{"name":"商机阶段看板","type":"kanban"}' \
--as user
sleep 2
# 设置看板分组:按商机阶段分组
lark-cli base +view-set-group --base-token "<base_token>" --table-id "<opportunities_table_id>" --view-id "<kanban_view_id>" \
--json '[{"field":"商机阶段"}]' \
--as user
视图 2:跟进时间线
lark-cli base +view-create --base-token "<base_token>" --table-id "<follow_ups_table_id>" \
--json '{"name":"跟进时间线","type":"grid"}' \
--as user
sleep 2
# 设置排序:按创建时间倒序
lark-cli base +view-set-sort --base-token "<base_token>" --table-id "<follow_ups_table_id>" --view-id "<timeline_view_id>" \
--json '[{"field_name":"创建时间","desc":true}]' \
--as user
视图 3:本月赢单
lark-cli base +view-create --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--json '{"name":"本月赢单","type":"grid"}' \
--as user
sleep 2
# 设置筛选:商机阶段 = 赢单
lark-cli base +view-set-filter --base-token "<base_token>" --table-id "<opportunities_table_id>" --view-id "<won_view_id>" \
--json '{"conjunction":"and","conditions":[{"field_name":"商机阶段","operator":"is","value":["赢单"]}]}' \
--as user
Step 1.8: 创建仪表盘
IMPORTANT:创建仪表盘 Block 前先读取
../lark-base/references/dashboard-block-data-config.md
# 创建仪表盘
lark-cli base +dashboard-create --base-token "<base_token>" --name "销售看板" --as user
记录返回的 dashboard_id。
Block 1:销售漏斗
lark-cli base +dashboard-block-create --base-token "<base_token>" --dashboard-id "<dashboard_id>" \
--name "销售漏斗" --type funnel \
--data-config '{"table_name":"商机管理","count_all":true,"group_by":[{"field_name":"商机阶段","mode":"integrated"}]}' \
--as user
sleep 1.5
Block 2:本月赢单金额
lark-cli base +dashboard-block-create --base-token "<base_token>" --dashboard-id "<dashboard_id>" \
--name "本月赢单金额" --type statistics \
--data-config '{"table_name":"商机管理","series":[{"field_name":"商机金额","rollup":"SUM"}],"filter":{"conjunction":"and","conditions":[{"field_name":"商机阶段","operator":"is","value":"赢单"}]}}' \
--as user
sleep 1.5
Block 3:商机总金额(在途)
lark-cli base +dashboard-block-create --base-token "<base_token>" --dashboard-id "<dashboard_id>" \
--name "商机总金额" --type statistics \
--data-config '{"table_name":"商机管理","series":[{"field_name":"商机金额","rollup":"SUM"}],"filter":{"conjunction":"and","conditions":[{"field_name":"商机阶段","operator":"isNot","value":"赢单"},{"field_name":"商机阶段","operator":"isNot","value":"丢单"}]}}' \
--as user
sleep 1.5
Block 4:客户数量
lark-cli base +dashboard-block-create --base-token "<base_token>" --dashboard-id "<dashboard_id>" \
--name "客户总数" --type statistics \
--data-config '{"table_name":"客户信息","count_all":true}' \
--as user
sleep 1.5
Block 5:阶段分布
lark-cli base +dashboard-block-create --base-token "<base_token>" --dashboard-id "<dashboard_id>" \
--name "阶段分布" --type pie \
--data-config '{"table_name":"商机管理","count_all":true,"group_by":[{"field_name":"商机阶段","mode":"integrated"}]}' \
--as user
sleep 1.5
Block 6:负责人业绩排行
lark-cli base +dashboard-block-create --base-token "<base_token>" --dashboard-id "<dashboard_id>" \
--name "负责人业绩排行" --type column \
--data-config '{"table_name":"商机管理","series":[{"field_name":"商机金额","rollup":"SUM"}],"group_by":[{"field_name":"负责人","mode":"integrated"}],"filter":{"conjunction":"and","conditions":[{"field_name":"商机阶段","operator":"is","value":"赢单"}]}}' \
--as user
sleep 1.5
Step 1.9: 创建表单
在客户信息表上创建客户咨询登记表单,方便客户自助提交信息。
lark-cli base +form-create --base-token "<base_token>" --table-id "<customers_table_id>" \
--name "客户咨询登记" \
--description "欢迎填写咨询信息,我们会尽快与您联系" \
--as user
表单创建后,可使用 +form-questions-list 查看已有问题,再用 +form-questions-create 添加或调整问题。
Phase 2:客户管理
2.1 新增客户
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<customers_table_id>" \
--json '{"客户名称":"北京星辰科技有限公司","客户类型":"企业客户","联系人":"王总","手机号":"138xxxx","邮箱":"wang@xx.com","行业":"互联网","公司规模":"51-200人","来源渠道":"展会","负责人":[{"id":"ou_xxx"}],"重要程度":"高","备注":""}' \
--as user
Agent 处理逻辑:
- 解析用户输入:提取客户名称、客户类型、联系人、手机、邮箱、行业、规模、来源、负责人、重要程度、备注
- 未提供的字段留空
- 行业/公司规模/来源渠道需匹配已有选项,不在选项中的需提醒用户
- 人员字段需要 user_id,可通过
contact +search-user查找
新增客户回复格式:
客户创建成功!
客户名称:北京星辰科技有限公司
客户类型:企业客户
联系人:王总
手机号:138xxxx
行业:互联网
负责人:当前用户
2.2 修改客户信息
# 先查询获取 record_id
lark-cli base +record-list --base-token "<base_token>" --table-id "<customers_table_id>" --as user
# 更新客户信息(Delta 更新,只更新用户指定的字段)
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<customers_table_id>" \
--record-id "<record_id>" \
--json '{"重要程度":"高","备注":"重点客户"}' \
--as user
2.3 查询客户列表
lark-cli base +record-list --base-token "<base_token>" --table-id "<customers_table_id>" \
--limit 200 --as user
Agent 处理:
- 按用户指定的条件筛选(行业、负责人、重要程度等)
- 整理成易读表格格式
2.4 删除客户
lark-cli base +record-delete --base-token "<base_token>" --table-id "<customers_table_id>" \
--record-id "<record_id>" --yes --as user
Phase 3:商机管理
3.1 创建商机
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--json '{"商机名称":"企业IM系统采购","关联客户":[{"id":"<customer_record_id>"}],"商机金额":500000,"商机阶段":"待接触","负责人":[{"id":"ou_xxx"}],"预计成交日期":"2026-06-30","竞争对手":"","商机来源":"新开发"}' \
--as user
关联字段值格式:关联字段的值为
[{id: "recXXXX"}]对象数组格式。 日期格式:使用YYYY-MM-DD HH:mm:ss字符串格式。
Agent 处理逻辑:
- 解析用户输入:提取商机名称、关联客户、金额、阶段、负责人、预计成交日期等
- 如果用户提供了客户名称,先在客户表中查找对应的 record_id
- 客户不存在时,询问是否要同时创建客户记录
- 默认阶段为"待接触",默认商机来源为"新开发"
创建商机回复格式:
商机创建成功!
商机名称:企业IM系统采购
关联客户:北京星辰科技
商机金额:¥500,000.00
商机阶段:待接触
负责人:当前用户
预计成交日期:2026-06-30
3.2 推进商机阶段
当用户在跟进记录中提及阶段变更,或直接要求推进商机时:
# 更新商机阶段
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--record-id "<opportunity_record_id>" \
--json '{"商机阶段":"方案报价"}' \
--as user
Agent 处理逻辑:
- 用户说"推进到方案报价"→ 更新商机阶段为"方案报价"
- 用户说"赢单了"→ 更新商机阶段为"赢单"
- 用户说"丢单了"→ 更新商机阶段为"丢单",并询问丢单原因
- 阶段变更后自动更新赢单概率建议(formula 字段自动计算)
阶段顺序:待接触 → 需求确认 → 方案报价 → 商务谈判 → 赢单/丢单
3.3 查询商机列表
lark-cli base +record-list --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--limit 200 --as user
Agent 处理:
- 按阶段、负责人、客户等条件筛选
- 按商机金额排序
3.4 销售漏斗查询
lark-cli base +data-query --base-token "<base_token>" \
--dsl '{
"datasource": {"type": "table", "table": {"tableId": "<opportunities_table_id>"}},
"dimensions": [{"field_name":"商机阶段","alias":"stage"}],
"measures": [
{"field_name":"商机金额","aggregation":"sum","alias":"total_amount"},
{"field_name":"商机名称","aggregation":"count","alias":"count"}
]
}' \
--as user
回复格式:
销售漏斗
| 阶段 | 数量 | 金额 |
|------|------|------|
| 待接触 | 12 | ¥1,200,000 |
| 需求确认 | 8 | ¥800,000 |
| 方案报价 | 5 | ¥500,000 |
| 商务谈判 | 3 | ¥450,000 |
| 赢单 | 2 | ¥200,000 |
| 丢单 | 1 | ¥100,000 |
Phase 4:跟进记录
4.1 添加跟进记录
lark-cli base +record-upsert --base-token "<base_token>" --table-id "<follow_ups_table_id>" \
--json '{"关联客户":[{"id":"<customer_record_id>"}],"关联商机":[{"id":"<opportunity_record_id>"}],"跟进方式":"电话","跟进摘要":"电话联系了王总,对方对方案比较满意","客户反馈":"认可方案,但价格偏高","下一步计划":"下周三面访确认细节","下次跟进时间":"2026-04-16 14:00","跟进人":[{"id":"ou_xxx"}],"商机阶段变更":"无变更"}' \
--as user
Agent 处理逻辑:
- 解析用户输入:提取跟进方式、摘要、客户反馈、下一步计划、下次跟进时间、阶段变更
- 查找关联客户和商机的 record_id
- 关键:如果用户提到阶段变更(如"对方同意推进到方案报价"),同步更新对应商机的商机阶段
- 日期默认当天
跟进记录回复格式:
跟进记录已保存!
客户:北京星辰科技
商机:企业IM系统采购
跟进方式:电话
跟进摘要:电话联系了王总,对方对方案比较满意
下一步计划:下周三面访确认细节
下次跟进时间:2026-04-16 14:00
4.2 查询跟进记录
lark-cli base +record-list --base-token "<base_token>" --table-id "<follow_ups_table_id>" \
--limit 200 --as user
4.3 销售日报
Agent 处理逻辑:
1. 查询今天所有跟进记录(按创建时间筛选当天)
2. 查询今天新增的客户(按创建时间筛选当天)
3. 查询今天新增的商机
4. 查询今天发生阶段变更的商机
5. 生成结构化日报
日报格式:
销售日报 — 2026-04-13
一、今日跟进(3 条)
| 客户 | 商机 | 方式 | 摘要 | 阶段变更 |
|------|------|------|------|---------|
| 北京星辰 | IM采购 | 电话 | 方案满意 | → 方案报价 |
| 上海悦达 | 数据服务 | 微信 | 初步接触 | 无 |
二、新增客户(1 家)
- 深圳华创科技,互联网行业,来自线上广告
三、新增商机(2 个)
- 深圳华创科技:云服务采购 ¥300,000(待接触)
- 北京星辰科技:IM系统采购 ¥500,000(待接触)
四、阶段变更(1 个)
- 北京星辰 IM采购:待接触 → 方案报价
五、今日提醒
- 1 个商机超 7 天未跟进
- 2 个客户待跟进
Phase 5:数据分析
5.1 业绩排行
lark-cli base +data-query --base-token "<base_token>" \
--dsl '{
"datasource": {"type": "table", "table": {"tableId": "<opportunities_table_id>"}},
"dimensions": [{"field_name":"负责人","alias":"owner"}],
"measures": [
{"field_name":"商机金额","aggregation":"sum","alias":"total_amount"},
{"field_name":"商机名称","aggregation":"count","alias":"count"}
],
"filters": {"type": 1, "conjunction": "and", "conditions": [{"field_name":"商机阶段","operator":"is","value": ["赢单"]}]}
}' \
--as user
5.2 本月赢单统计
lark-cli base +data-query --base-token "<base_token>" \
--dsl '{
"datasource": {"type": "table", "table": {"tableId": "<opportunities_table_id>"}},
"measures": [
{"field_name":"商机金额","aggregation":"sum","alias":"total_amount"},
{"field_name":"商机名称","aggregation":"count","alias":"count"}
],
"filters": {"type": 1, "conjunction": "and", "conditions": [{"field_name":"商机阶段","operator":"is","value": ["赢单"]}]}
}' \
--as user
5.3 商机转化率
# 先获取各阶段数量
lark-cli base +data-query --base-token "<base_token>" \
--dsl '{
"datasource": {"type": "table", "table": {"tableId": "<opportunities_table_id>"}},
"dimensions": [{"field_name":"商机阶段","alias":"stage"}],
"measures": [{"field_name":"商机名称","aggregation":"count","alias":"count"}]
}' \
--as user
Agent 计算各阶段转化率:
商机转化分析
| 阶段 | 数量 | 转化率 |
|------|------|--------|
| 待接触 | 12 | 100%(入口) |
| 需求确认 | 8 | 67% |
| 方案报价 | 5 | 42% |
| 商务谈判 | 3 | 25% |
| 赢单 | 2 | 17% |
整体赢单率:17%(2/12)
Phase 6:自动化提醒
6.1 每日跟进提醒
查询今天需要跟进的内容:
# 查询下次跟进时间 = 今天的跟进记录
lark-cli base +record-list --base-token "<base_token>" --table-id "<follow_ups_table_id>" \
--limit 200 --as user
# AI 筛选:下次跟进时间 = 今天
# 查询预计成交日期 = 今天且未关单的商机
lark-cli base +record-list --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--limit 200 --as user
# AI 筛选:预计成交日期 = 今天 AND 商机阶段 NOT IN (赢单, 丢单)
发送飞书消息:
lark-cli im +messages-send --chat-id "<chat_id>" \
--msg-type "interactive" \
--content '{
"config": {"wide_screen_mode": true},
"header": {"title": {"tag": "plain_text", "content": "今日跟进提醒"}, "template": "blue"},
"elements": [
{"tag": "div", "text": {"tag": "lark_md", "content": "**跟进提醒**\n- 客户A:下次跟进时间到,计划:XXX\n\n**商机提醒**\n- 商机B:预计今天成交,金额:XXX"}}
]
}' \
--as user
重要:发送消息前需先读取
../lark-im/SKILL.md了解消息发送规则。
6.2 超时未跟进预警
# 查询超过 7 天未跟进的商机
lark-cli base +record-list --base-token "<base_token>" --table-id "<opportunities_table_id>" \
--limit 200 --as user
# AI 筛选:商机阶段 NOT IN (赢单, 丢单) AND 跟进次数 > 0 AND 最后跟进时间 > 7 天前
消息格式:
超时未跟进预警
以下商机已超过 7 天未跟进:
| 商机 | 客户 | 阶段 | 未跟进天数 |
|------|------|------|-----------|
| 商机A | 客户A | 方案报价 | 8 天 |
| 商机B | 客户B | 需求确认 | 12 天 |
6.3 赢单报喜
当商机阶段变更为「赢单」时,发送飞书群消息通知:
lark-cli im +messages-send --chat-id "<chat_id>" \
--msg-type "interactive" \
--content '{
"config": {"wide_screen_mode": true},
"header": {"title": {"tag": "plain_text", "content": "赢单喜报!"}, "template": "green"},
"elements": [
{"tag": "div", "text": {"tag": "lark_md", "content": "商机:XX公司 ERP 采购\n金额:¥100,000\n负责人:@用户\n商机周期:XX天"}}
]
}' \
--as user
6.4 每周销售简报
Agent 处理逻辑:
1. 汇总上周新增客户数(按创建时间筛选)
2. 汇总上周新增商机数和金额
3. 汇总上周赢单数和金额
4. 汇总当前漏斗各阶段数量和金额
5. 生成结构化简报并发送
简报格式:
周销售简报(上周 2026-04-07 ~ 2026-04-13)
一、关键指标
- 新增客户:5 家
- 新增商机:8 个,总金额 ¥500,000
- 赢单:3 个,金额 ¥200,000
- 丢单:1 个,金额 ¥50,000
二、当前漏斗
| 阶段 | 数量 | 金额 |
|------|------|------|
| 待接触 | 12 | ¥1,200,000 |
| 需求确认 | 8 | ¥800,000 |
| 方案报价 | 5 | ¥500,000 |
| 商务谈判 | 3 | ¥450,000 |
三、需关注
- 3 个商机超 7 天未跟进
- 2 个商机预计本周成交
Phase 7:表单管理
7.1 创建客户咨询登记表单
lark-cli base +form-create --base-token "<base_token>" --table-id "<customers_table_id>" \
--name "客户咨询登记" \
--description "欢迎填写咨询信息,我们会尽快与您联系" \
--as user
7.2 查看和配置表单问题
# 查看已有问题
lark-cli base +form-questions-list --base-token "<base_token>" --table-id "<customers_table_id>" --form-id "<form_id>" --as user
# 添加/修改问题
lark-cli base +form-questions-create --base-token "<base_token>" --table-id "<customers_table_id>" --form-id "<form_id>" \
--json '[{"name":"客户名称","type":"input"},{"name":"联系电话","type":"input"},{"name":"咨询内容","type":"textarea"}]' \
--as user
意图 → 命令索引
| 意图 | 推荐命令 | 备注 |
|---|---|---|
| 创建CRM系统 | +base-create → 3 × +table-create → 逐个 +field-create → 双向关联 → formula → 视图 → 仪表盘 → 表单 |
按 Step 1 顺序执行 |
| 新增客户 | +record-upsert → customers 表 |
|
| 修改客户 | +record-list → +record-upsert → customers 表 |
先查 record_id |
| 删除客户 | +record-delete → customers 表 |
带 --yes |
| 查询客户 | +record-list → customers 表 |
AI 过滤 |
| 创建商机 | +record-list(查客户)→ +record-upsert → opportunities 表 |
关联客户 |
| 推进商机 | +record-upsert → opportunities 表 |
更新商机阶段 |
| 查看商机 | +record-list → opportunities 表 |
|
| 销售漏斗 | +data-query → opportunities 表 |
按阶段聚合 |
| 添加跟进 | +record-upsert → follow_ups 表 |
如有阶段变更同步更新商机 |
| 销售日报 | +record-list → follow_ups + customers + opportunities 表 |
AI 汇总 |
| 业绩排行 | +data-query → opportunities 表 |
赢单金额按负责人聚合 |
| 跟进提醒 | +record-list → follow_ups + opportunities → im +messages-send |
|
| 超时预警 | +record-list → opportunities → im +messages-send |
|
| 赢单报喜 | im +messages-send |
|
| 每周简报 | +record-list + +data-query → im +messages-send |
|
| 创建表单 | +form-create → +form-questions-create |
|
| 创建看板 | +dashboard-create → +dashboard-block-create |
先读 dashboard guide |
常见错误速查
| 错误场景 | 原因 | 解决方案 |
|---|---|---|
+table-create --fields 限流 800004135 |
一次性创建多字段触发限流 | 先建空表,再用 +field-create 逐个加字段,间隔 1.5 秒 |
| 公式字段跨表查询返回全表结果 | 关联字段非双向 | 关联字段必须 bidirectional: true |
| 单向关联不能改为双向 | API 限制 unsafe_operation_blocked | 删除旧关联字段,重新创建双向关联 |
+data-query unknown flag --table-id |
该命令不支持 --table-id |
把 table-id 放在 --dsl 的 datasource.table.tableId 中 |
+data-query 不支持某字段聚合 |
公式/lookup/关联字段不在白名单 | 只对存储字段做聚合 |
+data-query 聚合 counta 不支持 |
+data-query 仅支持 count 不支持 counta |
改用 "aggregation":"count" |
| 关联字段值写入失败 | 格式错误 | 关联字段值必须是 [{id: "recXXX"}] 对象数组 |
| 日期字段写入失败 | 格式错误 | 使用 YYYY-MM-DD HH:mm:ss 字符串格式 |
| 人员字段写入失败 | 格式错误 | 使用 [{id: "ou_xxx"}] 对象数组 |
| 公式字段创建失败 | 未读 guide 或表达式有误 | 先读 formula-field-guide.md |
| 表名/字段名不匹配 | 凭自然语言猜测 | 用 +table-list / +field-list 获取真实名称 |
| 并发报错 1254291 | list 命令并发 | 所有 +xxx-list 串行执行 |
| 仪表盘 Block 创建失败 | 使用 --json 而非独立参数 |
改用 --name + --type + --data-config 独立参数 |
+view-create 不支持 --name |
需用 --json 传参 |
改用 --json '{"name":"xxx","type":"grid"}' |
+view-set-group 字段名 key 错误 |
JSON key 是 field 不是 field_name |
改用 [{"field":"字段名"}] |
| 公式引用「创建时间」返回 null | 表没有 created_at 系统字段 |
初始化时用 +field-create 手动添加 type:"created_at" 字段 |
| Base 自带默认"数据表" | 创建 Base 时自动生成 | 忽略该表,只操作客户信息/商机管理/跟进记录三张表 |
| 消息发送失败 | chat_id 无效 | 用 im +chat-list 确认 chat_id |
| 权限不足 | scope 未开通 | 参考 lark-shared 处理权限问题 |
权限表
| 命令 | 所需 scope |
|---|---|
base +base-create |
bitable:app |
base +table-create |
bitable:app |
base +field-create |
bitable:app |
base +field-list |
bitable:app:readonly |
base +record-list |
bitable:app:readonly |
base +record-upsert |
bitable:app |
base +record-delete |
bitable:app |
base +data-query |
bitable:app:readonly |
base +view-create |
bitable:app |
base +view-set-filter |
bitable:app |
base +view-set-sort |
bitable:app |
base +dashboard-create |
bitable:app |
base +dashboard-block-create |
bitable:app |
base +form-create |
bitable:app |
base +form-questions-list |
bitable:app:readonly |
base +form-questions-create |
bitable:app |
im +messages-send |
im:message:send_as_bot |
contact +search-user |
contact:employee.id:readonly |
参考
../lark-shared/SKILL.md— 认证、权限(必读)../lark-base/SKILL.md— 多维表格原子操作../lark-base/references/formula-field-guide.md— 公式字段写法(创建公式字段前必读)../lark-base/references/lookup-field-guide.md— lookup 字段配置规则../lark-base/references/lark-base-shortcut-field-properties.md— 字段属性 JSON 规范../lark-base/references/lark-base-shortcut-record-value.md— 记录值格式规范../lark-base/references/lark-base-data-query.md— 聚合分析 DSL../lark-base/references/dashboard-block-data-config.md— 仪表盘 Block 配置../lark-base/references/lark-base-form-create.md— 表单创建../lark-base/references/lark-base-view-set-filter.md— 视图筛选配置../lark-im/SKILL.md— 飞书消息发送../lark-contact/SKILL.md— 通讯录人员查询