坐席 / 投诉专员与客户多轮对话,AI 自动累计关键信息、判断是否齐备、判定班组与紧急程度,最后按「无线 / 传输 / 有线 / 装维」四个班组自动邮件转派,并同步企业微信群。信息不足时自动追问,超过 7 轮未齐备转人工。
它解决什么问题:客户投诉信息不全 → 反复追问耗时;派单靠人工判断 → 口径不一、易派错班组。本工作流把「问全 → 定级 → 定班组 → 发单」这条链路自动化。
5 项关键信息(问题类型 / 影响范围 / 详细地址 / 联系电话 / 问题描述)逐项累积,未齐备自动针对性追问,每次最多问 2 项,且给客户示例说法。
按「双网同时中断 → 传输;整栋宽带不通手机正常 → 有线;仅本户宽带/WiFi → 装维;手机信号 → 无线」的强制映射表判定,并有代码层兜底。
一般 / 重要 / 紧急三级,影响范围是下限(成片故障不得低于「重要」),客户情绪是升级因子,代码节点做 rank 向上校正。
实线为主链路,虚线为分支回流;所有路径最终都有回复出口(Chatflow 必须以 Answer 节点收尾)。
共 16 个节点,按执行顺序排列。「输出」列为该节点向下游暴露的关键变量。
| # | 节点名称 | 类型 | 作用 | 关键配置 / 输出 |
|---|---|---|---|---|
| 1 | 用户输入 | Start | 接收客户本轮输入 | 无预定义变量,取 sys.query |
| 2 | 投诉信息累计提取 | 参数提取器 | 从对话历史累计提取 9 个结构化字段,同字段以最新为准,禁止猜测 | deepseek-v4-flash / temp 0.1 / reasoning_mode: prompt / 记忆窗口 20;输出 issue_type、affected_scope、location、customer_phone、problem_desc 等 |
| 3 | 登记信息是否齐备 | If-Else | 判断能否放行去派单 | 分支 true / case-1(dialogue_count > 7) / false |
| 4 | 投诉分诊定级 | LLM | 输出班组 + 等级 + 语气 + 故障面 + 摘要 + 理由(JSON) | temp 0.2 / 记忆窗口 20 / 输出 team、level、tone、fault_scope、summary、reason |
| 5 | 生成工单号并解析分诊结论 | Code | 解析 LLM 的 JSON,做班组/等级兜底与下限校正,生成工单号,掩码手机号 | Python3;输出 ticket_no、register_time、phone_masked、team、level、tone、fault_scope、summary、reason |
| 6 | 渲染投诉邮件 | 模板 | 拼装转派单正文(客户信息 / 投诉内容 / 分诊分析 / 处理要求) | 14 个模板变量,输出 output |
| 7 | 按班组分流 | If-Else | 按 team 精确匹配分4 路 | true=无线 / case-1=传输 / case-2=有线 / case-3=装维 / false 落到装维 |
| 8-11 | 发送邮件 · 无线 / 传输 / 有线 / 装维班组 | Tool | 把同一份邮件正文发到对应班组邮箱 | 官方 email 插件 send_mail;收件人取环境变量;主题 【投诉转派】{等级}·{班组}·{工单号} |
| 12 | 登记完成 | Answer | 向客户回显工单号、班组、等级、摘要 | 引用 Code 节点输出 |
| 13 | 发送群消息 | Tool | 把投诉摘要同步到企业微信群 | wecom 群机器人 webhook,内容取 summary,消息类型 text |
| 14 | 生成引导追问 | LLM | 信息不齐时针对性追问,每次最多 2 项 | temp 0.4;严禁空头承诺(不得说"已派单") |
| 15 | 引导追问回复 | Answer | 把追问话术输出给客户 | ≤120 字,口语化 |
| 16 | 转人工接待 | Answer | 对话超过 7 轮仍不齐备 → 转投诉处理专员 | 固定话术 |
「登记信息是否齐备」是整条流水线的总闸门,三个出口互斥、有明确优先级。
| 分支 | 触发条件(AND 组合) | 走向 |
|---|---|---|
| true(放行) | 问题类型、影响范围、详细地址、联系电话、问题描述 5 项全部非空,且 is_new_request ≠ 否(本轮确有新信息) | → 分诊定级 → 出单 → 邮件转派 |
| case-1(转人工) | sys.dialogue_count > 7(对话已超过 7 轮) | → 转人工接待 |
| false(继续问) | 以上都不满足 | → 生成引导追问 → 回复客户,回流下一轮 |
is_new_request 判断后,纯感谢 / 寒暄 / 催促 / 质疑的一律判为「否」,不会重复派单。
班组职责按「网络分界点」划分:光缆入楼 → 楼内分光器/箱 → 楼道线 → 入户线 → 家庭网关/路由器 → 终端设备,各班组只管其中一段。
| 步骤 | 条件 | 班组 | 等级 |
|---|---|---|---|
| 第一步 | 双网同时中断(手机信号与家庭宽带都没信号 / 都不能上网) | 传输 | 至少重要;影响多小区或整个片区 → 紧急 |
| 第二步 按影响范围 | 影响范围 = 整个片区大面积 | 传输 | 至少重要(不因客户只报宽带而降级) |
| 影响范围 = 小区楼栋多户,且手机信号也异常 | 传输 | 至少重要 | |
| 影响范围 = 小区楼栋多户,明确只有宽带不通、手机正常 | 有线 | 至少重要 | |
| 第二步 仅本户时按类型 | 手机信号问题 | 无线 | 一般 |
| 家庭宽带问题(含 WiFi、网速慢、掉线、连不上) | 装维 | 一般 | |
| 宽带装机移机 / 业务咨询 | 装维 | 一般 | |
| 第三步 | 问题类型 = 宽带装机移机 / 业务咨询(一律) | 装维 | 一般 |
影响一片区及以上用户;集团客户 / 专线中断;客户情绪激烈(威胁向工信部 / 12345 投诉、曝光媒体、销户、起诉);安全隐患或舆情风险。
时效:30 分钟响应,2 小时反馈进展。
一个小区多户受影响;重复投诉(二次及以上);政企客户非专线故障;业务完全不可用且客户明显焦虑。
时效:当日响应。
单户问题、业务咨询、语气平和的轻微不满。
时效:48 小时内办结。
LLM 输出不可全信,代码节点做了两层兜底:
LLM 返回的班组不在四个合法值内时,按登记信息重新分流:成片关键词(整栋 / 全村 / 整个片区 / 附近几个小区…)或双网同时中断 → 传输;多户关键词 → 有线;否则才是 装维。否则一旦解析失败,所有工单都会涌向末端装维班组。
影响范围已属成片却被判成「一般」时,按 rank = {一般:0, 重要:1, 紧急:2} 向上抬到范围下限,避免成片故障被低派、延误处置。
affected_scope 的描述写明了话术映射:客户只要说「整栋 / 整楼 / 全楼 / 整单元 / 整层」或提到邻居也受影响,一律归「小区楼栋多户」,不得归「仅本户」。上游判错,下游再怎么准也没用。
由「投诉信息累计提取」节点从多轮对话中累计填充,同一字段以客户最新提供的信息为准;客户未提及的输出空字符串,禁止猜测编造。
| 字段 | 必填 | 取值 / 含义 | 下游用途 |
|---|---|---|---|
issue_type 问题类型 | 是 | 手机信号问题 / 家庭宽带问题 / 宽带装机移机 / 业务咨询 / 其他 | 放行条件 + 班组映射 |
affected_scope 影响范围 | 是 | 仅本户 / 小区楼栋多户 / 整个片区大面积 | 放行条件 + 班组映射 + 等级下限 |
location 详细地址 | 是 | 省市区县 + 小区/村/片区 + 楼栋门牌号 | 邮件「投诉地址/片区」 |
customer_phone 联系电话 | 是 | 11 位手机号 | 邮件明文;客户回复里显示掩码 |
problem_desc 问题描述 | 是 | 故障现象或诉求要点,保留客户原话关键信息 | 邮件「投诉内容」+ 兜底判定 |
customer_name 客户姓名 | 否 | 未提及留空 | 邮件「投诉人」 |
repeat_complaint 是否重复投诉 | 否 | 是 / 否 | 邮件;等级判定参考(二次及以上 → 重要) |
customer_emotion 客户情绪 | 否 | 平和 / 焦虑不满 / 激烈 | 等级升级因子 + 追问语气 |
is_new_request 本轮是否有新信息 | 否 | 是 / 否;纯感谢、寒暄、告别、催促、质疑填「否」 | 防重复派单闸门 |
138****8000)。对外分享截图时请留意这一处。
一次最多追问 2 项,优先问最影响派单判定的(影响范围 → 问题类型 → 详细地址 → 联系电话),每项都带客户示例说法。例:
「麻烦确认下,是您一户用不了,还是整个小区/楼栋都不行?比如'就我一家''我们这栋楼都断了',这决定我们派哪个班组处理。」
您反馈的问题我们已记录。由于需要和您核实更多细节,现为您转接投诉处理专员人工跟进,请保持电话畅通,我们会尽快联系您。
登记完成 · 回执✅ 投诉登记完成,已邮件转派
· 工单编号 / 登记时间 / 转派班组 / 紧急程度 / 分诊摘要 / 定级理由
派单邮件已发送至对应班组,处理进展将由班组反馈;请保持电话 138****5678 畅通。
DSL 导入后不会自动装插件、也不会带密钥,以下四步缺一不可。
导入后画布应出现 16 个节点、4 条并行的邮件分支。若看到一堆无标题白框,说明实例是 Dify 0.x,本DSL 为 1.x 格式。
| 插件 | 版本 | 用途 | 授权要点 |
|---|---|---|---|
| DeepSeek | 0.0.20 | 3 处 AI 推理(提取 / 追问 / 分诊) | 填 API Key,否则节点显示「模型未配置」 |
| Email(官方) | 0.0.17 | 4 路转派邮件 | 填 SMTP 服务器 / 账号 / 授权码 |
| 企业微信 | 0.0.11 | 群机器人推送摘要 | 群机器人 Webhook Key |
...key=32050f33-…)。若要把这份 DSL 转发或交付给他人,请先把该值改为环境变量引用、再重新导出,避免群机器人被他人滥用推送垃圾消息。邮件与企微两组收件/推送配置同理。
| 变量名 | 类型 | 当前值 | 说明 |
|---|---|---|---|
TEAM_EMAIL_WIRELESS | string | wuxian@drcom.cn | 无线班组收件箱 |
TEAM_EMAIL_TRANSMISSION | string | chuanshu@drcom.cn | 传输班组收件箱 |
TEAM_EMAIL_WIRED | string | youxianqiangxiu@drcom.cn | 有线班组收件箱 |
TEAM_EMAIL_INSTALL | string | zhuangwei@drcom.cn | 装维班组收件箱 |
配置路径:应用 → 环境变量。改完需重新发布应用才生效。四个地址按班组职责分好,改这里即可整体换邮箱,不必动工作流。
重点是 3 个 AI 节点和 2 个 If-Else,面板能正常打开不报错才算导入干净。
用下方测试用例表逐条比对班组与等级是否符合预期。
节点显示绿色 ≠ 邮件已送达。国内邮箱(139 / 163 / QQ)有内容风控,若收不到,用同一 SMTP 账号手工发一封格式规范的测试邮件对照;被拒说明是内容问题而非通道问题。
群机器人 webhook 需在群「群机器人」里新建并复制 Key。
覆盖四班组、三档等级、双网中断与装机业务,用于验收或回归。「预期」按当前映射表推导,实测若有出入应先看提示词是否被改过。
| # | 客户话术(示例) | 范围 | 预期班组 | 预期等级 | 考察点 |
|---|---|---|---|---|---|
| 1 | 手机没信号打不出电话,家里宽带也上不了网,梧州市XX区XX花园3栋101,13800000000 | 仅本户 | 传输 | 重要 | 规则 A:双网同时中断优先传输,即使范围小 |
| 2 | 附近几个小区都没信号了,我们这一片都上不了网 | 整个片区 | 传输 | 紧急 | 规则 B + 成片故障不得降级 |
| 3 | 整栋楼宽带都连不上WiFi,手机信号正常,XX小区5栋 | 小区楼栋多户 | 有线 | 重要 | 规则 C/D:WiFi 归业务口径,按范围定班组 |
| 4 | 就我家一户宽带断了,邻居都正常,XX花园2栋101 | 仅本户 | 装维 | 一般 | 规则 D:仅本户才允许装维 + 一般 |
| 5 | 手机信号弱、通话经常断断续续,住址XX小区3栋 | 仅本户 | 无线 | 一般 | 仅本户 + 手机信号问题 |
| 6 | 我要申请装宽带,新装修的房子,XX路88号 | 仅本户 | 装维 | 一般 | 第三步:装机移机一律装维 |
| 7 | 整个小区都断网了,我要向工信部投诉! | 整个片区 | 传输 | 紧急 | 情绪升级因子:威胁升级投诉即紧急 |
| 8 | (只说"宽带不行"就停)→ 追问后客户补充完整 | — | — | — | 追问话术是否给出示例、不重复已问项 |
| 9 | (同上)连续 8 轮仍不齐备 | — | — | — | 是否正确落到「转人工接待」 |
| 10 | (信息已齐)客户说"谢谢你啊" | — | 不派单 | — | is_new_request=否,不重复出单 |
| 现象 | 原因 | 处理 |
|---|---|---|
| 导入后节点全是无标题白框,检查清单提示缺开始节点 | 实例是 Dify 0.x,本文件是 1.x 格式 | 升级实例或在 0.x 实例上用旧版导出格式另存 |
| 点开 LLM 节点面板报「渲染此组件时发生了意外错误」 | 1.x 前端读取 context.enabled 无空值保护,缺 context / vision 字段时面板崩溃(导入与画布都正常,极易误判) | 该节点补齐 context: {enabled:false, variable_selector:[]} 与 vision: {enabled:false, config:{detail:low}} |
| 节点显示「模型未配置」/ 运行时模型报错 | 没装 DeepSeek 插件或没填 API Key | 设置 → 模型供应商 → 添加 DeepSeek 并填 Key |
PluginNotFoundError: plugin not found | 目标实例没装 Email / 企业微信插件(DSL 的 dependencies 不会自动装) | 插件市场搜索安装 → 在插件卡片完成授权 |
| 参数提取器多轮不累计,每轮都像第一次对话 | 未用 reasoning_mode: prompt,function_call 模式不注入对话历史 | 保持 prompt 模式 + 记忆窗口 20 |
| 邮件节点显示成功但班组没收到 | 国内邮箱内容风控吞信(非通道问题) | 用同一 SMTP 账号手工发规范格式邮件对照验证;必要时改用内部邮件网关 |
| 客户反复问"为什么还没派单" | 信息未齐,属正常追问 | 按提示词要求:只列缺失项 + 说明确认后自动提交,不做空头承诺 |
| 工单都派到装维班组 | 分诊 LLM 输出异常 + 代码兜底未生效 | 检查代码节点兜底分支是否存在;若被改成统一挂装维,成片故障会全部涌向装维 |
| 需求 | 改动位置 | 注意 |
|---|---|---|
| 换班组收件邮箱 | 只改 4 个环境变量 | 不用动工作流,改完重新发布 |
| 调整班组判定口径 | 「投诉分诊定级」LLM 的强制映射表 + 「投诉信息累计提取」里 affected_scope 的字段描述 | 两处必须一起改,上游判错下游必错;改完跑一遍测试用例表 |
| 调整等级标准或时效 | 分诊 LLM 的等级三档描述 + 邮件模板「处理要求」第 1 条 | 等级下限校正逻辑在代码节点,别只改提示词 |
| 增加要登记的信息项 | 参数提取器加参数 → 「登记信息是否齐备」加条件 → 邮件模板加变量 | 三处同步;条件用的是 AND,漏改会导致放行条件变宽 |
| 放宽/收紧对话轮次上限 | 「登记信息是否齐备」case-1 的 dialogue_count > 7 | 改阈值即可,超限走转人工 |
| 换模型 | 3 个 AI 节点的 model:langgenius/deepseek/deepseek + 模型名 | provider 必须写完整插件 ID;实例里要先装好并填 Key |
| 去掉企微群通知 | 删除「发送群消息」节点及其连线 | 它是挂在 Answer 之后的,删除后不影响主链路 |
| 推送到工单系统(HTTP) | 在「登记完成」之后加 HTTP Request 节点 | 直接用代码节点输出的结构化字段做请求体 |
yaml.safe_load 解析成 dict、改完 safe_dump 写回(sort_keys=False, allow_unicode=True);② 代码节点源码经 safe_dump 往返后,源码里的 \n 可能变成真实换行导致 SyntaxError——把 Python 源码放到独立 .py 文件里读入赋给 data['code'],别在命令行里做多层转义。