mirror of
https://github.com/chatopera/cosin.git
synced 2025-08-01 16:38:02 +08:00
#75 机器人客服会话关联agentuser, agentservice
This commit is contained in:
parent
0266d4e353
commit
7e4f5c9115
@ -335,6 +335,28 @@ public class UKDataContext {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 服务处理类型
|
||||||
|
public enum OptTypeEnum {
|
||||||
|
CHATBOT("机器人客服", 1),
|
||||||
|
HUMAN("人工客服", 2);
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
private final int index;
|
||||||
|
|
||||||
|
private OptTypeEnum(String name, int index) {
|
||||||
|
this.name = name;
|
||||||
|
this.index = index;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toLetters() {
|
||||||
|
return super.toString().toLowerCase();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String toString() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 外呼计划状态
|
// 外呼计划状态
|
||||||
public enum CallOutDialplanStatusEnum {
|
public enum CallOutDialplanStatusEnum {
|
||||||
RUNNING("执行中", 1),
|
RUNNING("执行中", 1),
|
||||||
|
@ -25,7 +25,6 @@ import java.util.Set;
|
|||||||
|
|
||||||
public class Constants {
|
public class Constants {
|
||||||
|
|
||||||
public final static String OPT_TYPE = "webim";
|
|
||||||
public final static String MINIO_BUCKET = "chatopera";
|
public final static String MINIO_BUCKET = "chatopera";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -523,47 +523,44 @@ public class ServiceQuene {
|
|||||||
/**
|
/**
|
||||||
* 为访客 分配坐席, ACD策略,此处 AgentStatus 是建议 的 坐席, 如果启用了 历史服务坐席 优先策略, 则会默认检查历史坐席是否空闲,如果空闲,则分配,如果不空闲,则 分配当前建议的坐席
|
* 为访客 分配坐席, ACD策略,此处 AgentStatus 是建议 的 坐席, 如果启用了 历史服务坐席 优先策略, 则会默认检查历史坐席是否空闲,如果空闲,则分配,如果不空闲,则 分配当前建议的坐席
|
||||||
*
|
*
|
||||||
* @param agentStatus
|
|
||||||
* @param agentUser
|
* @param agentUser
|
||||||
* @param orgi
|
* @param orgi
|
||||||
* @return
|
* @return
|
||||||
* @throws Exception
|
* @throws Exception
|
||||||
*/
|
*/
|
||||||
public static AgentService processAiService(AiUser aiUser, String orgi) throws Exception {
|
public static AgentService processChatbotService(final AgentUser agentUser, final String orgi) {
|
||||||
AgentService agentService = new AgentService(); //放入缓存的对象
|
AgentService agentService = new AgentService(); //放入缓存的对象
|
||||||
AgentServiceRepository agentServiceRes = UKDataContext.getContext().getBean(AgentServiceRepository.class);
|
AgentServiceRepository agentServiceRes = UKDataContext.getContext().getBean(AgentServiceRepository.class);
|
||||||
if (!StringUtils.isBlank(aiUser.getAgentserviceid())) {
|
Date now = new Date();
|
||||||
agentService = agentServiceRes.findByIdAndOrgi(aiUser.getAgentserviceid(), orgi);
|
if (StringUtils.isNotBlank(agentUser.getAgentserviceid())) {
|
||||||
agentService.setEndtime(new Date());
|
agentService = agentServiceRes.findByIdAndOrgi(agentUser.getAgentserviceid(), orgi);
|
||||||
|
agentService.setEndtime(now);
|
||||||
if (agentService.getServicetime() != null) {
|
if (agentService.getServicetime() != null) {
|
||||||
agentService.setSessiontimes(System.currentTimeMillis() - agentService.getServicetime().getTime());
|
agentService.setSessiontimes(System.currentTimeMillis() - agentService.getServicetime().getTime());
|
||||||
}
|
}
|
||||||
agentService.setStatus(UKDataContext.AgentUserStatusEnum.END.toString());
|
agentService.setStatus(UKDataContext.AgentUserStatusEnum.END.toString());
|
||||||
} else {
|
} else {
|
||||||
agentService.setServicetime(new Date());
|
agentService.setServicetime(now);
|
||||||
agentService.setLogindate(new Date());
|
agentService.setLogindate(now);
|
||||||
agentService.setOrgi(orgi);
|
agentService.setOrgi(orgi);
|
||||||
agentService.setOwner(aiUser.getContextid());
|
agentService.setOwner(agentUser.getContextid());
|
||||||
agentService.setSessionid(aiUser.getSessionid());
|
agentService.setSessionid(agentUser.getSessionid());
|
||||||
if (aiUser.getIpdata() != null) {
|
agentService.setRegion(agentUser.getRegion());
|
||||||
agentService.setRegion(aiUser.getIpdata().getRegion());
|
agentService.setUsername(agentUser.getUsername());
|
||||||
}
|
agentService.setChannel(agentUser.getChannel());
|
||||||
|
|
||||||
agentService.setUsername(aiUser.getUsername());
|
if (StringUtils.isNotBlank(agentUser.getContextid())) {
|
||||||
agentService.setChannel(aiUser.getChannel());
|
agentService.setContextid(agentUser.getContextid());
|
||||||
|
|
||||||
if (!StringUtils.isBlank(aiUser.getContextid())) {
|
|
||||||
agentService.setContextid(aiUser.getContextid());
|
|
||||||
} else {
|
} else {
|
||||||
agentService.setContextid(aiUser.getSessionid());
|
agentService.setContextid(agentUser.getSessionid());
|
||||||
}
|
}
|
||||||
|
|
||||||
agentService.setUserid(aiUser.getUserid());
|
agentService.setUserid(agentUser.getUserid());
|
||||||
agentService.setAiid(aiUser.getAiid());
|
agentService.setAiid(agentUser.getAgentno());
|
||||||
agentService.setAiservice(true);
|
agentService.setAiservice(true);
|
||||||
agentService.setStatus(UKDataContext.AgentUserStatusEnum.INSERVICE.toString());
|
agentService.setStatus(UKDataContext.AgentUserStatusEnum.INSERVICE.toString());
|
||||||
|
|
||||||
agentService.setAppid(aiUser.getAppid());
|
agentService.setAppid(agentUser.getAppid());
|
||||||
agentService.setLeavemsg(false);
|
agentService.setLeavemsg(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -258,7 +258,7 @@ public class CallOutWireTask implements MessageListener {
|
|||||||
onlineUser.setCreater(onlineUser.getId());
|
onlineUser.setCreater(onlineUser.getId());
|
||||||
onlineUser.setCreatetime(createtime);
|
onlineUser.setCreatetime(createtime);
|
||||||
onlineUser.setUpdatetime(createtime);
|
onlineUser.setUpdatetime(createtime);
|
||||||
onlineUser.setOptype(Constants.OPT_TYPE);
|
onlineUser.setOptype(UKDataContext.OptTypeEnum.HUMAN.toString());
|
||||||
onlineUser.setAppid(channel);
|
onlineUser.setAppid(channel);
|
||||||
} else {
|
} else {
|
||||||
onlineUser.setOlduser("1"); // 不是 老访客
|
onlineUser.setOlduser("1"); // 不是 老访客
|
||||||
|
@ -599,39 +599,33 @@ public class OnlineUserUtils {
|
|||||||
*/
|
*/
|
||||||
public static void offline(String user, String orgi) throws Exception {
|
public static void offline(String user, String orgi) throws Exception {
|
||||||
if (UKDataContext.getContext() != null) {
|
if (UKDataContext.getContext() != null) {
|
||||||
try {
|
OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
||||||
OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
if (onlineUser != null) {
|
||||||
if (onlineUser != null) {
|
CousultInvite invite = OnlineUserUtils.cousult(onlineUser.getAppid(), onlineUser.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
||||||
CousultInvite invite = OnlineUserUtils.cousult(onlineUser.getAppid(), onlineUser.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
if (invite.isTraceuser()) {
|
||||||
if (invite.isTraceuser()) {
|
onlineUser.setStatus(UKDataContext.OnlineUserOperatorStatus.OFFLINE.toString());
|
||||||
onlineUser.setStatus(UKDataContext.OnlineUserOperatorStatus.OFFLINE.toString());
|
onlineUser.setInvitestatus(UKDataContext.OnlineUserInviteStatus.DEFAULT.toString());
|
||||||
onlineUser.setInvitestatus(UKDataContext.OnlineUserInviteStatus.DEFAULT.toString());
|
onlineUser.setBetweentime((int) (new Date().getTime() - onlineUser.getLogintime().getTime()));
|
||||||
onlineUser.setBetweentime((int) (new Date().getTime() - onlineUser.getLogintime().getTime()));
|
onlineUser.setUpdatetime(new Date());
|
||||||
onlineUser.setUpdatetime(new Date());
|
OnlineUserRepository service = UKDataContext.getContext().getBean(
|
||||||
OnlineUserRepository service = UKDataContext.getContext().getBean(
|
OnlineUserRepository.class);
|
||||||
OnlineUserRepository.class);
|
service.save(onlineUser);
|
||||||
service.save(onlineUser);
|
|
||||||
|
|
||||||
OnlineUserHisRepository onlineHisUserRes = UKDataContext.getContext().getBean(OnlineUserHisRepository.class);
|
OnlineUserHisRepository onlineHisUserRes = UKDataContext.getContext().getBean(OnlineUserHisRepository.class);
|
||||||
{
|
{
|
||||||
List<OnlineUserHis> hisList = onlineHisUserRes.findBySessionidAndOrgi(onlineUser.getSessionid(), orgi);
|
List<OnlineUserHis> hisList = onlineHisUserRes.findBySessionidAndOrgi(onlineUser.getSessionid(), orgi);
|
||||||
OnlineUserHis his = null;
|
OnlineUserHis his = null;
|
||||||
if (hisList.size() > 0) {
|
if (hisList.size() > 0) {
|
||||||
his = hisList.get(0);
|
his = hisList.get(0);
|
||||||
} else {
|
} else {
|
||||||
his = new OnlineUserHis();
|
his = new OnlineUserHis();
|
||||||
}
|
|
||||||
|
|
||||||
UKTools.copyProperties(onlineUser, his);
|
|
||||||
his.setDataid(onlineUser.getId());
|
|
||||||
onlineHisUserRes.save(his);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
UKTools.copyProperties(onlineUser, his);
|
||||||
|
his.setDataid(onlineUser.getId());
|
||||||
|
onlineHisUserRes.save(his);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (ClassCastException e) {
|
|
||||||
// #TODO workaround for
|
|
||||||
// https://github.com/chatopera/cosin/issues/75
|
|
||||||
// AiUser is not saved, just remove from cache.
|
|
||||||
}
|
}
|
||||||
CacheHelper.getOnlineUserCacheBean().delete(user, orgi);
|
CacheHelper.getOnlineUserCacheBean().delete(user, orgi);
|
||||||
}
|
}
|
||||||
|
@ -16,12 +16,15 @@
|
|||||||
package com.chatopera.cc.webim.util.server.handler;
|
package com.chatopera.cc.webim.util.server.handler;
|
||||||
|
|
||||||
import com.chatopera.cc.core.UKDataContext;
|
import com.chatopera.cc.core.UKDataContext;
|
||||||
|
import com.chatopera.cc.util.IP;
|
||||||
import com.chatopera.cc.util.IPTools;
|
import com.chatopera.cc.util.IPTools;
|
||||||
import com.chatopera.cc.util.UKTools;
|
import com.chatopera.cc.util.UKTools;
|
||||||
import com.chatopera.cc.util.client.NettyClients;
|
import com.chatopera.cc.util.client.NettyClients;
|
||||||
import com.chatopera.cc.webim.service.acd.ServiceQuene;
|
import com.chatopera.cc.webim.service.acd.ServiceQuene;
|
||||||
import com.chatopera.cc.webim.service.cache.CacheHelper;
|
import com.chatopera.cc.webim.service.cache.CacheHelper;
|
||||||
|
import com.chatopera.cc.webim.service.repository.AgentUserRepository;
|
||||||
import com.chatopera.cc.webim.service.repository.ConsultInviteRepository;
|
import com.chatopera.cc.webim.service.repository.ConsultInviteRepository;
|
||||||
|
import com.chatopera.cc.webim.service.repository.OnlineUserRepository;
|
||||||
import com.chatopera.cc.webim.util.MessageUtils;
|
import com.chatopera.cc.webim.util.MessageUtils;
|
||||||
import com.chatopera.cc.webim.util.OnlineUserUtils;
|
import com.chatopera.cc.webim.util.OnlineUserUtils;
|
||||||
import com.chatopera.cc.webim.util.router.OutMessageRouter;
|
import com.chatopera.cc.webim.util.router.OutMessageRouter;
|
||||||
@ -48,6 +51,9 @@ public class ChatbotEventHandler {
|
|||||||
|
|
||||||
protected SocketIOServer server;
|
protected SocketIOServer server;
|
||||||
|
|
||||||
|
private AgentUserRepository agentUserRes;
|
||||||
|
private OnlineUserRepository onlineUserRes;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public ChatbotEventHandler(SocketIOServer server) {
|
public ChatbotEventHandler(SocketIOServer server) {
|
||||||
this.server = server;
|
this.server = server;
|
||||||
@ -57,22 +63,23 @@ public class ChatbotEventHandler {
|
|||||||
public void onConnect(SocketIOClient client) {
|
public void onConnect(SocketIOClient client) {
|
||||||
try {
|
try {
|
||||||
String user = client.getHandshakeData().getSingleUrlParam("userid");
|
String user = client.getHandshakeData().getSingleUrlParam("userid");
|
||||||
|
String nickname = client.getHandshakeData().getSingleUrlParam("nickname");
|
||||||
String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
|
String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
|
||||||
// String session = client.getHandshakeData().getSingleUrlParam("session") ;
|
String session = client.getHandshakeData().getSingleUrlParam("session");
|
||||||
String appid = client.getHandshakeData().getSingleUrlParam("appid");
|
String appid = client.getHandshakeData().getSingleUrlParam("appid");
|
||||||
String aiid = client.getHandshakeData().getSingleUrlParam("aiid");
|
String aiid = client.getHandshakeData().getSingleUrlParam("aiid");
|
||||||
// String agent = client.getHandshakeData().getSingleUrlParam("agent") ;
|
// String agent = client.getHandshakeData().getSingleUrlParam("agent") ;
|
||||||
// String skill = client.getHandshakeData().getSingleUrlParam("skill") ;
|
// String skill = client.getHandshakeData().getSingleUrlParam("skill") ;
|
||||||
logger.info("[chatbot socket.io] onConnect user {}, orgi {}, appid {}, aiid {}", user, orgi, appid, aiid);
|
Date now = new Date();
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(user)) {
|
if (StringUtils.isNotBlank(user)) {
|
||||||
// /**
|
// /**
|
||||||
// * 加入到 缓存列表
|
// * 加入到 缓存列表
|
||||||
// */
|
// */
|
||||||
NettyClients.getInstance().putIMEventClient(user, client);
|
NettyClients.getInstance().putChatbotEventClient(user, client);
|
||||||
MessageOutContent outMessage = new MessageOutContent();
|
MessageOutContent outMessage = new MessageOutContent();
|
||||||
CousultInvite invite = OnlineUserUtils.cousult(appid, orgi, UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
CousultInvite invite = OnlineUserUtils.cousult(appid, orgi, UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
||||||
if (invite != null && !StringUtils.isBlank(invite.getAisuccesstip())) {
|
if (invite != null && StringUtils.isNotBlank(invite.getAisuccesstip())) {
|
||||||
outMessage.setMessage(invite.getAisuccesstip());
|
outMessage.setMessage(invite.getAisuccesstip());
|
||||||
} else {
|
} else {
|
||||||
outMessage.setMessage("欢迎使用华夏春松机器人客服!");
|
outMessage.setMessage("欢迎使用华夏春松机器人客服!");
|
||||||
@ -80,43 +87,91 @@ public class ChatbotEventHandler {
|
|||||||
|
|
||||||
outMessage.setMessageType(UKDataContext.MessageTypeEnum.MESSAGE.toString());
|
outMessage.setMessageType(UKDataContext.MessageTypeEnum.MESSAGE.toString());
|
||||||
outMessage.setCalltype(UKDataContext.CallTypeEnum.IN.toString());
|
outMessage.setCalltype(UKDataContext.CallTypeEnum.IN.toString());
|
||||||
outMessage.setNickName("AI");
|
outMessage.setNickName(invite.getAiname());
|
||||||
outMessage.setCreatetime(UKTools.dateFormate.format(new Date()));
|
outMessage.setCreatetime(UKTools.dateFormate.format(now));
|
||||||
|
|
||||||
client.sendEvent(UKDataContext.MessageTypeEnum.STATUS.toString(), outMessage);
|
client.sendEvent(UKDataContext.MessageTypeEnum.STATUS.toString(), outMessage);
|
||||||
|
|
||||||
InetSocketAddress address = (InetSocketAddress) client.getRemoteAddress();
|
InetSocketAddress address = (InetSocketAddress) client.getRemoteAddress();
|
||||||
String ip = UKTools.getIpAddr(client.getHandshakeData().getHttpHeaders(), address.getHostString());
|
String ip = UKTools.getIpAddr(client.getHandshakeData().getHttpHeaders(), address.getHostString());
|
||||||
AiUser aiUser = new AiUser(user, user, System.currentTimeMillis(), orgi, IPTools.getInstance().findGeography(ip));
|
OnlineUser onlineUser = getOnlineUserRes().findOne(user);
|
||||||
aiUser.setSessionid(UKTools.getContextID(client.getSessionId().toString()));
|
|
||||||
aiUser.setAppid(appid);
|
|
||||||
aiUser.setAiid(aiid);
|
|
||||||
aiUser.setUsername(UKDataContext.GUEST_USER + "_" + UKTools.genIDByKey(aiUser.getId()));
|
|
||||||
aiUser.setChannel(UKDataContext.ChannelTypeEnum.WEBIM.toString());
|
|
||||||
|
|
||||||
AgentService agentService = ServiceQuene.processAiService(aiUser, orgi);
|
if (onlineUser == null) {
|
||||||
aiUser.setAgentserviceid(agentService.getId());
|
onlineUser = new OnlineUser();
|
||||||
|
onlineUser.setAppid(appid);
|
||||||
|
if (StringUtils.isNotBlank(nickname)) {
|
||||||
|
onlineUser.setUsername(nickname);
|
||||||
|
} else {
|
||||||
|
onlineUser.setUsername(UKDataContext.GUEST_USER + "_" + UKTools.genIDByKey(user));
|
||||||
|
}
|
||||||
|
|
||||||
CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI);
|
onlineUser.setSessionid(session);
|
||||||
|
onlineUser.setOptype(UKDataContext.OptTypeEnum.CHATBOT.toString());
|
||||||
|
onlineUser.setUserid(user);
|
||||||
|
onlineUser.setId(user);
|
||||||
|
onlineUser.setOrgi(orgi);
|
||||||
|
onlineUser.setChannel(UKDataContext.ChannelTypeEnum.WEBIM.toString());
|
||||||
|
onlineUser.setIp(ip);
|
||||||
|
onlineUser.setUpdatetime(now);
|
||||||
|
onlineUser.setLogintime(now);
|
||||||
|
onlineUser.setCreatetime(now);
|
||||||
|
IP ipdata = IPTools.getInstance().findGeography(ip);
|
||||||
|
onlineUser.setCity(ipdata.getCity());
|
||||||
|
onlineUser.setCountry(ipdata.getCountry());
|
||||||
|
onlineUser.setProvince(ipdata.getProvince());
|
||||||
|
onlineUser.setIsp(ipdata.getIsp());
|
||||||
|
onlineUser.setRegion(ipdata.getRegion());
|
||||||
|
onlineUser.setStatus(UKDataContext.OnlineUserOperatorStatus.ONLINE.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
// 在线客服访客咨询记录
|
||||||
|
AgentUser agentUser = new AgentUser(onlineUser.getId(),
|
||||||
|
UKDataContext.ChannelTypeEnum.WEBIM.toString(), // callout
|
||||||
|
onlineUser.getId(),
|
||||||
|
onlineUser.getUsername(),
|
||||||
|
UKDataContext.SYSTEM_ORGI,
|
||||||
|
appid);
|
||||||
|
|
||||||
|
agentUser.setServicetime(now);
|
||||||
|
agentUser.setCreatetime(now);
|
||||||
|
agentUser.setUpdatetime(now);
|
||||||
|
agentUser.setSessionid(session);
|
||||||
|
// 聊天机器人处理的请求
|
||||||
|
agentUser.setOpttype(UKDataContext.OptTypeEnum.CHATBOT.toString());
|
||||||
|
agentUser.setAgentno(aiid); // 聊天机器人ID
|
||||||
|
agentUser.setCity(onlineUser.getCity());
|
||||||
|
agentUser.setProvince(onlineUser.getProvince());
|
||||||
|
agentUser.setCountry(onlineUser.getCountry());
|
||||||
|
AgentService agentService = ServiceQuene.processChatbotService(agentUser, orgi);
|
||||||
|
agentUser.setAgentserviceid(agentService.getId());
|
||||||
|
|
||||||
|
getAgentUserRes().save(agentUser);
|
||||||
|
getOnlineUserRes().save(onlineUser);
|
||||||
|
CacheHelper.getAgentUserCacheBean().put(user, agentUser, orgi);
|
||||||
|
CacheHelper.getOnlineUserCacheBean().put(user, onlineUser, orgi);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//添加@OnDisconnect事件,客户端断开连接时调用,刷新客户端信息
|
//添加@OnDisconnect事件,客户端断开连接时调用,刷新客户端信息
|
||||||
@OnDisconnect
|
@OnDisconnect
|
||||||
public void onDisconnect(SocketIOClient client) throws Exception {
|
public void onDisconnect(SocketIOClient client) throws Exception {
|
||||||
String user = client.getHandshakeData().getSingleUrlParam("userid");
|
String user = client.getHandshakeData().getSingleUrlParam("userid");
|
||||||
String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
|
String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
|
||||||
if (!StringUtils.isBlank(user)) {
|
if (StringUtils.isNotBlank(user)) {
|
||||||
NettyClients.getInstance().removeIMEventClient(user, UKTools.getContextID(client.getSessionId().toString()));
|
NettyClients.getInstance().removeChatbotEventClient(user, UKTools.getContextID(client.getSessionId().toString()));
|
||||||
AiUser aiUser = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
AgentUser agentUser = (AgentUser) CacheHelper.getAgentUserCacheBean().getCacheObject(user, orgi);
|
||||||
if (aiUser != null) {
|
OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
||||||
ServiceQuene.processAiService(aiUser, orgi);
|
if (agentUser != null) {
|
||||||
CacheHelper.getOnlineUserCacheBean().delete(user, UKDataContext.SYSTEM_ORGI);
|
ServiceQuene.processChatbotService(agentUser, orgi);
|
||||||
|
CacheHelper.getAgentUserCacheBean().delete(user, UKDataContext.SYSTEM_ORGI);
|
||||||
|
CacheHelper.getOnlineUserCacheBean().delete(user, orgi);
|
||||||
|
agentUser.setStatus(UKDataContext.OnlineUserOperatorStatus.OFFLINE.toString());
|
||||||
|
onlineUser.setStatus(UKDataContext.OnlineUserOperatorStatus.OFFLINE.toString());
|
||||||
|
getAgentUserRes().save(agentUser);
|
||||||
|
getOnlineUserRes().save(onlineUser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
client.disconnect();
|
client.disconnect();
|
||||||
@ -159,22 +214,21 @@ public class ChatbotEventHandler {
|
|||||||
* 处理表情
|
* 处理表情
|
||||||
*/
|
*/
|
||||||
data.setMessage(UKTools.processEmoti(data.getMessage()));
|
data.setMessage(UKTools.processEmoti(data.getMessage()));
|
||||||
data.setTousername(UKDataContext.ChannelTypeEnum.AI.toString());
|
data.setTousername(invite.getAiname());
|
||||||
|
|
||||||
data.setAiid(aiid);
|
data.setAiid(aiid);
|
||||||
|
|
||||||
Object cacheData = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
AgentUser agentUser = (AgentUser) CacheHelper.getAgentUserCacheBean().getCacheObject(user, orgi);
|
||||||
if (cacheData != null && cacheData instanceof AiUser) {
|
if (agentUser != null) {
|
||||||
AiUser aiUser = (AiUser) cacheData;
|
data.setAgentserviceid(agentUser.getAgentserviceid());
|
||||||
data.setAgentserviceid(aiUser.getAgentserviceid());
|
data.setChannel(agentUser.getChannel());
|
||||||
data.setChannel(aiUser.getChannel());
|
|
||||||
/**
|
/**
|
||||||
* 一定要设置 ContextID
|
* 一定要设置 ContextID
|
||||||
*/
|
*/
|
||||||
data.setContextid(aiUser.getAgentserviceid());
|
data.setContextid(agentUser.getAgentserviceid());
|
||||||
}
|
}
|
||||||
MessageOutContent outMessage = MessageUtils.createAiMessage(data, data.getAppid(), data.getChannel(), UKDataContext.CallTypeEnum.IN.toString(), UKDataContext.AiItemType.USERINPUT.toString(), UKDataContext.MediaTypeEnum.TEXT.toString(), data.getUserid());
|
MessageOutContent outMessage = MessageUtils.createAiMessage(data, data.getAppid(), data.getChannel(), UKDataContext.CallTypeEnum.IN.toString(), UKDataContext.AiItemType.USERINPUT.toString(), UKDataContext.MediaTypeEnum.TEXT.toString(), data.getUserid());
|
||||||
if (!StringUtils.isBlank(data.getUserid()) && UKDataContext.MessageTypeEnum.MESSAGE.toString().equals(data.getType())) {
|
if (StringUtils.isNotBlank(data.getUserid()) && UKDataContext.MessageTypeEnum.MESSAGE.toString().equals(data.getType())) {
|
||||||
if (!StringUtils.isBlank(data.getTouser())) {
|
if (!StringUtils.isBlank(data.getTouser())) {
|
||||||
OutMessageRouter router = null;
|
OutMessageRouter router = null;
|
||||||
router = (OutMessageRouter) UKDataContext.getContext().getBean(data.getChannel());
|
router = (OutMessageRouter) UKDataContext.getContext().getBean(data.getChannel());
|
||||||
@ -182,11 +236,33 @@ public class ChatbotEventHandler {
|
|||||||
router.handler(data.getTouser(), UKDataContext.MessageTypeEnum.MESSAGE.toString(), data.getAppid(), outMessage);
|
router.handler(data.getTouser(), UKDataContext.MessageTypeEnum.MESSAGE.toString(), data.getAppid(), outMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (cacheData != null && cacheData instanceof AiUser) {
|
if (agentUser != null) {
|
||||||
AiUser aiUser = (AiUser) cacheData;
|
Date now = new Date();
|
||||||
aiUser.setTime(System.currentTimeMillis());
|
agentUser.setUpdatetime(now);
|
||||||
CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI);
|
agentUser.setLastmessage(now);
|
||||||
|
agentUser.setLastmsg(data.getMessage());
|
||||||
|
CacheHelper.getAgentUserCacheBean().put(user, agentUser, UKDataContext.SYSTEM_ORGI);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
/**
|
||||||
|
* Lazy load
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public AgentUserRepository getAgentUserRes() {
|
||||||
|
if (agentUserRes == null)
|
||||||
|
agentUserRes = UKDataContext.getContext().getBean(AgentUserRepository.class);
|
||||||
|
return agentUserRes;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lazy load
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public OnlineUserRepository getOnlineUserRes() {
|
||||||
|
if (onlineUserRes == null)
|
||||||
|
onlineUserRes = UKDataContext.getContext().getBean(OnlineUserRepository.class);
|
||||||
|
return onlineUserRes;
|
||||||
|
}
|
||||||
|
}
|
@ -298,20 +298,16 @@ public class IMController extends Handler {
|
|||||||
contacts = processContacts(orgi, contacts, appid, userid);
|
contacts = processContacts(orgi, contacts, appid, userid);
|
||||||
}
|
}
|
||||||
if (StringUtils.isNotBlank(sign)) {
|
if (StringUtils.isNotBlank(sign)) {
|
||||||
try {
|
OnlineUserUtils.online(super.getIMUser(request, sign, contacts != null ? contacts.getName() : null),
|
||||||
OnlineUserUtils.online(super.getIMUser(request, sign, contacts != null ? contacts.getName() : null),
|
orgi,
|
||||||
orgi,
|
sessionid,
|
||||||
sessionid,
|
UKDataContext.OnlineUserTypeStatus.WEBIM.toString(),
|
||||||
UKDataContext.OnlineUserTypeStatus.WEBIM.toString(),
|
request,
|
||||||
request,
|
UKDataContext.ChannelTypeEnum.WEBIM.toString(),
|
||||||
UKDataContext.ChannelTypeEnum.WEBIM.toString(),
|
appid,
|
||||||
appid,
|
contacts,
|
||||||
contacts,
|
invite);
|
||||||
invite);
|
|
||||||
} catch (java.lang.ClassCastException e) {
|
|
||||||
// #TODO workaround for
|
|
||||||
// https://github.com/chatopera/cosin/issues/75
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
OnlineUserUtils.webIMClients.putClient(userid, new WebIMClient(userid, client, emitter));
|
OnlineUserUtils.webIMClients.putClient(userid, new WebIMClient(userid, client, emitter));
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,8 @@ public class AgentUser implements Serializable, Comparable<AgentUser> {
|
|||||||
private Date waittingtimestart = new Date();
|
private Date waittingtimestart = new Date();
|
||||||
private Date lastgetmessage = new Date();
|
private Date lastgetmessage = new Date();
|
||||||
private String lastmsg;
|
private String lastmsg;
|
||||||
|
private String opttype;
|
||||||
|
|
||||||
private String skill ; //请求的技能组
|
private String skill ; //请求的技能组
|
||||||
private String agent ; //请求的坐席
|
private String agent ; //请求的坐席
|
||||||
|
|
||||||
@ -565,6 +566,14 @@ public class AgentUser implements Serializable, Comparable<AgentUser> {
|
|||||||
this.skillname = skillname;
|
this.skillname = skillname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getOpttype() {
|
||||||
|
return opttype;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOpttype(String opttype) {
|
||||||
|
this.opttype = opttype;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(AgentUser o) {
|
public int compareTo(AgentUser o) {
|
||||||
int ret = 0 ;
|
int ret = 0 ;
|
||||||
|
@ -650,6 +650,7 @@ CREATE TABLE `uk_agentuser` (
|
|||||||
`datadept` varchar(255) DEFAULT NULL COMMENT '创建人部门',
|
`datadept` varchar(255) DEFAULT NULL COMMENT '创建人部门',
|
||||||
`intime` int(32) DEFAULT NULL COMMENT '接入时间',
|
`intime` int(32) DEFAULT NULL COMMENT '接入时间',
|
||||||
`batid` varchar(32) DEFAULT NULL COMMENT '批次ID',
|
`batid` varchar(32) DEFAULT NULL COMMENT '批次ID',
|
||||||
|
`opttype` varchar(32) DEFAULT NULL COMMENT '服务处理类型',
|
||||||
`ipaddr` varchar(50) DEFAULT NULL COMMENT 'IP地址',
|
`ipaddr` varchar(50) DEFAULT NULL COMMENT 'IP地址',
|
||||||
`osname` varchar(100) DEFAULT NULL COMMENT '操作系统名称',
|
`osname` varchar(100) DEFAULT NULL COMMENT '操作系统名称',
|
||||||
`browser` varchar(100) DEFAULT NULL COMMENT '浏览器',
|
`browser` varchar(100) DEFAULT NULL COMMENT '浏览器',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user