一、准备阶段:明确2个核心前提+1个轻量工具
先梳理好基础逻辑,避免盲目搭建。
1.1 确定核心留存节点
按产品属性从用户路径里挑「不可替代动作」,比如电商是下单,SaaS是完成首次核心任务(比如飞书是创建群组+发布1条消息),短视频是完整看完1条视频+点赞/评论/关注3选1。直接把这些记在记事本里,后续用。
1.2 划分「可操作的」留存分层
分层不是越多越好,选4层通用层:新客(注册0-1天)、首活激活客(完成核心留存节点0-7天)、活跃客(7天内≥2次核心动作)、流失预警客(连续3天未打开/连续7天无核心动作)。分层规则写成JSON格式方便导入工具。
1.3 下载轻量开源工具n8n
不用复杂的埋点系统,n8n是可视化工作流工具,能对接国内常用平台(微信公众号/小程序、钉钉、飞书、短信接口、甚至自建API),小白也能上手。
安装步骤(Windows/Mac通用Docker版,无需配置环境):
- 1. 先装Docker Desktop:Windows去https://www.docker.com/products/docker-desktop/ 下载exe,Mac去https://www.docker.com/products/docker-desktop/ 下载dmg,安装后打开保持后台运行
- 2. 打开终端(Windows用PowerShell,Mac用终端),输入以下命令并回车:
```
docker run -d -p 5678:5678 -v ~/.n8n:/home/node/.n8n n8nio/n8n
```
- 3. 浏览器打开http://localhost:5678,就能看到n8n界面,无需注册直接用
二、第一部分:轻量埋点(可选但高效,自建产品优先用)
如果是第三方平台(比如微信小程序有官方统计),可以跳过直接看「三、触发规则配置」;如果是自建Web/APP,加一行JS埋点就行,不用复杂埋点SDK。
2.1 配置Web端埋点
在自建Web/APP的基础HTML文件(比如index.html)的
标签结束前,加这段可复制的代码:
```
```
2.2 测试埋点上报

先在n8n里建一个临时Webhook工作流:
- 1. 点击n8n首页「+ Create Workflow」
- 2. 第一个节点选「Webhook」,HTTP Method选「POST」,Webhook URLs选「Production」,点击「Save」保存节点
- 3. 点击「Test」进入测试模式,复制Production URL,替换上面代码里的n8nDomain后面的路径为复制的路径(注意把整个路径都替换)
- 4. 手动在浏览器控制台(按F12→Console)输入:reportEvent("test", "test001"),回车
- 5. 回到n8n,应该能看到「Test received」提示,点开能看到上报的JSON数据,测试成功后删除临时工作流
三、核心部分:分层+触发规则配置(直接复制流程)
用n8n建2个关键工作流:用户分层更新工作流、新客/流失预警触发工作流,活跃客触发可以举一反三。
3.1 用户分层更新工作流
每天凌晨1点自动更新所有用户分层,用Google Sheets做轻量数据库(不用MySQL),先创建一个Google Sheets文件,命名为「用户分层表」,设置以下5列:A=userId(用户唯一标识)、B=registerTime(注册时间戳)、C=lastCoreTime(最后一次核心动作时间戳)、D=lastOpenTime(最后一次打开时间戳)、E=userTier(当前分层)。
注意:Google Sheets需要先授权n8n访问,步骤:n8n首页→Credentials→Add Credential→搜索Google Sheets→按提示登录授权。
分层更新工作流步骤:
- 1. 第一个节点选「Schedule Trigger」,Run on选「Daily」,Hours选「1」,Minutes选「0」,Timezone选「Asia/Shanghai」
- 2. 第二个节点选「Google Sheets → Read」,Credentials选刚才授权的,Spreadsheet选「用户分层表」,Range选「A:E」,Header Row选「Yes」
- 3. 第三个节点选「Code → JavaScript」,输入以下完整可复制的代码:
```
// 遍历每个用户更新分层
const updatedUsers = items.map(item => {
const user = item.json;
const now = Date.now();
const registerDays = Math.floor((now - user.registerTime) / (1000 60 60 24));
const lastCoreDays = Math.floor((now - user.lastCoreTime) / (1000 60 60 24));
const lastOpenDays = Math.floor((now - user.lastOpenTime) / (1000 60 60 24));
let tier = "流失预警客";
if (registerDays === 0) tier = "新客";
else if (registerDays <=7 && lastCoreDays === 0) tier = "首活激活客";
else if (lastCoreDays <=7 && lastCoreDays <=3) tier = "活跃客";
return {
json: {
...user,
userTier: tier
}
};
});
return updatedUsers;
```
- 4. 第四个节点选「Google Sheets → Update」,Credentials同上,Spreadsheet同上,Range选「A:E」,Header Row选「Yes」,Key Column选「userId」,Overwrite All Rows选「No」
- 5. 点击「Save」保存工作流,命名为「每日更新用户分层」,点击「Activate」激活
3.2 流失预警客微信公众号模板消息触发工作流
假设你有微信公众号,已开通模板消息(如果没开通,可以换成短信/邮件,节点选对应的就行)。先在n8n授权微信公众号:Credentials→Add Credential→搜索「WeChat Official Account」→按提示输入AppID、AppSecret、Token、EncodingAESKey(这些在微信公众号后台「开发→基本配置」里找)。
模板消息触发步骤:
- 1. 第一个节点选「Schedule Trigger」,Run on选「Daily」,Hours选「10」,Minutes选「30」,Timezone同上
- 2. 第二个节点选「Google Sheets → Read」,Credentials同上,Spreadsheet同上,Range选「A:E」,Header Row选「Yes」,然后在节点下方「Add Filter」→选择「userTier」→「Equals」→输入「流失预警客」
- 3. 第三个节点选「WeChat Official Account → Send Template Message」,Credentials同上,Template ID在微信公众号后台「模板消息」里选一个通用召回模板(比如「您很久没来了,送您专属福利」),然后配置模板变量:比如{{openid.DATA}}选之前Read节点的「userId」(如果微信openid是你的userId的话,不是的话对应修改),{{first.DATA}}输入「亲爱的用户,您已经连续3天没打开我们啦」,{{keyword1.DATA}}可以留空或加产品最新活动,{{remark.DATA}}输入「点击立即回来领取10元优惠券」,Page Path选你产品的首页链接
- 4. 点击「Save」保存工作流,命名为「每日10:30召回流失预警客」,点击「Activate」激活
四、测试全流程
- 1. 先在「用户分层表」里手动添加一条测试数据:A=test001、B=(昨天的时间戳,比如1720000000000)、C=(4天前的时间戳)、D=(4天前的时间戳)、E=随便填
- 2. 打开「每日更新用户分层」工作流,点击「Test」→「Execute Workflow」,看E列是否变成「流失预警客」
- 3. 打开「每日10:30召回流失预警客」工作流,点击「Test」→「Execute Workflow」,看微信公众号是否收到模板消息