新客户加了不跟进就凉了?企业微信二次开发自动提醒,再也不漏单
销售的一天从回消息开始,忙起来就把上午新加的三个客户忘了。等想起来时客户已经找了别家。这个问题不是靠"培训销售及时跟进"能解决的,得靠 API 自动盯。
先搞清楚"不跟进就凉了"的几种情况
新客户加进来后,销售不跟进的原因五花八门,但归结起来就三类:
类型 | 表现 | 根因 |
|---|---|---|
忘了看 | 新客户躺在好友列表里,销售根本没注意到 | 没有新客户入口提示 |
拖太久 | 看到了但手上忙别的,放一放就忘了 | 没有超时提醒 |
不知道说什么 | 看到了但不知道该聊啥,拖着不找客户 | 没有首轮话术指引 |
API 自动提醒就是专门对付这三类。触发点是add_external_contact事件,核心是"首次跟进计时 + 超时阶梯提醒"。
第一步:新客户入池计时
客户加进来的瞬间,回调触发,开始倒计时:
def handle_add_external_contact(data): external_user_id = data["externalUserId"] member_uin = data["memberUin"] source_id = data.get("sourceId") # 活码 configId # 查活码和客户标签 contact_way = get_contact_way(source_id) tags = contact_way.get("config", {}).get("tags", []) welcome_text = contact_way.get("config", {}).get("welcomeText", "你好!") # 入库,开始计时 db.execute(""" INSERT INTO follow_up_pool (external_user_id, member_uin, source_id, tags, welcome_text, added_at, first_follow_by, status) VALUES (?, ?, ?, ?, ?, datetime('now'), NULL, 'pending') """, (external_user_id, member_uin, source_id, json.dumps(tags), welcome_text)) # 立即发一条提醒 + 首轮话术建议 send_new_customer_alert(member_uin, external_user_id, welcome_text)first_follow_by字段一开始为空,客户和销售的第一次消息往来时填上时间戳,标记跟进已完成。
第二步:三种提醒策略
提醒不是一条消息,是三级递进:
级别 | 时间 | 内容 | 发送对象 |
|---|---|---|---|
L1 | 加好友后 5 分钟 | "新客户 X 加入,建议说:XXX" | 销售本人 |
L2 | 加好友后 2 小时 | "客户 X 已 2 小时未跟进,建议说:XXX" | 销售本人 |
L3 | 加好友后 24 小时 | "客户 X 已 24 小时未跟进,已自动转给组长" | 销售 + 组长 |
def check_followup_status(): rows = db.execute(""" SELECT * FROM follow_up_pool WHERE status='pending' AND added_at < datetime('now', '-5 minutes') """).fetchall() for row in rows: # 查客户是否有过第一次消息往来 first_follow = get_first_follow_time(row["member_uin"], row["external_user_id"]) if first_follow: # 已跟进,标记完成 db.execute( "UPDATE follow_up_pool SET status='done', first_follow_by=? WHERE external_user_id=?", (first_follow, row["external_user_id"]) ) continue minutes = minutes_since(row["added_at"]) if minutes < 120: # 2 小时内 notify_level1(row) elif minutes < 1440: # 24 小时内 notify_level2(row) else: # 超过 24 小时 notify_level3(row) escalate_to_leader(row) def notify_level1(row): alert = f"""【新客户提醒】 客户已加企微 5 分钟,尚未跟进。 首轮建议话术:{row['welcome_text']} 对方标签:{row['tags']}""" send_text(row["member_uin"], row["member_uin"], alert)L3 升级动作里,要把客户自动转交给销售组长跟进,不能让客户一直等。
第三步:首轮话术指引
提醒里带上首轮话术,销售直接复制粘贴就行:
def send_new_customer_alert(member_uin, external_user_id, welcome_text): profile = get_external_profile(external_user_id) nickname = profile.get("nickname", "朋友") alert = f"""新客户加入! 客户:{nickname} 建议首轮话术: 您好,{nickname}!我是负责您的顾问小李,之前有同事跟您介绍过我们的产品。 方便问一下您最关心产品的哪个方面?功能还是价格?""" send_text(member_uin, member_uin, alert)话术不要写死,从活码配置里取模板,这样不同渠道来的客户首轮话术可以不一样。
第四步:跟进完成的判定
不能只靠"销售说跟进了"来标记完成。要有硬标准:
标准:销售给客户发了消息,且客户有回应。单方面发消息不算完成,客户没理还要继续追。
def get_first_follow_time(member_uin, external_user_id): # 拉最近 24 小时的消息 messages = get_history( member_uin, external_user_id, start_time=today_start(), count=50 ) # 找销售发给客户的第一条消息 for msg in messages: if msg["senderUin"] == member_uin: return msg["time"] return None只有销售发过消息才算"已跟进"。后续如果需要客户有回应才算,可以加判断条件。
第五步:数据复盘,优化提醒阈值
提醒阈值不是拍脑袋定的。跑一周后看数据:
指标 | 计算 | 优化方向 |
|---|---|---|
首轮跟进率 | 7 天内跟进的新客户数 / 总新客户数 | 低于 80% 说明提醒不够早 |
提醒触发后跟进率 | 收到提醒后 30 分钟内跟进的客户数 / 提醒总数 | 低于 40% 说明提醒话术不够吸引 |
24h 未跟进率 | 超过 24 小时才跟进的新客户数 / 总新客户数 | 高于 10% 说明 L2 提醒力度不够 |
首轮跟进率低于 80%,把 L1 提醒时间从 5 分钟改成 3 分钟。提醒触发后跟进率低于 40%,改话术,加客户标签和来源渠道的信息。
不跟进客户的三种处理方式
24 小时还没跟进的客户,有三种处理路径,按客户重要程度分:
客户等级 | 处理方式 |
|---|---|
VIP(标签含 vip) | 自动转给组长,同时发短信给销售 |
普通 | 在企微内部群里 @ 销售,组长跟进 |
低质量(长期未互动) | 标记为"待激活",后续批量群发促活 |
最简实现骨架
# 定时任务,每 10 分钟跑一次 def job(): check_followup_status() schedule.every(10).minutes.do(job)整个跟进系统的触发点(add_external_contact 事件)和消息查询接口(getHistoryMessageList)都走企微 API,不需要额外的数据库触发器。
新客户加好友事件是 Webhook 推送的,定时查询跟进状态用的是历史消息接口,两个都在开发文档的 contact 和 message 模块里。Eyun 控制台里开通实例后就能拿到 App Token。