mirror of
https://gitee.com/270580156/weiyu.git
synced 2026-05-16 12:18:10 +00:00
update modules/ticket: mod 2 del 2 files
This commit is contained in:
@@ -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";
|
||||
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
@@ -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工作流引擎实现,确保每个环节都有明确的处理逻辑和角色分配。
|
||||
|
||||
## 流程组成部分
|
||||
|
||||
@@ -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>
|
||||
Reference in New Issue
Block a user