mirror of
https://github.com/chatopera/cosin.git
synced 2025-08-01 16:38:02 +08:00
#75 处理AiUser
This commit is contained in:
parent
1891891e4a
commit
7bc572ae2e
@ -67,6 +67,7 @@ public class OnlineUserUtils {
|
||||
|
||||
/**
|
||||
* 更新cache
|
||||
*
|
||||
* @param id
|
||||
* @param cousultInvite
|
||||
*/
|
||||
@ -598,33 +599,39 @@ public class OnlineUserUtils {
|
||||
*/
|
||||
public static void offline(String user, String orgi) throws Exception {
|
||||
if (UKDataContext.getContext() != null) {
|
||||
OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
||||
if (onlineUser != null) {
|
||||
CousultInvite invite = OnlineUserUtils.cousult(onlineUser.getAppid(), onlineUser.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
||||
if (invite.isTraceuser()) {
|
||||
onlineUser.setStatus(UKDataContext.OnlineUserOperatorStatus.OFFLINE.toString());
|
||||
onlineUser.setInvitestatus(UKDataContext.OnlineUserInviteStatus.DEFAULT.toString());
|
||||
onlineUser.setBetweentime((int) (new Date().getTime() - onlineUser.getLogintime().getTime()));
|
||||
onlineUser.setUpdatetime(new Date());
|
||||
OnlineUserRepository service = UKDataContext.getContext().getBean(
|
||||
OnlineUserRepository.class);
|
||||
service.save(onlineUser);
|
||||
try {
|
||||
OnlineUser onlineUser = (OnlineUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
||||
if (onlineUser != null) {
|
||||
CousultInvite invite = OnlineUserUtils.cousult(onlineUser.getAppid(), onlineUser.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
||||
if (invite.isTraceuser()) {
|
||||
onlineUser.setStatus(UKDataContext.OnlineUserOperatorStatus.OFFLINE.toString());
|
||||
onlineUser.setInvitestatus(UKDataContext.OnlineUserInviteStatus.DEFAULT.toString());
|
||||
onlineUser.setBetweentime((int) (new Date().getTime() - onlineUser.getLogintime().getTime()));
|
||||
onlineUser.setUpdatetime(new Date());
|
||||
OnlineUserRepository service = UKDataContext.getContext().getBean(
|
||||
OnlineUserRepository.class);
|
||||
service.save(onlineUser);
|
||||
|
||||
OnlineUserHisRepository onlineHisUserRes = UKDataContext.getContext().getBean(OnlineUserHisRepository.class);
|
||||
{
|
||||
List<OnlineUserHis> hisList = onlineHisUserRes.findBySessionidAndOrgi(onlineUser.getSessionid(), orgi);
|
||||
OnlineUserHis his = null;
|
||||
if (hisList.size() > 0) {
|
||||
his = hisList.get(0);
|
||||
} else {
|
||||
his = new OnlineUserHis();
|
||||
OnlineUserHisRepository onlineHisUserRes = UKDataContext.getContext().getBean(OnlineUserHisRepository.class);
|
||||
{
|
||||
List<OnlineUserHis> hisList = onlineHisUserRes.findBySessionidAndOrgi(onlineUser.getSessionid(), orgi);
|
||||
OnlineUserHis his = null;
|
||||
if (hisList.size() > 0) {
|
||||
his = hisList.get(0);
|
||||
} else {
|
||||
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);
|
||||
}
|
||||
|
@ -16,95 +16,108 @@
|
||||
*/
|
||||
package com.chatopera.cc.webim.util.server;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
import com.chatopera.cc.webim.util.server.handler.ChatbotEventHandler;
|
||||
import com.chatopera.cc.core.UKDataContext;
|
||||
import com.chatopera.cc.webim.util.server.handler.AgentEventHandler;
|
||||
import com.chatopera.cc.webim.util.server.handler.EntIMEventHandler;
|
||||
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.boot.CommandLineRunner;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import com.corundumstudio.socketio.SocketIONamespace;
|
||||
import com.corundumstudio.socketio.SocketIOServer;
|
||||
import com.chatopera.cc.core.UKDataContext;
|
||||
import com.chatopera.cc.webim.util.server.handler.AgentEventHandler;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.InvocationTargetException;
|
||||
|
||||
@Component
|
||||
public class ServerRunner implements CommandLineRunner {
|
||||
@Component
|
||||
public class ServerRunner implements CommandLineRunner {
|
||||
private final SocketIOServer server;
|
||||
private final SocketIONamespace imSocketNameSpace ;
|
||||
private final SocketIONamespace agentSocketIONameSpace ;
|
||||
private final SocketIONamespace entIMSocketIONameSpace ;
|
||||
private final SocketIONamespace chatbotSocketIONameSpace ;
|
||||
private final SocketIONamespace callCenterSocketIONameSpace ;
|
||||
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()) ;
|
||||
private final SocketIONamespace imSocketNameSpace;
|
||||
private final SocketIONamespace agentSocketIONameSpace;
|
||||
private final SocketIONamespace entIMSocketIONameSpace;
|
||||
private final SocketIONamespace chatbotSocketIONameSpace;
|
||||
private final SocketIONamespace callCenterSocketIONameSpace;
|
||||
private final SocketIONamespace calloutSocketIONameSpace;
|
||||
|
||||
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());
|
||||
} else {
|
||||
calloutSocketIONameSpace = null;
|
||||
}
|
||||
|
||||
if(UKDataContext.model.get("callcenter") !=null && UKDataContext.model.get("callcenter") == true){
|
||||
callCenterSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.CALLCENTER.getNamespace()) ;
|
||||
}else{
|
||||
callCenterSocketIONameSpace = null ;
|
||||
if (UKDataContext.model.get("callcenter") != null && UKDataContext.model.get("callcenter") == true) {
|
||||
callCenterSocketIONameSpace = server.addNamespace(UKDataContext.NameSpaceEnum.CALLCENTER.getNamespace());
|
||||
} else {
|
||||
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")
|
||||
public SocketIONamespace getIMSocketIONameSpace(SocketIOServer server ){
|
||||
imSocketNameSpace.addListeners(new IMEventHandler(server));
|
||||
return imSocketNameSpace ;
|
||||
}
|
||||
|
||||
@Bean(name="agentNamespace")
|
||||
public SocketIONamespace getAgentSocketIONameSpace(SocketIOServer server){
|
||||
agentSocketIONameSpace.addListeners(new AgentEventHandler(server));
|
||||
return agentSocketIONameSpace;
|
||||
|
||||
@Bean(name = "imNamespace")
|
||||
public SocketIONamespace getIMSocketIONameSpace(SocketIOServer server) {
|
||||
imSocketNameSpace.addListeners(new IMEventHandler(server));
|
||||
return imSocketNameSpace;
|
||||
}
|
||||
|
||||
@Bean(name="entimNamespace")
|
||||
public SocketIONamespace getEntIMSocketIONameSpace(SocketIOServer server){
|
||||
entIMSocketIONameSpace.addListeners(new EntIMEventHandler(server));
|
||||
return entIMSocketIONameSpace;
|
||||
}
|
||||
|
||||
@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 = "agentNamespace")
|
||||
public SocketIONamespace getAgentSocketIONameSpace(SocketIOServer server) {
|
||||
agentSocketIONameSpace.addListeners(new AgentEventHandler(server));
|
||||
return agentSocketIONameSpace;
|
||||
}
|
||||
|
||||
@Bean(name="calloutNamespace")
|
||||
public SocketIONamespace getCalloutIMSocketIONameSpace(SocketIOServer server){
|
||||
if(UKDataContext.model.get("sales") !=null && UKDataContext.model.get("sales") == true){
|
||||
@Bean(name = "entimNamespace")
|
||||
public SocketIONamespace getEntIMSocketIONameSpace(SocketIOServer server) {
|
||||
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;
|
||||
try {
|
||||
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;
|
||||
}
|
||||
|
||||
public void run(String... args) throws Exception {
|
||||
server.start();
|
||||
UKDataContext.setIMServerStatus(true); //IMServer 启动成功
|
||||
}
|
||||
public void run(String... args) throws Exception {
|
||||
server.start();
|
||||
UKDataContext.setIMServerStatus(true); //IMServer 启动成功
|
||||
}
|
||||
}
|
||||
|
@ -44,155 +44,147 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import java.net.InetSocketAddress;
|
||||
import java.util.Date;
|
||||
|
||||
public class ChatbotEventHandler
|
||||
{
|
||||
protected SocketIOServer server;
|
||||
public class ChatbotEventHandler {
|
||||
protected SocketIOServer server;
|
||||
|
||||
@Autowired
|
||||
public ChatbotEventHandler(SocketIOServer server)
|
||||
{
|
||||
this.server = server ;
|
||||
}
|
||||
|
||||
@OnConnect
|
||||
public void onConnect(SocketIOClient client)
|
||||
{
|
||||
try {
|
||||
String user = client.getHandshakeData().getSingleUrlParam("userid") ;
|
||||
String orgi = client.getHandshakeData().getSingleUrlParam("orgi") ;
|
||||
public ChatbotEventHandler(SocketIOServer server) {
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
@OnConnect
|
||||
public void onConnect(SocketIOClient client) {
|
||||
try {
|
||||
String user = client.getHandshakeData().getSingleUrlParam("userid");
|
||||
String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
|
||||
// String session = client.getHandshakeData().getSingleUrlParam("session") ;
|
||||
String appid = client.getHandshakeData().getSingleUrlParam("appid") ;
|
||||
String aiid = client.getHandshakeData().getSingleUrlParam("aiid") ;
|
||||
String appid = client.getHandshakeData().getSingleUrlParam("appid");
|
||||
String aiid = client.getHandshakeData().getSingleUrlParam("aiid");
|
||||
// String agent = client.getHandshakeData().getSingleUrlParam("agent") ;
|
||||
// String skill = client.getHandshakeData().getSingleUrlParam("skill") ;
|
||||
|
||||
if(!StringUtils.isBlank(user)){
|
||||
|
||||
if (StringUtils.isNotBlank(user)) {
|
||||
// /**
|
||||
// * 加入到 缓存列表
|
||||
// */
|
||||
NettyClients.getInstance().putIMEventClient(user, client);
|
||||
MessageOutContent outMessage = new MessageOutContent() ;
|
||||
CousultInvite invite = OnlineUserUtils.cousult(appid , orgi, UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
||||
if(invite!=null && !StringUtils.isBlank(invite.getAisuccesstip())) {
|
||||
outMessage.setMessage(invite.getAisuccesstip());
|
||||
}else{
|
||||
outMessage.setMessage("欢迎使用优客服小E,我来帮您解答问题");
|
||||
}
|
||||
|
||||
outMessage.setMessageType(UKDataContext.MessageTypeEnum.MESSAGE.toString());
|
||||
outMessage.setCalltype(UKDataContext.CallTypeEnum.IN.toString());
|
||||
outMessage.setNickName("AI");
|
||||
outMessage.setCreatetime(UKTools.dateFormate.format(new Date()));
|
||||
|
||||
client.sendEvent(UKDataContext.MessageTypeEnum.STATUS.toString(), outMessage);
|
||||
|
||||
InetSocketAddress address = (InetSocketAddress) client.getRemoteAddress() ;
|
||||
String ip = UKTools.getIpAddr(client.getHandshakeData().getHttpHeaders(), address.getHostString()) ;
|
||||
AiUser aiUser = new AiUser(user, user, System.currentTimeMillis() , orgi,IPTools.getInstance().findGeography(ip)) ;
|
||||
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) ;
|
||||
aiUser.setAgentserviceid(agentService.getId());
|
||||
|
||||
CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI);
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
NettyClients.getInstance().putIMEventClient(user, client);
|
||||
MessageOutContent outMessage = new MessageOutContent();
|
||||
CousultInvite invite = OnlineUserUtils.cousult(appid, orgi, UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
||||
if (invite != null && !StringUtils.isBlank(invite.getAisuccesstip())) {
|
||||
outMessage.setMessage(invite.getAisuccesstip());
|
||||
} else {
|
||||
outMessage.setMessage("欢迎使用华夏春松机器人客服!");
|
||||
}
|
||||
|
||||
outMessage.setMessageType(UKDataContext.MessageTypeEnum.MESSAGE.toString());
|
||||
outMessage.setCalltype(UKDataContext.CallTypeEnum.IN.toString());
|
||||
outMessage.setNickName("AI");
|
||||
outMessage.setCreatetime(UKTools.dateFormate.format(new Date()));
|
||||
|
||||
client.sendEvent(UKDataContext.MessageTypeEnum.STATUS.toString(), outMessage);
|
||||
|
||||
InetSocketAddress address = (InetSocketAddress) client.getRemoteAddress();
|
||||
String ip = UKTools.getIpAddr(client.getHandshakeData().getHttpHeaders(), address.getHostString());
|
||||
AiUser aiUser = new AiUser(user, user, System.currentTimeMillis(), orgi, IPTools.getInstance().findGeography(ip));
|
||||
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);
|
||||
aiUser.setAgentserviceid(agentService.getId());
|
||||
|
||||
CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI);
|
||||
|
||||
}
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//添加@OnDisconnect事件,客户端断开连接时调用,刷新客户端信息
|
||||
@OnDisconnect
|
||||
public void onDisconnect(SocketIOClient client) throws Exception
|
||||
{
|
||||
String user = client.getHandshakeData().getSingleUrlParam("userid") ;
|
||||
String orgi = client.getHandshakeData().getSingleUrlParam("orgi") ;
|
||||
if(!StringUtils.isBlank(user)){
|
||||
NettyClients.getInstance().removeIMEventClient(user , UKTools.getContextID(client.getSessionId().toString()));
|
||||
AiUser aiUser = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi) ;
|
||||
if(aiUser!=null) {
|
||||
ServiceQuene.processAiService(aiUser, orgi) ;
|
||||
CacheHelper.getOnlineUserCacheBean().delete(user,UKDataContext.SYSTEM_ORGI) ;
|
||||
}
|
||||
}
|
||||
client.disconnect();
|
||||
}
|
||||
|
||||
@OnDisconnect
|
||||
public void onDisconnect(SocketIOClient client) throws Exception {
|
||||
String user = client.getHandshakeData().getSingleUrlParam("userid");
|
||||
String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
|
||||
if (!StringUtils.isBlank(user)) {
|
||||
NettyClients.getInstance().removeIMEventClient(user, UKTools.getContextID(client.getSessionId().toString()));
|
||||
AiUser aiUser = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
||||
if (aiUser != null) {
|
||||
ServiceQuene.processAiService(aiUser, orgi);
|
||||
CacheHelper.getOnlineUserCacheBean().delete(user, UKDataContext.SYSTEM_ORGI);
|
||||
}
|
||||
}
|
||||
client.disconnect();
|
||||
}
|
||||
|
||||
//消息接收入口,网站有新用户接入对话
|
||||
@OnEvent(value = "new")
|
||||
public void onEvent(SocketIOClient client, AckRequest request, NewRequestMessage data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
//消息接收入口,坐席状态更新
|
||||
@OnEvent(value = "agentstatus")
|
||||
public void onEvent(SocketIOClient client, AckRequest request, AgentStatusMessage data)
|
||||
{
|
||||
System.out.println(data.getMessage());
|
||||
}
|
||||
|
||||
@OnEvent(value = "new")
|
||||
public void onEvent(SocketIOClient client, AckRequest request, NewRequestMessage data) {
|
||||
|
||||
}
|
||||
|
||||
//消息接收入口,坐席状态更新
|
||||
@OnEvent(value = "agentstatus")
|
||||
public void onEvent(SocketIOClient client, AckRequest request, AgentStatusMessage data) {
|
||||
System.out.println(data.getMessage());
|
||||
}
|
||||
|
||||
//消息接收入口,收发消息,用户向坐席发送消息和 坐席向用户发送消息
|
||||
@OnEvent(value = "message")
|
||||
public void onEvent(SocketIOClient client, AckRequest request, ChatMessage data)
|
||||
{
|
||||
String orgi = client.getHandshakeData().getSingleUrlParam("orgi") ;
|
||||
String aiid = client.getHandshakeData().getSingleUrlParam("aiid") ;
|
||||
String user = client.getHandshakeData().getSingleUrlParam("userid") ;
|
||||
if(data.getType() == null){
|
||||
data.setType("message");
|
||||
}
|
||||
/**
|
||||
* 以下代码主要用于检查 访客端的字数限制
|
||||
*/
|
||||
CousultInvite invite = OnlineUserUtils.cousult(data.getAppid(),data.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
||||
if(invite!=null && invite.getMaxwordsnum() > 0) {
|
||||
if(!StringUtils.isBlank(data.getMessage()) && data.getMessage().length() > invite.getMaxwordsnum()){
|
||||
data.setMessage(data.getMessage().substring(0 , invite.getMaxwordsnum()));
|
||||
}
|
||||
}else if(!StringUtils.isBlank(data.getMessage()) && data.getMessage().length() > 300){
|
||||
data.setMessage(data.getMessage().substring(0 , 300));
|
||||
}
|
||||
data.setSessionid(UKTools.getContextID(client.getSessionId().toString()));
|
||||
/**
|
||||
* 处理表情
|
||||
*/
|
||||
data.setMessage(UKTools.processEmoti(data.getMessage()));
|
||||
data.setTousername(UKDataContext.ChannelTypeEnum.AI.toString());
|
||||
|
||||
data.setAiid(aiid);
|
||||
|
||||
Object cacheData = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user,orgi) ;
|
||||
if(cacheData!=null && cacheData instanceof AiUser){
|
||||
AiUser aiUser = (AiUser)cacheData ;
|
||||
data.setAgentserviceid(aiUser.getAgentserviceid());
|
||||
data.setChannel(aiUser.getChannel());
|
||||
/**
|
||||
* 一定要设置 ContextID
|
||||
*/
|
||||
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()) ;
|
||||
if(!StringUtils.isBlank(data.getUserid()) && UKDataContext.MessageTypeEnum.MESSAGE.toString().equals(data.getType())){
|
||||
if(!StringUtils.isBlank(data.getTouser())){
|
||||
OutMessageRouter router = null ;
|
||||
router = (OutMessageRouter) UKDataContext.getContext().getBean(data.getChannel()) ;
|
||||
if(router!=null){
|
||||
router.handler(data.getTouser(), UKDataContext.MessageTypeEnum.MESSAGE.toString(), data.getAppid(), outMessage);
|
||||
}
|
||||
}
|
||||
if(cacheData!=null && cacheData instanceof AiUser){
|
||||
AiUser aiUser = (AiUser)cacheData ;
|
||||
aiUser.setTime(System.currentTimeMillis());
|
||||
CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI);
|
||||
}
|
||||
}
|
||||
UKTools.ai(data);
|
||||
}
|
||||
@OnEvent(value = "message")
|
||||
public void onEvent(SocketIOClient client, AckRequest request, ChatMessage data) {
|
||||
String orgi = client.getHandshakeData().getSingleUrlParam("orgi");
|
||||
String aiid = client.getHandshakeData().getSingleUrlParam("aiid");
|
||||
String user = client.getHandshakeData().getSingleUrlParam("userid");
|
||||
if (data.getType() == null) {
|
||||
data.setType("message");
|
||||
}
|
||||
/**
|
||||
* 以下代码主要用于检查 访客端的字数限制
|
||||
*/
|
||||
CousultInvite invite = OnlineUserUtils.cousult(data.getAppid(), data.getOrgi(), UKDataContext.getContext().getBean(ConsultInviteRepository.class));
|
||||
if (invite != null && invite.getMaxwordsnum() > 0) {
|
||||
if (!StringUtils.isBlank(data.getMessage()) && data.getMessage().length() > invite.getMaxwordsnum()) {
|
||||
data.setMessage(data.getMessage().substring(0, invite.getMaxwordsnum()));
|
||||
}
|
||||
} else if (!StringUtils.isBlank(data.getMessage()) && data.getMessage().length() > 300) {
|
||||
data.setMessage(data.getMessage().substring(0, 300));
|
||||
}
|
||||
data.setSessionid(UKTools.getContextID(client.getSessionId().toString()));
|
||||
/**
|
||||
* 处理表情
|
||||
*/
|
||||
data.setMessage(UKTools.processEmoti(data.getMessage()));
|
||||
data.setTousername(UKDataContext.ChannelTypeEnum.AI.toString());
|
||||
|
||||
data.setAiid(aiid);
|
||||
|
||||
Object cacheData = (AiUser) CacheHelper.getOnlineUserCacheBean().getCacheObject(user, orgi);
|
||||
if (cacheData != null && cacheData instanceof AiUser) {
|
||||
AiUser aiUser = (AiUser) cacheData;
|
||||
data.setAgentserviceid(aiUser.getAgentserviceid());
|
||||
data.setChannel(aiUser.getChannel());
|
||||
/**
|
||||
* 一定要设置 ContextID
|
||||
*/
|
||||
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());
|
||||
if (!StringUtils.isBlank(data.getUserid()) && UKDataContext.MessageTypeEnum.MESSAGE.toString().equals(data.getType())) {
|
||||
if (!StringUtils.isBlank(data.getTouser())) {
|
||||
OutMessageRouter router = null;
|
||||
router = (OutMessageRouter) UKDataContext.getContext().getBean(data.getChannel());
|
||||
if (router != null) {
|
||||
router.handler(data.getTouser(), UKDataContext.MessageTypeEnum.MESSAGE.toString(), data.getAppid(), outMessage);
|
||||
}
|
||||
}
|
||||
if (cacheData != null && cacheData instanceof AiUser) {
|
||||
AiUser aiUser = (AiUser) cacheData;
|
||||
aiUser.setTime(System.currentTimeMillis());
|
||||
CacheHelper.getOnlineUserCacheBean().put(user, aiUser, UKDataContext.SYSTEM_ORGI);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -253,7 +253,17 @@ public class IMController extends Handler {
|
||||
*/
|
||||
@RequestMapping("/online")
|
||||
@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);
|
||||
SseEmitter retSseEmitter = null;
|
||||
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);
|
||||
}
|
||||
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));
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user