2026-09-15 · 原文发布日
Zendesk升级工单AI研判与Slack人工审批流程
一个偏工程化的n8n模板(付费模板):通过带鉴权的webhook接收Zendesk升级事件,在PostgreSQL中原子认领事件保证幂等,从Redis读取或重新拉取脱敏后的对话快照,再结合账户资料由多个OpenAI角色分工完成分诊、基于Qdrant知识库检索取证、给出处置建议并交叉质检。确定性规则判定后,方案发到Slack由人批准或拒绝,批准后回写受保护的私密备注并核验审计标记,处理完的结案例还会嵌回Qdrant成为可复用记忆。
原文要点
来源是付费n8n模板,未附可导入文件;它用受Header Auth保护的接收webhook取eventId与ticketId,在PostgreSQL原子认领保证幂等,Redis缓存脱敏快照,OpenAI分角色分诊、检索租户批准的Qdrant文档、生成私密备注方案并独立QA,规则门控后交Slack批准/拒绝,批准才回写Zendesk并记审计;结案例经反馈webhook确认后嵌入Qdrant。
这次做成什么
在隔离沙箱里复刻一条“Zendesk升级事件→状态认领→证据化AI建议→Slack人审→受控回写→结案记忆”的最小链路;本站不还原付费模板文件,只设计可自查字段、分支与测试事件的练习方案。
准备什么
- 一个可丢弃的n8n测试环境和PostgreSQL/Redis/Qdrant沙箱实例
- Zendesk、Slack、OpenAI均使用隔离测试凭据,不连生产租户
- 已有原文database.sql或按它核对swl_escalation.deployments字段后再建表
- 准备不含真实客户信息的虚构ticket、账户资料和知识库段落
具体怎么做
配置部署与凭据
先在原模板核对database.sql和deployments字段;本站练习只在沙箱写入一行配置:Zendesk子域、Qdrant URL/collection、Slack私有频道ID、阈值、审批时限。凭据分六类登记:Zendesk HTTP Basic API token、OpenAI、Redis、PostgreSQL、Slack bot token,以及intake/feedback两个独立Header Auth。
触发、认领与快照
用POST调用练习webhook路径/swl-escalation-intake-v1,Header带测试密钥,Body只含eventId、ticketId、tenantId。处理层先校验必填,再在PostgreSQL执行原子认领:若eventId已存在则直接ACK并标记duplicate;否则读取Zendesk测试工单,优先取Redis未过期脱敏快照,缺失时拉公开评论,遮蔽邮箱电话后写回Redis。
AI研判与Qdrant取证
将工单摘要、账户等级、近30天开票状态和知识库命中拼成上下文;Qdrant按来源要求建1536维cosine集合,并核对payload索引tenant_id、approved、kind。只检索approved=true且tenant_id匹配的approved_document/resolved_case,输出候选证据,不让模型引用库外事实。
确定性门控与Slack分支
分支条件用规则而非感觉:缺证据、金额超过阈值、VIP投诉或QA不通过则发人工复核警报;通过则发Slack审批卡,字段映射为caseId=ticketId、summary=建议摘要、evidenceIds=Qdrant命中ID、expiresAt=现在加部署时限,动作仅approve/reject。
批准后受控回写与结案记忆
回调先重查Zendesk测试工单是否被改动,再写私密备注且优先级不下降,核验审计标记后落PostgreSQL结果并通知Slack;结案后调用/swl-escalation-feedback-v1,确认工单solved/closed,才把人工确认过的处置嵌入Qdrant,kind=resolved_case、approved=true。
可直接复制的材料
沙箱部署配置示例
本站独立示例;列名、阈值与节点参数须以付费模板database.sql和画布为准,不是可导入n8n JSON。
{"deployment_key":"sandbox_default","zendesk_subdomain":"example-sandbox","qdrant_url":"http://qdrant-sandbox:6333","qdrant_collection":"swl_escalation_memory","slack_channel_id":"C0TESTREVIEW","confidence_threshold":0.7,"approval_window_minutes":30,"max_refund_amount":5000,"currency":"USD","qdrant_vector":{"size":1536,"distance":"Cosine"},"payload_indexes":["tenant_id","approved","kind"],"webhooks":{"intake":"/swl-escalation-intake-v1","feedback":"/swl-escalation-feedback-v1"}}合成升级事件测试数据
全为虚构练习数据;不要放入真实个人信息、密钥或生产工单号。
{"eventId":"evt_demo_0001","ticketId":4815162342,"tenantId":"tenant_sandbox_a","requestedAt":"2026-09-15T10:30:00Z","account":{"plan":"business","region":"apac","open_invoice_amount":1200,"vip":false},"redacted_snapshot":"客户称导出报表在2026-09-14后缺少含税金额列;邮箱与电话已遮蔽为[redacted]。","policy_hint":"仅允许在证据ID可追溯时给出退款或配置修复建议。"}证据约束研判提示词
本站为练习编写;角色数量、节点名和模型名未在公开页给出,需在原模板核对。
你是升级工单研判员。只能使用输入中的工单快照、账户事实和Qdrant证据;禁止编造政策、金额、日期或证据ID。输出严格JSON:{"triage":"退款|配置|账单|其他","risk":"low|medium|high","evidence_ids":["..."],"recommendation":"给坐席的一段私密备注草案","needs_human":true|false,"qa":"指出本建议最可能错误的一点"}。若证据不足、金额超过阈值或客户为VIP,needs_human必须为true,并在recommendation中写明缺少什么。输入与输出示例
本站虚构演示,未运行原付费模板;字段名需在画布中逐项映射核对。
输入
用合成测试数据POST intake:eventId=evt_demo_0001、ticketId=4815162342、tenantId=tenant_sandbox_a,账户open_invoice_amount=1200且非VIP;Qdrant命中两条approved=true的tenant_sandbox_a证据,建议为核对税率配置而非直接退款。对应输出
PostgreSQL认领返回claimed=true;Slack审批卡显示caseId=4815162342,risk=medium,evidence_ids=["doc_tax_01","case_8842"],recommendation提示先复算含税列并暂停自动退款,expiresAt为30分钟后;点击approve后回写私密备注成功,audit_marker_verified=true,结案后upsert一条kind=resolved_case且approved=true的记忆。做完检查这些
- 重复发送同一eventId时第二次被标记duplicate且不重复回写Zendesk
- Qdrant结果必须同时满足tenant_id匹配、approved=true和kind白名单
- Slack审批卡能追踪caseId、证据ID、过期时间,拒绝后不得写私密备注
- 回写前重查工单,审计标记核验失败则结果落库为failed并提醒频道
容易卡住的地方
- 这是付费模板,公开页没有完整画布和database.sql内容,不能假装已导入运行
- 原子认领依赖数据库约束,只查内存或先ACK后入库会破坏幂等
- Redis快照过期或遮蔽规则遗漏会把敏感信息送进模型上下文
- 优先级只能不下降;若测试租户已有更高优先级,不得强行调低
本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。
- 原文标题
- Review Zendesk escalations with OpenAI, Qdrant, Slack and human approval
- 原作者
- Faraz Shoaib
- 原始发布日期
- 2026-09-15T15:06:28.263Z
- 来源
- https://n8n.io/workflows/19633