Class WorkgroupThreadRoutingStrategy
java.lang.Object
com.bytedesk.service.routing_strategy.AbstractThreadRoutingStrategy
com.bytedesk.service.routing_strategy.WorkgroupThreadRoutingStrategy
@Component("workgroupThreadStrategy")
public class WorkgroupThreadRoutingStrategy
extends AbstractThreadRoutingStrategy
工作组线程路由策略
功能特点: - 支持机器人优先接待,可转人工 - 智能路由决策:根据工作组配置、服务时间、客服在线状态等因素决定路由方向 - 支持排队管理和离线留言 - 支持强制转人工和机器人转人工
路由决策流程: 1. 检查现有会话状态 2. 根据配置决定机器人或人工接待 3. 处理排队和离线场景 4. 支持会话状态转换
- Since:
- 1.0.0
- Author:
- Jack Ning 270580156@qq.com
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final BytedeskEventPublisher
private final MessageRestService
private final IMessageSendService
private final QueueMemberMessageService
private final QueueMemberRestService
private final QueueService
private final ThreadRestService
private final VisitorThreadService
private final WorkgroupRestService
private final WorkgroupRoutingService
Fields inherited from class com.bytedesk.service.routing_strategy.AbstractThreadRoutingStrategy
DEFAULT_OFFLINE_MESSAGE, DEFAULT_WELCOME_MESSAGE, ESTIMATED_WAIT_TIME_PER_PERSON, MESSAGE_CACHE_MINUTES, QUEUE_NEXT_MESSAGE, QUEUE_WAITING_MESSAGE_TEMPLATE
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptioncreateThread
(VisitorRequest visitorRequest) 创建线程的核心方法 由具体实现类负责处理不同类型的线程创建逻辑createWorkgroupThread
(VisitorRequest visitorRequest) 创建工作组会话private String
generateWorkgroupQueueMessage
(QueueMemberEntity queueMemberEntity) 生成工作组排队消息private String
getAgentWelcomeMessage
(AgentEntity agentEntity) 获取客服欢迎消息getOfflineMessage
(VisitorRequest visitorRequest, ThreadEntity threadFromRequest, AgentEntity agentEntity, WorkgroupEntity workgroup, QueueMemberEntity queueMemberEntity) 获取离线消息private ThreadEntity
getOrCreateWorkgroupThread
(VisitorRequest visitorRequest, WorkgroupEntity workgroup, String topic) 获取或创建工作组会话private MessageProtobuf
getRobotContinueMessage
(RobotEntity robotEntity, ThreadEntity thread) 获取机器人继续对话消息private String
getRobotWelcomeMessage
(RobotEntity robotEntity) 获取机器人欢迎消息protected ThreadRestService
获取线程服务实例 由具体实现类提供private MessageProtobuf
getWorkgroupContinueMessage
(VisitorRequest visitorRequest, ThreadEntity thread) 获取工作组继续对话消息private WorkgroupEntity
getWorkgroupEntity
(String workgroupUid) 获取工作组实体private String
getWorkgroupOfflineMessage
(WorkgroupEntity workgroup) 获取工作组离线消息private MessageProtobuf
getWorkgroupQueuingMessage
(VisitorRequest visitorRequest, ThreadEntity thread) 获取工作组排队消息private MessageProtobuf
handleAvailableWorkgroup
(ThreadEntity threadFromRequest, AgentEntity agentEntity, QueueMemberEntity queueMemberEntity) 处理可用工作组客服private MessageProtobuf
handleExistingChatThread
(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 处理现有聊天会话private MessageProtobuf
handleExistingOfflineThread
(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 处理现有离线会话private MessageProtobuf
handleExistingRobotThread
(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 处理现有机器人会话private MessageProtobuf
handleExistingWorkgroupThread
(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 处理现有工作组会话private void
handleForceAgentTransfer
(VisitorRequest visitorRequest, ThreadEntity thread, QueueMemberEntity queueMemberEntity) 处理强制转人工private MessageProtobuf
handleQueuedWorkgroup
(ThreadEntity threadFromRequest, AgentEntity agentEntity, QueueMemberEntity queueMemberEntity) 处理排队工作组客服private void
publishWorkgroupThreadEvents
(ThreadEntity savedThread) 发布工作组线程相关事件private MessageProtobuf
routeByAgentStatus
(AgentEntity agentEntity, ThreadEntity thread, QueueMemberEntity queueMemberEntity, WorkgroupEntity workgroup, VisitorRequest visitorRequest) 根据客服状态进行路由private MessageProtobuf
routeNewWorkgroupThread
(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 路由新工作组会话private MessageProtobuf
routeToAgent
(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 路由到人工客服routeToRobot
(VisitorRequest visitorRequest, ThreadEntity threadFromRequest, RobotEntity robotEntity, WorkgroupEntity workgroup) 路由到机器人private MessageProtobuf
routeToRobot
(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 路由到机器人private AgentEntity
selectAgent
(WorkgroupEntity workgroup, ThreadEntity thread) 选择客服private void
setThreadOwner
(ThreadEntity thread, AgentEntity agentEntity) 设置线程所有者private boolean
shouldRouteToRobot
(VisitorRequest visitorRequest, WorkgroupEntity workgroup) 判断是否应该路由到机器人private void
updateQueueMemberForAgentAccept
(QueueMemberEntity queueMemberEntity) 更新队列成员状态为客服自动接受private void
updateQueueMemberForRobotAccept
(QueueMemberEntity queueMemberEntity) 更新队列成员状态为机器人自动接受Methods inherited from class com.bytedesk.service.routing_strategy.AbstractThreadRoutingStrategy
executeWithExceptionHandling, generateQueueMessage, getThreadByUid, getValidOfflineMessage, getValidWelcomeMessage, handleStrategyException, isActiveThread, isClosedThread, isMessageInCacheTime, isNewThread, logThreadStatusChange, saveThread, validateThread, validateUid
-
Field Details
-
workgroupRestService
-
threadRestService
-
visitorThreadService
-
messageSendService
-
queueService
-
queueMemberRestService
-
messageRestService
-
workgroupRoutingService
-
bytedeskEventPublisher
-
queueMemberMessageService
-
-
Constructor Details
-
WorkgroupThreadRoutingStrategy
public WorkgroupThreadRoutingStrategy()
-
-
Method Details
-
getThreadRestService
Description copied from class:AbstractThreadRoutingStrategy
获取线程服务实例 由具体实现类提供- Specified by:
getThreadRestService
in classAbstractThreadRoutingStrategy
- Returns:
- ThreadRestService实例
-
createThread
Description copied from class:AbstractThreadRoutingStrategy
创建线程的核心方法 由具体实现类负责处理不同类型的线程创建逻辑- Specified by:
createThread
in classAbstractThreadRoutingStrategy
- Parameters:
visitorRequest
- 访客请求信息- Returns:
- 消息协议对象
-
createWorkgroupThread
创建工作组会话- Parameters:
visitorRequest
- 访客请求- Returns:
- 消息协议对象
-
getWorkgroupEntity
获取工作组实体 -
getOrCreateWorkgroupThread
private ThreadEntity getOrCreateWorkgroupThread(VisitorRequest visitorRequest, WorkgroupEntity workgroup, String topic) 获取或创建工作组会话 -
handleExistingWorkgroupThread
private MessageProtobuf handleExistingWorkgroupThread(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 处理现有工作组会话- Returns:
- 如果是现有活跃会话则返回相应消息,否则返回null继续新会话流程
-
handleExistingRobotThread
private MessageProtobuf handleExistingRobotThread(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 处理现有机器人会话 -
handleExistingChatThread
private MessageProtobuf handleExistingChatThread(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 处理现有聊天会话 -
handleExistingOfflineThread
private MessageProtobuf handleExistingOfflineThread(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 处理现有离线会话 -
routeNewWorkgroupThread
private MessageProtobuf routeNewWorkgroupThread(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 路由新工作组会话 -
shouldRouteToRobot
判断是否应该路由到机器人 -
routeToRobot
private MessageProtobuf routeToRobot(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 路由到机器人 -
routeToAgent
private MessageProtobuf routeToAgent(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) 路由到人工客服 -
selectAgent
选择客服 -
handleForceAgentTransfer
private void handleForceAgentTransfer(VisitorRequest visitorRequest, ThreadEntity thread, QueueMemberEntity queueMemberEntity) 处理强制转人工 -
routeByAgentStatus
private MessageProtobuf routeByAgentStatus(AgentEntity agentEntity, ThreadEntity thread, QueueMemberEntity queueMemberEntity, WorkgroupEntity workgroup, VisitorRequest visitorRequest) 根据客服状态进行路由 -
handleAvailableWorkgroup
private MessageProtobuf handleAvailableWorkgroup(ThreadEntity threadFromRequest, AgentEntity agentEntity, QueueMemberEntity queueMemberEntity) 处理可用工作组客服 -
handleQueuedWorkgroup
private MessageProtobuf handleQueuedWorkgroup(ThreadEntity threadFromRequest, AgentEntity agentEntity, QueueMemberEntity queueMemberEntity) 处理排队工作组客服 -
getOfflineMessage
public MessageProtobuf getOfflineMessage(VisitorRequest visitorRequest, ThreadEntity threadFromRequest, AgentEntity agentEntity, WorkgroupEntity workgroup, QueueMemberEntity queueMemberEntity) 获取离线消息 -
routeToRobot
public MessageProtobuf routeToRobot(VisitorRequest visitorRequest, ThreadEntity threadFromRequest, RobotEntity robotEntity, WorkgroupEntity workgroup) 路由到机器人 -
getWorkgroupContinueMessage
private MessageProtobuf getWorkgroupContinueMessage(VisitorRequest visitorRequest, ThreadEntity thread) 获取工作组继续对话消息 -
getWorkgroupQueuingMessage
private MessageProtobuf getWorkgroupQueuingMessage(VisitorRequest visitorRequest, ThreadEntity thread) 获取工作组排队消息 -
getRobotContinueMessage
获取机器人继续对话消息 -
getAgentWelcomeMessage
获取客服欢迎消息 -
getRobotWelcomeMessage
获取机器人欢迎消息 -
getWorkgroupOfflineMessage
获取工作组离线消息 -
generateWorkgroupQueueMessage
生成工作组排队消息 -
setThreadOwner
设置线程所有者 -
updateQueueMemberForAgentAccept
更新队列成员状态为客服自动接受 -
updateQueueMemberForRobotAccept
更新队列成员状态为机器人自动接受 -
publishWorkgroupThreadEvents
发布工作组线程相关事件
-