1
0
mirror of https://github.com/chatopera/cosin.git synced 2025-08-01 16:38:02 +08:00

#75 处理AiUser

This commit is contained in:
Hai Liang Wang 2018-09-11 23:32:13 +08:00
parent 1891891e4a
commit 7bc572ae2e
4 changed files with 272 additions and 238 deletions

View File

@ -67,6 +67,7 @@ public class OnlineUserUtils {
/** /**
* 更新cache * 更新cache
*
* @param id * @param id
* @param cousultInvite * @param cousultInvite
*/ */
@ -598,33 +599,39 @@ 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) {
OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi); try {
if (onlineUser != null) { OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
CousultInvite invite = OnlineUserUtils.cousult(onlineUser.getAppid(), onlineUser.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class)); if (onlineUser != null) {
if (invite.isTraceuser()) { CousultInvite invite = OnlineUserUtils.cousult(onlineUser.getAppid(), onlineUser.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class));
onlineUser.setStatus(UKDataContext.OnlineUserOperatorStatus.OFFLINE.toString()); if (invite.isTraceuser()) {
onlineUser.setInvitestatus(UKDataContext.OnlineUserInviteStatus.DEFAULT.toString()); onlineUser.setStatus(UKDataContext.OnlineUserOperatorStatus.OFFLINE.toString());
onlineUser.setBetweentime((int) (new Date().getTime() - onlineUser.getLogintime().getTime())); onlineUser.setInvitestatus(UKDataContext.OnlineUserInviteStatus.DEFAULT.toString());
onlineUser.setUpdatetime(new Date()); onlineUser.setBetweentime((int) (new Date().getTime() - onlineUser.getLogintime().getTime()));
OnlineUserRepository service = UKDataContext.getContext().getBean( onlineUser.setUpdatetime(new Date());
OnlineUserRepository.class); OnlineUserRepository service = UKDataContext.getContext().getBean(
service.save(onlineUser); OnlineUserRepository.class);
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);
} }

View File

@ -16,95 +16,108 @@
*/ */
package com.chatopera.cc.webim.util.server; package com.chatopera.cc.webim.util.server;
import java.lang.reflect.Constructor; import com.chatopera.cc.core.UKDataContext;
import java.lang.reflect.InvocationTargetException; import com.chatopera.cc.webim.util.server.handler.AgentEventHandler;
import com.chatopera.cc.webim.util.server.handler.ChatbotEventHandler;
import com.chatopera.cc.webim.util.server.handler.EntIMEventHandler; import com.chatopera.cc.webim.util.server.handler.EntIMEventHandler;
import com.chatopera.cc.webim.util.server.handler.IMEventHandler; import com.chatopera.cc.webim.util.server.handler.IMEventHandler;
import com.corundumstudio.socketio.SocketIONamespace;
import com.corundumstudio.socketio.SocketIOServer;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner; import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import com.corundumstudio.socketio.SocketIONamespace; import java.lang.reflect.Constructor;
import com.corundumstudio.socketio.SocketIOServer; import java.lang.reflect.InvocationTargetException;
import com.chatopera.cc.core.UKDataContext;
import com.chatopera.cc.webim.util.server.handler.AgentEventHandler;
@Component @Component
public class ServerRunner implements CommandLineRunner { public class ServerRunner implements CommandLineRunner {
private final SocketIOServer server; private final SocketIOServer server;
private final SocketIONamespace imSocketNameSpace ; private final SocketIONamespace imSocketNameSpace;
private final SocketIONamespace agentSocketIONameSpace ; private final SocketIONamespace agentSocketIONameSpace;
private final SocketIONamespace entIMSocketIONameSpace ; private final SocketIONamespace entIMSocketIONameSpace;
private final SocketIONamespace chatbotSocketIONameSpace ; private final SocketIONamespace chatbotSocketIONameSpace;
private final SocketIONamespace callCenterSocketIONameSpace ; private final SocketIONamespace callCenterSocketIONameSpace;
private final SocketIONamespace calloutSocketIONameSpace ; private final SocketIONamespace calloutSocketIONameSpace;
@Autowired
public ServerRunner(SocketIOServer server) {
this.server = server;
imSocketNameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.IM.getNamespace()) ;
agentSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.AGENT.getNamespace()) ;
entIMSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.ENTIM.getNamespace()) ;
chatbotSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.CHATBOT.getNamespace()) ;
if(UKDataContext.model.get("sales") != null && UKDataContext.model.get("sales") == true){ @Autowired
public ServerRunner(SocketIOServer server) {
this.server = server;
imSocketNameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.IM.getNamespace());
agentSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.AGENT.getNamespace());
entIMSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.ENTIM.getNamespace());
if (UKDataContext.model.get("sales") != null && UKDataContext.model.get("sales") == true) {
calloutSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.CALLOUT.getNamespace()); calloutSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.CALLOUT.getNamespace());
} else { } else {
calloutSocketIONameSpace = null; calloutSocketIONameSpace = null;
} }
if(UKDataContext.model.get("callcenter") !=null && UKDataContext.model.get("callcenter") == true){ if (UKDataContext.model.get("callcenter") != null && UKDataContext.model.get("callcenter") == true) {
callCenterSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.CALLCENTER.getNamespace()) ; callCenterSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.CALLCENTER.getNamespace());
}else{ } else {
callCenterSocketIONameSpace = null ; callCenterSocketIONameSpace = null;
}
if (UKDataContext.model.get("chatbot") != null && UKDataContext.model.get("chatbot") == true) {
chatbotSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.CHATBOT.getNamespace());
} else {
chatbotSocketIONameSpace = null;
} }
} }
@Bean(name="imNamespace") @Bean(name = "imNamespace")
public SocketIONamespace getIMSocketIONameSpace(SocketIOServer server ){ public SocketIONamespace getIMSocketIONameSpace(SocketIOServer server) {
imSocketNameSpace.addListeners(new IMEventHandler(server)); imSocketNameSpace.addListeners(new IMEventHandler(server));
return imSocketNameSpace ; return imSocketNameSpace;
}
@Bean(name="agentNamespace")
public SocketIONamespace getAgentSocketIONameSpace(SocketIOServer server){
agentSocketIONameSpace.addListeners(new AgentEventHandler(server));
return agentSocketIONameSpace;
} }
@Bean(name="entimNamespace") @Bean(name = "agentNamespace")
public SocketIONamespace getEntIMSocketIONameSpace(SocketIOServer server){ public SocketIONamespace getAgentSocketIONameSpace(SocketIOServer server) {
entIMSocketIONameSpace.addListeners(new EntIMEventHandler(server)); agentSocketIONameSpace.addListeners(new AgentEventHandler(server));
return entIMSocketIONameSpace; return agentSocketIONameSpace;
}
@Bean(name="chatbotNamespace")
public SocketIONamespace getChatbotSocketIONameSpace(SocketIOServer server){
chatbotSocketIONameSpace.addListeners(new ChatbotEventHandler(server));
return chatbotSocketIONameSpace;
}
@Bean(name="callCenterNamespace")
public SocketIONamespace getCallCenterIMSocketIONameSpace(SocketIOServer server){
if(UKDataContext.model.get("callcenter") !=null && UKDataContext.model.get("callcenter") == true){
Constructor<?> constructor;
try {
constructor = Class.forName("com.chatopera.cc.webim.util.server.handler.CallCenterEventHandler").getConstructor(new Class[]{SocketIOServer.class});
callCenterSocketIONameSpace.addListeners(constructor.newInstance(server));
} catch (NoSuchMethodException | SecurityException
| ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
return callCenterSocketIONameSpace;
} }
@Bean(name="calloutNamespace") @Bean(name = "entimNamespace")
public SocketIONamespace getCalloutIMSocketIONameSpace(SocketIOServer server){ public SocketIONamespace getEntIMSocketIONameSpace(SocketIOServer server) {
if(UKDataContext.model.get("sales") !=null && UKDataContext.model.get("sales") == true){ entIMSocketIONameSpace.addListeners(new EntIMEventHandler(server));
return entIMSocketIONameSpace;
}
@Bean(name = "chatbotNamespace")
public SocketIONamespace getChatbotSocketIONameSpace(SocketIOServer server) {
if (UKDataContext.model.get("chatbot") != null && UKDataContext.model.get("chatbot") == true) {
Constructor<?> constructor;
try {
constructor = Class.forName("com.chatopera.cc.webim.util.server.handler.ChatbotEventHandler").getConstructor(new Class[]{SocketIOServer.class});
chatbotSocketIONameSpace.addListeners(constructor.newInstance(server));
} catch (NoSuchMethodException | SecurityException
| ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
return chatbotSocketIONameSpace;
}
@Bean(name = "callCenterNamespace")
public SocketIONamespace getCallCenterIMSocketIONameSpace(SocketIOServer server) {
if (UKDataContext.model.get("callcenter") != null && UKDataContext.model.get("callcenter") == true) {
Constructor<?> constructor;
try {
constructor = Class.forName("com.chatopera.cc.webim.util.server.handler.CallCenterEventHandler").getConstructor(new Class[]{SocketIOServer.class});
callCenterSocketIONameSpace.addListeners(constructor.newInstance(server));
} catch (NoSuchMethodException | SecurityException
| ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
e.printStackTrace();
}
}
return callCenterSocketIONameSpace;
}
@Bean(name = "calloutNamespace")
public SocketIONamespace getCalloutIMSocketIONameSpace(SocketIOServer server) {
if (UKDataContext.model.get("sales") != null && UKDataContext.model.get("sales") == true) {
Constructor<?> constructor; Constructor<?> constructor;
try { try {
constructor = Class.forName("com.chatopera.cc.webim.util.server.handler.CalloutEventHandler").getConstructor(new Class[]{SocketIOServer.class}); constructor = Class.forName("com.chatopera.cc.webim.util.server.handler.CalloutEventHandler").getConstructor(new Class[]{SocketIOServer.class});
@ -117,8 +130,8 @@ public class ServerRunner implements CommandLineRunner {
return calloutSocketIONameSpace; return calloutSocketIONameSpace;
} }
public void run(String... args) throws Exception { public void run(String... args) throws Exception {
server.start(); server.start();
UKDataContext.setIMServerStatus(true); //IMServer 启动成功 UKDataContext.setIMServerStatus(true); //IMServer 启动成功
} }
} }

View File

@ -44,155 +44,147 @@ import org.springframework.beans.factory.annotation.Autowired;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
import java.util.Date; import java.util.Date;
public class ChatbotEventHandler public class ChatbotEventHandler {
{ protected SocketIOServer server;
protected SocketIOServer server;
@Autowired @Autowired
public ChatbotEventHandler(SocketIOServer server) public ChatbotEventHandler(SocketIOServer server) {
{ this.server = server;
this.server = server ; }
}
@OnConnect
@OnConnect public void onConnect(SocketIOClient client) {
public void onConnect(SocketIOClient client) try {
{ String user = client.getHandshakeData().getSingleUrlParam("userid");
try { String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
String user = client.getHandshakeData().getSingleUrlParam("userid") ;
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") ;
if(!StringUtils.isBlank(user)){ if (StringUtils.isNotBlank(user)) {
// /** // /**
// * 加入到 缓存列表 // * 加入到 缓存列表
// */ // */
NettyClients.getInstance().putIMEventClient(user, client); NettyClients.getInstance().putIMEventClient(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.isBlank(invite.getAisuccesstip())) {
outMessage.setMessage(invite.getAisuccesstip()); outMessage.setMessage(invite.getAisuccesstip());
}else{ } else {
outMessage.setMessage("欢迎使用优客服小E我来帮您解答问题"); outMessage.setMessage("欢迎使用华夏春松机器人客服!");
} }
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("AI");
outMessage.setCreatetime(UKTools.dateFormate.format(new Date())); outMessage.setCreatetime(UKTools.dateFormate.format(new Date()));
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)) ; AiUser aiUser = new AiUser(user, user, System.currentTimeMillis(), orgi, IPTools.getInstance().findGeography(ip));
aiUser.setSessionid(UKTools.getContextID(client.getSessionId().toString())); aiUser.setSessionid(UKTools.getContextID(client.getSessionId().toString()));
aiUser.setAppid(appid); aiUser.setAppid(appid);
aiUser.setAiid(aiid); aiUser.setAiid(aiid);
aiUser.setUsername(UKDataContext.GUEST_USER+"_"+UKTools.genIDByKey(aiUser.getId())); aiUser.setUsername(UKDataContext.GUEST_USER + "_" + UKTools.genIDByKey(aiUser.getId()));
aiUser.setChannel(UKDataContext.ChannelTypeEnum.WEBIM.toString()); aiUser.setChannel(UKDataContext.ChannelTypeEnum.WEBIM.toString());
AgentService agentService = ServiceQuene.processAiService(aiUser, orgi) ; AgentService agentService = ServiceQuene.processAiService(aiUser, orgi);
aiUser.setAgentserviceid(agentService.getId()); aiUser.setAgentserviceid(agentService.getId());
CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI); CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_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.isBlank(user)){ NettyClients.getInstance().removeIMEventClient(user, UKTools.getContextID(client.getSessionId().toString()));
NettyClients.getInstance().removeIMEventClient(user , UKTools.getContextID(client.getSessionId().toString())); AiUser aiUser = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
AiUser aiUser = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi) ; if (aiUser != null) {
if(aiUser!=null) { ServiceQuene.processAiService(aiUser, orgi);
ServiceQuene.processAiService(aiUser, orgi) ; CacheHelper.getOnlineUserCacheBean().delete(user, UKDataContext.SYSTEM_ORGI);
CacheHelper.getOnlineUserCacheBean().delete(user,UKDataContext.SYSTEM_ORGI) ; }
} }
} client.disconnect();
client.disconnect(); }
}
//消息接收入口网站有新用户接入对话 //消息接收入口网站有新用户接入对话
@OnEvent(value = "new") @OnEvent(value = "new")
public void onEvent(SocketIOClient client, AckRequest request, NewRequestMessage data) public void onEvent(SocketIOClient client, AckRequest request, NewRequestMessage data) {
{
}
}
//消息接收入口坐席状态更新
//消息接收入口坐席状态更新 @OnEvent(value = "agentstatus")
@OnEvent(value = "agentstatus") public void onEvent(SocketIOClient client, AckRequest request, AgentStatusMessage data) {
public void onEvent(SocketIOClient client, AckRequest request, AgentStatusMessage data) System.out.println(data.getMessage());
{ }
System.out.println(data.getMessage());
}
//消息接收入口收发消息用户向坐席发送消息和 坐席向用户发送消息 //消息接收入口收发消息用户向坐席发送消息和 坐席向用户发送消息
@OnEvent(value = "message") @OnEvent(value = "message")
public void onEvent(SocketIOClient client, AckRequest request, ChatMessage data) public void onEvent(SocketIOClient client, AckRequest request, ChatMessage data) {
{ String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
String orgi = client.getHandshakeData().getSingleUrlParam("orgi") ; String aiid = client.getHandshakeData().getSingleUrlParam("aiid");
String aiid = client.getHandshakeData().getSingleUrlParam("aiid") ; String user = client.getHandshakeData().getSingleUrlParam("userid");
String user = client.getHandshakeData().getSingleUrlParam("userid") ; if (data.getType() == null) {
if(data.getType() == null){ data.setType("message");
data.setType("message"); }
} /**
/** * 以下代码主要用于检查 访客端的字数限制
* 以下代码主要用于检查 访客端的字数限制 */
*/ CousultInvite invite = OnlineUserUtils.cousult(data.getAppid(), data.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class));
CousultInvite invite = OnlineUserUtils.cousult(data.getAppid(),data.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class)); if (invite != null && invite.getMaxwordsnum() > 0) {
if(invite!=null && invite.getMaxwordsnum() > 0) { if (!StringUtils.isBlank(data.getMessage()) && data.getMessage().length() > invite.getMaxwordsnum()) {
if(!StringUtils.isBlank(data.getMessage()) && data.getMessage().length() > invite.getMaxwordsnum()){ data.setMessage(data.getMessage().substring(0, invite.getMaxwordsnum()));
data.setMessage(data.getMessage().substring(0 , invite.getMaxwordsnum())); }
} } else if (!StringUtils.isBlank(data.getMessage()) && data.getMessage().length() > 300) {
}else if(!StringUtils.isBlank(data.getMessage()) && data.getMessage().length() > 300){ data.setMessage(data.getMessage().substring(0, 300));
data.setMessage(data.getMessage().substring(0 , 300)); }
} data.setSessionid(UKTools.getContextID(client.getSessionId().toString()));
data.setSessionid(UKTools.getContextID(client.getSessionId().toString())); /**
/** * 处理表情
* 处理表情 */
*/ data.setMessage(UKTools.processEmoti(data.getMessage()));
data.setMessage(UKTools.processEmoti(data.getMessage())); data.setTousername(UKDataContext.ChannelTypeEnum.AI.toString());
data.setTousername(UKDataContext.ChannelTypeEnum.AI.toString());
data.setAiid(aiid);
data.setAiid(aiid);
Object cacheData = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
Object cacheData = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user,orgi) ; if (cacheData != null && cacheData instanceof AiUser) {
if(cacheData!=null && cacheData instanceof AiUser){ AiUser aiUser = (AiUser) cacheData;
AiUser aiUser = (AiUser)cacheData ; data.setAgentserviceid(aiUser.getAgentserviceid());
data.setAgentserviceid(aiUser.getAgentserviceid()); data.setChannel(aiUser.getChannel());
data.setChannel(aiUser.getChannel()); /**
/** * 一定要设置 ContextID
* 一定要设置 ContextID */
*/ data.setContextid(aiUser.getAgentserviceid());
data.setContextid(aiUser.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.isBlank(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()) ; if (router != null) {
if(router!=null){ 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(cacheData!=null && cacheData instanceof AiUser){ AiUser aiUser = (AiUser) cacheData;
AiUser aiUser = (AiUser)cacheData ; aiUser.setTime(System.currentTimeMillis());
aiUser.setTime(System.currentTimeMillis()); CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI);
CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI); }
} }
} }
UKTools.ai(data);
}
} }

View File

@ -253,7 +253,17 @@ public class IMController extends Handler {
*/ */
@RequestMapping("/online") @RequestMapping("/online")
@Menu(type = "im", subtype = "online", access = true) @Menu(type = "im", subtype = "online", access = true)
public SseEmitter callable(HttpServletRequest request, HttpServletResponse response, @Valid Contacts contacts, final @Valid String orgi, final @Valid String sessionid, @Valid String appid, final @Valid String userid, @Valid String sign, final @Valid String client, final @Valid String title, final @Valid String traceid) { public SseEmitter callable(HttpServletRequest request,
HttpServletResponse response,
@Valid Contacts contacts,
final @Valid String orgi,
final @Valid String sessionid,
@Valid String appid,
final @Valid String userid,
@Valid String sign,
final @Valid String client,
final @Valid String title,
final @Valid String traceid) {
BlackEntity black = (BlackEntity) CacheHelper.getSystemCacheBean().getCacheObject(userid, orgi); BlackEntity black = (BlackEntity) CacheHelper.getSystemCacheBean().getCacheObject(userid, orgi);
SseEmitter retSseEmitter = null; SseEmitter retSseEmitter = null;
if ((black == null || (black.getEndtime() != null && black.getEndtime().before(new Date())))) { if ((black == null || (black.getEndtime() != null && black.getEndtime().before(new Date())))) {
@ -288,9 +298,21 @@ 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)) {
OnlineUserUtils.online(super.getIMUser(request, sign, contacts != null ? contacts.getName() : null), orgi, sessionid, UKDataContext.OnlineUserTypeStatus.WEBIM.toString(), request, UKDataContext.ChannelTypeEnum.WEBIM.toString(), appid, contacts, invite); try {
OnlineUserUtils.online(super.getIMUser(request, sign, contacts != null ? contacts.getName() : null),
orgi,
sessionid,
UKDataContext.OnlineUserTypeStatus.WEBIM.toString(),
request,
UKDataContext.ChannelTypeEnum.WEBIM.toString(),
appid,
contacts,
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));
} }
} }