2026-10-02 · 原文发布日
用n8n按危急程度路由化验结果并追踪确认
一套化验结果通知工作流:webhook或定时从LIS取结果,读Google Sheets里的阈值和医生联系方式,解析JSON或HL7文本、统一单位、去重,按阈值把结果分为危急、异常、正常等。Gemini生成不涉诊断的简短说明;危急结果发Slack私信和Twilio短信并附确认链接,15分钟未确认自动升级给备份医生;异常结果走Gmail邮件,全程写入日志供审计。
原文要点
免费模板。其事实要点:webhook接收或定时轮询LIS接口取化验结果;从Google Sheets的Limits、Doctors、Log三个页签读取阈值、医生联系方式和历史记录;解析JSON或HL7 ORU文本、统一单位(含受支持的换算)、检查缺字段、按日志去重;按Limits阈值分为危急、异常、正常、重复、需实验室复核五类;Gemini只生成复述严重程度、数值、单位和所需行动的非诊断性短说明;危急结果发Slack私信,有手机号再发Twilio短信,附确认链接,15分钟未确认升级给备份医生;异常结果走Gmail邮件;消息不携带直接患者标识,只有结果参考ID,医生自行登EHR查看;全部状态写入Log页签供审计。
这次做成什么
搭建一条按危急程度路由化验结果的练习流水线:合成结果进入→阈值分类→分级通知→确认追踪与15分钟升级→全程审计日志。用本站合成数据和测试凭据跑通,不接真实患者数据。
准备什么
- n8n实例(Cloud或自托管)
- Google Sheets一张,建Limits、Doctors、Log三个页签并按下方CSV填列
- Slack测试工作区(可发私信和频道消息),Gmail测试账号
- Google Gemini API key或等价聊天模型;Twilio为可选,练习可用合成短信节点替代
- 仅使用虚构的化验结果与结果参考ID,不接入真实LIS
具体怎么做
建三张配置表
按artifacts中的CSV建立Limits(项目编码、单位、危急上下限、异常上下限)、Doctors(医生ID、Slack用户ID、备份Slack ID、邮箱、手机号)、Log(留空,仅写表头)。在n8n连接Google Sheets凭据并把表格ID配到各读取节点。
接入测试数据
用Webhook节点生成测试URL,用Postman或curl POST下方artifacts中的合成JSON结果;或先用Manual Trigger+Code节点输出同样数据。接Code节点解析:统一单位(如mmol/L与mg/dL换算按本站示例系数)、校验缺字段、按Log中已有resultRef去重。
阈值分类
Code节点把数值与Limits表匹配:低于危急下限或高于危急上限→critical;超出异常区间→abnormal;区间内→normal;Log已有同resultRef→duplicate;缺字段→lab_review。用Switch按类别分流。
生成说明并分级通知
critical与abnormal分支先调Gemini,用artifacts中的说明提示词生成非诊断短说明。critical分支:查Doctors表发Slack私信,有手机号再走Twilio;附确认链接(Wait节点配webhook形式的恢复链接,界面配置以你的n8n版本为准,本站未实测原模板),等待15分钟,超时未确认则向备份医生Slack ID升级。abnormal分支:Gmail发邮件给开单医生。
审计日志与兜底
每条结果把resultRef、分类、通知渠道、确认状态、时间追加到Log页签;路由失败或缺联系方式的项目发到实验室Slack频道,由人工处理。
可直接复制的材料
Limits页签CSV
本站虚构的练习阈值,真实阈值必须由医疗机构确认,勿用于临床
testCode,testName,unit,criticalLow,criticalHigh,abnormalLow,abnormalHigh
K,血钾,mmol/L,2.8,6.2,3.5,5.3
GLU,血糖,mmol/L,2.2,22.2,3.9,6.1
HGB,血红蛋白,g/L,50,200,110,160Doctors页签CSV
全部为虚构测试身份,手机号与Slack ID需替换为你测试环境的数据
doctorId,name,slackUserId,backupSlackUserId,email,phone
D001,测试医生甲,U0TEST001,U0TEST002,doc-a@example.test,+8613800000001
D002,测试医生乙,U0TEST003,U0TEST004,doc-b@example.test,化验说明文案生成提示词
本站独立编写;输入字段在n8n中用表达式引用
你是化验结果通知文案生成器。根据下面的化验结果生成一段不超过80字的中文简短说明,只复述:严重程度、项目名、数值、单位、需要采取的动作(立即确认/择期查看)。严禁给出任何诊断、病因推测或治疗建议,严禁出现患者姓名等身份信息,只能使用结果参考编号。输入:{"resultRef":"R-20261004-001","severity":"critical","testName":"血钾","value":6.8,"unit":"mmol/L"}webhook合成测试负载
本站虚构测试数据,不含任何患者标识,与原模板“仅传结果参考ID”的设计一致
{
"resultRef": "R-20261004-001",
"doctorId": "D001",
"testCode": "K",
"testName": "血钾",
"value": 6.8,
"unit": "mmol/L",
"reportedAt": "2026-10-04T10:30:00+08:00"
}输入与输出示例
本站虚构演示,分类由阈值表推导,说明文案为提示词预期输出样式,未调用真实模型
输入
POST合成负载:resultRef=R-20261004-001,doctorId=D001,testCode=K(血钾),value=6.8 mmol/L;Limits中K的criticalHigh=6.2。对应输出
分类结果:{"resultRef":"R-20261004-001","category":"critical","reason":"6.8 > criticalHigh 6.2"};Gemini说明示意:「危急:血钾 6.8 mmol/L,超出危急上限,请立即确认(编号R-20261004-001)。」Log追加行:R-20261004-001,critical,slack+sms,pending,2026-10-04T10:30:05+08:00;15分钟未确认后向U0TEST002发送升级消息。做完检查这些
- value=6.8的血钾按Limits被判为critical并同时触发Slack私信分支,value=5.8时只走abnormal邮件分支
- 同一resultRef重复POST第二次时被判为duplicate且不再发送任何通知
- 缺少value字段的负载被判为lab_review并出现在实验室频道消息中
- critical分支15分钟内无确认后,Log中该行确认状态变为escalated且备份医生收到消息
容易卡住的地方
- 本流程只做LIS到医生的路由与升级,不是完整的EHR/FHIR集成,原模板明确说明不含该能力
- 消息设计上不携带患者直接标识,练习时也不要在测试数据里放真实患者信息
- 15分钟确认窗口、阈值和换算系数都需在Limits表和Wait节点中按机构规范调整,本站数值仅为虚构示例
- Twilio短信和Gemini调用可能产生费用,练习时建议先关闭短信分支;升级链目前只有一级备份医生
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Route critical lab results using Google Sheets, Slack, Gmail, Gemini, and Twilio
- 原作者
- Ciphernutz IT Services
- 原始发布日期
- 2026-10-02T11:26:41.112Z
- 来源
- https://n8n.io/workflows/20335