大家好,我是郑午时光。
做业务最怕什么?不是客户难搞,是记不住谁说过什么。
上个月见了个老客户,一开口就问:“王总,上次你说要带孩子去迪斯尼,去了吗?”
客户愣了一下:“我儿子都上初中了...”
当场社死。
回来翻聊天记录才发现,那是另一个客户。两个都是“王总”,我记串了。
后来我把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。
夜雨聆风