Class VisitorThreadService
java.lang.Object
com.bytedesk.core.base.BaseRestService<VisitorThreadEntity,VisitorThreadRequest,VisitorThreadResponse>
com.bytedesk.service.visitor_thread.VisitorThreadService
@Service
public class VisitorThreadService
extends BaseRestService<VisitorThreadEntity,VisitorThreadRequest,VisitorThreadResponse>
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate final AgentRestServiceprivate final AgentSettingsRestServiceprivate final MessageRestServiceprivate final IMessageSendServiceprivate final org.modelmapper.ModelMapperprivate final QueueMemberRestServiceprivate final RobotSettingsRestServiceprivate final ThreadRestServiceprivate final UidUtilsprivate final VisitorThreadRepositoryprivate final WorkgroupRestServiceprivate final WorkgroupSettingsRestServiceFields inherited from class com.bytedesk.core.base.BaseRestService
authService -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidautoRemindAgentOrCloseThread(List<ThreadEntity> threads) 自动提醒客服或关闭会话private StringbuildAgentExtra(VisitorRequest visitorRequest, AgentEntity agent) 根据请求与客服实体构建 thread.extra - 普通渠道:构建 ServiceSettingsResponseVisitor JSON 若 debug=true 且 settingsUid 非空,则优先使用指定 settings 进行预览private StringbuildRobotExtra(VisitorRequest visitorRequest, RobotEntity robot) 根据请求与机器人实体构建 thread.extra - 普通渠道:构建 ServiceSettingsResponseVisitor JSON 若 debug=true 且 settingsUid 非空,则优先使用指定 settings 进行预览private StringbuildWorkflowExtra(VisitorRequest visitorRequest, WorkflowEntity workflow) 根据请求与工作流实体构建 thread.extra - 工作流暂时不支持 debug 预览private StringbuildWorkgroupExtra(VisitorRequest visitorRequest, WorkgroupEntity workgroup) 根据请求与工作组实体构建 thread.extra - 社交渠道:直接使用请求中的 extra - 普通渠道:构建 ServiceSettingsResponseVisitor JSON 若 debug=true 且 settingsUid 非空,则优先使用指定 settings 进行预览private long计算线程超时分钟数booleanconsumeVisitorNoResponseTriggerPermit(String threadUid, int noResponseTimeoutSeconds) 主动触发:判断“访客长时间未发送消息”是否达到阈值,并用 QueueMember.lastNotifiedAt 做节流。convertToResponse(VisitorThreadEntity entity) create(VisitorThreadRequest request) createAgentThread(VisitorRequest visitorRequest, AgentEntity agent, String topic) createRobotThread(VisitorRequest visitorRequest, RobotEntity robot, String topic) protected org.springframework.data.jpa.domain.Specification<VisitorThreadEntity>createSpecification(VisitorThreadRequest request) 创建Specification对象,子类必须实现 用于queryByOrg的通用实现createWorkflowThread(VisitorRequest visitorRequest, WorkflowEntity workflow, String topic) createWorkgroupThread(VisitorRequest visitorRequest, WorkgroupEntity workgroup, String topic) voiddelete(VisitorThreadRequest entity) voiddeleteByUid(String uid) protected VisitorThreadEntitydoSave(VisitorThreadEntity entity) 子类实现具体的保存逻辑protected org.springframework.data.domain.Page<VisitorThreadEntity>executePageQuery(org.springframework.data.jpa.domain.Specification<VisitorThreadEntity> spec, org.springframework.data.domain.Pageable pageable) 执行分页查询,子类必须实现 用于queryByOrg的通用实现existsByUid(String uid) findFirstByTopic(String topic) private double获取自动关闭分钟数private voidhandleAutoClose(ThreadEntity thread, long diffInMinutes) 处理自动关闭逻辑handleOptimisticLockingFailureException(org.springframework.orm.ObjectOptimisticLockingFailureException e, VisitorThreadEntity entity) handleQueueOverflowLeaveMessage(ThreadEntity thread, QueueMemberEntity queueMember) private booleanhandleQueueWaitTimeout(ThreadEntity thread) 处理排队等待超时逻辑private voidhandleTimeoutReminder(ThreadEntity thread, long diffInMinutes) 处理超时提醒逻辑private ServiceSettingsResponseVisitorparseThreadSettings(ThreadEntity thread) 解析线程设置private voidprocessAgentTimeoutReminder(ThreadEntity thread, AgentEntity agent) 处理客服超时提醒private voidprocessThreadTimeout(ThreadEntity thread) 处理单个Thread会话的超时逻辑reInitAgentThreadExtra(VisitorRequest visitorRequest, ThreadEntity thread, AgentEntity agent) reInitRobotThreadExtra(VisitorRequest visitorRequest, ThreadEntity thread, RobotEntity robot) reInitWorkflowThreadExtra(VisitorRequest visitorRequest, ThreadEntity thread, WorkflowEntity workflow) reInitWorkgroupThreadExtra(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) private StringresolveLeaveMessageTip(ThreadEntity thread) private Stringprivate StringresolveLeaveMessageTip(WorkgroupEntity workgroup) private intresolveQueueMaxWaitSeconds(QueueSettingsEntity queueSettings) private QueueSettingsEntityresolveQueueSettings(ThreadEntity thread) private QueueSettingsEntityprivate QueueSettingsEntityresolveQueueSettingsFromWorkgroup(WorkgroupEntity workgroup) private voidsendRemindMessage(QueueMemberEntity queueMember, ThreadEntity thread, AgentEntity agent) private booleanshouldSendTimeoutReminder(QueueMemberEntity queueMember) 判断是否应该发送超时提醒private MessageProtobuftriggerQueueLeaveMessage(ThreadEntity thread, QueueMemberEntity queueMember) update(ThreadEntity thread) update(VisitorThreadRequest request) Methods inherited from class com.bytedesk.core.base.BaseRestService
deleteByOrgUid, findByOrgUid, getUidFromRequest, queryByOrg, queryByUid, queryByUser, recover, save, setUserUidToRequest
-
Field Details
-
visitorThreadRepository
-
threadRestService
-
modelMapper
private final org.modelmapper.ModelMapper modelMapper -
uidUtils
-
queueMemberRestService
-
agentRestService
-
messageSendService
-
messageRestService
-
agentSettingsRestService
-
robotSettingsRestService
-
workgroupSettingsRestService
-
workgroupRestService
-
-
Constructor Details
-
VisitorThreadService
public VisitorThreadService()
-
-
Method Details
-
findByUid
@Cacheable(value="visitor_thread", key="#uid", unless="#result == null") public Optional<VisitorThreadEntity> findByUid(String uid) - Specified by:
findByUidin classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-
existsByUid
-
findFirstByTopic
@Cacheable(value="visitor_thread", key="#topic", unless="#result == null") public Optional<VisitorThreadEntity> findFirstByTopic(String topic) -
consumeVisitorNoResponseTriggerPermit
public boolean consumeVisitorNoResponseTriggerPermit(String threadUid, int noResponseTimeoutSeconds) 主动触发:判断“访客长时间未发送消息”是否达到阈值,并用 QueueMember.lastNotifiedAt 做节流。 规则: - 优先使用 QueueMember.visitorLastMessageAt 作为基准时间 - 若为空,则使用 visitorEnqueueAt 作为兜底 - 达到 noResponseTimeoutSeconds 才允许触发 - 触发后写入 lastNotifiedAt,避免每分钟重复触发 -
createWorkgroupThread
public ThreadEntity createWorkgroupThread(VisitorRequest visitorRequest, WorkgroupEntity workgroup, String topic) -
reInitWorkgroupThreadExtra
public ThreadEntity reInitWorkgroupThreadExtra(VisitorRequest visitorRequest, ThreadEntity thread, WorkgroupEntity workgroup) -
createAgentThread
public ThreadEntity createAgentThread(VisitorRequest visitorRequest, AgentEntity agent, String topic) -
reInitAgentThreadExtra
public ThreadEntity reInitAgentThreadExtra(VisitorRequest visitorRequest, ThreadEntity thread, AgentEntity agent) -
createRobotThread
public ThreadEntity createRobotThread(VisitorRequest visitorRequest, RobotEntity robot, String topic) -
reInitRobotThreadExtra
public ThreadEntity reInitRobotThreadExtra(VisitorRequest visitorRequest, ThreadEntity thread, RobotEntity robot) -
createWorkflowThread
public ThreadEntity createWorkflowThread(VisitorRequest visitorRequest, WorkflowEntity workflow, String topic) -
reInitWorkflowThreadExtra
public ThreadEntity reInitWorkflowThreadExtra(VisitorRequest visitorRequest, ThreadEntity thread, WorkflowEntity workflow) -
buildWorkflowExtra
根据请求与工作流实体构建 thread.extra - 工作流暂时不支持 debug 预览 -
buildWorkgroupExtra
根据请求与工作组实体构建 thread.extra - 社交渠道:直接使用请求中的 extra - 普通渠道:构建 ServiceSettingsResponseVisitor JSON 若 debug=true 且 settingsUid 非空,则优先使用指定 settings 进行预览 -
buildAgentExtra
根据请求与客服实体构建 thread.extra - 普通渠道:构建 ServiceSettingsResponseVisitor JSON 若 debug=true 且 settingsUid 非空,则优先使用指定 settings 进行预览 -
buildRobotExtra
根据请求与机器人实体构建 thread.extra - 普通渠道:构建 ServiceSettingsResponseVisitor JSON 若 debug=true 且 settingsUid 非空,则优先使用指定 settings 进行预览 -
update
-
create
- Specified by:
createin classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-
update
- Specified by:
updatein classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-
autoRemindAgentOrCloseThread
自动提醒客服或关闭会话 -
processThreadTimeout
处理单个Thread会话的超时逻辑 -
calculateThreadTimeoutMinutes
计算线程超时分钟数 -
handleAutoClose
处理自动关闭逻辑 -
parseThreadSettings
解析线程设置 -
getAutoCloseMinutes
获取自动关闭分钟数 -
handleTimeoutReminder
处理超时提醒逻辑 -
processAgentTimeoutReminder
处理客服超时提醒 -
shouldSendTimeoutReminder
判断是否应该发送超时提醒 -
sendRemindMessage
private void sendRemindMessage(QueueMemberEntity queueMember, ThreadEntity thread, AgentEntity agent) -
handleQueueWaitTimeout
处理排队等待超时逻辑- Returns:
- true 如果会话已被处理(触发了离线留言),false 如果未处理
-
handleQueueOverflowLeaveMessage
public MessageProtobuf handleQueueOverflowLeaveMessage(ThreadEntity thread, QueueMemberEntity queueMember) -
resolveQueueSettings
-
resolveQueueSettingsFromAgent
-
resolveQueueSettingsFromWorkgroup
-
resolveQueueMaxWaitSeconds
-
triggerQueueLeaveMessage
private MessageProtobuf triggerQueueLeaveMessage(ThreadEntity thread, QueueMemberEntity queueMember) -
resolveLeaveMessageTip
-
resolveLeaveMessageTip
-
resolveLeaveMessageTip
-
doSave
Description copied from class:BaseRestService子类实现具体的保存逻辑- Specified by:
doSavein classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-
deleteByUid
- Specified by:
deleteByUidin classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-
delete
- Specified by:
deletein classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-
handleOptimisticLockingFailureException
public VisitorThreadEntity handleOptimisticLockingFailureException(org.springframework.orm.ObjectOptimisticLockingFailureException e, VisitorThreadEntity entity) -
convertToResponse
- Specified by:
convertToResponsein classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-
createSpecification
protected org.springframework.data.jpa.domain.Specification<VisitorThreadEntity> createSpecification(VisitorThreadRequest request) Description copied from class:BaseRestService创建Specification对象,子类必须实现 用于queryByOrg的通用实现- Specified by:
createSpecificationin classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-
executePageQuery
protected org.springframework.data.domain.Page<VisitorThreadEntity> executePageQuery(org.springframework.data.jpa.domain.Specification<VisitorThreadEntity> spec, org.springframework.data.domain.Pageable pageable) Description copied from class:BaseRestService执行分页查询,子类必须实现 用于queryByOrg的通用实现- Specified by:
executePageQueryin classBaseRestService<VisitorThreadEntity,VisitorThreadRequest, VisitorThreadResponse>
-