乐于分享
好东西不私藏

openclaw接入飞书,公司业务经理用它搞定客户

openclaw接入飞书,公司业务经理用它搞定客户

大家好,我是郑午时光。

做业务最怕什么?不是客户难搞,是记不住谁说过什么。

上个月见了个老客户,一开口就问:“王总,上次你说要带孩子去迪斯尼,去了吗?”

客户愣了一下:“我儿子都上初中了...”

当场社死。

回来翻聊天记录才发现,那是另一个客户。两个都是“王总”,我记串了。

后来我把OpenClaw(小龙虾)接进了飞书。现在300个客户,谁家孩子几岁、爱抽什么烟、上次吃饭聊什么,它比我记得清。见客户前@它一下,3秒背调完。

客户管理从“靠脑子记”变成了“靠AI查”。

今天这篇,我就拆这个“AI客户助理”怎么搭。跑业务的可以直接抄作业。


01 先拆解:业务员的“脑子”要装多少东西

我采访了几个做销售的朋友,列了一个业务员需要记住的东西:

客户基础信息:

  • 姓名、电话、公司、职位

  • 公司主营、年规模

  • 决策链:谁是关键人

    客情信息:

    • 家庭情况:孩子几岁、老婆做什么

    • 兴趣爱好:抽烟吗、喝酒吗、打高尔夫吗

    • 最近动态:换了工作、升职了、生病了

      业务信息:

      • 上次聊了什么

      • 报价多少

      • 卡在哪一步

      • 下次什么时候跟进

        时间信息:

        • 客户生日

        • 孩子生日

        • 结婚纪念日

        • 公司周年庆

          一个人如果管50个客户,这些东西还能硬记。管到200个以上,脑子就开始串台了。

          更可怕的是:这些信息不是静态的,是动态的。 客户今天说“下周去三亚”,下周见面你要记得问“三亚好玩吗”。记不住,就显得你不走心。


          02 解决方案:OpenClaw+飞书=AI客户助理

          OpenClaw是什么?简单说,它是一个能住在你电脑里的AI助理平台。

          • 它能监听飞书群消息

          • 它能自动读写多维表格

          • 它能定时提醒你跟进

          • 它能调用大模型整理聊天记录

          • 它完全本地运行,客户数据不泄露

          最关键的是:它可以成为你的“第二大脑”,专门记那些你记不住的事。


          03 实操:三步搭起AI客户助理

          3.1 准备工作

          如果你还没装OpenClaw,先去装好(教程之前发过)。

          飞书侧创建一个应用,配置好权限:

          {
            "scopes": {
              "tenant": [
                "im:message",
                "im:message:send_as_bot",
                "im:message:readonly",
                "im:message.group_at_msg:readonly",
                "im:chat.members:bot_access",
                "bitable:record:read",
                "bitable:record:write",
                "bitable:table:read"
              ]
            }
          }

          发布应用、开长连接、配对,这些基础操作不赘述。

          3.2 建一个飞书多维表格当「客户数据库」

          这是核心。建几个多维表格,互相打通。

          表一:客户信息表

          • 客户姓名(文本)

          • 公司(文本)

          • 职位(文本)

          • 电话(文本)

          • 微信(文本)

          • 生日(日期)

          • 关键程度(单选:A类、B类、C类)

          • 状态(单选:潜在、意向、已成交、流失)

          • 备注(多行文本)

          表二:客情信息表

          • 客户姓名(双向关联→表一)

          • 信息类别(单选:家庭、爱好、经历、其他)

          • 信息内容(多行文本)

          • 记录时间(日期)

          • 来源(文本:聊天、见面、朋友圈)

          表三:跟进记录表

          • 日期(日期)

          • 客户姓名(双向关联→表一)

          • 跟进方式(单选:电话、微信、见面、吃饭)

          • 沟通内容(多行文本)

          • 下一步计划(文本)

          • 下次跟进时间(日期)

          • 状态(单选:待跟进、已完成)

          表四:待办提醒表

          • 日期(日期)

          • 客户姓名(双向关联→表一)

          • 提醒事项(文本)

          • 提醒时间(日期)

          • 状态(单选:待提醒、已提醒)

          3.3 写Skill一:见客户前背调

          第一个Skill,见客户前@它,3秒出背调报告。

          在OpenClaw的skills目录下新建sales-assistant,创建briefing.js

          module.exports = {
            triggers: ['背调', '客户信息', '帮我看看', '见客户'],

            async execute({ args, agent }) {
              const input = args.message || args.text || '';
              const nameMatch = input.match(/(?:背调|客户信息|见客户)\s*(\S+)/);

              if (!nameMatch) {
                return { text: '格式:背调 客户姓名' };
              }

              const customerName = nameMatch[1];

              // 1. 查询客户基本信息
              const customers = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '客户信息表TableID',
                filter: `客户姓名="${customerName}"`
              });

              if (customers.records.length === 0) {
                return { text: `❌ 找不到客户:${customerName}` };
              }

              const customer = customers.records[0];
              const customerId = customer.record_id;

              // 2. 查询客情信息
              const favors = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '客情信息表TableID',
                filter: `客户姓名=["${customerId}"]`
              });

              // 3. 查询最近跟进记录
              const followups = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '跟进记录表TableID',
                filter: `客户姓名=["${customerId}"]`,
                limit: 5,
                orderBy: '日期 DESC'
              });

              // 4. 查询待办事项
              const todos = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '待办提醒表TableID',
                filter: `客户姓名=["${customerId}"] AND 状态="待提醒"`
              });

              // 5. 生成背调报告
              let report = `【📋 ${customerName} 客户背调】\n\n`;

              // 基本信息
              report += `📌 基本信息\n`;
              report += `公司:${customer.fields['公司'] || '未知'}\n`;
              report += `职位:${customer.fields['职位'] || '未知'}\n`;
              report += `电话:${customer.fields['电话'] || '未知'}\n`;
              report += `微信:${customer.fields['微信'] || '未知'}\n`;
              report += `生日:${customer.fields['生日'] || '未知'}\n`;
              report += `关键程度:${customer.fields['关键程度'] || '未知'}\n`;
              report += `状态:${customer.fields['状态'] || '未知'}\n\n`;

              // 客情信息
              if (favors.records.length > 0) {
                report += `❤️ 客情信息\n`;
                favors.records.slice(0, 8).forEach(f => {
                  report += `• ${f.fields['信息内容']}(${f.fields['记录时间']})\n`;
                });
                report += '\n';
              }

              // 最近跟进
              if (followups.records.length > 0) {
                report += `📞 最近跟进\n`;
                followups.records.slice(0, 3).forEach(f => {
                  report += `• ${f.fields['日期']} ${f.fields['跟进方式']}:${f.fields['沟通内容'].slice(0, 30)}...\n`;
                });
                report += '\n';
              }

              // 待办提醒
              if (todos.records.length > 0) {
                report += `⏰ 待办事项\n`;
                todos.records.forEach(t => {
                  report += `• ${t.fields['提醒事项']}(${t.fields['提醒时间']})\n`;
                });
                report += '\n';
              }

              // 见面建议
              report += `💡 见面建议\n`;
              if (favors.records.some(f => f.fields['信息内容'].includes('烟'))) {
                report += `• 可以带包好烟\n`;
              }
              if (favors.records.some(f => f.fields['信息内容'].includes('茶'))) {
                report += `• 他爱喝茶,可以聊这个话题\n`;
              }
              if (customer.fields['生日'] && isNearBirthday(customer.fields['生日'])) {
                report += `• 快过生日了,可以准备个小礼物\n`;
              }

              return { text: report };

              function isNearBirthday(birthday) {
                if (!birthday) return false;
                const today = new Date();
                const birthDate = new Date(birthday);
                birthDate.setFullYear(today.getFullYear());
                const diffDays = Math.ceil((birthDate - today) / (1000*60*60*24));
                return diffDays > 0 && diffDays <= 7;
              }
            }
          };

          3.4 写Skill二:记录客情信息

          见面或聊天后,随手记下客情信息:

          sales-assistant目录下新建record-favor.js

          module.exports = {
            triggers: ['记一下', '记客情', '记录'],

            async execute({ args, agent }) {
              const input = args.message || args.text || '';

              // 解析格式:记一下 王总 他儿子今年高考
              const match = input.match(/(?:记一下|记客情|记录)\s*(\S+)\s*(.+)/);

              if (!match) {
                return { text: '格式:记一下 客户姓名 内容' };
              }

              const customerName = match[1];
              const content = match[2];

              // 1. 查找客户
              const customers = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '客户信息表TableID',
                filter: `客户姓名="${customerName}"`
              });

              if (customers.records.length === 0) {
                return { text: `❌ 找不到客户:${customerName},要不要先添加基本信息?` };
              }

              const customerId = customers.records[0].record_id;

              // 2. 判断信息类别
              let category = '其他';
              if (content.includes('儿子') || content.includes('女儿') || content.includes('孩子') || content.includes('老婆') || content.includes('家人')) {
                category = '家庭';
              } else if (content.includes('喜欢') || content.includes('爱') || content.includes('爱好') || content.includes('玩') || content.includes('打')) {
                category = '爱好';
              } else if (content.includes('以前') || content.includes('之前') || content.includes('曾经') || content.includes('经历')) {
                category = '经历';
              }

              // 3. 写入客情表
              await agent.callTool('feishu.addTableRecord', {
                appToken: '你的多维表格AppToken',
                tableId: '客情信息表TableID',
                fields: {
                  '客户姓名': [customerId],
                  '信息类别': category,
                  '信息内容': content,
                  '记录时间': new Date().toISOString().slice(0,10),
                  '来源': '手动录入'
                }
              });

              // 4. 用AI提取关键词,如果内容比较长的话
              if (content.length > 20) {
                const keywords = await agent.callLLM(`从这段话中提取3个关键词:${content}`);
                // 可以存到备注里,或者单独建个关键词字段
              }

              return { text: `✅ 已记录:${customerName} - ${content}` };
            }
          };

          3.5 写Skill三:跟进提醒

          每天自动提醒今天要跟进的客户:

          sales-assistant目录下新建followup-reminder.js

          module.exports = {
            triggers: ['今日跟进', '今天要见谁', '提醒'],

            async execute({ agent }) {
              const today = new Date().toISOString().slice(0,10);
              const tomorrow = new Date();
              tomorrow.setDate(tomorrow.getDate() + 1);
              const tomorrowStr = tomorrow.toISOString().slice(0,10);

              // 1. 查询今天要跟进的
              const todayTodos = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '待办提醒表TableID',
                filter: `提醒时间="${today}" AND 状态="待提醒"`
              });

              // 2. 查询明天要跟进的(提前提醒)
              const tomorrowTodos = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '待办提醒表TableID',
                filter: `提醒时间="${tomorrowStr}" AND 状态="待提醒"`
              });

              // 3. 查询跟进记录里下次跟进时间是今天的
              const followups = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '跟进记录表TableID',
                filter: `下次跟进时间="${today}" AND 状态="待跟进"`
              });

              let reminder = '【📅 今日客户跟进提醒】\n\n';

              if (todayTodos.records.length > 0) {
                reminder += '⏰ 今日待办:\n';
                for (const todo of todayTodos.records) {
                  const customerName = todo.fields['客户姓名']?.[0]?.text || '未知';
                  reminder += `• ${customerName}:${todo.fields['提醒事项']}\n`;
                }
                reminder += '\n';
              }

              if (followups.records.length > 0) {
                reminder += '📞 需要跟进:\n';
                for (const f of followups.records) {
                  const customerName = f.fields['客户姓名']?.[0]?.text || '未知';
                  reminder += `• ${customerName}:上次沟通说${f.fields['沟通内容'].slice(0, 20)}...\n`;
                }
                reminder += '\n';
              }

              if (tomorrowTodos.records.length > 0) {
                reminder += '⏳ 明日预告:\n';
                for (const todo of tomorrowTodos.records) {
                  const customerName = todo.fields['客户姓名']?.[0]?.text || '未知';
                  reminder += `• ${customerName}:${todo.fields['提醒事项']}\n`;
                }
                reminder += '\n';
              }

              if (todayTodos.records.length === 0 && followups.records.length === 0) {
                reminder += '✨ 今天没有待办,可以主动联系几个老客户\n';
              }

              // 加个随机小贴士
              const tips = [
                '老客户转介绍是最容易的成交',
                '客户生日前一周送礼物效果最好',
                '周五下午适合约饭,大家心情都好',
                '朋友圈点赞也是客情维护',
                '3个月没联系的老客户可以发个问候'
              ];
              const randomTip = tips[Math.floor(Math.random() * tips.length)];
              reminder += `\n💡 今日小贴士:${randomTip}`;

              return { text: reminder };
            }
          };

          3.6 写Skill四:自动分析聊天记录

          把和客户的微信聊天记录粘贴进来,自动提取客情:

          sales-assistant目录下新建analyze-chat.js

          module.exports = {
            triggers: ['分析聊天', '提取客情'],

            async execute({ args, agent }) {
              const input = args.message || args.text || '';

              // 解析格式:分析聊天 王总 后面跟聊天内容
              const match = input.match(/分析聊天\s*(\S+)\s*([\s\S]+)/);

              if (!match) {
                return { text: '格式:分析聊天 客户姓名 聊天内容' };
              }

              const customerName = match[1];
              const chatContent = match[2].trim();

              // 1. 查找客户
              const customers = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '客户信息表TableID',
                filter: `客户姓名="${customerName}"`
              });

              if (customers.records.length === 0) {
                return { text: `❌ 找不到客户:${customerName}` };
              }

              const customerId = customers.records[0].record_id;

              // 2. 用AI提取关键信息
              const prompt = `你是一个专业的销售助理。分析以下和客户的聊天记录,提取出对客情维护有用的信息。

          聊天记录:
          ${chatContent}

          请按以下格式输出:
          【个人信息】提取关于客户个人、家庭、经历的信息
          【偏好信息】提取关于客户喜好、习惯、兴趣的信息
          【业务信息】提取关于业务需求、痛点、意向的信息
          【待办事项】根据聊天内容,应该做什么后续跟进
          【下次话题】下次见面可以聊什么

          如果没有相关信息,就写“无”。`;

              const analysis = await agent.callLLM(prompt);

              // 3. 解析并存入客情表
              const lines = analysis.split('\n');
              let currentCategory = '';

              for (const line of lines) {
                if (line.includes('【个人信息】')) {
                  currentCategory = '家庭';
                  continue;
                } else if (line.includes('【偏好信息】')) {
                  currentCategory = '爱好';
                  continue;
                } else if (line.includes('【业务信息】')) {
                  currentCategory = '其他';
                  continue;
                } else if (line.includes('【待办事项】')) {
                  currentCategory = '待办';
                  continue;
                } else if (line.includes('【下次话题】')) {
                  currentCategory = '下次';
                  continue;
                }

                const content = line.trim();
                if (content && content !== '无' && content.length > 1) {
                  if (currentCategory === '家庭' || currentCategory === '爱好' || currentCategory === '其他') {
                    // 存入客情表
                    await agent.callTool('feishu.addTableRecord', {
                      appToken: '你的多维表格AppToken',
                      tableId: '客情信息表TableID',
                      fields: {
                        '客户姓名': [customerId],
                        '信息类别': currentCategory,
                        '信息内容': content,
                        '记录时间': new Date().toISOString().slice(0,10),
                        '来源': '聊天分析'
                      }
                    });
                  } else if (currentCategory === '待办') {
                    // 存入待办表
                    await agent.callTool('feishu.addTableRecord', {
                      appToken: '你的多维表格AppToken',
                      tableId: '待办提醒表TableID',
                      fields: {
                        '客户姓名': [customerId],
                        '提醒事项': content,
                        '提醒时间': new Date().toISOString().slice(0,10),
                        '状态': '待提醒'
                      }
                    });
                  }
                }
              }

              return { 
                text: `✅ 已分析${customerName}的聊天记录,提取的信息已存入客情库。\n\n分析结果:\n${analysis}` 
              };
            }
          };

          3.7 写Skill五:生日提醒

          每天早上提醒今天谁过生日:

          sales-assistant目录下新建birthday-reminder.js

          module.exports = {
            triggers: ['生日提醒', '今天谁生日'],

            async execute({ agent }) {
              const today = new Date();
              const month = today.getMonth() + 1;
              const day = today.getDate();

              // 查询今天生日的人(需要处理日期格式)
              const customers = await agent.callTool('feishu.getTableRecords', {
                appToken: '你的多维表格AppToken',
                tableId: '客户信息表TableID'
              });

              const birthdayToday = [];

              for (const c of customers.records) {
                const birthday = c.fields['生日'];
                if (birthday) {
                  const bMonth = new Date(birthday).getMonth() + 1;
                  const bDay = new Date(birthday).getDate();
                  if (bMonth === month && bDay === day) {
                    birthdayToday.push(c.fields['客户姓名']);
                  }
                }
              }

              if (birthdayToday.length > 0) {
                let msg = '🎂 今日生日提醒\n\n';
                birthdayToday.forEach(name => {
                  msg += `• ${name}\n`;
                });
                msg += '\n记得发祝福,可以准备小礼物';
                return { text: msg };
              } else {
                return { text: '🎂 今天没有客户生日,可以看看下个月的' };
              }
            }
          };

          3.8 注册Skill

          # 注册所有Skill
          openclaw skills register ./skills/sales-assistant/briefing.js
          openclaw skills register ./skills/sales-assistant/record-favor.js
          openclaw skills register ./skills/sales-assistant/followup-reminder.js
          openclaw skills register ./skills/sales-assistant/analyze-chat.js
          openclaw skills register ./skills/sales-assistant/birthday-reminder.js

          # 设置定时任务
          openclaw cron add "30 8 * * *" "openclaw skills trigger followup-reminder"  # 每天8:30提醒今日跟进
          openclaw cron add "0 9 * * *" "openclaw skills trigger birthday-reminder"    # 每天9:00提醒今日生日


          04 测试:业务员的一天

          早上8:30

          机器人自动提醒:

          【📅 今日客户跟进提醒】

          ⏰ 今日待办:
          • 张总:下午3点送合同
          • 李总:问一下标书进展

          📞 需要跟进:
          • 王总:上周说考虑一下,今天问问

          ⏳ 明日预告:
          • 刘总:约了明天中午吃饭

          💡 今日小贴士:老客户转介绍是最容易的成交

          见客户前

          @机器人:“背调 王总”

          3秒后收到:

          【📋 王总 客户背调】

          📌 基本信息
          公司:XX科技
          职位:采购总监
          电话:138****5678
          生日:05-20
          关键程度:A类
          状态:意向

          ❤️ 客情信息
          • 儿子今年高考(2026-02-15)
          • 爱抽中华(2026-01-20)
          • 老婆在银行工作(2025-12-10)

          📞 最近跟进
          • 2026-03-10 电话:说下周给答复
          • 2026-03-05 见面:聊了采购计划

          💡 见面建议
          • 可以带包好烟
          • 快过生日了,可以准备个小礼物

          见完客户

          @机器人:“记一下 王总 他说下周要去三亚出差”

          回复:“✅ 已记录:王总 - 他说下周要去三亚出差”

          分析聊天记录

          把和客户的微信聊天粘贴过来:

          @机器人:“分析聊天 刘总 刘总:你们那个方案我看了一下,价格有点高啊。我:您预算大概多少?刘总:15万左右吧,如果效果好明年还有二期。我:那我们可以调整一下配置。刘总:行,你先出个新方案,下周给我。对了,我女儿刚考上央美,最近忙着帮她看房子。”

          机器人回复:

          ✅ 已分析刘总的聊天记录,提取的信息已存入客情库。

          分析结果:
          【个人信息】女儿刚考上央美,最近在帮女儿看房子
          【偏好信息】无
          【业务信息】预算15万左右,明年有二期,需要调整方案
          【待办事项】下周出新方案
          【下次话题】可以聊聊女儿上学的事,央美很厉害


          05 进阶玩法

          5.1 朋友圈监控

          把客户朋友圈截图发过来,让AI自动分析动态,提取客情。比如发了带孩子去游乐场,自动记录“孩子喜欢游乐场”。

          5.2 自动生成节日祝福

          中秋节、春节前,让AI根据每个客户的客情信息,生成个性化的祝福语。

          5.3 客户健康度评分

          根据最近跟进时间、互动频率、客情数量,自动给客户打分,告诉你哪些客户快流失了。

          5.4 竞品动态提醒

          如果你有几个客户是同行业的,他们提到竞品时,自动标记并提醒你。


          06 踩坑经验

          坑一:双向关联字段的格式

          飞书多维表格的双向关联字段,写入时要用数组包记录ID,不是直接写名字。

          // 正确写法
          '客户姓名': [record_id]

          // 错误写法
          '客户姓名': '王总'

          坑二:生日格式统一

          日期字段建议统一用YYYY-MM-DD格式,方便查询和比对。

          坑三:不要什么都记

          客情信息不是越多越好。记真正有用的:家庭情况、偏好、痛点。客户喜欢吃什么菜这种,除非你要请吃饭,否则没必要。

          坑四:定时任务要服务器

          OpenClaw跑在你电脑上,电脑关机就没法定时提醒。想7x24小时运行,需要部署到云服务器(教程第15章)。

          坑五:隐私合规

          客户信息是敏感数据。OpenClaw本地运行的优势就在这里——数据不出你的电脑,不经过任何第三方服务器。但自己也要注意:不要把客户信息截图发群里,不要在公共场合打开表格。


          总结

          以前我记300个客户,靠脑子硬背,记串了好几次。

          现在我把记性交给小龙虾:见客户前背调、见完客情自动记、每天提醒谁要跟进、谁过生日。

          客户管理从“靠脑子记”变成了“靠AI查”。

          省下的脑细胞,用来想怎么成交、怎么维护、怎么拓客。


          你手里管着多少个客户?评论区聊聊,我帮你们看看哪些可以交给AI。