Dify Chatflow · 应用说明文档

中国移动投诉智能登记(多轮引导转派)

坐席 / 投诉专员与客户多轮对话,AI 自动累计关键信息、判断是否齐备、判定班组与紧急程度,最后按「无线 / 传输 / 有线 / 装维」四个班组自动邮件转派,并同步企业微信群。信息不足时自动追问,超过 7 轮未齐备转人工。

Chatflow应用模式 advanced-chat
16 个节点19 条连线 · 单路径 ≤50
deepseek-v4-flash3 处调用(2 LLM + 1 提取器)
4 路邮件按班组分流发送
DSL 0.7.0适配 Dify 1.x

一分钟看懂What it does

它解决什么问题:客户投诉信息不全 → 反复追问耗时;派单靠人工判断 → 口径不一、易派错班组。本工作流把「问全 → 定级 → 定班组 → 发单」这条链路自动化。

痛点 1

信息问不全

5 项关键信息(问题类型 / 影响范围 / 详细地址 / 联系电话 / 问题描述)逐项累积,未齐备自动针对性追问,每次最多问 2 项,且给客户示例说法。

痛点 2

派单口径不一

按「双网同时中断 → 传输;整栋宽带不通手机正常 → 有线;仅本户宽带/WiFi → 装维;手机信号 → 无线」的强制映射表判定,并有代码层兜底。

痛点 3

等级定错

一般 / 重要 / 紧急三级,影响范围是下限(成片故障不得低于「重要」),客户情绪是升级因子,代码节点做 rank 向上校正。

使用方式 Dify 控制台打开应用即可直接聊天(支持 Web App / API / MCP 发布)。开场白已列出 5 项待填信息并给出一句话示例;底部 5 条推荐问题可一键试跑。

流程全景图Pipeline

实线为主链路,虚线为分支回流;所有路径最终都有回复出口(Chatflow 必须以 Answer 节点收尾)。

是 按 team 取唯一一路 轮次 > 7 (转人工) 否 · 信息不齐 用户输入 Start 投诉信息累计提取 参数提取器 · deepseek 登记信息是否齐备 If-Else · 2 分支 + ELSE 5 项非空 且 本轮有新信息 投诉分诊定级 LLM · temp 0.2 生成工单号 + 解析结论 Code · Python3 渲染投诉邮件 Template Transform 按班组分流 If-Else · 4 路 + ELSE team 精确匹配 发送邮件 · 无线班组 wuxian@… 发送邮件 · 传输班组 chuanshu@… 发送邮件 · 有线班组 youxianqiangxiu@… 发送邮件 · 装维班组 zhuangwei@…(ELSE 兜底) 登记完成回复 Answer · 回显工单号 班组 / 等级 / 摘要 企业微信群消息 Tool · 群机器人 转人工接待 Answer 生成引导追问 LLM · temp 0.4 引导追问回复 Answer · ≤120 字 注:登记完成后 Answer 节点之后仍接「企业微信群消息」工具节点,用于向班组群同步投诉摘要
AI 节点(LLM / 参数提取器) 条件分支 数据处理(代码 / 模板) 外部动作(邮件 / 企微) 回复客户(Answer) 兜底转人工

节点清单Nodes

共 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 轮仍不齐备 → 转投诉处理专员固定话术

什么时候放行去派单Gate

「登记信息是否齐备」是整条流水线的总闸门,三个出口互斥、有明确优先级。

分支触发条件(AND 组合)走向
true(放行)问题类型、影响范围、详细地址、联系电话、问题描述 5 项全部非空,且 is_new_request ≠ 否(本轮确有新信息)→ 分诊定级 → 出单 → 邮件转派
case-1(转人工)sys.dialogue_count > 7(对话已超过 7 轮)→ 转人工接待
false(继续问)以上都不满足→ 生成引导追问 → 回复客户,回流下一轮
为什么要加「本轮有新信息」这一条 只有 5 项非空会在客户重复确认、催问时反复出单。加上 is_new_request 判断后,纯感谢 / 寒暄 / 催促 / 质疑的一律判为「否」,不会重复派单。
空头承诺禁令 追问节点明确禁止说「已为您派单」「师傅马上联系您」——此刻尚未向任何班组派出工单。客户催问时只做两件事:列出仍缺失的信息项、说明「信息确认后系统会自动提交派单」。

分诊逻辑:定班组 + 定等级Triage

班组职责按「网络分界点」划分:光缆入楼 → 楼内分光器/箱 → 楼道线 → 入户线 → 家庭网关/路由器 → 终端设备,各班组只管其中一段。

一、四班组职责边界

传输班组
管:小区到楼栋之间的光缆(入楼光缆、主干光缆)、光交箱/接头盒、传输设备、基站及上游链路。
判据:多个小区成片异常;手机信号与家庭宽带同时中断。
有线班组
管:楼内有线侧设施——楼道线、楼层分线箱、室内布线、楼内 ONU / 皮线光缆。
判据:整栋楼 / 整单元宽带不通,但手机信号正常。
装维班组
管:家庭宽带末端与装维服务——入户线、家庭网关/路由器、终端设备、网速慢、掉线、WiFi 故障,以及新装/移机/拆机、约装、业务咨询、账单。
判据:宽带与 WiFi 是同一业务口径,末端故障一律归装维(仅本户时)。
无线班组
管:无线接入侧 4G/5G——信号弱、无服务、脱网、通话断续、数据卡顿,且客户明确说的是手机 / 移动网络问题。

二、强制映射表(按顺序套用,命中即定案)

步骤条件班组等级
第一步双网同时中断(手机信号与家庭宽带都没信号 / 都不能上网)传输至少重要;影响多小区或整个片区 → 紧急
第二步
按影响范围
影响范围 = 整个片区大面积传输至少重要(不因客户只报宽带而降级)
影响范围 = 小区楼栋多户,且手机信号也异常传输至少重要
影响范围 = 小区楼栋多户,明确只有宽带不通、手机正常有线至少重要
第二步
仅本户时按类型
手机信号问题无线一般
家庭宽带问题(含 WiFi、网速慢、掉线、连不上)装维一般
宽带装机移机 / 业务咨询装维一般
第三步问题类型 = 宽带装机移机 / 业务咨询(一律)装维一般
与前文冲突时以映射表为准 提示词里同时写了「描述性规则」和「强制映射表」,并显式声明冲突时以映射表为准——自然语言描述在「仅本户 / 小区楼栋多户 / 整个片区」这类近义表述上会漂移,映射表是按字段值写死的,判定更稳定。

三、等级判定三档

紧急

影响一片区及以上用户;集团客户 / 专线中断;客户情绪激烈(威胁向工信部 / 12345 投诉、曝光媒体、销户、起诉);安全隐患或舆情风险。
时效:30 分钟响应,2 小时反馈进展。

重要

一个小区多户受影响;重复投诉(二次及以上);政企客户非专线故障;业务完全不可用且客户明显焦虑。
时效:当日响应。

一般

单户问题、业务咨询、语气平和的轻微不满。
时效:48 小时内办结。

四、代码节点的两道保险

LLM 输出不可全信,代码节点做了两层兜底:

  1. 班组兜底不一律挂装维

    LLM 返回的班组不在四个合法值内时,按登记信息重新分流:成片关键词(整栋 / 全村 / 整个片区 / 附近几个小区…)或双网同时中断 → 传输;多户关键词 → 有线;否则才是 装维。否则一旦解析失败,所有工单都会涌向末端装维班组。

  2. 等级下限校正

    影响范围已属成片却被判成「一般」时,按 rank = {一般:0, 重要:1, 紧急:2} 向上抬到范围下限,避免成片故障被低派、延误处置。

影响范围字段的口径必须写死 参数提取器里 affected_scope 的描述写明了话术映射:客户只要说「整栋 / 整楼 / 全楼 / 整单元 / 整层」或提到邻居也受影响,一律归「小区楼栋多户」,不得归「仅本户」。上游判错,下游再怎么准也没用。

登记字段字典Fields

由「投诉信息累计提取」节点从多轮对话中累计填充,同一字段以客户最新提供的信息为准;客户未提及的输出空字符串,禁止猜测编造。

字段必填取值 / 含义下游用途
issue_type 问题类型是手机信号问题 / 家庭宽带问题 / 宽带装机移机 / 业务咨询 / 其他放行条件 + 班组映射
affected_scope 影响范围是仅本户 / 小区楼栋多户 / 整个片区大面积放行条件 + 班组映射 + 等级下限
location 详细地址是省市区县 + 小区/村/片区 + 楼栋门牌号邮件「投诉地址/片区」
customer_phone 联系电话是11 位手机号邮件明文;客户回复里显示掩码
problem_desc 问题描述是故障现象或诉求要点,保留客户原话关键信息邮件「投诉内容」+ 兜底判定
customer_name 客户姓名否未提及留空邮件「投诉人」
repeat_complaint 是否重复投诉否是 / 否邮件;等级判定参考(二次及以上 → 重要)
customer_emotion 客户情绪否平和 / 焦虑不满 / 激烈等级升级因子 + 追问语气
is_new_request 本轮是否有新信息否是 / 否;纯感谢、寒暄、告别、催促、质疑填「否」防重复派单闸门
手机号隐私处理 邮件正文给班组的是明文手机号(师傅要打电话核实,必须可用);回给客户的登记完成提示只显示掩码(如 138****8000)。对外分享截图时请留意这一处。

产出物:转派邮件与客户回复Output

发给班组的邮件

【中国移动客户投诉转派单】 工单编号:TS20261016153012A3F7 登记时间:2026-10-16 15:30:12 紧急程度:重要 转派班组:有线班组 —— 客户信息 —— 投诉人:张女士 联系电话:13812345678 投诉地址/片区:梧州市万秀区XX小区5栋302 问题类型:家庭宽带问题 影响范围:小区楼栋多户 是否重复投诉:否 —— 投诉内容 —— 整栋楼宽带都上不了网,手机信号还是正常的…… —— 智能分诊分析 —— 语气特征:语气较急但克制 故障面:梧州市万秀区XX小区整栋,涉及楼内有线侧 定级/定班理由:整栋宽带不通且手机正常,属楼内有线侧,故派有线班组,范围多户定重要 投诉摘要:XX小区整栋楼宽带不通,手机信号正常,5栋302室,客户已持续2小时…… —— 处理要求 —— 1. 紧急工单请30分钟内响应、2小时内反馈进展;重要工单当日响应;一般工单48小时内办结。 2. 处理结果请回复本邮件或在工单系统闭环。 3. 如需跨专业支援(传输抢修、无线优化等),请在回复中注明并转相关班组协同。 (本邮件由投诉智能登记工作流自动生成)

回给客户的三种话术

信息不齐 · 追问

一次最多追问 2 项,优先问最影响派单判定的(影响范围 → 问题类型 → 详细地址 → 联系电话),每项都带客户示例说法。例:
「麻烦确认下,是您一户用不了,还是整个小区/楼栋都不行?比如'就我一家''我们这栋楼都断了',这决定我们派哪个班组处理。」

超 7 轮 · 转人工

您反馈的问题我们已记录。由于需要和您核实更多细节,现为您转接投诉处理专员人工跟进,请保持电话畅通,我们会尽快联系您。

登记完成 · 回执

✅ 投诉登记完成,已邮件转派
· 工单编号 / 登记时间 / 转派班组 / 紧急程度 / 分诊摘要 / 定级理由
派单邮件已发送至对应班组,处理进展将由班组反馈;请保持电话 138****5678 畅通。

开场白与推荐问题 应用已配置开场白(列出 5 项待填信息 + 一句话示例,降低客户表达门槛)和 5 条推荐问题,覆盖家宽断网、单户故障、手机无信号、申请装机、信号弱五类典型场景,可直接一键试跑。

部署与配置清单Setup

DSL 导入后不会自动装插件、也不会带密钥,以下四步缺一不可。

1. 导入 DSL

  1. Dify 控制台 → 创建应用旁「导入 DSL」→ 选择本yml 文件

    导入后画布应出现 16 个节点、4 条并行的邮件分支。若看到一堆无标题白框,说明实例是 Dify 0.x,本DSL 为 1.x 格式。

2. 安装插件并授权(3 个)

插件版本用途授权要点
DeepSeek0.0.203 处 AI 推理(提取 / 追问 / 分诊)填 API Key,否则节点显示「模型未配置」
Email(官方)0.0.174 路转派邮件填 SMTP 服务器 / 账号 / 授权码
企业微信0.0.11群机器人推送摘要群机器人 Webhook Key
安全提醒 DSL 里企业微信群机器人的 Webhook 地址是明文硬编码在工具节点上的(...key=32050f33-…)。若要把这份 DSL 转发或交付给他人,请先把该值改为环境变量引用、再重新导出,避免群机器人被他人滥用推送垃圾消息。邮件与企微两组收件/推送配置同理。

3. 配置环境变量

变量名类型当前值说明
TEAM_EMAIL_WIRELESSstringwuxian@drcom.cn无线班组收件箱
TEAM_EMAIL_TRANSMISSIONstringchuanshu@drcom.cn传输班组收件箱
TEAM_EMAIL_WIREDstringyouxianqiangxiu@drcom.cn有线班组收件箱
TEAM_EMAIL_INSTALLstringzhuangwei@drcom.cn装维班组收件箱

配置路径:应用 → 环境变量。改完需重新发布应用才生效。四个地址按班组职责分好,改这里即可整体换邮箱,不必动工作流。

4. 端到端验收

  1. 逐个点开节点面板

    重点是 3 个 AI 节点和 2 个 If-Else,面板能正常打开不报错才算导入干净。

  2. 跑5 条推荐问题

    用下方测试用例表逐条比对班组与等级是否符合预期。

  3. 确认邮件真的收到

    节点显示绿色 ≠ 邮件已送达。国内邮箱(139 / 163 / QQ)有内容风控,若收不到,用同一 SMTP 账号手工发一封格式规范的测试邮件对照;被拒说明是内容问题而非通道问题。

  4. 确认企微群收到摘要

    群机器人 webhook 需在群「群机器人」里新建并复制 Key。

测试用例与预期结果Test cases

覆盖四班组、三档等级、双网中断与装机业务,用于验收或回归。「预期」按当前映射表推导,实测若有出入应先看提示词是否被改过。

#客户话术(示例)范围预期班组预期等级考察点
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=否,不重复出单

常见问题排查Troubleshooting

现象原因处理
导入后节点全是无标题白框,检查清单提示缺开始节点实例是 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 输出异常 + 代码兜底未生效检查代码节点兜底分支是否存在;若被改成统一挂装维,成片故障会全部涌向装维

想改什么,怎么改Modify

需求改动位置注意
换班组收件邮箱只改 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 节点直接用代码节点输出的结构化字段做请求体
改 DSL 的两个纪律 ① 不要用正则批量替换 YAML 改节点类型,容易把缩进和转义改坏——用脚本 yaml.safe_load 解析成 dict、改完 safe_dump 写回(sort_keys=False, allow_unicode=True);② 代码节点源码经 safe_dump 往返后,源码里的 \n 可能变成真实换行导致 SyntaxError——把 Python 源码放到独立 .py 文件里读入赋给 data['code'],别在命令行里做多层转义。