mirror of
https://github.com/chatopera/cosin.git
synced 2025-07-24 08:31:45 +08:00
enhance tag api, fix chatbot agent transfer bug, fix chatbot tab, etc.
This commit is contained in:
parent
38ce01bc8f
commit
6abacc646e
@ -831,40 +831,58 @@ public class IMController extends Handler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
map.addAttribute("username", nickname);
|
map.addAttribute("username", nickname);
|
||||||
|
boolean isChatbotAgentFirst = false;
|
||||||
|
boolean isEnableExchangeAgentType = false;
|
||||||
|
Chatbot bot = null;
|
||||||
|
|
||||||
// 是否使用机器人客服
|
// 是否使用机器人客服
|
||||||
Chatbot bot = null;
|
if (invite.isAi() && MainContext.hasModule(Constants.CSKEFU_MODULE_CHATBOT)) {
|
||||||
if (MainContext.hasModule(Constants.CSKEFU_MODULE_CHATBOT) &&
|
// 查找机器人
|
||||||
StringUtils.isNotBlank(invite.getAiid()) &&
|
bot = chatbotRes.findOne(invite.getAiid());
|
||||||
invite.isAi() &&
|
if (bot != null) {
|
||||||
((bot = chatbotRes.findOne(invite.getAiid())) != null) &&
|
// 判断是否接受访客切换坐席类型
|
||||||
((StringUtils.equals(
|
isEnableExchangeAgentType = !StringUtils.equals(
|
||||||
ai, "true")) || (invite.isAifirst() && ai == null))) { //启用 AI , 并且 AI优先 接待
|
bot.getWorkmode(), Constants.CHATBOT_CHATBOT_ONLY);
|
||||||
|
|
||||||
|
// 判断是否机器人客服优先
|
||||||
|
if (((StringUtils.equals(
|
||||||
|
ai, "true")) || (invite.isAifirst() && ai == null))) {
|
||||||
|
isChatbotAgentFirst = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
map.addAttribute(
|
||||||
|
"exchange", isEnableExchangeAgentType);
|
||||||
|
|
||||||
|
if (isChatbotAgentFirst) {
|
||||||
|
// 机器人坐席
|
||||||
HashMap<String, String> chatbotConfig = new HashMap<String, String>();
|
HashMap<String, String> chatbotConfig = new HashMap<String, String>();
|
||||||
chatbotConfig.put("botname", invite.getAiname());
|
chatbotConfig.put("botname", invite.getAiname());
|
||||||
chatbotConfig.put("botid", invite.getAiid());
|
chatbotConfig.put("botid", invite.getAiid());
|
||||||
chatbotConfig.put("botwelcome", invite.getAimsg());
|
chatbotConfig.put("botwelcome", invite.getAimsg());
|
||||||
chatbotConfig.put("botfirst", Boolean.toString(invite.isAifirst()));
|
chatbotConfig.put("botfirst", Boolean.toString(invite.isAifirst()));
|
||||||
chatbotConfig.put("isai", Boolean.toString(invite.isAi()));
|
chatbotConfig.put("isai", Boolean.toString(invite.isAi()));
|
||||||
map.addAttribute(
|
|
||||||
"exchange", !StringUtils.equals(bot.getWorkmode(), Constants.CHATBOT_CHATBOT_ONLY));
|
|
||||||
|
|
||||||
if (chatbotConfig != null) {
|
if (chatbotConfig != null) {
|
||||||
map.addAttribute("chatbotConfig", chatbotConfig);
|
map.addAttribute("chatbotConfig", chatbotConfig);
|
||||||
}
|
}
|
||||||
view = request(super.createRequestPageTempletResponse("/apps/im/chatbot/index"));
|
view = request(super.createRequestPageTempletResponse("/apps/im/chatbot/index"));
|
||||||
if (MobileDevice.isMobile(request.getHeader("User-Agent")) || StringUtils.isNotBlank(mobile)) {
|
if (MobileDevice.isMobile(request.getHeader("User-Agent")) || StringUtils.isNotBlank(
|
||||||
|
mobile)) {
|
||||||
view = request(super.createRequestPageTempletResponse(
|
view = request(super.createRequestPageTempletResponse(
|
||||||
"/apps/im/chatbot/mobile")); // 智能机器人 移动端
|
"/apps/im/chatbot/mobile")); // 智能机器人 移动端
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// 维持人工坐席的设定,检查是否进入留言
|
||||||
if (!isLeavemsg && (MobileDevice.isMobile(
|
if (!isLeavemsg && (MobileDevice.isMobile(
|
||||||
request.getHeader("User-Agent")) || StringUtils.isNotBlank(mobile))) {
|
request.getHeader("User-Agent")) || StringUtils.isNotBlank(mobile))) {
|
||||||
view = request(
|
view = request(
|
||||||
super.createRequestPageTempletResponse("/apps/im/mobile")); // WebIM移动端。再次点选技能组?
|
super.createRequestPageTempletResponse("/apps/im/mobile")); // WebIM移动端。再次点选技能组?
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
map.addAttribute(
|
map.addAttribute(
|
||||||
"chatMessageList", chatMessageRes.findByUsessionAndOrgi(userid, orgi, new PageRequest(0, 20,
|
"chatMessageList", chatMessageRes.findByUsessionAndOrgi(userid, orgi, new PageRequest(0, 20,
|
||||||
Direction.DESC,
|
Direction.DESC,
|
||||||
|
@ -0,0 +1,32 @@
|
|||||||
|
package com.chatopera.cc.persistence.impl;
|
||||||
|
|
||||||
|
import com.chatopera.cc.model.Tag;
|
||||||
|
import com.chatopera.cc.model.User;
|
||||||
|
import com.chatopera.cc.persistence.interfaces.DataExchangeInterface;
|
||||||
|
import com.chatopera.cc.persistence.repository.TagRepository;
|
||||||
|
import com.chatopera.cc.persistence.repository.UserRepository;
|
||||||
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Service("tagdata")
|
||||||
|
public class TagDataExchangeImpl implements DataExchangeInterface {
|
||||||
|
@Autowired
|
||||||
|
private TagRepository tagRes;
|
||||||
|
|
||||||
|
public String getDataByIdAndOrgi(String id, String orgi) {
|
||||||
|
Tag tag = tagRes.findByOrgiAndId(orgi, id);
|
||||||
|
return tag != null ? tag.getTag() : id;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<Serializable> getListDataByIdAndOrgi(String id, String creater, String orgi) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void process(Object data, String orgi) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
@ -27,20 +27,20 @@ import java.util.List;
|
|||||||
|
|
||||||
@Service("userdata")
|
@Service("userdata")
|
||||||
public class UserDataExchangeImpl implements DataExchangeInterface {
|
public class UserDataExchangeImpl implements DataExchangeInterface {
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserRepository userRes ;
|
private UserRepository userRes;
|
||||||
|
|
||||||
public String getDataByIdAndOrgi(String id, String orgi){
|
public String getDataByIdAndOrgi(String id, String orgi) {
|
||||||
User user = userRes.findById(id);
|
User user = userRes.findById(id);
|
||||||
return user!=null ? user.getUsername() : id;
|
return user != null ? user.getUsername() : id;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<Serializable> getListDataByIdAndOrgi(String id , String creater, String orgi) {
|
public List<Serializable> getListDataByIdAndOrgi(String id, String creater, String orgi) {
|
||||||
return null ;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void process(Object data , String orgi) {
|
public void process(Object data, String orgi) {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -242,6 +242,10 @@
|
|||||||
var hostname = location.hostname ;
|
var hostname = location.hostname ;
|
||||||
var socket = io.connect(location.protocol+"//"+top.hostname+":"+top.port+"/im/ent?userid=${user.id!''!''}&orgi=${user.orgi!''}&contextid=${contextid!''}",{transports: ['websocket'], upgrade: false});
|
var socket = io.connect(location.protocol+"//"+top.hostname+":"+top.port+"/im/ent?userid=${user.id!''!''}&orgi=${user.orgi!''}&contextid=${contextid!''}",{transports: ['websocket'], upgrade: false});
|
||||||
socket.on('message', function(data) {
|
socket.on('message', function(data) {
|
||||||
|
if(data.contextid != "${entimuser.id!''}"){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
console.log('message', data);
|
console.log('message', data);
|
||||||
data.createtime = formatDate(data.createtime);
|
data.createtime = formatDate(data.createtime);
|
||||||
var chat=document.getElementsByClassName('chatting-left').innerText;
|
var chat=document.getElementsByClassName('chatting-left').innerText;
|
||||||
|
@ -362,7 +362,7 @@
|
|||||||
<div class="ukefu-func-tab">
|
<div class="ukefu-func-tab">
|
||||||
<ul>
|
<ul>
|
||||||
<#if models?seq_contains("chatbot") && inviteData.ai && aiid??>
|
<#if models?seq_contains("chatbot") && inviteData.ai && aiid??>
|
||||||
<#if !exchange?? || exchange == "true">
|
<#if exchange == "true">
|
||||||
<li><a href="/im/index.html?appid=${appid!''}&orgi=${orgi!''}<#if aiid??>&aiid=${aiid}</#if>&ai=true<#if client??>&client=${client!''}</#if><#if type??>&type=text</#if><#if skill??>&skill=${skill!''}</#if><#if agent??>&agent=${agent!''}</#if><#if title??>&title=${title?url}</#if><#if url??>&url=${url?url}</#if><#if traceid??>&traceid=${traceid}</#if>&userid=${userid!''}&sessionid=${sessionid!''}&t=${.now?long}">智能客服</a></li>
|
<li><a href="/im/index.html?appid=${appid!''}&orgi=${orgi!''}<#if aiid??>&aiid=${aiid}</#if>&ai=true<#if client??>&client=${client!''}</#if><#if type??>&type=text</#if><#if skill??>&skill=${skill!''}</#if><#if agent??>&agent=${agent!''}</#if><#if title??>&title=${title?url}</#if><#if url??>&url=${url?url}</#if><#if traceid??>&traceid=${traceid}</#if>&userid=${userid!''}&sessionid=${sessionid!''}&t=${.now?long}">智能客服</a></li>
|
||||||
</#if>
|
</#if>
|
||||||
<li class="cur"><a href="javascript:void(0)">人工坐席</a></li>
|
<li class="cur"><a href="javascript:void(0)">人工坐席</a></li>
|
||||||
|
@ -7710,6 +7710,7 @@ INSERT INTO `uk_sysdic` VALUES ('ff8080816de316aa016de31d0e130016', '企业聊
|
|||||||
INSERT INTO `uk_sysdic` VALUES ('ff8080816de316aa016de3201ffb001c', '创建群组', 'pub', 'A14_A01', 'cskefu', 'layui-icon', 'ff8080816de316aa016de31d0e130016', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2019-10-19 16:26:36', NULL, 1, 0, '402888815d2fe37f015d2fe75cc80002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
INSERT INTO `uk_sysdic` VALUES ('ff8080816de316aa016de3201ffb001c', '创建群组', 'pub', 'A14_A01', 'cskefu', 'layui-icon', 'ff8080816de316aa016de31d0e130016', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2019-10-19 16:26:36', NULL, 1, 0, '402888815d2fe37f015d2fe75cc80002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
||||||
INSERT INTO `uk_sysdic` VALUES ('4028c1236170e237016170e4d95a03c6', '类似问题', 'pub', 'topicmore', 'cskefu', 'layui-icon', '402888815e097729015e0999f26e0002', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2018-02-07 23:31:41', NULL, 1, 0, '402888815e097729015e0999f26e0002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
INSERT INTO `uk_sysdic` VALUES ('4028c1236170e237016170e4d95a03c6', '类似问题', 'pub', 'topicmore', 'cskefu', 'layui-icon', '402888815e097729015e0999f26e0002', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2018-02-07 23:31:41', NULL, 1, 0, '402888815e097729015e0999f26e0002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
||||||
INSERT INTO `uk_sysdic` VALUES ('4028c1236173b85b016173bde0fd0333', '用户接口', 'pub', 'userdata', 'cskefu', 'layui-icon', '402888815e097729015e0999f26e0002', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2018-02-08 12:47:59', NULL, 1, 0, '402888815e097729015e0999f26e0002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
INSERT INTO `uk_sysdic` VALUES ('4028c1236173b85b016173bde0fd0333', '用户接口', 'pub', 'userdata', 'cskefu', 'layui-icon', '402888815e097729015e0999f26e0002', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2018-02-08 12:47:59', NULL, 1, 0, '402888815e097729015e0999f26e0002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
||||||
|
INSERT INTO `uk_sysdic` VALUES ('4028826a6eeed0f3016eeed9eee7001c', '标签接口', 'pub', 'tagdata', 'cskefu', 'layui-icon', '402888815e097729015e0999f26e0002', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2019-12-10 16:08:10', NULL, 1, 0, '402888815e097729015e0999f26e0002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
||||||
INSERT INTO `uk_sysdic` VALUES ('4028c1236173b85b016173be114e0335', '部门接口', 'pub', 'organdata', 'cskefu', 'layui-icon', '402888815e097729015e0999f26e0002', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2018-02-08 12:48:11', NULL, 1, 0, '402888815e097729015e0999f26e0002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
INSERT INTO `uk_sysdic` VALUES ('4028c1236173b85b016173be114e0335', '部门接口', 'pub', 'organdata', 'cskefu', 'layui-icon', '402888815e097729015e0999f26e0002', '', NULL, '', '', NULL, '4028cac3614cd2f901614cf8be1f0324', '2018-02-08 12:48:11', NULL, 1, 0, '402888815e097729015e0999f26e0002', 0, 0, NULL, NULL, NULL, NULL, NULL);
|
||||||
INSERT INTO `uk_sysdic` VALUES ('4028cba3613c9d2d01613cb0dbf8062d', '全部联系人', 'pub', 'A02_A01_A02_B01', NULL, 'auth', '402881ef612b1f5b01612cc87273054a', NULL, NULL, '', NULL, NULL, '297e8c7b455798280145579c73e501c1', '2018-01-28 20:14:39', NULL, 0, 0, '402888815d2fe37f015d2fe75cc80002', 0, 0, 'javascript:;', 'webim', '4', NULL, 'top');
|
INSERT INTO `uk_sysdic` VALUES ('4028cba3613c9d2d01613cb0dbf8062d', '全部联系人', 'pub', 'A02_A01_A02_B01', NULL, 'auth', '402881ef612b1f5b01612cc87273054a', NULL, NULL, '', NULL, NULL, '297e8c7b455798280145579c73e501c1', '2018-01-28 20:14:39', NULL, 0, 0, '402888815d2fe37f015d2fe75cc80002', 0, 0, 'javascript:;', 'webim', '4', NULL, 'top');
|
||||||
INSERT INTO `uk_sysdic` VALUES ('4028cba3613c9d2d01613cb15cce062e', '今日新增', 'pub', 'A02_A01_A02_B02', NULL, 'auth', '402881ef612b1f5b01612cc87273054a', NULL, NULL, '', NULL, NULL, '297e8c7b455798280145579c73e501c1', '2018-01-28 20:15:12', NULL, 0, 0, '402888815d2fe37f015d2fe75cc80002', 0, 0, 'javascript:;', 'webim', '4', NULL, 'top');
|
INSERT INTO `uk_sysdic` VALUES ('4028cba3613c9d2d01613cb15cce062e', '今日新增', 'pub', 'A02_A01_A02_B02', NULL, 'auth', '402881ef612b1f5b01612cc87273054a', NULL, NULL, '', NULL, NULL, '297e8c7b455798280145579c73e501c1', '2018-01-28 20:15:12', NULL, 0, 0, '402888815d2fe37f015d2fe75cc80002', 0, 0, 'javascript:;', 'webim', '4', NULL, 'top');
|
||||||
|
@ -241,7 +241,7 @@ public class ChatbotEventHandler {
|
|||||||
MainContext.getCache().deleteAgentUserByUserIdAndOrgi(p, orgi);
|
MainContext.getCache().deleteAgentUserByUserIdAndOrgi(p, orgi);
|
||||||
MainContext.getCache().deleteOnlineUserByIdAndOrgi(user, orgi);
|
MainContext.getCache().deleteOnlineUserByIdAndOrgi(user, orgi);
|
||||||
|
|
||||||
p.setStatus(MainContext.OnlineUserStatusEnum.OFFLINE.toString());
|
p.setStatus(MainContext.AgentUserStatusEnum.END.toString());
|
||||||
onlineUser.setStatus(MainContext.OnlineUserStatusEnum.OFFLINE.toString());
|
onlineUser.setStatus(MainContext.OnlineUserStatusEnum.OFFLINE.toString());
|
||||||
|
|
||||||
getAgentUserRes().save(p);
|
getAgentUserRes().save(p);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user