2026-09-12 · 原文发布日
租户流失风险每日评分与分层触达
n8n每24小时运行:从Google Sheets读取租户主数据,按付款摩擦、维修摩擦、租约临近度打分,再用Gemini对租户沟通文本做0-100情感风险评分,加权得出高/中/低风险标签。高风险写回表格并给物业经理发Slack告警,中低风险则由Gmail发送定制续约或关怀邮件。表格需含resident_email等指定列。
原文要点
原工作流每24小时定时运行:从Google Sheets读租户主数据,加载流失模型权重,按付款摩擦、维修摩擦、租约临近度打分;再用Google Gemini分析租户沟通文本情感,返回0-100风险分和一句摘要;加权后贴高/中/低风险标签分流。高风险写回表格并给物业经理发Slack告警;中低风险写回表格并经Gmail发定制续约或关怀邮件。表格必须含resident_email、months_remaining、付款/维修指标和沟通文本等列,且resident_email作为行更新唯一键。原文附YouTube演示链接,未提供可下载工作流文件。
这次做成什么
在自有n8n复现「每日定时→读表→规则打分+Gemini情感分→加权分流→Slack/Gmail/写回表格」的租户流失预警线。原文只描述流程未给工作流文件,以下权重、阈值与提示词均为本站独立设计的练习方案,不声称与原作者参数一致。
准备什么
- n8n实例,可用Schedule Trigger、Google Sheets、Gmail、Slack节点
- Google Sheets服务账号凭据,及一张含指定列的租户表
- Google Gemini (PaLM) API密钥
- Gmail OAuth2凭据,用于发续约/关怀邮件
- Slack工作区凭据与一个告警频道
具体怎么做
备表与测试数据
建租户表,列含:resident_email(唯一键)、resident_name、months_remaining、late_payments_6m、open_maintenance_tickets、last_contact_days、recent_messages、risk_score、risk_label、crm_flag。用材料中的合成CSV铺5行测试数据。
定时触发与读表
加Schedule Trigger设为每24小时;Google Sheets节点读全部行。再加一个Set节点放本站示例权重(见配置材料):付款0.35、维修0.20、租约临近0.25、情感0.20,以及高风险≥70、中风险40-69阈值。
规则三维打分
Code节点对每行计算:付款摩擦=late_payments_6m×20封顶100;维修摩擦=open_maintenance_tickets×25封顶100;租约临近=max(0,(12-months_remaining)/12×100)。输出三个0-100子分。
Gemini情感评分
对每行调Gemini,提示词见材料,输入recent_messages,要求只返回{"score":0-100,"summary":"一句中文"}。解析失败时把情感分记为null并标记需人工看。
加权分流与三路输出
总风险=四子分按权重加权(情感缺失时用三维归一化)。Switch节点分三路:高风险→更新该行risk_score/risk_label/crm_flag并发Slack告警给物业经理频道;中风险→写回后发Gmail续约邮件(含日历链接占位符,发送前替换);低风险→写回后发关怀check-in邮件。全部完成后发一条Slack完成通知,失败走错误通知。
可直接复制的材料
加权评分配置(本站示例)
本站独立设定的练习参数,原文只说加载权重未给数值;阈值与权重请按自己物业数据校准,日历链接为占位符必须替换。
{
"weights": { "payment_friction": 0.35, "maintenance_friction": 0.20, "lease_proximity": 0.25, "sentiment_risk": 0.20 },
"thresholds": { "high": 70, "medium": 40 },
"labels": { "high": "High", "medium": "Medium", "low": "Low" },
"payment_friction_rule": "late_payments_6m * 20, cap 100",
"maintenance_friction_rule": "open_maintenance_tickets * 25, cap 100",
"lease_proximity_rule": "max(0, (12 - months_remaining) / 12 * 100)",
"calendar_link_placeholder": "https://calendar.example.com/booking-demo"
}Gemini租户情感风险评分提示词
本站独立撰写;recent_messages字段名需与你读表节点的实际字段一致。
你是物业管理风险分析员。下面是某租户最近与物业的沟通记录。评估其流失/不满风险。
评分规则:0表示非常满意、绝无流失迹象;100表示极可能退租或已表达强烈不满。仅依据文本内容打分,不要臆测文本之外的事实。
只返回JSON,不要任何其他文字:{"score": 整数0到100, "summary": "一句不超过40字的中文判断"}
沟通记录:
{{$json.recent_messages}}租户主数据测试表(合成CSV)
全部为example.com虚构地址的合成数据,不含真人信息;导入Google表格测试用。
resident_email,resident_name,months_remaining,late_payments_6m,open_maintenance_tickets,last_contact_days,recent_messages
t001@example.com,测试租户甲,2,3,2,45,"又晚交租了,楼上漏水报修三周没人管,再这样到期就不续了。"
t002@example.com,测试租户乙,9,0,0,10,"一切都好,谢谢你们上周的社区活动。"
t003@example.com,测试租户丙,5,1,1,30,"厨房水龙头还有点滴水,麻烦安排下维修。"
t004@example.com,测试租户丁,1,0,0,5,"请问续租的话租金会有调整吗?"
t005@example.com,测试租户戊,7,2,0,60,"最近工作忙,房租会晚几天,抱歉。"输入与输出示例
本站虚构演示计算,Gemini分数为示意,非真实调用结果,也未运行原工作流。
输入
运行一次对合成CSV中t001行打分:months_remaining=2、late_payments_6m=3、open_maintenance_tickets=2,recent_messages为漏水抱怨并不续约暗示。对应输出
规则子分:付款摩擦60、维修摩擦50、租约临近约83.3;Gemini返回{"score":85,"summary":"维修拖延引发强烈不满并暗示不续约"};加权总分=60×0.35+50×0.20+83.3×0.25+85×0.20≈68.8,按本站阈值归Medium档:写回risk_score=68.8、risk_label=Medium,发续约关怀邮件;若阈值收紧或情感分更高则进High档触发Slack告警。做完检查这些
- Schedule Trigger触发后,5行测试数据全部写回risk_score与risk_label且无遗漏
- t002等低分行走Gmail关怀邮件分支,高风险测试行在Slack频道出现含姓名与分数的告警
- 把某行recent_messages清空重跑,流程不崩溃且该行被标记为需人工复核
- resident_email重复或缺失的行不会产生错误更新
容易卡住的地方
- 原文未公开权重与阈值数值,本站配置只是练习起点,直接套用可能把大多数租户误判为高风险
- Gemini输出偶尔带额外文字,解析必须容错,否则整批中断
- resident_email若不唯一,Google Sheets按它更新会写错行
- Slack告警含租户信息,注意频道可见范围;勿把真实租户数据发给未授权的第三方
- 邮件里的日历链接是占位符,忘记替换会把坏链接发给真实租户
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Score tenant churn risk with Google Sheets, Gemini, Gmail and Slack
- 原作者
- iamvaar
- 原始发布日期
- 2026-09-11T18:03:09.244Z
- 来源
- https://n8n.io/workflows/19502