diff --git a/contact-center/app/pom.xml b/contact-center/app/pom.xml index 006b67aa..5dad61a2 100644 --- a/contact-center/app/pom.xml +++ b/contact-center/app/pom.xml @@ -351,7 +351,7 @@ com.chatopera.bot sdk - 1.0.2 + 2.1.0 diff --git a/contact-center/app/src/main/java/com/chatopera/cc/acd/ACDAgentService.java b/contact-center/app/src/main/java/com/chatopera/cc/acd/ACDAgentService.java index 6b086897..46e461c2 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/acd/ACDAgentService.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/acd/ACDAgentService.java @@ -182,10 +182,17 @@ public class ACDAgentService { } // 获得所有待服务访客的列表 - Map pendingAgentUsers = cache.getAgentUsersInQueByOrgi(orgi); + final Map pendingAgentUsers = cache.getAgentUsersInQueByOrgi(orgi); final SessionConfig sessionConfig = acdPolicyService.initSessionConfig(orgi); // 本次批量分配访客数目 int assigned = 0; + int currentAssigned = cache.getInservAgentUsersSizeByAgentnoAndOrgi( + agentStatus.getAgentno(), agentStatus.getOrgi()); + + logger.info( + "[assignVisitors] agentno {}, name {}, current assigned {}, batch size in queue {}", + agentStatus.getAgentno(), + agentStatus.getUsername(), currentAssigned, pendingAgentUsers.size()); for (Map.Entry entry : pendingAgentUsers.entrySet()) { AgentUser agentUser = entry.getValue(); @@ -202,20 +209,16 @@ public class ACDAgentService { StringUtils.isBlank(agentUser.getSkill()))) { // 待服务的访客还没有指定坐席,并且也没有绑定技能组 process = true; - } else { - if (StringUtils.isBlank(agentUser.getAgentno()) && - agentStatus.getSkills().containsKey(agentUser.getSkill())) { - // 待服务的访客还没有指定坐席,并且指定的技能组和该坐席的技能组一致 - process = true; - } - } - } else { - // 目标坐席没有状态,或该目标坐席有状态但是没有属于任何一个技能组 - if (StringUtils.isBlank(agentUser.getAgentno()) && - StringUtils.isBlank(agentUser.getSkill())) { - // 待服务访客没有指定坐席,并且没有指定技能组 + } else if (StringUtils.isBlank(agentUser.getAgentno()) && + agentStatus.getSkills().containsKey(agentUser.getSkill())) { + // 待服务的访客还没有指定坐席,并且指定的技能组和该坐席的技能组一致 process = true; } + } else if (StringUtils.isBlank(agentUser.getAgentno()) && + StringUtils.isBlank(agentUser.getSkill())) { + // 目标坐席没有状态,或该目标坐席有状态但是没有属于任何一个技能组 + // 待服务访客没有指定坐席,并且没有指定技能组 + process = true; } if (!process) { @@ -223,14 +226,14 @@ public class ACDAgentService { } // 坐席未达到最大咨询访客数量,并且单次批量分配小于坐席就绪时分配最大访客数量(initMaxuser) - if (((agentStatus.getUsers() + assigned) < sessionConfig.getMaxuser()) && (assigned < sessionConfig.getInitmaxuser())) { + if (((currentAssigned + assigned) < sessionConfig.getMaxuser()) && (assigned < sessionConfig.getInitmaxuser())) { assigned++; pickupAgentUserInQueue(agentUser, agentStatus); } else { logger.info( "[assignVisitors] agentno {} reach the max users limit {}/{} or batch assign limit {}/{}", agentno, - (agentStatus.getUsers() + assigned), + (currentAssigned + assigned), sessionConfig.getMaxuser(), assigned, sessionConfig.getInitmaxuser()); break; } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/WebIMController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/WebIMController.java index b880c8d1..1c73cf04 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/WebIMController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/admin/channel/WebIMController.java @@ -222,6 +222,7 @@ public class WebIMController extends Handler { tempInviteData.setMaxwordsnum(inviteData.getMaxwordsnum()); tempInviteData.setCtrlenter(inviteData.isCtrlenter()); + tempInviteData.setWhitelist_mode(inviteData.isWhitelist_mode()); if (dialogad != null && StringUtils.isNotBlank(dialogad.getName()) && dialogad.getBytes() != null && dialogad.getBytes().length > 0) { tempInviteData.setDialog_ad(super.saveImageFileWithMultipart(dialogad)); diff --git a/contact-center/app/src/main/java/com/chatopera/cc/controller/apps/IMController.java b/contact-center/app/src/main/java/com/chatopera/cc/controller/apps/IMController.java index 99a0fe1a..13cafd1e 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/controller/apps/IMController.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/controller/apps/IMController.java @@ -48,6 +48,7 @@ import org.springframework.util.FileCopyUtils; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; @@ -325,9 +326,10 @@ public class IMController extends Handler { } } - @RequestMapping("/userinformation") - @Menu(type = "im", subtype = "userinformation") - public ModelAndView userinformation( + @ResponseBody + @RequestMapping("/chatoperainit") + @Menu(type = "im", subtype = "chatoperainit") + public String chatoperaInit( ModelMap map, HttpServletRequest request, HttpServletResponse response, @@ -338,6 +340,7 @@ public class IMController extends Handler { String company_name, String sid, String system_name, + Boolean whitelist_mode, @RequestParam String sessionid) throws IOException, TemplateException { ModelAndView view = request(super.createRequestPageTempletResponse("/apps/im/point")); final User logined = super.getUser(request); @@ -364,11 +367,19 @@ public class IMController extends Handler { onlineUserRes.save(onlineUser); } - createContacts(userid, - request, - logined.getId(), - uid, cid, sid, username, company_name, system_name); - return view; + Contacts usc = contactsRes.findOneByWluidAndWlsidAndWlcid(uid, sid, cid); + if (usc != null) { + return "usc"; + } else { + if (!whitelist_mode) { + createContacts(userid, + request, + logined.getId(), + uid, cid, sid, username, company_name, system_name); + } + } + + return "ok"; } diff --git a/contact-center/app/src/main/java/com/chatopera/cc/model/CousultInvite.java b/contact-center/app/src/main/java/com/chatopera/cc/model/CousultInvite.java index e3bb4aab..6b397b75 100644 --- a/contact-center/app/src/main/java/com/chatopera/cc/model/CousultInvite.java +++ b/contact-center/app/src/main/java/com/chatopera/cc/model/CousultInvite.java @@ -24,718 +24,916 @@ import java.util.Date; @Entity @Table(name = "uk_consult_invite") @org.hibernate.annotations.Proxy(lazy = false) -public class CousultInvite implements java.io.Serializable{ - - /** - * - */ - private static final long serialVersionUID = 4067131780773572811L; - private String id; - private String impid; - private String orgi; - private String owner; - private String processid; - private String shares; - private Date update_time; - private String update_user; - private String username; - private String wfstatus; - private boolean consult_invite_enable; //启用邀请框 - private String consult_invite_model; - private String consult_invite_content; - private String consult_invite_accept ; //显示接收咨询按钮的文本 - private String consult_invite_later ; //显示稍后咨询的按钮 - private int consult_invite_delay ; //延时弹出邀请框 - private String consult_invite_bg ; //邀请框背景图片 - - private boolean ctrlenter ; //启用 CTRL+Enter发送消息 - - private String consult_invite_position; - private String consult_invite_color; - private String consult_invite_right; - private String consult_invite_left; - private String consult_invite_bottom; - private String consult_invite_top; - private Date create_time; - private String name; - private String consult_invite_width; - private String consult_invite_poptype; - private String consult_invite_fontsize; - private String consult_invite_fontstyle ; - private String consult_invite_fontcolor ; - private String consult_invite_interval; - private String consult_invite_repeat; - private String consult_invite_hight; - private String snsaccountid; - private String consult_vsitorbtn_position ; - private String consult_vsitorbtn_content ; - private String consult_vsitorbtn_right; - private String consult_vsitorbtn_left; - private String consult_vsitorbtn_top; - private String consult_vsitorbtn_color; - private String consult_vsitorbtn_model; - private String consult_vsitorbtn_bottom ; - private String consult_invite_backimg; +public class CousultInvite implements java.io.Serializable { - /** - * 技能组设置 - */ - private boolean consult_skill_fixed; // 是否绑定单一技能组 - private String consult_skill_fixed_id; // 绑定单一技能组,技能组ID - private String consult_skill_logo ; //显示技能组 logo - private String consult_skill_title ; //显示技能组标题 - private String consult_skill_img ; //显示技能组 图片 - private String consult_skill_msg ; //显示技能组 提示信息 - private int consult_skill_numbers ; //显示最大 分组数 - private int consult_skill_maxagent ; //每个技能组最多显示多少坐席 - private String consult_skill_bottomtitle ; //显示技能组底部标题 - private boolean consult_skill_agent ; //是否显示技能组下的坐席 - - private int consult_vsitorbtn_display ; - - private boolean recordhis ; //记录访客的网页访问记录 - private boolean traceuser; //实时追踪访客 - - private int maxwordsnum ; //允许访客端输入的最大文本字数 - - - private String consult_dialog_color; - private String consult_dialog_logo; - private String consult_dialog_headimg; - private String dialog_name ; - private String dialog_address; - private String dialog_phone; - private String dialog_mail ; - private String dialog_introduction; - private String dialog_message ; - private String dialog_ad ; - - private String lvmopentype ; //留言板弹出方式 - private boolean leavemessage ; //启用留言功能 - private boolean lvmname; - private boolean lvmphone; - private boolean lvmemail; - private boolean lvmaddress; - private boolean lvmqq; - private boolean lvmcontent = true; - private boolean skill ; //启用技能组功能 - - private boolean onlyareaskill ; //只显示地区技能组 , 无地区技能组是 提示消息,不显示公共技能组 - private String areaskilltipmsg ;//未配置地区技能组是提示消息 - - private boolean consult_info; //启用咨询信息收集功能 - private boolean consult_info_cookies; //启用Cookies存储用户录入的信息, 最长有效时间是 3600秒,超时需要重新填写 - private boolean consult_info_name;//填写姓名 - private boolean consult_info_email; //填写 邮件地址 - private boolean consult_info_phone;//填写 电话号码 - private boolean consult_info_resion; //填写咨询问题 - private String consult_info_message; //咨询窗口显示的欢迎语 - - private String agentshortcutkey ; //坐席回复快捷键 - private String usershortcutkey ; //访客快捷键 - - private boolean ai ; //是否启用 AI - private boolean aifirst ; //AI优先接入 - private boolean aisearch ; //AI允许使用 搜索引擎, 例如百度 等 - private String aimsg ; //AI欢迎信息,可以使用 HTML - private String aisuccesstip ;//AI服务连接成功的消息提示 - private String ainame ; //AI服务 昵称 - - private String aiid; //默认的机器人 - - private String datadept; - private String agent_online; + /** + * + */ + private static final long serialVersionUID = 4067131780773572811L; + private String id; + private String impid; + private String orgi; + private String owner; + private String processid; + private String shares; + private Date update_time; + private String update_user; + private String username; + private String wfstatus; + private boolean consult_invite_enable; //启用邀请框 + private String consult_invite_model; + private String consult_invite_content; + private String consult_invite_accept; //显示接收咨询按钮的文本 + private String consult_invite_later; //显示稍后咨询的按钮 + private int consult_invite_delay; //延时弹出邀请框 + private String consult_invite_bg; //邀请框背景图片 - - @Id - @Column(length = 32) - @GeneratedValue(generator = "system-uuid") - @GenericGenerator(name = "system-uuid", strategy = "uuid") - public String getId() { - return id; - } - public void setId(String id) { - this.id = id; - } - public String getImpid() { - return impid; - } - public void setImpid(String impid) { - this.impid = impid; - } - public String getOrgi() { - return orgi; - } - public void setOrgi(String orgi) { - this.orgi = orgi; - } - public String getOwner() { - return owner; - } - public void setOwner(String owner) { - this.owner = owner; - } - public String getProcessid() { - return processid; - } - public void setProcessid(String processid) { - this.processid = processid; - } - public String getShares() { - return shares; - } - public void setShares(String shares) { - this.shares = shares; - } - public Date getUpdate_time() { - return update_time; - } - public void setUpdate_time(Date update_time) { - this.update_time = update_time; - } - public String getUpdate_user() { - return update_user; - } - public void setUpdate_user(String update_user) { - this.update_user = update_user; - } - public String getUsername() { - return username; - } - public void setUsername(String username) { - this.username = username; - } - public String getWfstatus() { - return wfstatus; - } - public void setWfstatus(String wfstatus) { - this.wfstatus = wfstatus; - } - public String getConsult_invite_model() { - return consult_invite_model; - } - public void setConsult_invite_model(String consult_invite_model) { - this.consult_invite_model = consult_invite_model; - } - public String getConsult_invite_content() { - return consult_invite_content; - } - public void setConsult_invite_content(String consult_invite_content) { - this.consult_invite_content = consult_invite_content; - } - public String getConsult_invite_position() { - return consult_invite_position; - } - public void setConsult_invite_position(String consult_invite_position) { - this.consult_invite_position = consult_invite_position; - } - public String getConsult_invite_color() { - return consult_invite_color; - } - public void setConsult_invite_color(String consult_invite_color) { - this.consult_invite_color = consult_invite_color; - } - public String getConsult_invite_right() { - return consult_invite_right; - } - public void setConsult_invite_right(String consult_invite_right) { - this.consult_invite_right = consult_invite_right; - } - public String getConsult_invite_left() { - return consult_invite_left; - } - public void setConsult_invite_left(String consult_invite_left) { - this.consult_invite_left = consult_invite_left; - } - public String getConsult_invite_bottom() { - return consult_invite_bottom; - } - public void setConsult_invite_bottom(String consult_invite_bottom) { - this.consult_invite_bottom = consult_invite_bottom; - } - public String getConsult_invite_top() { - return consult_invite_top; - } - public void setConsult_invite_top(String consult_invite_top) { - this.consult_invite_top = consult_invite_top; - } - public Date getCreate_time() { - return create_time; - } - public void setCreate_time(Date create_time) { - this.create_time = create_time; - } - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - public String getConsult_invite_width() { - return consult_invite_width; - } - public void setConsult_invite_width(String consult_invite_width) { - this.consult_invite_width = consult_invite_width; - } - public String getConsult_invite_poptype() { - return consult_invite_poptype; - } - public void setConsult_invite_poptype(String consult_invite_poptype) { - this.consult_invite_poptype = consult_invite_poptype; - } - public String getConsult_invite_fontsize() { - return consult_invite_fontsize; - } - public void setConsult_invite_fontsize(String consult_invite_fontsize) { - this.consult_invite_fontsize = consult_invite_fontsize; - } - public String getConsult_invite_fontstyle() { - return consult_invite_fontstyle; - } - public void setConsult_invite_fontstyle(String consult_invite_fontstyle) { - this.consult_invite_fontstyle = consult_invite_fontstyle; - } - public String getConsult_invite_fontcolor() { - return consult_invite_fontcolor; - } - public void setConsult_invite_fontcolor(String consult_invite_fontcolor) { - this.consult_invite_fontcolor = consult_invite_fontcolor; - } - public String getConsult_invite_interval() { - return consult_invite_interval; - } - public void setConsult_invite_interval(String consult_invite_interval) { - this.consult_invite_interval = consult_invite_interval; - } - public String getConsult_invite_repeat() { - return consult_invite_repeat; - } - public void setConsult_invite_repeat(String consult_invite_repeat) { - this.consult_invite_repeat = consult_invite_repeat; - } - public String getConsult_invite_hight() { - return consult_invite_hight; - } - public void setConsult_invite_hight(String consult_invite_hight) { - this.consult_invite_hight = consult_invite_hight; - } - public String getSnsaccountid() { - return snsaccountid; - } - public void setSnsaccountid(String snsaccountid) { - this.snsaccountid = snsaccountid; - } - public String getConsult_vsitorbtn_position() { - return consult_vsitorbtn_position; - } - public void setConsult_vsitorbtn_position(String consult_vsitorbtn_position) { - this.consult_vsitorbtn_position = consult_vsitorbtn_position; - } - public String getConsult_vsitorbtn_content() { - return consult_vsitorbtn_content; - } - public void setConsult_vsitorbtn_content(String consult_vsitorbtn_content) { - this.consult_vsitorbtn_content = consult_vsitorbtn_content; - } - public String getConsult_vsitorbtn_right() { - return consult_vsitorbtn_right; - } - public void setConsult_vsitorbtn_right(String consult_vsitorbtn_right) { - this.consult_vsitorbtn_right = consult_vsitorbtn_right; - } - public String getConsult_vsitorbtn_left() { - return consult_vsitorbtn_left; - } - public void setConsult_vsitorbtn_left(String consult_vsitorbtn_left) { - this.consult_vsitorbtn_left = consult_vsitorbtn_left; - } - public String getConsult_vsitorbtn_top() { - return consult_vsitorbtn_top; - } - public void setConsult_vsitorbtn_top(String consult_vsitorbtn_top) { - this.consult_vsitorbtn_top = consult_vsitorbtn_top; - } - public String getConsult_vsitorbtn_color() { - return consult_vsitorbtn_color; - } - public void setConsult_vsitorbtn_color(String consult_vsitorbtn_color) { - this.consult_vsitorbtn_color = consult_vsitorbtn_color; - } - public String getConsult_vsitorbtn_model() { - return consult_vsitorbtn_model; - } - public void setConsult_vsitorbtn_model(String consult_vsitorbtn_model) { - this.consult_vsitorbtn_model = consult_vsitorbtn_model; - } - public String getConsult_vsitorbtn_bottom() { - return consult_vsitorbtn_bottom; - } - public void setConsult_vsitorbtn_bottom(String consult_vsitorbtn_bottom) { - this.consult_vsitorbtn_bottom = consult_vsitorbtn_bottom; - } - public String getConsult_invite_backimg() { - return consult_invite_backimg; - } - public void setConsult_invite_backimg(String consult_invite_backimg) { - this.consult_invite_backimg = consult_invite_backimg; - } - public String getDatadept() { - return datadept; - } - public void setDatadept(String datadept) { - this.datadept = datadept; - } - public String getAgent_online() { - return agent_online; - } - public void setAgent_online(String agent_online) { - this.agent_online = agent_online; - } - public String getConsult_dialog_color() { - return consult_dialog_color; - } - public void setConsult_dialog_color(String consult_dialog_color) { - this.consult_dialog_color = consult_dialog_color; - } - public String getConsult_dialog_logo() { - return consult_dialog_logo; - } - public void setConsult_dialog_logo(String consult_dialog_logo) { - this.consult_dialog_logo = consult_dialog_logo; - } - public String getConsult_dialog_headimg() { - return consult_dialog_headimg; - } - public void setConsult_dialog_headimg(String consult_dialog_headimg) { - this.consult_dialog_headimg = consult_dialog_headimg; - } - public int getConsult_vsitorbtn_display() { - return consult_vsitorbtn_display; - } - public void setConsult_vsitorbtn_display(int consult_vsitorbtn_display) { - this.consult_vsitorbtn_display = consult_vsitorbtn_display; - } - public String getDialog_name() { - return dialog_name; - } - public void setDialog_name(String dialog_name) { - this.dialog_name = dialog_name; - } - public String getDialog_address() { - return dialog_address; - } - public void setDialog_address(String dialog_address) { - this.dialog_address = dialog_address; - } - public String getDialog_phone() { - return dialog_phone; - } - public void setDialog_phone(String dialog_phone) { - this.dialog_phone = dialog_phone; - } - public String getDialog_mail() { - return dialog_mail; - } - public void setDialog_mail(String dialog_mail) { - this.dialog_mail = dialog_mail; - } - public String getDialog_introduction() { - return dialog_introduction; - } - public void setDialog_introduction(String dialog_introduction) { - this.dialog_introduction = dialog_introduction; - } - public String getDialog_message() { - return dialog_message; - } - public void setDialog_message(String dialog_message) { - this.dialog_message = dialog_message; - } - public String getDialog_ad() { - return dialog_ad; - } - public void setDialog_ad(String dialog_ad) { - this.dialog_ad = dialog_ad; - } - public boolean isConsult_invite_enable() { - return consult_invite_enable; - } - public void setConsult_invite_enable(boolean consult_invite_enable) { - this.consult_invite_enable = consult_invite_enable; - } - public String getConsult_invite_accept() { - return consult_invite_accept; - } - public void setConsult_invite_accept(String consult_invite_accept) { - this.consult_invite_accept = consult_invite_accept; - } - public String getConsult_invite_later() { - return consult_invite_later; - } - public void setConsult_invite_later(String consult_invite_later) { - this.consult_invite_later = consult_invite_later; - } - public int getConsult_invite_delay() { - return consult_invite_delay; - } - public void setConsult_invite_delay(int consult_invite_delay) { - this.consult_invite_delay = consult_invite_delay; - } - public String getConsult_invite_bg() { - return consult_invite_bg; - } - public void setConsult_invite_bg(String consult_invite_bg) { - this.consult_invite_bg = consult_invite_bg; - } - public boolean isLeavemessage() { - return leavemessage; - } - public void setLeavemessage(boolean leavemessage) { - this.leavemessage = leavemessage; - } - public boolean isLvmname() { - return lvmname; - } - public void setLvmname(boolean lvmname) { - this.lvmname = lvmname; - } - public boolean isLvmphone() { - return lvmphone; - } - public void setLvmphone(boolean lvmphone) { - this.lvmphone = lvmphone; - } - public boolean isLvmemail() { - return lvmemail; - } - public void setLvmemail(boolean lvmemail) { - this.lvmemail = lvmemail; - } - public boolean isLvmaddress() { - return lvmaddress; - } - public void setLvmaddress(boolean lvmaddress) { - this.lvmaddress = lvmaddress; - } - public boolean isLvmcontent() { - return lvmcontent; - } - public void setLvmcontent(boolean lvmcontent) { - this.lvmcontent = lvmcontent; - } - public String getLvmopentype() { - return lvmopentype; - } - public void setLvmopentype(String lvmopentype) { - this.lvmopentype = lvmopentype; - } - public boolean isSkill() { - return skill; - } - public void setSkill(boolean skill) { - this.skill = skill; - } - - public boolean isLvmqq() { - return lvmqq; - } - public void setLvmqq(boolean lvmqq) { - this.lvmqq = lvmqq; - } - public String getConsult_skill_logo() { - return consult_skill_logo; - } - public void setConsult_skill_logo(String consult_skill_logo) { - this.consult_skill_logo = consult_skill_logo; - } - public String getConsult_skill_title() { - return consult_skill_title; - } - public void setConsult_skill_title(String consult_skill_title) { - this.consult_skill_title = consult_skill_title; - } - public String getConsult_skill_img() { - return consult_skill_img; - } - public void setConsult_skill_img(String consult_skill_img) { - this.consult_skill_img = consult_skill_img; - } - public String getConsult_skill_msg() { - return consult_skill_msg; - } - public void setConsult_skill_msg(String consult_skill_msg) { - this.consult_skill_msg = consult_skill_msg; - } - public int getConsult_skill_numbers() { - return consult_skill_numbers; - } - public void setConsult_skill_numbers(int consult_skill_numbers) { - this.consult_skill_numbers = consult_skill_numbers; - } - public int getConsult_skill_maxagent() { - return consult_skill_maxagent; - } - public void setConsult_skill_maxagent(int consult_skill_maxagent) { - this.consult_skill_maxagent = consult_skill_maxagent; - } - public String getConsult_skill_bottomtitle() { - return consult_skill_bottomtitle; - } - public void setConsult_skill_bottomtitle(String consult_skill_bottomtitle) { - this.consult_skill_bottomtitle = consult_skill_bottomtitle; - } - public boolean isAi() { - return ai; - } - public void setAi(boolean ai) { - this.ai = ai; - } - public boolean isAifirst() { - return aifirst; - } - public void setAifirst(boolean aifirst) { - this.aifirst = aifirst; - } - public boolean isAisearch() { - return aisearch; - } - public void setAisearch(boolean aisearch) { - this.aisearch = aisearch; - } - public String getAimsg() { - return aimsg; - } - public void setAimsg(String aimsg) { - this.aimsg = aimsg; - } - public String getAisuccesstip() { - return aisuccesstip; - } - public void setAisuccesstip(String aisuccesstip) { - this.aisuccesstip = aisuccesstip; - } - public String getAiname() { - return ainame; - } - public void setAiname(String ainame) { - this.ainame = ainame; - } - public boolean isConsult_info() { - return consult_info; - } - public void setConsult_info(boolean consult_info) { - this.consult_info = consult_info; - } - public boolean isConsult_info_name() { - return consult_info_name; - } - public void setConsult_info_name(boolean consult_info_name) { - this.consult_info_name = consult_info_name; - } - public boolean isConsult_info_email() { - return consult_info_email; - } - public void setConsult_info_email(boolean consult_info_email) { - this.consult_info_email = consult_info_email; - } - public boolean isConsult_info_phone() { - return consult_info_phone; - } - public void setConsult_info_phone(boolean consult_info_phone) { - this.consult_info_phone = consult_info_phone; - } - public boolean isConsult_info_resion() { - return consult_info_resion; - } - public void setConsult_info_resion(boolean consult_info_resion) { - this.consult_info_resion = consult_info_resion; - } - public String getConsult_info_message() { - return consult_info_message; - } - public void setConsult_info_message(String consult_info_message) { - this.consult_info_message = consult_info_message; - } - public boolean isConsult_info_cookies() { - return consult_info_cookies; - } - public void setConsult_info_cookies(boolean consult_info_cookies) { - this.consult_info_cookies = consult_info_cookies; - } - public boolean isRecordhis() { - return recordhis; - } - public void setRecordhis(boolean recordhis) { - this.recordhis = recordhis; - } - public boolean isTraceuser() { - return traceuser; - } - public void setTraceuser(boolean traceuser) { - this.traceuser = traceuser; - } - public boolean isConsult_skill_agent() { - return consult_skill_agent; - } - public void setConsult_skill_agent(boolean consult_skill_agent) { - this.consult_skill_agent = consult_skill_agent; - } - public boolean isOnlyareaskill() { - return onlyareaskill; - } - public void setOnlyareaskill(boolean onlyareaskill) { - this.onlyareaskill = onlyareaskill; - } - public String getAreaskilltipmsg() { - return areaskilltipmsg; - } - public void setAreaskilltipmsg(String areaskilltipmsg) { - this.areaskilltipmsg = areaskilltipmsg; - } - public String getAiid() { - return aiid; - } - public void setAiid(String aiid) { - this.aiid = aiid; - } - public int getMaxwordsnum() { - return maxwordsnum; - } - public void setMaxwordsnum(int maxwordsnum) { - this.maxwordsnum = maxwordsnum; - } - public String getAgentshortcutkey() { - return agentshortcutkey; - } - public void setAgentshortcutkey(String agentshortcutkey) { - this.agentshortcutkey = agentshortcutkey; - } - public String getUsershortcutkey() { - return usershortcutkey; - } - public void setUsershortcutkey(String usershortcutkey) { - this.usershortcutkey = usershortcutkey; - } - public boolean isCtrlenter() { - return ctrlenter; - } - public void setCtrlenter(boolean ctrlenter) { - this.ctrlenter = ctrlenter; - } + private boolean ctrlenter; //启用 CTRL+Enter发送消息 - public boolean isConsult_skill_fixed() { - return consult_skill_fixed; - } + private boolean whitelist_mode; - public void setConsult_skill_fixed(boolean consult_skill_fixed) { - this.consult_skill_fixed = consult_skill_fixed; - } + private String consult_invite_position; + private String consult_invite_color; + private String consult_invite_right; + private String consult_invite_left; + private String consult_invite_bottom; + private String consult_invite_top; + private Date create_time; + private String name; + private String consult_invite_width; + private String consult_invite_poptype; + private String consult_invite_fontsize; + private String consult_invite_fontstyle; + private String consult_invite_fontcolor; + private String consult_invite_interval; + private String consult_invite_repeat; + private String consult_invite_hight; + private String snsaccountid; + private String consult_vsitorbtn_position; + private String consult_vsitorbtn_content; + private String consult_vsitorbtn_right; + private String consult_vsitorbtn_left; + private String consult_vsitorbtn_top; + private String consult_vsitorbtn_color; + private String consult_vsitorbtn_model; + private String consult_vsitorbtn_bottom; + private String consult_invite_backimg; - public String getConsult_skill_fixed_id() { - return consult_skill_fixed_id; - } + /** + * 技能组设置 + */ + private boolean consult_skill_fixed; // 是否绑定单一技能组 + private String consult_skill_fixed_id; // 绑定单一技能组,技能组ID + private String consult_skill_logo; //显示技能组 logo + private String consult_skill_title; //显示技能组标题 + private String consult_skill_img; //显示技能组 图片 + private String consult_skill_msg; //显示技能组 提示信息 + private int consult_skill_numbers; //显示最大 分组数 + private int consult_skill_maxagent; //每个技能组最多显示多少坐席 + private String consult_skill_bottomtitle; //显示技能组底部标题 + private boolean consult_skill_agent; //是否显示技能组下的坐席 - public void setConsult_skill_fixed_id(String consult_skill_fixed_id) { - this.consult_skill_fixed_id = consult_skill_fixed_id; - } + private int consult_vsitorbtn_display; + + private boolean recordhis; //记录访客的网页访问记录 + private boolean traceuser; //实时追踪访客 + + private int maxwordsnum; //允许访客端输入的最大文本字数 + + + private String consult_dialog_color; + private String consult_dialog_logo; + private String consult_dialog_headimg; + private String dialog_name; + private String dialog_address; + private String dialog_phone; + private String dialog_mail; + private String dialog_introduction; + private String dialog_message; + private String dialog_ad; + + private String lvmopentype; //留言板弹出方式 + private boolean leavemessage; //启用留言功能 + private boolean lvmname; + private boolean lvmphone; + private boolean lvmemail; + private boolean lvmaddress; + private boolean lvmqq; + private boolean lvmcontent = true; + private boolean skill; //启用技能组功能 + + private boolean onlyareaskill; //只显示地区技能组 , 无地区技能组是 提示消息,不显示公共技能组 + private String areaskilltipmsg;//未配置地区技能组是提示消息 + + private boolean consult_info; //启用咨询信息收集功能 + private boolean consult_info_cookies; //启用Cookies存储用户录入的信息, 最长有效时间是 3600秒,超时需要重新填写 + private boolean consult_info_name;//填写姓名 + private boolean consult_info_email; //填写 邮件地址 + private boolean consult_info_phone;//填写 电话号码 + private boolean consult_info_resion; //填写咨询问题 + private String consult_info_message; //咨询窗口显示的欢迎语 + + private String agentshortcutkey; //坐席回复快捷键 + private String usershortcutkey; //访客快捷键 + + private boolean ai; //是否启用 AI + private boolean aifirst; //AI优先接入 + private boolean aisearch; //AI允许使用 搜索引擎, 例如百度 等 + private String aimsg; //AI欢迎信息,可以使用 HTML + private String aisuccesstip;//AI服务连接成功的消息提示 + private String ainame; //AI服务 昵称 + + private String aiid; //默认的机器人 + + private String datadept; + private String agent_online; + + + @Id + @Column(length = 32) + @GeneratedValue(generator = "system-uuid") + @GenericGenerator(name = "system-uuid", strategy = "uuid") + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getImpid() { + return impid; + } + + public void setImpid(String impid) { + this.impid = impid; + } + + public String getOrgi() { + return orgi; + } + + public void setOrgi(String orgi) { + this.orgi = orgi; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getProcessid() { + return processid; + } + + public void setProcessid(String processid) { + this.processid = processid; + } + + public String getShares() { + return shares; + } + + public void setShares(String shares) { + this.shares = shares; + } + + public Date getUpdate_time() { + return update_time; + } + + public void setUpdate_time(Date update_time) { + this.update_time = update_time; + } + + public String getUpdate_user() { + return update_user; + } + + public void setUpdate_user(String update_user) { + this.update_user = update_user; + } + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getWfstatus() { + return wfstatus; + } + + public void setWfstatus(String wfstatus) { + this.wfstatus = wfstatus; + } + + public String getConsult_invite_model() { + return consult_invite_model; + } + + public void setConsult_invite_model(String consult_invite_model) { + this.consult_invite_model = consult_invite_model; + } + + public String getConsult_invite_content() { + return consult_invite_content; + } + + public void setConsult_invite_content(String consult_invite_content) { + this.consult_invite_content = consult_invite_content; + } + + public String getConsult_invite_position() { + return consult_invite_position; + } + + public void setConsult_invite_position(String consult_invite_position) { + this.consult_invite_position = consult_invite_position; + } + + public String getConsult_invite_color() { + return consult_invite_color; + } + + public void setConsult_invite_color(String consult_invite_color) { + this.consult_invite_color = consult_invite_color; + } + + public String getConsult_invite_right() { + return consult_invite_right; + } + + public void setConsult_invite_right(String consult_invite_right) { + this.consult_invite_right = consult_invite_right; + } + + public String getConsult_invite_left() { + return consult_invite_left; + } + + public void setConsult_invite_left(String consult_invite_left) { + this.consult_invite_left = consult_invite_left; + } + + public String getConsult_invite_bottom() { + return consult_invite_bottom; + } + + public void setConsult_invite_bottom(String consult_invite_bottom) { + this.consult_invite_bottom = consult_invite_bottom; + } + + public String getConsult_invite_top() { + return consult_invite_top; + } + + public void setConsult_invite_top(String consult_invite_top) { + this.consult_invite_top = consult_invite_top; + } + + public Date getCreate_time() { + return create_time; + } + + public void setCreate_time(Date create_time) { + this.create_time = create_time; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getConsult_invite_width() { + return consult_invite_width; + } + + public void setConsult_invite_width(String consult_invite_width) { + this.consult_invite_width = consult_invite_width; + } + + public String getConsult_invite_poptype() { + return consult_invite_poptype; + } + + public void setConsult_invite_poptype(String consult_invite_poptype) { + this.consult_invite_poptype = consult_invite_poptype; + } + + public String getConsult_invite_fontsize() { + return consult_invite_fontsize; + } + + public void setConsult_invite_fontsize(String consult_invite_fontsize) { + this.consult_invite_fontsize = consult_invite_fontsize; + } + + public String getConsult_invite_fontstyle() { + return consult_invite_fontstyle; + } + + public void setConsult_invite_fontstyle(String consult_invite_fontstyle) { + this.consult_invite_fontstyle = consult_invite_fontstyle; + } + + public String getConsult_invite_fontcolor() { + return consult_invite_fontcolor; + } + + public void setConsult_invite_fontcolor(String consult_invite_fontcolor) { + this.consult_invite_fontcolor = consult_invite_fontcolor; + } + + public String getConsult_invite_interval() { + return consult_invite_interval; + } + + public void setConsult_invite_interval(String consult_invite_interval) { + this.consult_invite_interval = consult_invite_interval; + } + + public String getConsult_invite_repeat() { + return consult_invite_repeat; + } + + public void setConsult_invite_repeat(String consult_invite_repeat) { + this.consult_invite_repeat = consult_invite_repeat; + } + + public String getConsult_invite_hight() { + return consult_invite_hight; + } + + public void setConsult_invite_hight(String consult_invite_hight) { + this.consult_invite_hight = consult_invite_hight; + } + + public String getSnsaccountid() { + return snsaccountid; + } + + public void setSnsaccountid(String snsaccountid) { + this.snsaccountid = snsaccountid; + } + + public String getConsult_vsitorbtn_position() { + return consult_vsitorbtn_position; + } + + public void setConsult_vsitorbtn_position(String consult_vsitorbtn_position) { + this.consult_vsitorbtn_position = consult_vsitorbtn_position; + } + + public String getConsult_vsitorbtn_content() { + return consult_vsitorbtn_content; + } + + public void setConsult_vsitorbtn_content(String consult_vsitorbtn_content) { + this.consult_vsitorbtn_content = consult_vsitorbtn_content; + } + + public String getConsult_vsitorbtn_right() { + return consult_vsitorbtn_right; + } + + public void setConsult_vsitorbtn_right(String consult_vsitorbtn_right) { + this.consult_vsitorbtn_right = consult_vsitorbtn_right; + } + + public String getConsult_vsitorbtn_left() { + return consult_vsitorbtn_left; + } + + public void setConsult_vsitorbtn_left(String consult_vsitorbtn_left) { + this.consult_vsitorbtn_left = consult_vsitorbtn_left; + } + + public String getConsult_vsitorbtn_top() { + return consult_vsitorbtn_top; + } + + public void setConsult_vsitorbtn_top(String consult_vsitorbtn_top) { + this.consult_vsitorbtn_top = consult_vsitorbtn_top; + } + + public String getConsult_vsitorbtn_color() { + return consult_vsitorbtn_color; + } + + public void setConsult_vsitorbtn_color(String consult_vsitorbtn_color) { + this.consult_vsitorbtn_color = consult_vsitorbtn_color; + } + + public String getConsult_vsitorbtn_model() { + return consult_vsitorbtn_model; + } + + public void setConsult_vsitorbtn_model(String consult_vsitorbtn_model) { + this.consult_vsitorbtn_model = consult_vsitorbtn_model; + } + + public String getConsult_vsitorbtn_bottom() { + return consult_vsitorbtn_bottom; + } + + public void setConsult_vsitorbtn_bottom(String consult_vsitorbtn_bottom) { + this.consult_vsitorbtn_bottom = consult_vsitorbtn_bottom; + } + + public String getConsult_invite_backimg() { + return consult_invite_backimg; + } + + public void setConsult_invite_backimg(String consult_invite_backimg) { + this.consult_invite_backimg = consult_invite_backimg; + } + + public String getDatadept() { + return datadept; + } + + public void setDatadept(String datadept) { + this.datadept = datadept; + } + + public String getAgent_online() { + return agent_online; + } + + public void setAgent_online(String agent_online) { + this.agent_online = agent_online; + } + + public String getConsult_dialog_color() { + return consult_dialog_color; + } + + public void setConsult_dialog_color(String consult_dialog_color) { + this.consult_dialog_color = consult_dialog_color; + } + + public String getConsult_dialog_logo() { + return consult_dialog_logo; + } + + public void setConsult_dialog_logo(String consult_dialog_logo) { + this.consult_dialog_logo = consult_dialog_logo; + } + + public String getConsult_dialog_headimg() { + return consult_dialog_headimg; + } + + public void setConsult_dialog_headimg(String consult_dialog_headimg) { + this.consult_dialog_headimg = consult_dialog_headimg; + } + + public int getConsult_vsitorbtn_display() { + return consult_vsitorbtn_display; + } + + public void setConsult_vsitorbtn_display(int consult_vsitorbtn_display) { + this.consult_vsitorbtn_display = consult_vsitorbtn_display; + } + + public String getDialog_name() { + return dialog_name; + } + + public void setDialog_name(String dialog_name) { + this.dialog_name = dialog_name; + } + + public String getDialog_address() { + return dialog_address; + } + + public void setDialog_address(String dialog_address) { + this.dialog_address = dialog_address; + } + + public String getDialog_phone() { + return dialog_phone; + } + + public void setDialog_phone(String dialog_phone) { + this.dialog_phone = dialog_phone; + } + + public String getDialog_mail() { + return dialog_mail; + } + + public void setDialog_mail(String dialog_mail) { + this.dialog_mail = dialog_mail; + } + + public String getDialog_introduction() { + return dialog_introduction; + } + + public void setDialog_introduction(String dialog_introduction) { + this.dialog_introduction = dialog_introduction; + } + + public String getDialog_message() { + return dialog_message; + } + + public void setDialog_message(String dialog_message) { + this.dialog_message = dialog_message; + } + + public String getDialog_ad() { + return dialog_ad; + } + + public void setDialog_ad(String dialog_ad) { + this.dialog_ad = dialog_ad; + } + + public boolean isConsult_invite_enable() { + return consult_invite_enable; + } + + public void setConsult_invite_enable(boolean consult_invite_enable) { + this.consult_invite_enable = consult_invite_enable; + } + + public String getConsult_invite_accept() { + return consult_invite_accept; + } + + public void setConsult_invite_accept(String consult_invite_accept) { + this.consult_invite_accept = consult_invite_accept; + } + + public String getConsult_invite_later() { + return consult_invite_later; + } + + public void setConsult_invite_later(String consult_invite_later) { + this.consult_invite_later = consult_invite_later; + } + + public int getConsult_invite_delay() { + return consult_invite_delay; + } + + public void setConsult_invite_delay(int consult_invite_delay) { + this.consult_invite_delay = consult_invite_delay; + } + + public String getConsult_invite_bg() { + return consult_invite_bg; + } + + public void setConsult_invite_bg(String consult_invite_bg) { + this.consult_invite_bg = consult_invite_bg; + } + + public boolean isLeavemessage() { + return leavemessage; + } + + public void setLeavemessage(boolean leavemessage) { + this.leavemessage = leavemessage; + } + + public boolean isLvmname() { + return lvmname; + } + + public void setLvmname(boolean lvmname) { + this.lvmname = lvmname; + } + + public boolean isLvmphone() { + return lvmphone; + } + + public void setLvmphone(boolean lvmphone) { + this.lvmphone = lvmphone; + } + + public boolean isLvmemail() { + return lvmemail; + } + + public void setLvmemail(boolean lvmemail) { + this.lvmemail = lvmemail; + } + + public boolean isLvmaddress() { + return lvmaddress; + } + + public void setLvmaddress(boolean lvmaddress) { + this.lvmaddress = lvmaddress; + } + + public boolean isLvmcontent() { + return lvmcontent; + } + + public void setLvmcontent(boolean lvmcontent) { + this.lvmcontent = lvmcontent; + } + + public String getLvmopentype() { + return lvmopentype; + } + + public void setLvmopentype(String lvmopentype) { + this.lvmopentype = lvmopentype; + } + + public boolean isSkill() { + return skill; + } + + public void setSkill(boolean skill) { + this.skill = skill; + } + + public boolean isLvmqq() { + return lvmqq; + } + + public void setLvmqq(boolean lvmqq) { + this.lvmqq = lvmqq; + } + + public String getConsult_skill_logo() { + return consult_skill_logo; + } + + public void setConsult_skill_logo(String consult_skill_logo) { + this.consult_skill_logo = consult_skill_logo; + } + + public String getConsult_skill_title() { + return consult_skill_title; + } + + public void setConsult_skill_title(String consult_skill_title) { + this.consult_skill_title = consult_skill_title; + } + + public String getConsult_skill_img() { + return consult_skill_img; + } + + public void setConsult_skill_img(String consult_skill_img) { + this.consult_skill_img = consult_skill_img; + } + + public String getConsult_skill_msg() { + return consult_skill_msg; + } + + public void setConsult_skill_msg(String consult_skill_msg) { + this.consult_skill_msg = consult_skill_msg; + } + + public int getConsult_skill_numbers() { + return consult_skill_numbers; + } + + public void setConsult_skill_numbers(int consult_skill_numbers) { + this.consult_skill_numbers = consult_skill_numbers; + } + + public int getConsult_skill_maxagent() { + return consult_skill_maxagent; + } + + public void setConsult_skill_maxagent(int consult_skill_maxagent) { + this.consult_skill_maxagent = consult_skill_maxagent; + } + + public String getConsult_skill_bottomtitle() { + return consult_skill_bottomtitle; + } + + public void setConsult_skill_bottomtitle(String consult_skill_bottomtitle) { + this.consult_skill_bottomtitle = consult_skill_bottomtitle; + } + + public boolean isAi() { + return ai; + } + + public void setAi(boolean ai) { + this.ai = ai; + } + + public boolean isAifirst() { + return aifirst; + } + + public void setAifirst(boolean aifirst) { + this.aifirst = aifirst; + } + + public boolean isAisearch() { + return aisearch; + } + + public void setAisearch(boolean aisearch) { + this.aisearch = aisearch; + } + + public String getAimsg() { + return aimsg; + } + + public void setAimsg(String aimsg) { + this.aimsg = aimsg; + } + + public String getAisuccesstip() { + return aisuccesstip; + } + + public void setAisuccesstip(String aisuccesstip) { + this.aisuccesstip = aisuccesstip; + } + + public String getAiname() { + return ainame; + } + + public void setAiname(String ainame) { + this.ainame = ainame; + } + + public boolean isConsult_info() { + return consult_info; + } + + public void setConsult_info(boolean consult_info) { + this.consult_info = consult_info; + } + + public boolean isConsult_info_name() { + return consult_info_name; + } + + public void setConsult_info_name(boolean consult_info_name) { + this.consult_info_name = consult_info_name; + } + + public boolean isConsult_info_email() { + return consult_info_email; + } + + public void setConsult_info_email(boolean consult_info_email) { + this.consult_info_email = consult_info_email; + } + + public boolean isConsult_info_phone() { + return consult_info_phone; + } + + public void setConsult_info_phone(boolean consult_info_phone) { + this.consult_info_phone = consult_info_phone; + } + + public boolean isConsult_info_resion() { + return consult_info_resion; + } + + public void setConsult_info_resion(boolean consult_info_resion) { + this.consult_info_resion = consult_info_resion; + } + + public String getConsult_info_message() { + return consult_info_message; + } + + public void setConsult_info_message(String consult_info_message) { + this.consult_info_message = consult_info_message; + } + + public boolean isConsult_info_cookies() { + return consult_info_cookies; + } + + public void setConsult_info_cookies(boolean consult_info_cookies) { + this.consult_info_cookies = consult_info_cookies; + } + + public boolean isRecordhis() { + return recordhis; + } + + public void setRecordhis(boolean recordhis) { + this.recordhis = recordhis; + } + + public boolean isTraceuser() { + return traceuser; + } + + public void setTraceuser(boolean traceuser) { + this.traceuser = traceuser; + } + + public boolean isConsult_skill_agent() { + return consult_skill_agent; + } + + public void setConsult_skill_agent(boolean consult_skill_agent) { + this.consult_skill_agent = consult_skill_agent; + } + + public boolean isOnlyareaskill() { + return onlyareaskill; + } + + public void setOnlyareaskill(boolean onlyareaskill) { + this.onlyareaskill = onlyareaskill; + } + + public String getAreaskilltipmsg() { + return areaskilltipmsg; + } + + public void setAreaskilltipmsg(String areaskilltipmsg) { + this.areaskilltipmsg = areaskilltipmsg; + } + + public String getAiid() { + return aiid; + } + + public void setAiid(String aiid) { + this.aiid = aiid; + } + + public int getMaxwordsnum() { + return maxwordsnum; + } + + public void setMaxwordsnum(int maxwordsnum) { + this.maxwordsnum = maxwordsnum; + } + + public String getAgentshortcutkey() { + return agentshortcutkey; + } + + public void setAgentshortcutkey(String agentshortcutkey) { + this.agentshortcutkey = agentshortcutkey; + } + + public String getUsershortcutkey() { + return usershortcutkey; + } + + public void setUsershortcutkey(String usershortcutkey) { + this.usershortcutkey = usershortcutkey; + } + + public boolean isCtrlenter() { + return ctrlenter; + } + + public void setCtrlenter(boolean ctrlenter) { + this.ctrlenter = ctrlenter; + } + + public boolean isConsult_skill_fixed() { + return consult_skill_fixed; + } + + public void setConsult_skill_fixed(boolean consult_skill_fixed) { + this.consult_skill_fixed = consult_skill_fixed; + } + + public String getConsult_skill_fixed_id() { + return consult_skill_fixed_id; + } + + public void setConsult_skill_fixed_id(String consult_skill_fixed_id) { + this.consult_skill_fixed_id = consult_skill_fixed_id; + } + + public boolean isWhitelist_mode() { + return whitelist_mode; + } + + public void setWhitelist_mode(boolean whitelist_mode) { + this.whitelist_mode = whitelist_mode; + } } diff --git a/contact-center/app/src/main/resources/WEB-INF/data/templates/contacts_template.xls b/contact-center/app/src/main/resources/WEB-INF/data/templates/contacts_template.xls index 7480558e..3201ed19 100644 Binary files a/contact-center/app/src/main/resources/WEB-INF/data/templates/contacts_template.xls and b/contact-center/app/src/main/resources/WEB-INF/data/templates/contacts_template.xls differ diff --git a/contact-center/app/src/main/resources/templates/admin/webim/index.html b/contact-center/app/src/main/resources/templates/admin/webim/index.html index db38e817..401ce65e 100644 --- a/contact-center/app/src/main/resources/templates/admin/webim/index.html +++ b/contact-center/app/src/main/resources/templates/admin/webim/index.html @@ -158,6 +158,16 @@ +
+
+
+
无 +
+
+
+ +
+
2、选择入口颜色
@@ -474,7 +484,7 @@ function() { $("#ukefu-point-theme") .removeClass( - "ukefu-point-theme1 ukefu-point-theme2 ukefu-point-theme3") + "ukefu-point-theme1 ukefu-point-theme2 ukefu-point-theme3 ukefu-point-theme9") .addClass( $(this) .attr( diff --git a/contact-center/app/src/main/resources/templates/admin/webim/profile.html b/contact-center/app/src/main/resources/templates/admin/webim/profile.html index 407650e8..44022f4f 100644 --- a/contact-center/app/src/main/resources/templates/admin/webim/profile.html +++ b/contact-center/app/src/main/resources/templates/admin/webim/profile.html @@ -505,6 +505,19 @@
+
+
15、白名单模式
+
+
+
+

联系人访问才显示在线客服按钮

+
+
+ checked="checked"> +
+
+
+
diff --git a/contact-center/app/src/main/resources/templates/apps/agent/agentusers.html b/contact-center/app/src/main/resources/templates/apps/agent/agentusers.html index 0732cb6c..2792dd53 100644 --- a/contact-center/app/src/main/resources/templates/apps/agent/agentusers.html +++ b/contact-center/app/src/main/resources/templates/apps/agent/agentusers.html @@ -33,7 +33,7 @@ <#list agentUserList as agentuser>
  • - + <#if agentuser.status?? && agentuser.status == 'end'> <#if agentuser.channel?? && agentuser.channel == "weixin"> diff --git a/contact-center/app/src/main/resources/templates/apps/agent/index.html b/contact-center/app/src/main/resources/templates/apps/agent/index.html index e6a64f71..ad15d0f9 100644 --- a/contact-center/app/src/main/resources/templates/apps/agent/index.html +++ b/contact-center/app/src/main/resources/templates/apps/agent/index.html @@ -153,6 +153,14 @@ } } + function cleanTopMsgTip(tip){ + var lastMsgNum = $(tip).find('.last-msg').text(); + if(lastMsgNum){ + var num = Number.parseInt(lastMsgNum); + Proxy.cleanTopMsgTip(num) + } + } + /** * 结束会话,RestAPI请求 * @param agentUserId diff --git a/contact-center/app/src/main/resources/templates/apps/cca/agentusers.html b/contact-center/app/src/main/resources/templates/apps/cca/agentusers.html index 9c5a58cb..d167526e 100644 --- a/contact-center/app/src/main/resources/templates/apps/cca/agentusers.html +++ b/contact-center/app/src/main/resources/templates/apps/cca/agentusers.html @@ -31,7 +31,7 @@ <#list agentUserList as agentuser>
  • - + <#if agentuser.status?? && agentuser.status == 'end'> <#if agentuser.channel?? && agentuser.channel == "weixin"> diff --git a/contact-center/app/src/main/resources/templates/apps/cca/index.html b/contact-center/app/src/main/resources/templates/apps/cca/index.html index fdd9dc6a..926206d7 100644 --- a/contact-center/app/src/main/resources/templates/apps/cca/index.html +++ b/contact-center/app/src/main/resources/templates/apps/cca/index.html @@ -134,5 +134,13 @@ otherTopicSearch(); } } + + function cleanTopMsgTip(tip){ + var lastMsgNum = $(tip).find('.last-msg').text(); + if(lastMsgNum){ + var num = Number.parseInt(lastMsgNum); + Proxy.cleanTopMsgTip(num) + } + } diff --git a/contact-center/app/src/main/resources/templates/apps/desktop/index.html b/contact-center/app/src/main/resources/templates/apps/desktop/index.html index 3b065544..9234e1c8 100644 --- a/contact-center/app/src/main/resources/templates/apps/desktop/index.html +++ b/contact-center/app/src/main/resources/templates/apps/desktop/index.html @@ -9,7 +9,10 @@
    -
    +
    +
    + +

    在线客服业务概况

    diff --git a/contact-center/app/src/main/resources/templates/apps/im/point.html b/contact-center/app/src/main/resources/templates/apps/im/point.html index b94f5659..0993e343 100644 --- a/contact-center/app/src/main/resources/templates/apps/im/point.html +++ b/contact-center/app/src/main/resources/templates/apps/im/point.html @@ -61,18 +61,39 @@ var protocol = window.location.protocol.replace(/:/g,''); document.cookie="" -function chatoperaInit(list){ -ajax({ -url: protocol + "://${hostname!''}<#if port?? && port != 80>:${port!''}/im/userinformation.html?sessionid=${sessionid!''}", -type:'POST', -data:{"userid":cskefuOnlineUserId,'uid':list.uid,'username':list.username,'cid':list.cid,'company_name':list.company_name,'sid':list.sid,'system_name':list.system_name}, -dataType:"json", -contentType: "application/json", -async:false, -success:function(res){ -} -}); -} + +function chatoperaInit(info) { + ajax({ + url: + protocol + "://${hostname!''}<#if port?? && port != 80>:${port!''}/im/chatoperainit.html?sessionid=${sessionid!''}", + type: "POST", + data: { + <#if inviteData.whitelist_mode == true > + whitelist_mode: ${inviteData.whitelist_mode}, + <#else> + whitelist_mode: false, + + userid: cskefuOnlineUserId, + uid: info.uid, + username: info.username, + cid: info.cid, + company_name: info.company_name, + sid: info.sid, + system_name: info.system_name + }, + dataType: "json", + contentType: "application/json", + async: false, + success: function(res) { + <#if inviteData.whitelist_mode == true > + if(res == 'usc'){ + document.getElementById("ukefu-point").style.display = "block" ; + } + + } + }); + } + <#assign style = 'text-align:center;height: 150px;border-radius: 30px;width: 40px;margin: 0px 5px 0 0; float:left ; word-wrap: break-word;overflow: hidden;font-size:15px;color:#FFFFFF;text-align: center;padding-top: 15px;border: 1px solid #DCDCDC;background-color:#008df3;'> <#if inviteData.consult_vsitorbtn_model?? && inviteData.consult_vsitorbtn_model == "2"> @@ -282,10 +303,10 @@ var cskefu = { "
    <#if inviteData.consult_skill_bottomtitle??>${inviteData.consult_skill_bottomtitle!''}
    "+ "
    " ; -<#if webimexist == true > + append(document.body, ''); append(document.body, "
    "); - + <#if inviteData?? && inviteData.skill == true && inviteData.consult_skill_fixed == false> document.getElementById("ukefu-im-point-text").onclick=function(){ if(document.getElementById("ichatContent").style.display == "none"){ @@ -295,11 +316,9 @@ var cskefu = { } } <#else> -<#if webimexist == true > document.getElementById("ukefu-point").onclick=function(){ cskefu.openChatDialog(); } - var inviteDialog = document.getElementById('ukefu-invite-dialog'); <#if phone?? && mobile == true> @@ -309,10 +328,9 @@ var cskefu = { var width = document.documentElement.clientWidth ; var top = (50 - 92*100/height)+"%"; var left = (50 - 210*100/width)+"%" ; -<#if webimexist == true > + inviteDialog.style.top = top ; inviteDialog.style.left = left ; - <#if inviteAd??> var inviteAdHtml = @@ -365,9 +383,11 @@ var cskefu = { display:function(){ cskefu.writepoint(); <#if !(inviteData.consult_vsitorbtn_display??) || (inviteData.consult_vsitorbtn_display?? && inviteData.consult_vsitorbtn_display == 0)> -<#if webimexist == true > -document.getElementById("ukefu-point").style.display = "block" ; - + + <#if inviteData?? && inviteData.consult_vsitorbtn_model != '9' && inviteData.whitelist_mode == false> + document.getElementById("ukefu-point").style.display = "block" ; + + <#if inviteData.consult_invite_enable> <#if inviteData.consult_invite_delay?? && inviteData.consult_invite_delay == 0> cskefu.writeinvite() ; @@ -433,17 +453,19 @@ function openAgentChatDialog(url){ return cskefu.openChatDialogWithURL(url); } -Fingerprint2.get({}, function(components){ - var glue = components.map(function (component) { return component.value }) - cskefuOnlineUserId = Fingerprint2.x64hash128(glue.join(''), 31) - cskefu.ajax(cskefu.in+"&userid="+cskefuOnlineUserId+"&t="+new Date().getTime() , function(data){ - if(data == "in"){}else{ - cskefu.display(); - cskefu.ping(); - cskefu.check(); - } +<#if webimexist == true > + Fingerprint2.get({}, function(components){ + var glue = components.map(function (component) { return component.value }) + cskefuOnlineUserId = Fingerprint2.x64hash128(glue.join(''), 31) + cskefu.ajax(cskefu.in+"&userid="+cskefuOnlineUserId+"&t="+new Date().getTime() , function(data){ + if(data == "in"){}else{ + cskefu.display(); + cskefu.ping(); + cskefu.check(); + } + }); }); -}); + var onlineAddress = protocol + "://${hostname!''}<#if port?? && port != 80 && port != 443>:${port!''}"; var newscript = document.createElement('script'); diff --git a/contact-center/app/src/main/resources/templates/resource/css/ukefu.html b/contact-center/app/src/main/resources/templates/resource/css/ukefu.html index 8c121447..7c380897 100644 --- a/contact-center/app/src/main/resources/templates/resource/css/ukefu.html +++ b/contact-center/app/src/main/resources/templates/resource/css/ukefu.html @@ -837,6 +837,11 @@ body .site-ukefu-nav .layui-nav-item{line-height: 40px} border: 1px solid #DCDCDC; background-color:#dddddd; } + +#ukefu-point .ukefu-point-theme9 { + display:none !important; +} + .ukefu-im-point .ukefu-point-theme3{ height: 70px; border-radius: 70px; diff --git a/contact-center/config/sql/cosinee-MySQL-slim.sql b/contact-center/config/sql/cosinee-MySQL-slim.sql index 28280e11..ce73b7f8 100644 --- a/contact-center/config/sql/cosinee-MySQL-slim.sql +++ b/contact-center/config/sql/cosinee-MySQL-slim.sql @@ -1537,6 +1537,7 @@ CREATE TABLE `uk_consult_invite` ( `usershortcutkey` varchar(32) DEFAULT NULL COMMENT '访客默认回复消息快捷键', `agentctrlenter` tinyint(4) DEFAULT '0' COMMENT '启用坐席端CTRL+Enter发送消息', `ctrlenter` tinyint(4) DEFAULT '0' COMMENT '启用访客端CTRL+Enter发送消息', + `whitelist_mode` tinyint(4) DEFAULT '0' COMMENT '启用白名单', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='访客网站配置表'; @@ -7941,6 +7942,29 @@ CREATE TABLE `uk_tableproperties` ( INSERT INTO `uk_tableproperties` (`ID`, `NAME`, `CODE`, `GROUPID`, `USERID`, `FIELDNAME`, `DATATYPECODE`, `DATATYPENAME`, `DBTABLEID`, `INDEXDATATYPE`, `PK`, `MODITS`, `INDEXFIELD`, `PLUGIN`, `ORGI`, `FKTABLE`, `FKPROPERTY`, `TABLENAME`, `viewtype`, `SORTINDEX`, `SYSTEMFIELD`, `INX`, `TOKEN`, `LENGTH`, `FIELDSTATUS`, `SELDATA`, `SELDATACODE`, `SELDATAKEY`, `SELDATAVALUE`, `SELDATATYPE`, `REFTBID`, `REFTPID`, `REFTYPE`, `REFTBNAME`, `REFTPNAME`, `REFTPTITLEFIELD`, `REFFK`, `DEFAULTSORT`, `DEFAULTVALUE`, `DEFAULTVALUETITLE`, `DEFAULTFIELDVALUE`, `MULTPARTFILE`, `UPLOADTYPE`, `cascadetype`, `title`, `DESCORDER`, `impfield`, `tokentype`, `phonenumber`, `phonetype`, `phonememo`, `secfield`, `secdistype`, `styletype`, `sysfield`) VALUES + ('2c9480886e91d9e5016e91f528ac018f', '性别', NULL, NULL, NULL, 'gender', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.contacts.sex', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528ac0190', '出生日期', NULL, NULL, NULL, 'cusbirthday', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 50, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528ac0192', '联系人类别', NULL, NULL, NULL, 'ckind', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.contacts.ckind', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528af019e', '电子邮件', NULL, NULL, NULL, 'email', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 128, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b001a0', '手机号码', NULL, NULL, NULL, 'mobileno', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 40, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b101a2', '办公电话', NULL, NULL, NULL, 'phone', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 40, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b301ab', '省', NULL, NULL, NULL, 'province', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.address.area', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b401ac', '市(区)县', NULL, NULL, NULL, 'city', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.address.area', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b401ad', '地址', NULL, NULL, NULL, 'address', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 65535, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b801bb', '最后联系时间', NULL, NULL, NULL, 'touchtime', 0, 'datetime', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 19, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b901be', '创建人', NULL, NULL, NULL, 'creater', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 0, '', NULL, NULL, '', 'userdata', NULL, NULL, NULL, NULL, NULL, 1, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b901c1', '联系人备注', NULL, NULL, NULL, 'memo', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528b901c3', '修改时间', NULL, NULL, NULL, 'updatetime', 0, 'datetime', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 19, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528ba01c6', '创建时间', NULL, NULL, NULL, 'createtime', 0, 'datetime', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 19, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528ba01c7', '联系人姓名', NULL, NULL, NULL, 'name', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, '', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528ba01ca', '分享给', NULL, NULL, NULL, 'shares', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528bb01d0', 'skypeid', NULL, NULL, NULL, 'skypeid', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 100, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528bb01d1', '人员id', NULL, NULL, NULL, 'wluid', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 100, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528bc01d2', '人员名称', NULL, NULL, NULL, 'wlusername', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528bc01d3', '公司id', NULL, NULL, NULL, 'wlcid', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 100, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528bc01d4', '公司名称', NULL, NULL, NULL, 'wlcompany_name', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528bc01d5', '子系统id', NULL, NULL, NULL, 'wlsid', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 100, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), + ('2c9480886e91d9e5016e91f528bc01d6', '子系统名称', NULL, NULL, NULL, 'wlsystem_name', 0, 'text', '2c9480886e91d9e5016e91f528ab018d', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), ('402870876e5d9773016e5e95575801c2', '企(事)业单位名称', NULL, NULL, NULL, 'name', 0, 'text', '402870876e5d9773016e5e95575601c0', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_entcustomer', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), ('402870876e5d9773016e5e95575801c3', '单位性质', NULL, NULL, NULL, 'etype', 0, 'text', '402870876e5d9773016e5e95575601c0', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_entcustomer', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.customer.etype', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), ('402870876e5d9773016e5e95575b01c4', '客户类别', NULL, NULL, NULL, 'ekind', 0, 'text', '402870876e5d9773016e5e95575601c0', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_entcustomer', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.contacts.entype', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), @@ -7958,23 +7982,6 @@ VALUES ('402870876e5d9773016e5e95576401f4', '修改时间', NULL, NULL, NULL, 'updatetime', 0, 'datetime', '402870876e5d9773016e5e95575601c0', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_entcustomer', NULL, 100, 0, 1, 0, 19, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), ('402870876e5d9773016e5e95576401f6', '创建时间', NULL, NULL, NULL, 'createtime', 0, 'datetime', '402870876e5d9773016e5e95575601c0', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_entcustomer', NULL, 100, 0, 1, 0, 19, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), ('402870876e5d9773016e5e95576401f9', '分享给', NULL, NULL, NULL, 'shares', 0, 'text', '402870876e5d9773016e5e95575601c0', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_entcustomer', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6350206', '联系人性别', NULL, NULL, NULL, 'gender', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.contacts.sex', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6350207', '出生日期', NULL, NULL, NULL, 'cusbirthday', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 50, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6360209', '联系人类别', NULL, NULL, NULL, 'ckind', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.contacts.ckind', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6370215', '电子邮件', NULL, NULL, NULL, 'email', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 128, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6370217', '手机号码', NULL, NULL, NULL, 'mobileno', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 40, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6370219', '办公电话', NULL, NULL, NULL, 'phone', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 40, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6380222', '省', NULL, NULL, NULL, 'province', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.address.area', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6380223', '市(区)县', NULL, NULL, NULL, 'city', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 1, 'com.dic.address.area', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d6380224', '地址', NULL, NULL, NULL, 'address', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 65535, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d63a0232', '最后联系时间', NULL, NULL, NULL, 'touchtime', 0, 'datetime', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 19, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d63a0235', '创建人', NULL, NULL, NULL, 'creater', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 60, 1, 0, '', NULL, NULL, '', 'userdata', NULL, NULL, NULL, NULL, NULL, 1, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d63b0238', '联系人备注', NULL, NULL, NULL, 'memo', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d63b023a', '修改时间', NULL, NULL, NULL, 'updatetime', 0, 'datetime', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 19, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d63b023d', '创建时间', NULL, NULL, NULL, 'createtime', 0, 'datetime', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 19, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d63b023e', '联系人名称', NULL, NULL, NULL, 'name', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, '', NULL, NULL, '', '', NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d63c0241', '分享给', NULL, NULL, NULL, 'shares', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 255, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), - ('402870876e5d9773016e5e95d63c0247', 'skypeid', NULL, NULL, NULL, 'skypeid', 0, 'text', '402870876e5d9773016e5e95d6350204', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_contacts', NULL, 100, 0, 1, 0, 100, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), ('402870876e5d9773016e5e9cc6380272', '坐席用户名', NULL, NULL, NULL, 'agentusername', 0, 'text', '402870876e5d9773016e5e9cc6370270', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_servicesummary', NULL, 100, 0, 1, 0, 100, 1, 0, '', NULL, NULL, '', 'userdata', NULL, NULL, NULL, NULL, NULL, 1, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), ('402870876e5d9773016e5e9cc6380275', '服务次数', NULL, NULL, NULL, 'times', 0, 'number', '402870876e5d9773016e5e9cc6370270', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_servicesummary', NULL, 100, 0, 1, 0, 10, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), ('402870876e5d9773016e5e9cc6390278', '用户名', NULL, NULL, NULL, 'username', 0, 'text', '402870876e5d9773016e5e9cc6370270', NULL, 0, 0, NULL, NULL, 'cskefu', NULL, NULL, 'uk_servicesummary', NULL, 100, 0, 1, 0, 100, 1, 0, NULL, NULL, NULL, '', NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, NULL, NULL, 1, NULL, NULL, 0, 0, 0, NULL, 0, NULL, NULL, 0, NULL, NULL, 0), @@ -8043,8 +8050,8 @@ CREATE TABLE `uk_tabletask` ( INSERT INTO `uk_tabletask` (`ID`, `NAME`, `SECURE`, `TASKSTATUS`, `TABLEDIRID`, `DBID`, `CODE`, `GROUPID`, `CREATER`, `CREATERNAME`, `TASKTYPE`, `TASKNAME`, `TASKPLAN`, `CONFIGURE`, `SECURECONF`, `USERID`, `PREVIEWTEMPLET`, `LISTBLOCKTEMPLET`, `TABLENAME`, `TABLETYPE`, `STARTINDEX`, `UPDATETIME`, `UPDATETIMENUMBER`, `DATASQL`, `DATABASETASK`, `DRIVERPLUGIN`, `ORGI`, `WORKFLOW`, `FROMDB`, `tabtype`, `pid`, `secmenuid`, `reportid`, `eventname`, `tltemplet`, `timeline`, `tbversion`, `LASTUPDATE`, `CREATETIME`) VALUES + ('2c9480886e91d9e5016e91f528ab018d', 'uk_contacts', NULL, NULL, '0', NULL, NULL, NULL, '2c9480886e91d9e5016e91db8df10017', 'xianli', NULL, 'uk_contacts', NULL, NULL, NULL, NULL, NULL, NULL, 'uk_contacts', '1', 0, '2019-11-22 15:13:13', 0, NULL, NULL, NULL, 'cskefu', 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, '2019-11-22 15:13:13'), ('402870876e5d9773016e5e95575601c0', 'uk_entcustomer', NULL, NULL, '0', NULL, NULL, NULL, '402870876e4f5bdd016e4f77eb6f0075', 'xiaoxiao', NULL, 'uk_entcustomer', NULL, NULL, NULL, NULL, NULL, NULL, 'uk_entcustomer', '1', 0, '2019-11-12 15:47:53', 0, NULL, NULL, NULL, 'cskefu', 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, '2019-11-12 15:47:53'), - ('402870876e5d9773016e5e95d6350204', 'uk_contacts', NULL, NULL, '0', NULL, NULL, NULL, '402870876e4f5bdd016e4f77eb6f0075', 'xiaoxiao', NULL, 'uk_contacts', NULL, NULL, NULL, NULL, NULL, NULL, 'uk_contacts', '1', 0, '2019-11-12 15:48:28', 0, NULL, NULL, NULL, 'cskefu', 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, '2019-11-12 15:48:28'), ('402870876e5d9773016e5e9cc6370270', 'uk_servicesummary', NULL, NULL, '0', NULL, NULL, NULL, '402870876e4f5bdd016e4f77eb6f0075', 'xiaoxiao', NULL, 'uk_servicesummary', NULL, NULL, NULL, NULL, NULL, NULL, 'uk_servicesummary', '1', 0, '2019-11-12 15:56:02', 0, NULL, NULL, NULL, 'cskefu', 0, 0, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0, NULL, '2019-11-12 15:56:02'); -- ---------------------------- diff --git a/docker-compose.yml b/docker-compose.yml index 1b76b0c2..7b2a98e5 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -48,6 +48,8 @@ services: - CSKEFU_MODULE_CONTACTS=true - CSKEFU_MODULE_CHATBOT=true - SKYPE_CHANNEL_CRM=${SKYPE_CHANNEL_CRM:-placeholder} + - BOT_THRESHOLD_FAQ_BEST_REPLY=${BOT_THRESHOLD_FAQ_BEST_REPLY:-0.8} + - BOT_THRESHOLD_FAQ_SUGG_REPLY=${BOT_THRESHOLD_FAQ_SUGG_REPLY:-0.6} depends_on: - mysql - redis diff --git a/public/plugins/chatbot/classes/ChatbotConstants.java b/public/plugins/chatbot/classes/ChatbotConstants.java index df6c5994..1cfd6222 100644 --- a/public/plugins/chatbot/classes/ChatbotConstants.java +++ b/public/plugins/chatbot/classes/ChatbotConstants.java @@ -17,5 +17,7 @@ package com.chatopera.cc.plugins.chatbot; public class ChatbotConstants { public static final String BOT_PROVIDER = "BOT_PROVIDER"; + public static final String THRESHOLD_FAQ_BEST_REPLY = "BOT_THRESHOLD_FAQ_BEST_REPLY"; + public static final String THRESHOLD_FAQ_SUGG_REPLY = "BOT_THRESHOLD_FAQ_SUGG_REPLY"; public static final String DEFAULT_BOT_PROVIDER = "https://bot.chatopera.com"; } diff --git a/public/plugins/chatbot/classes/ChatbotEventSubscription.java b/public/plugins/chatbot/classes/ChatbotEventSubscription.java index 74f30088..c507bfa9 100644 --- a/public/plugins/chatbot/classes/ChatbotEventSubscription.java +++ b/public/plugins/chatbot/classes/ChatbotEventSubscription.java @@ -27,6 +27,7 @@ import com.chatopera.cc.persistence.repository.ChatbotRepository; import com.chatopera.cc.socketio.message.ChatMessage; import com.chatopera.cc.util.SerializeUtil; import com.chatopera.cc.util.SystemEnvHelper; +import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import org.slf4j.Logger; @@ -53,9 +54,17 @@ public class ChatbotEventSubscription { @Autowired private ChatbotRepository chatbotRes; + // 机器人服务提供地址 private final static String botServiecProvider = SystemEnvHelper.getenv( ChatbotConstants.BOT_PROVIDER, ChatbotConstants.DEFAULT_BOT_PROVIDER); + // FAQ最佳回复阀值 + private final static double thresholdFaqBestReply = Double.parseDouble(SystemEnvHelper.getenv( + ChatbotConstants.THRESHOLD_FAQ_BEST_REPLY, "0.8")); + // FAQ建议回复阀值 + private final static double thresholdFaqSuggReply = Double.parseDouble(SystemEnvHelper.getenv( + ChatbotConstants.THRESHOLD_FAQ_SUGG_REPLY, "0.6")); + @Autowired private ChatbotProxy chatbotProxy; @@ -82,12 +91,14 @@ public class ChatbotEventSubscription { .findOne(request.getAiid()); logger.info( - "[chat] chat request baseUrl {}, chatbot {}, fromUserId {}, textMessage {}", botServiecProvider, c.getName(), + "[chat] chat request baseUrl {}, chatbot {}, fromUserId {}, textMessage {}", botServiecProvider, + c.getName(), request.getUserid(), request.getMessage()); // Get response from Conversational Engine. com.chatopera.bot.sdk.Chatbot bot = new com.chatopera.bot.sdk.Chatbot( c.getClientId(), c.getSecret(), botServiecProvider); - JSONObject result = bot.conversation(request.getUserid(), request.getMessage()); + JSONObject result = bot.conversation( + request.getUserid(), request.getMessage(), thresholdFaqBestReply, thresholdFaqSuggReply); // parse response if (result != null) { @@ -95,31 +106,53 @@ public class ChatbotEventSubscription { if (result.getInt(RestUtils.RESP_KEY_RC) == 0) { // reply JSONObject data = result.getJSONObject("data"); - ChatMessage resp = new ChatMessage(); - resp.setCalltype(MainContext.CallType.OUT.toString()); - resp.setAppid(resp.getAppid()); - resp.setOrgi(request.getOrgi()); - resp.setAiid(request.getAiid()); - resp.setMessage(data.getString("string")); - resp.setTouser(request.getUserid()); - resp.setAgentserviceid(request.getAgentserviceid()); - resp.setMsgtype(request.getMsgtype()); - resp.setUserid(request.getUserid()); - resp.setType(request.getType()); - resp.setChannel(request.getChannel()); - if (data.has("params")) { - resp.setExpmsg(data.get("params").toString()); - } - resp.setContextid(request.getContextid()); - resp.setSessionid(request.getSessionid()); - resp.setUsession(request.getUsession()); - resp.setUsername(c.getName()); - resp.setUpdatetime(System.currentTimeMillis()); + if (data.has("logic_is_fallback")) { + ChatMessage resp = new ChatMessage(); + resp.setCalltype(MainContext.CallType.OUT.toString()); + resp.setAppid(resp.getAppid()); + resp.setOrgi(request.getOrgi()); + resp.setAiid(request.getAiid()); + resp.setMessage(data.getString("string")); - // 更新聊天机器人累计值 - updateAgentUserWithRespData(request.getUserid(), request.getOrgi(), data); - // 保存并发送 - chatbotProxy.saveAndPublish(resp); + if (data.getBoolean("logic_is_fallback")) { + // 兜底回复,检查FAQ + JSONArray faqReplies = data.getJSONArray("faq"); + JSONArray suggs = new JSONArray(); + for (int i = 0; i < faqReplies.length(); i++) { + JSONObject sugg = new JSONObject(); + JSONObject faqReply = faqReplies.getJSONObject(i); + sugg.put("label", Integer.toString(i + 1) + ". " + faqReply.getString("post")); + sugg.put("text", faqReply.getString("post")); + sugg.put("type", "qlist"); + suggs.put(sugg); + } + if (suggs.length() > 0) { + // TODO set help message on View Page + resp.setMessage("为您找到如下信息:"); + resp.setExpmsg(suggs.toString()); + } + } else if (data.has("params")) { + resp.setExpmsg(data.get("params").toString()); + } + + resp.setTouser(request.getUserid()); + resp.setAgentserviceid(request.getAgentserviceid()); + resp.setMsgtype(request.getMsgtype()); + resp.setUserid(request.getUserid()); + resp.setType(request.getType()); + resp.setChannel(request.getChannel()); + + resp.setContextid(request.getContextid()); + resp.setSessionid(request.getSessionid()); + resp.setUsession(request.getUsession()); + resp.setUsername(c.getName()); + resp.setUpdatetime(System.currentTimeMillis()); + + // 更新聊天机器人累计值 + updateAgentUserWithRespData(request.getUserid(), request.getOrgi(), data); + // 保存并发送 + chatbotProxy.saveAndPublish(resp); + } } else { logger.warn("[chat] can not get expected response {}", result.toString()); } diff --git a/public/plugins/chatbot/classes/PluginDescriptor.java b/public/plugins/chatbot/classes/PluginDescriptor.java index 26e4d345..097a4424 100644 --- a/public/plugins/chatbot/classes/PluginDescriptor.java +++ b/public/plugins/chatbot/classes/PluginDescriptor.java @@ -51,6 +51,8 @@ public class PluginDescriptor implements IPluginDescriptor { public Map getEnvironmentVariables() { Map env = new HashMap<>(); env.put(ChatbotConstants.BOT_PROVIDER, "https://bot.chatopera.com"); + env.put(ChatbotConstants.THRESHOLD_FAQ_BEST_REPLY, "0.8"); + env.put(ChatbotConstants.THRESHOLD_FAQ_SUGG_REPLY, "0.6"); return env; } } \ No newline at end of file diff --git a/sample.env b/sample.env index 1cbf281c..f3474a3b 100644 --- a/sample.env +++ b/sample.env @@ -10,4 +10,6 @@ ACTIVEMQ_PORT1=8051 ACTIVEMQ_PORT2=8052 ACTIVEMQ_PORT3=8053 DB_PASSWD=123456 -LOG_LEVEL=INFO \ No newline at end of file +LOG_LEVEL=INFO +BOT_THRESHOLD_FAQ_BEST_REPLY=0.8 +BOT_THRESHOLD_FAQ_SUGG_REPLY=0.6 \ No newline at end of file