update modules/ticket: mod 2 del 2 files

This commit is contained in:
jack ning
2025-04-01 16:01:08 +08:00
parent 69ca462365
commit 5eaed68cc4
5 changed files with 6 additions and 434 deletions

View File

@@ -2,7 +2,7 @@
* @Author: jackning 270580156@qq.com
* @Date: 2025-01-23 15:00:11
* @LastEditors: jackning 270580156@qq.com
* @LastEditTime: 2025-04-01 15:25:39
* @LastEditTime: 2025-04-01 15:58:23
* @Description: bytedesk.com https://github.com/Bytedesk/bytedesk
* Please be aware of the BSL license restrictions before installing Bytedesk IM
* selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license.
@@ -82,8 +82,6 @@ public class TicketConsts {
// 未分配
public static final String TICKET_FILTER_UNASSIGNED = "UNASSIGNED";
// thread-process
public static final String THREAD_PROCESS_NAME_GROUP = I18Consts.I18N_PREFIX + "thread.process.name.group";
@@ -91,14 +89,6 @@ public class TicketConsts {
public static final String THREAD_PROCESS_PATH_GROUP = "processes/thread-group-process.bpmn20.xml";
public static final String THREAD_PROCESS_KEY_AGENT = "threadGroupProcess";
public static final String THREAD_PROCESS_PATH_GROUP = "processes/thread-group-process.bpmn20.xml";
public static final String THREAD_PROCESS_KEY_GROUP = "threadGroupProcess";
public static final String THREAD_PROCESS_PATH_GROUP = "processes/thread-group-process.bpmn20.xml";
// variables
public static final String TICKET_VARIABLE_THREAD_UID = "threadUid";

View File

@@ -2,7 +2,7 @@
* @Author: jackning 270580156@qq.com
* @Date: 2024-05-11 18:25:45
* @LastEditors: jackning 270580156@qq.com
* @LastEditTime: 2025-04-01 14:05:36
* @LastEditTime: 2025-04-01 15:29:57
* @Description: bytedesk.com https://github.com/Bytedesk/bytedesk
* Please be aware of the BSL license restrictions before installing Bytedesk IM
* selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license.
@@ -300,4 +300,6 @@ public class TicketProcessRestService
}
}
}

View File

@@ -1,210 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="BytedeskThread" exporter="Flowable Open Source Modeler" exporterVersion="6.8.0">
<process id="threadAgentProcess" name="客服一对一会话流程" isExecutable="true">
<extensionElements>
<flowable:executionListener event="start" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
<flowable:executionListener event="end" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
</extensionElements>
<startEvent id="start" name="访客发起会话" flowable:formFieldValidation="true"></startEvent>
<exclusiveGateway id="isRobotEnabled" name="机器人接待?"></exclusiveGateway>
<sequenceFlow id="flow1" sourceRef="start" targetRef="isRobotEnabled"></sequenceFlow>
<serviceTask id="robotService" name="机器人接待" flowable:delegateExpression="${threadRobotServiceDelegate}"></serviceTask>
<sequenceFlow id="flow2" sourceRef="isRobotEnabled" targetRef="robotService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${robotEnabled == true}]]></conditionExpression>
</sequenceFlow>
<exclusiveGateway id="transferToHuman" name="是否转人工?"></exclusiveGateway>
<sequenceFlow id="flow3" sourceRef="robotService" targetRef="transferToHuman"></sequenceFlow>
<sequenceFlow id="flow4" sourceRef="transferToHuman" targetRef="robotService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${needHumanService == false}]]></conditionExpression>
</sequenceFlow>
<exclusiveGateway id="isAgentsBusy" name="坐席繁忙?"></exclusiveGateway>
<sequenceFlow id="flow5" sourceRef="transferToHuman" targetRef="isAgentsBusy">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${needHumanService == true}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow6" sourceRef="isRobotEnabled" targetRef="isAgentsBusy">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${robotEnabled == false}]]></conditionExpression>
</sequenceFlow>
<serviceTask id="queueService" name="排队等待" flowable:delegateExpression="${threadQueueServiceDelegate}"></serviceTask>
<sequenceFlow id="flow7" sourceRef="isAgentsBusy" targetRef="queueService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${agentsBusy == true}]]></conditionExpression>
</sequenceFlow>
<userTask id="humanService" name="人工接待" flowable:candidateGroups="${agentGroupId}" flowable:formFieldValidation="true">
<documentation>客服人员接待访客</documentation>
<extensionElements>
<flowable:formProperty id="threadUid" name="会话ID" type="string" required="true"></flowable:formProperty>
<flowable:formProperty id="status" name="状态" type="enum" required="true">
<flowable:value id="ACTIVE" name="接待中"></flowable:value>
<flowable:value id="TRANSFER" name="需要转接"></flowable:value>
<flowable:value id="INVITE" name="邀请协助"></flowable:value>
<flowable:value id="RESOLVED" name="已解决"></flowable:value>
</flowable:formProperty>
<flowable:executionListener event="start" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
<flowable:executionListener event="end" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
<flowable:taskListener event="create" delegateExpression="${threadTaskListener}"></flowable:taskListener>
<flowable:taskListener event="assignment" delegateExpression="${threadTaskListener}"></flowable:taskListener>
<flowable:taskListener event="complete" delegateExpression="${threadTaskListener}"></flowable:taskListener>
</extensionElements>
</userTask>
<sequenceFlow id="flow8" sourceRef="queueService" targetRef="humanService"></sequenceFlow>
<sequenceFlow id="flow9" sourceRef="isAgentsBusy" targetRef="humanService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${agentsBusy == false}]]></conditionExpression>
</sequenceFlow>
<boundaryEvent id="slaTimer" attachedToRef="humanService" cancelActivity="false">
<timerEventDefinition>
<timeDuration>${slaTime}</timeDuration>
</timerEventDefinition>
</boundaryEvent>
<serviceTask id="slaNotification" name="SLA超时通知" flowable:delegateExpression="${threadSLATimeoutNotificationDelegate}"></serviceTask>
<sequenceFlow id="flow10" sourceRef="slaTimer" targetRef="slaNotification"></sequenceFlow>
<serviceTask id="transferService" name="转接服务" flowable:delegateExpression="${threadTransferServiceDelegate}"></serviceTask>
<sequenceFlow id="flow12" sourceRef="transferService" targetRef="humanService"></sequenceFlow>
<serviceTask id="inviteService" name="邀请协助" flowable:delegateExpression="${threadInviteServiceDelegate}"></serviceTask>
<sequenceFlow id="flow13" sourceRef="humanService" targetRef="inviteService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${status == 'INVITE'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow14" sourceRef="inviteService" targetRef="humanService"></sequenceFlow>
<userTask id="satisfactionSurvey" name="满意度评价" flowable:assignee="${visitorId}" flowable:formFieldValidation="true">
<documentation>访客填写满意度评价</documentation>
<extensionElements>
<flowable:formProperty id="threadUid" name="会话ID" type="string" required="true"></flowable:formProperty>
<flowable:formProperty id="satisfaction" name="满意度" type="enum" required="true">
<flowable:value id="VERY_SATISFIED" name="非常满意"></flowable:value>
<flowable:value id="SATISFIED" name="满意"></flowable:value>
<flowable:value id="NEUTRAL" name="一般"></flowable:value>
<flowable:value id="UNSATISFIED" name="不满意"></flowable:value>
<flowable:value id="VERY_UNSATISFIED" name="非常不满意"></flowable:value>
</flowable:formProperty>
<flowable:formProperty id="resolved" name="问题是否解决" type="boolean" required="true"></flowable:formProperty>
<flowable:formProperty id="comment" name="备注" type="string"></flowable:formProperty>
<flowable:executionListener event="end" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<sequenceFlow id="flow15" sourceRef="humanService" targetRef="satisfactionSurvey">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${status == 'RESOLVED'}]]></conditionExpression>
</sequenceFlow>
<endEvent id="end" name="会话结束"></endEvent>
<sequenceFlow id="flow16" sourceRef="satisfactionSurvey" targetRef="end"></sequenceFlow>
<sequenceFlow id="flow11" sourceRef="humanService" targetRef="transferService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${status == 'TRANSFER'}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_customerThreadProcess">
<bpmndi:BPMNPlane bpmnElement="customerThreadProcess" id="BPMNPlane_customerThreadProcess">
<bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
<omgdc:Bounds height="30.0" width="30.0" x="100.0" y="215.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="isRobotEnabled" id="BPMNShape_isRobotEnabled">
<omgdc:Bounds height="40.0" width="40.0" x="180.0" y="210.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="robotService" id="BPMNShape_robotService">
<omgdc:Bounds height="60.0" width="100.0" x="270.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="transferToHuman" id="BPMNShape_transferToHuman">
<omgdc:Bounds height="40.0" width="40.0" x="420.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="isAgentsBusy" id="BPMNShape_isAgentsBusy">
<omgdc:Bounds height="40.0" width="40.0" x="320.0" y="210.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="queueService" id="BPMNShape_queueService">
<omgdc:Bounds height="60.0" width="100.0" x="410.0" y="375.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="humanService" id="BPMNShape_humanService">
<omgdc:Bounds height="60.0" width="100.0" x="520.0" y="200.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="slaTimer" id="BPMNShape_slaTimer">
<omgdc:Bounds height="31.0" width="31.0" x="560.1643989873054" y="245.98639392383217"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="slaNotification" id="BPMNShape_slaNotification">
<omgdc:Bounds height="60.0" width="100.0" x="410.0" y="285.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="transferService" id="BPMNShape_transferService">
<omgdc:Bounds height="60.0" width="100.0" x="680.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="inviteService" id="BPMNShape_inviteService">
<omgdc:Bounds height="60.0" width="100.0" x="690.0" y="300.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="satisfactionSurvey" id="BPMNShape_satisfactionSurvey">
<omgdc:Bounds height="60.0" width="100.0" x="680.0" y="200.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
<omgdc:Bounds height="28.0" width="28.0" x="830.0" y="216.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="600.4659345391904" y="259.95"></omgdi:waypoint>
<omgdi:waypoint x="629.0" y="288.0"></omgdi:waypoint>
<omgdi:waypoint x="690.0" y="311.0810810810811"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow14" id="BPMNEdge_flow14" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="690.0" y="301.3813842966695"></omgdi:waypoint>
<omgdi:waypoint x="642.4100604689105" y="274.1422204809698"></omgdi:waypoint>
<omgdi:waypoint x="619.1191052620998" y="259.95"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="619.9499999999999" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="680.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="779.949999999996" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="830.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
<omgdi:waypoint x="129.9499974717603" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="180.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="200.0" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="200.0" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="269.9999999999097" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
<omgdi:waypoint x="369.9499999999756" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="420.0" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="440.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="440.0" y="100.0"></omgdi:waypoint>
<omgdi:waypoint x="320.0" y="100.0"></omgdi:waypoint>
<omgdi:waypoint x="320.0" y="120.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
<omgdi:waypoint x="440.0" y="169.9251246882793"></omgdi:waypoint>
<omgdi:waypoint x="440.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="340.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="340.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
<omgdi:waypoint x="219.94288008565312" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="320.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="340.0" y="249.9443032552827"></omgdi:waypoint>
<omgdi:waypoint x="340.0" y="405.0"></omgdi:waypoint>
<omgdi:waypoint x="410.0" y="405.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10" flowable:sourceDockerX="15.500000000000002" flowable:sourceDockerY="15.500000000000002" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="561.5936707407334" y="267.97539539913896"></omgdi:waypoint>
<omgdi:waypoint x="509.95" y="291.86686372613184"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="509.949999999811" y="405.0"></omgdi:waypoint>
<omgdi:waypoint x="570.0" y="405.0"></omgdi:waypoint>
<omgdi:waypoint x="570.0" y="259.95"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="619.9499999999999" y="205.0"></omgdi:waypoint>
<omgdi:waypoint x="680.0" y="174.97500000000002"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="359.94566492829205" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="520.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow12" id="BPMNEdge_flow12" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="730.0" y="120.0"></omgdi:waypoint>
<omgdi:waypoint x="730.0" y="80.0"></omgdi:waypoint>
<omgdi:waypoint x="570.0" y="80.0"></omgdi:waypoint>
<omgdi:waypoint x="570.0" y="200.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View File

@@ -2,7 +2,7 @@
* @Author: jackning 270580156@qq.com
* @Date: 2025-03-24 10:12:01
* @LastEditors: jackning 270580156@qq.com
* @LastEditTime: 2025-04-01 14:10:29
* @LastEditTime: 2025-04-01 15:58:01
* @Description: bytedesk.com https://github.com/Bytedesk/bytedesk
* Please be aware of the BSL license restrictions before installing Bytedesk IM
* selling, reselling, or hosting Bytedesk IM as a service is a breach of the terms and automatically terminates your rights under the license.
@@ -15,7 +15,7 @@
## 流程概述
该流程文件(`group-thread-process.bpmn20.xml`)定义了完整的在线客服会话流程从访客发起咨询到满意度评价的全过程。流程采用Flowable工作流引擎实现确保每个环节都有明确的处理逻辑和角色分配。
该流程文件(`thread-group-process.bpmn20.xml`)定义了完整的在线客服会话流程从访客发起咨询到满意度评价的全过程。流程采用Flowable工作流引擎实现确保每个环节都有明确的处理逻辑和角色分配。
## 流程组成部分

View File

@@ -1,210 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:flowable="http://flowable.org/bpmn" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema" expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="BytedeskThread" exporter="Flowable Open Source Modeler" exporterVersion="6.8.0">
<process id="threadRobotProcess" name="客服机器人会话流程" isExecutable="true">
<extensionElements>
<flowable:executionListener event="start" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
<flowable:executionListener event="end" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
</extensionElements>
<startEvent id="start" name="访客发起会话" flowable:formFieldValidation="true"></startEvent>
<exclusiveGateway id="isRobotEnabled" name="机器人接待?"></exclusiveGateway>
<sequenceFlow id="flow1" sourceRef="start" targetRef="isRobotEnabled"></sequenceFlow>
<serviceTask id="robotService" name="机器人接待" flowable:delegateExpression="${threadRobotServiceDelegate}"></serviceTask>
<sequenceFlow id="flow2" sourceRef="isRobotEnabled" targetRef="robotService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${robotEnabled == true}]]></conditionExpression>
</sequenceFlow>
<exclusiveGateway id="transferToHuman" name="是否转人工?"></exclusiveGateway>
<sequenceFlow id="flow3" sourceRef="robotService" targetRef="transferToHuman"></sequenceFlow>
<sequenceFlow id="flow4" sourceRef="transferToHuman" targetRef="robotService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${needHumanService == false}]]></conditionExpression>
</sequenceFlow>
<exclusiveGateway id="isAgentsBusy" name="坐席繁忙?"></exclusiveGateway>
<sequenceFlow id="flow5" sourceRef="transferToHuman" targetRef="isAgentsBusy">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${needHumanService == true}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow6" sourceRef="isRobotEnabled" targetRef="isAgentsBusy">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${robotEnabled == false}]]></conditionExpression>
</sequenceFlow>
<serviceTask id="queueService" name="排队等待" flowable:delegateExpression="${threadQueueServiceDelegate}"></serviceTask>
<sequenceFlow id="flow7" sourceRef="isAgentsBusy" targetRef="queueService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${agentsBusy == true}]]></conditionExpression>
</sequenceFlow>
<userTask id="humanService" name="人工接待" flowable:candidateGroups="${agentGroupId}" flowable:formFieldValidation="true">
<documentation>客服人员接待访客</documentation>
<extensionElements>
<flowable:formProperty id="threadUid" name="会话ID" type="string" required="true"></flowable:formProperty>
<flowable:formProperty id="status" name="状态" type="enum" required="true">
<flowable:value id="ACTIVE" name="接待中"></flowable:value>
<flowable:value id="TRANSFER" name="需要转接"></flowable:value>
<flowable:value id="INVITE" name="邀请协助"></flowable:value>
<flowable:value id="RESOLVED" name="已解决"></flowable:value>
</flowable:formProperty>
<flowable:executionListener event="start" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
<flowable:executionListener event="end" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
<flowable:taskListener event="create" delegateExpression="${threadTaskListener}"></flowable:taskListener>
<flowable:taskListener event="assignment" delegateExpression="${threadTaskListener}"></flowable:taskListener>
<flowable:taskListener event="complete" delegateExpression="${threadTaskListener}"></flowable:taskListener>
</extensionElements>
</userTask>
<sequenceFlow id="flow8" sourceRef="queueService" targetRef="humanService"></sequenceFlow>
<sequenceFlow id="flow9" sourceRef="isAgentsBusy" targetRef="humanService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${agentsBusy == false}]]></conditionExpression>
</sequenceFlow>
<boundaryEvent id="slaTimer" attachedToRef="humanService" cancelActivity="false">
<timerEventDefinition>
<timeDuration>${slaTime}</timeDuration>
</timerEventDefinition>
</boundaryEvent>
<serviceTask id="slaNotification" name="SLA超时通知" flowable:delegateExpression="${threadSLATimeoutNotificationDelegate}"></serviceTask>
<sequenceFlow id="flow10" sourceRef="slaTimer" targetRef="slaNotification"></sequenceFlow>
<serviceTask id="transferService" name="转接服务" flowable:delegateExpression="${threadTransferServiceDelegate}"></serviceTask>
<sequenceFlow id="flow12" sourceRef="transferService" targetRef="humanService"></sequenceFlow>
<serviceTask id="inviteService" name="邀请协助" flowable:delegateExpression="${threadInviteServiceDelegate}"></serviceTask>
<sequenceFlow id="flow13" sourceRef="humanService" targetRef="inviteService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${status == 'INVITE'}]]></conditionExpression>
</sequenceFlow>
<sequenceFlow id="flow14" sourceRef="inviteService" targetRef="humanService"></sequenceFlow>
<userTask id="satisfactionSurvey" name="满意度评价" flowable:assignee="${visitorId}" flowable:formFieldValidation="true">
<documentation>访客填写满意度评价</documentation>
<extensionElements>
<flowable:formProperty id="threadUid" name="会话ID" type="string" required="true"></flowable:formProperty>
<flowable:formProperty id="satisfaction" name="满意度" type="enum" required="true">
<flowable:value id="VERY_SATISFIED" name="非常满意"></flowable:value>
<flowable:value id="SATISFIED" name="满意"></flowable:value>
<flowable:value id="NEUTRAL" name="一般"></flowable:value>
<flowable:value id="UNSATISFIED" name="不满意"></flowable:value>
<flowable:value id="VERY_UNSATISFIED" name="非常不满意"></flowable:value>
</flowable:formProperty>
<flowable:formProperty id="resolved" name="问题是否解决" type="boolean" required="true"></flowable:formProperty>
<flowable:formProperty id="comment" name="备注" type="string"></flowable:formProperty>
<flowable:executionListener event="end" delegateExpression="${threadExecutionListener}"></flowable:executionListener>
<modeler:initiator-can-complete xmlns:modeler="http://flowable.org/modeler"><![CDATA[false]]></modeler:initiator-can-complete>
</extensionElements>
</userTask>
<sequenceFlow id="flow15" sourceRef="humanService" targetRef="satisfactionSurvey">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${status == 'RESOLVED'}]]></conditionExpression>
</sequenceFlow>
<endEvent id="end" name="会话结束"></endEvent>
<sequenceFlow id="flow16" sourceRef="satisfactionSurvey" targetRef="end"></sequenceFlow>
<sequenceFlow id="flow11" sourceRef="humanService" targetRef="transferService">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[${status == 'TRANSFER'}]]></conditionExpression>
</sequenceFlow>
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_customerThreadProcess">
<bpmndi:BPMNPlane bpmnElement="customerThreadProcess" id="BPMNPlane_customerThreadProcess">
<bpmndi:BPMNShape bpmnElement="start" id="BPMNShape_start">
<omgdc:Bounds height="30.0" width="30.0" x="100.0" y="215.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="isRobotEnabled" id="BPMNShape_isRobotEnabled">
<omgdc:Bounds height="40.0" width="40.0" x="180.0" y="210.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="robotService" id="BPMNShape_robotService">
<omgdc:Bounds height="60.0" width="100.0" x="270.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="transferToHuman" id="BPMNShape_transferToHuman">
<omgdc:Bounds height="40.0" width="40.0" x="420.0" y="130.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="isAgentsBusy" id="BPMNShape_isAgentsBusy">
<omgdc:Bounds height="40.0" width="40.0" x="320.0" y="210.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="queueService" id="BPMNShape_queueService">
<omgdc:Bounds height="60.0" width="100.0" x="410.0" y="375.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="humanService" id="BPMNShape_humanService">
<omgdc:Bounds height="60.0" width="100.0" x="520.0" y="200.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="slaTimer" id="BPMNShape_slaTimer">
<omgdc:Bounds height="31.0" width="31.0" x="560.1643989873054" y="245.98639392383217"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="slaNotification" id="BPMNShape_slaNotification">
<omgdc:Bounds height="60.0" width="100.0" x="410.0" y="285.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="transferService" id="BPMNShape_transferService">
<omgdc:Bounds height="60.0" width="100.0" x="680.0" y="120.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="inviteService" id="BPMNShape_inviteService">
<omgdc:Bounds height="60.0" width="100.0" x="690.0" y="300.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="satisfactionSurvey" id="BPMNShape_satisfactionSurvey">
<omgdc:Bounds height="60.0" width="100.0" x="680.0" y="200.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="end" id="BPMNShape_end">
<omgdc:Bounds height="28.0" width="28.0" x="830.0" y="216.0"></omgdc:Bounds>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="flow13" id="BPMNEdge_flow13" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="600.4659345391904" y="259.95"></omgdi:waypoint>
<omgdi:waypoint x="629.0" y="288.0"></omgdi:waypoint>
<omgdi:waypoint x="690.0" y="311.0810810810811"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow14" id="BPMNEdge_flow14" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="690.0" y="301.3813842966695"></omgdi:waypoint>
<omgdi:waypoint x="642.4100604689105" y="274.1422204809698"></omgdi:waypoint>
<omgdi:waypoint x="619.1191052620998" y="259.95"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow15" id="BPMNEdge_flow15" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="619.9499999999999" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="680.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow16" id="BPMNEdge_flow16" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="14.0" flowable:targetDockerY="14.0">
<omgdi:waypoint x="779.949999999996" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="830.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow1" id="BPMNEdge_flow1" flowable:sourceDockerX="15.0" flowable:sourceDockerY="15.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
<omgdi:waypoint x="129.9499974717603" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="180.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow2" id="BPMNEdge_flow2" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="200.0" y="210.0"></omgdi:waypoint>
<omgdi:waypoint x="200.0" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="269.9999999999097" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow3" id="BPMNEdge_flow3" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
<omgdi:waypoint x="369.9499999999756" y="150.0"></omgdi:waypoint>
<omgdi:waypoint x="420.0" y="150.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow4" id="BPMNEdge_flow4" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="440.0" y="130.0"></omgdi:waypoint>
<omgdi:waypoint x="440.0" y="100.0"></omgdi:waypoint>
<omgdi:waypoint x="320.0" y="100.0"></omgdi:waypoint>
<omgdi:waypoint x="320.0" y="120.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow5" id="BPMNEdge_flow5" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
<omgdi:waypoint x="440.0" y="169.9251246882793"></omgdi:waypoint>
<omgdi:waypoint x="440.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="340.0" y="190.0"></omgdi:waypoint>
<omgdi:waypoint x="340.0" y="210.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow6" id="BPMNEdge_flow6" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="20.0" flowable:targetDockerY="20.0">
<omgdi:waypoint x="219.94288008565312" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="320.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow7" id="BPMNEdge_flow7" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="340.0" y="249.9443032552827"></omgdi:waypoint>
<omgdi:waypoint x="340.0" y="405.0"></omgdi:waypoint>
<omgdi:waypoint x="410.0" y="405.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow10" id="BPMNEdge_flow10" flowable:sourceDockerX="15.500000000000002" flowable:sourceDockerY="15.500000000000002" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="561.5936707407334" y="267.97539539913896"></omgdi:waypoint>
<omgdi:waypoint x="509.95" y="291.86686372613184"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow8" id="BPMNEdge_flow8" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="509.949999999811" y="405.0"></omgdi:waypoint>
<omgdi:waypoint x="570.0" y="405.0"></omgdi:waypoint>
<omgdi:waypoint x="570.0" y="259.95"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow11" id="BPMNEdge_flow11" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="619.9499999999999" y="205.0"></omgdi:waypoint>
<omgdi:waypoint x="680.0" y="174.97500000000002"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow9" id="BPMNEdge_flow9" flowable:sourceDockerX="20.0" flowable:sourceDockerY="20.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="359.94566492829205" y="230.0"></omgdi:waypoint>
<omgdi:waypoint x="520.0" y="230.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="flow12" id="BPMNEdge_flow12" flowable:sourceDockerX="50.0" flowable:sourceDockerY="30.0" flowable:targetDockerX="50.0" flowable:targetDockerY="30.0">
<omgdi:waypoint x="730.0" y="120.0"></omgdi:waypoint>
<omgdi:waypoint x="730.0" y="80.0"></omgdi:waypoint>
<omgdi:waypoint x="570.0" y="80.0"></omgdi:waypoint>
<omgdi:waypoint x="570.0" y="200.0"></omgdi:waypoint>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>