');
+
+ box.find('.chat-content').append(content);
+ output(box, 'chat-block')
+ }
+
+ function showExtmsgBody(username, createtime, message, json) {
+ var expmsg = JSON.parse(json.replace(/"/g,'"'));
+
+ var type = expmsg[0].type;
+ var content;
+ if (type == 'button') {
+ content = createButton(message, expmsg);
+ } else if (type == 'qlist') {
+ content = createQList(message, expmsg);
+ } else if (type == 'card') {
+ content = createCard(message, expmsg);
+ }
+
+ var box = $('')
+
+ var box = $('

');
+
+ box.find('.chat-content').append(content);
+ output(box, 'chat-block')
+ }
+
window.onbeforeunload = function () {
}
@@ -301,7 +435,6 @@ html
}
body.ukefu-point-text(style='overflow:hidden; background:#E8E8E8')
- - var dialog_headimg= inviteData.consult_dialog_headimg ? '/res/image.html?id=' + inviteData.consult_dialog_headimg : '/images/agent.png'
.large.ukefu-im-theme(style='background: white;', class=(type == 'text' ? 'ukefu-theme-border-' + inviteData.consult_dialog_color : ''))
#containter.clearfix
#header(class='theme' + inviteData.consult_dialog_color)
@@ -347,20 +480,36 @@ html
include ../media/message
else
.clearfix.chat-block
- .chat-left
- img.user-img(src=dialog_headimg , alt="")
- .chat-message
- label.user
- if chatMessage.chatype == 'aireply'
- | #{inviteData.ainame ? inviteData.ainame : '小松'}
- else
- | #{chatMessage.username}
+ // for debugging purpose
+ //script.
+ // console.log("chatMessage.message", '#{chatMessage.message.replaceAll("\\r|\\n", "")}'.replace(/\r?\n|\r/g, ''))
+ // console.log("chatMessage.username", "#{chatMessage.username}")
+ // var expmsg = "#{chatMessage.expmsg}";
+ // if(expmsg) console.log("chatMessage.expmsg", JSON.parse(expmsg.replace(/"/g,'"')))
+ // // && (chatMessage.message == "{CLEAR} 混合类型消息" || chatMessage.message == "{CLEAR} 图文消息")
+ - var createtime = pugHelper.formatDate('yyyy-MM-dd HH:mm:ss', chatMessage.createtime)
+ if chatMessage.expmsg
+ script.
+ try {
+ showExtmsgBody("#{chatMessage.username}", "#{createtime}", "#{chatMessage.message}", "#{chatMessage.expmsg}");
+ } catch (e) {
+ console.log("unexpected result", e)
+ }
+ else
+ .chat-left
+ img.user-img(src=dialog_headimg , alt="")
+ .chat-message
+ label.user
+ if chatMessage.chatype == 'aireply'
+ | #{inviteData.ainame ? inviteData.ainame : '小松'}
+ else
+ | #{chatMessage.username}
+ label.time= createtime
+ .chatting-left
+ i.arrow
+ .chat-content
+ include ../media/message
- label.time= pugHelper.formatDate('yyyy-MM-dd HH:mm:ss', chatMessage.createtime)
- .chatting-left
- i.arrow
- .chat-content
- include ../media/message
.chat-bottom#bottom
textarea#message(name='content', style='visibility:hidden;')
.btn-push.clearfix
@@ -556,92 +705,7 @@ html
}
});
- function createButton(message, data) {
- var element = $('
')
- var list = element.find('.button-box');
- for (let i = 0; i < data.length; i++) {
- var item = data[i];
- var allowClick = true;
- var btn = $('
' + item.label + '
');
- var regClick = function (key) {
- btn.click(function () {
- if (allowClick) {
- allowClick = false;
- socket.emit('message', {
- appid: "#{appid}",
- userid: "#{userid}",
- type: "message",
- session: "#{sessionid}",
- orgi: "#{orgi}",
- message: key
- });
- }
- });
- }
- regClick(item.text);
- list.append(btn);
- }
- return element;
- }
-
- function createQList(message, data) {
- var element = $('
')
- var list = element.find('.button-box');
- for (let i = 0; i < data.length; i++) {
- var item = data[i];
- var btn = $('
' + item.label + '
');
- var regClick = function (key) {
- btn.click(function () {
- socket.emit('message', {
- appid: "#{appid}",
- userid: "#{userid}",
- type: "message",
- session: "#{sessionid}",
- orgi: "#{orgi}",
- message: key
- });
- });
- }
- regClick(item.text);
- list.append(btn);
- }
-
- return element;
- }
-
- function createCard(message, data) {
- let item = data[0];
-
- let html = '
' + item.title + '
' + item.summary + '
'
-
- var element = $(html);
- element.click(function () {
- window.open(item.hyperlink);
- })
-
- return element;
- }
-
- function showExtmsg(username, createtime, message, json) {
- var expmsg = JSON.parse(json);
-
- var type = expmsg[0].type;
- var content;
- if (type == 'button') {
- content = createButton(message, expmsg);
- } else if (type == 'qlist') {
- content = createQList(message, expmsg);
- } else if (type == 'card') {
- content = createCard(message, expmsg);
- }
-
- var box = $('

');
-
- box.find('.chat-content').append(content);
-
- output(box, 'chat-block')
- }
function sendDisconnect() {
socket.disconnect();
@@ -666,28 +730,6 @@ html
}
editor.html('');
}
- function output(message, clazz, scroll, msgType) {
- if (clazz == "message connect-message") {
- var messages = document.getElementsByClassName("connect-message");
- for (inx = 0; inx < messages.length;) {
- document.getElementById('above').removeChild(messages[inx]);
- inx++;
- }
- }
- var element = $("
");
- element.append(message);
- $('#above').append(element);
- if (scroll == null || scroll == true) {
- if (msgType && msgType == "image") {
- chatScorllBottom("above")
- } else {
- document.getElementById("above").scrollTop = document.getElementById("above").scrollHeight
- }
- }
- }
- function update(id, message) {
- document.getElementById(id).innerHTML = message;
- }
var message = {
// text:data.message,
diff --git a/contact-center/app/src/main/resources/templates/apps/im/chatbot/mobile.pug b/contact-center/app/src/main/resources/templates/apps/im/chatbot/mobile.pug
index 611b3f03..b283d9b9 100644
--- a/contact-center/app/src/main/resources/templates/apps/im/chatbot/mobile.pug
+++ b/contact-center/app/src/main/resources/templates/apps/im/chatbot/mobile.pug
@@ -1,4 +1,6 @@
doctype html
+// constants
+- var dialog_headimg= inviteData.consult_dialog_headimg ? '/res/image.html?id=' + inviteData.consult_dialog_headimg : '/images/agent.png'
html
head
meta(charset='utf-8')
@@ -142,210 +144,29 @@ html
wordinx = wordinx + 2 + obj.length;
}
}
- $(document).ready(function () {
- window.addEventListener('resize', function () {
- if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') {
- window.setTimeout(function () {
- document.activeElement.scrollIntoViewIfNeeded()
- }, 0)
- }
- });
- // 在输入框获取焦点, 键盘弹起后, 真的是一行代码
- $(document).on('submit.form.data-api', '[data-toggle="ajax-form"]', function (e) {
- var formValue = $(e.target);
- $(this).ajaxSubmit({
- url: formValue.attr("action"),
- success: function (data) {
-
- },
- error: function (xhr, type, s) {
- //notification("",false); //结束
- }
- });
- return false;
- });
- });
-
- style.
- .msg-btn {
- border: #4598ee 1px solid;
- padding: 5px;
- margin: 5px;
- min-width: 125px;
- text-align: center;
- display: inline-block;
- background-color: #e6f2ff;
- cursor: default;
- }
-
- .msg-list {
- color: #4598ee
- }
-
- .msg-card {
- display: inline-block;
- color: #000000;
- }
-
- .msg-crad-right {
- position: relative;
- left: 10px;
- width: 170px;
- height: 60px;
- overflow: hidden;
- text-overflow: ellipsis;
- }
-
- .card-box {
- cursor: default;
- width: 250px;
- height: 72px;
- padding: 6px;
- line-height: 20px;
- }
-
- // kindeditor
- body.ukefu-im-theme.ukefu-point-text(style='width:100%;overflow:hidden;height:100%;max-height:100%;position: fixed;/* 或者scroll */-webkit-overflow-scrolling: touch;/* 解决ios滑动不流畅问题 */')
- - var dialog_headimg= inviteData.consult_dialog_headimg ? '/res/image.html?id=' + inviteData.consult_dialog_headimg : '/images/agent.png'
- #header(class="theme" + inviteData.consult_dialog_color)
- img(src=(inviteData.consult_dialog_logo ? '/res/image.html?id=' + inviteData.consult_dialog_logo : '/images/logo.png'), style='height:50px;padding:10px;')
- .ukefu-func-tab
- ul
- if models.contains("chatbot") && inviteData.ai && inviteData.ai == true && aiid
- if exchange || exchange == "true"
- li
- a(href="/im/index.html?appid=" + appid + "&orgi=" + orgi + (aiid ? '&aiid=' + aiid : '') + "&ai=false" + (client ? '&client=' + client : '') + (type ? '&type=' + type : '') + (skill ? '&skill=' + skill : '') + (agent ? '&agent=' + agent : '') + "&userid=" + userid + "&sessionid=" + sessionid + "&t=" + pugHelper.currentTimeMillis()) 人工客服
- li.cur
- a(href="javascript:void(0)") 智能坐席
- else
- li.cur
- a(href="javascript:void(0)") 智能坐席
- #cooperation.ukefu-cooperation(style='display:none;z-index: 100;background-color: #ffffff;position: fixed;left: 0px;width: 100%;top: 0px;top:0px;height: 100%;')
- .ukefu-image-canvas#ukefu-image-content(style='margin-top:2px;')
- img#ukefu_img_ctx(style='max-width: 100%;max-height: 100%;')
- .drawBoard(style='position: absolute;left: 0;top: 0;margin-top:2px;z-index: 998;')
- canvas#canvas-borad.brushBorad 你的浏览器不支持 canvas 绘图
- div(style='position: absolute;bottom: 10px;width: 100%;text-align: center;z-index:10000')
- button#offcoop-btn(style='border-color:#009688 !important;color:#FFFFFF;display: inline-block;height: 38px;line-height: 38px;padding: 0 18px;background-color: #009688;color: #fff;white-space: nowrap;text-align: center;font-size: 14px;margin-right:10px;border: none;border-radius: 2px;cursor: pointer;opacity: .9;filter: alpha(opacity=90);background-color: #377FED !important;border:1px solid #FFFFFF;', onclick='offCoop();') 退出协作
- .chat-above#above
- .clearfix.message.welcome
- span#welcome-message= inviteData.dialog_message ? inviteData.dialog_message : '欢迎您来咨询!欢迎使用春松客服!如需帮助请联系 info@chatopera.com'
- for chatMessage in pugHelper.reverse(chatMessageList.content)
- if chatMessage.userid && userid && chatMessage.calltype && chatMessage.calltype == "呼入"
- .clearfix.chat-block
- .chat-right
- img.user-img(src="/im/img/user.png", alt="")
- .chat-message
- label.time= pugHelper.formatDate('yyyy-MM-dd HH:mm:ss', chatMessage.createtime)
- label.user #{chatMessage.username}
- .chatting-right
- i.arrow(class="arrow" + inviteData.consult_dialog_color)
- .chat-content(class="theme" + inviteData.consult_dialog_color)
- include ../media/message
- else
- .clearfix.chat-block
- .chat-left
- img.user-img(src=dialog_headimg, alt="")
- .chat-message
- label.user= chatMessage.username
- label.time= pugHelper.formatDate('yyyy-MM-dd HH:mm:ss', chatMessage.createtime)
- .chatting-left
- i.arrow
- .chat-content
- include ../media/message
- .mobile-chat-bottom#bottom
- textarea#message(name='content', maxlength=(inviteData.maxwordsnum > 0 ? inviteData.maxwordsnum : 300))
- .btn-push.clearfix
- img#facedialog(onclick='return openFaceDialog()', src='/im/img/face.png', style='width:32px;height:32px;')
- a(href='javascript:void(0)', onclick='sendMessage();return false;')
- img(src='/im/img/send.png', style='width:32px;height:32px;')
- #faceindex(style='display:none;height:200px;position: absolute;bottom: 0px;width:100%;overflow-x:auto;')
- table.ke-table(cellpadding='0', cellspacing='0', border='0', style='min-width:100%;')
- tbody
- for row in pugHelper.range(0,4)
- tr
- for col in pugHelper.range(0,20)
- - var emoid=row * 20 + col;
- td.ke-cell
- span.ke-img
- img(src="/im/js/kindeditor/plugins/emoticons/images/" + emoid + ".png", border="0", alt="", onclick="insertImg('" + emoid + "')")
-
- script.
- var service_end = false;
- // 调查问卷
- var diaShade = document.getElementById('diaShade');
- var dialogWrap = document.getElementById('dialogWrap');
- function popup(para) {
- diaShade.style.display = para;
- dialogWrap.style.display = para;
- }
-
- function chatScorllBottom(box) {
- var imgdefereds = []; //定义一个操作数组
- $('#' + box + ' .ukefu-media-image').each(function () { //遍历所有图片,将图片
- var dfd = $.Deferred(); //定义一个将要完成某个操作的对象
- $(this).bind('load', function () {
- dfd.resolve(); //图片加载完成后,表示操作成功
- });
- if (this.complete) { //如果图片加载状态为完成,那么也标识操作成功
- setTimeout(function () {
- dfd.resolve();
- }, 1000);
- }
- imgdefereds.push(dfd); //将所有操作对象放入数组中
- })
- $.when.apply(null, imgdefereds).done(function () { //注册所有操作完成后的执行方法
- document.getElementById(box).scrollTop = document.getElementById(box).scrollHeight
- });
- }
-
- chatScorllBottom('above')
- // 参数连接
- // 参数连接
- var hostname = location.hostname;
- var protocol = window.location.protocol.replace(/:/g, '');
- var username = encodeURIComponent("#{username}");
- var socket = io(protocol + '://' + hostname + ':#{port}/im/chatbot?userid=#{userid}&orgi=#{orgi}&session=#{sessionid}&appid=#{appid}&osname=!{osname}&browser=!{browser}!{skill ? "&skill=" + skill : ""}!{username ? "&nickname='+username+'" : ""}!{agent ? "&agent=" + agent : ""}!{title ? "&title=" + encodeURIComponent(title) : ""}!{traceid ? "&url=" + url : ""}!{traceid ? "&traceid=" + traceid : ""}!{aiid ? "&aiid=" + aiid : ""}', {transports: ['websocket', 'polling']});
- socket.on('connect', function () {
- //service.sendRequestMessage();
- //output('
'+ new Date().format("yyyy-MM-dd hh:mm:ss") + ' 开始沟通' +'' , 'message callOutConnect-message');
- })
- socket.on("agentstatus", function (data) {
- document.getElementById('connect-message').innerHTML = data.message;
- })
- socket.on("status", function (data) {
- output('
' + data.message + '', 'message connect-message');
- if (data.messageType == "end") {
- service_end = true;
- //editor.readonly();
- }
- if (document.getElementById("agentserviceid")) {
- document.getElementById("agentserviceid").value = data.agentserviceid;
- }
- })
- socket.on('message', function (data) {
- var chat = document.getElementsByClassName('chatting-left').innerText;
- data.createtime = dayjs(data.createtime).format('YYYY-MM-DD HH:mm:ss');
- chat = data.message;
- if (data.msgtype == "image") {
- chat = "

";
- } else if (data.msgtype == "cooperation") {
- chat = "
您收到一个协作邀请,点击进入协作";
- } else if (data.msgtype == "action") {
- //检查访客是否在协作页面上,如果在协作页面上,就开始执行重绘,否则不做处理
- drawCanvasImage(data.attachmentid);
- }
- if (data.calltype == "呼入") {
- output('

', "chat-block", data.msgtype);
- } else if (data.calltype == "呼出") {
- if (data.expmsg) {
- showExtmsg(data.username, data.createtime, data.message, data.expmsg);
- } else {
- output('

', "chat-block", data.msgtype);
+ function output(message, clazz, msgType) {
+ if (clazz == "message connect-message") {
+ var messages = document.getElementsByClassName("connect-message");
+ for (inx = 0; inx < messages.length;) {
+ document.getElementById('above').removeChild(messages[inx]);
+ inx++;
}
}
- });
+ var element = $("
");
+ element.append(message);
+ $('#above').append(element);
+ if (msgType && msgType == "image") {
+ chatScorllBottom("above")
+ } else {
+ document.getElementById("above").scrollTop = document.getElementById("above").scrollHeight
+ }
+ //$("#welcome-message").html(document.getElementById('above').scrollHeight);
+ }
+
+ function update(id, message) {
+ document.getElementById(id).innerHTML = message;
+ }
function showExtmsg(username, createtime, message, json) {
var expmsg = JSON.parse(json);
@@ -367,6 +188,26 @@ html
output(box, 'chat-block')
}
+ function showExtmsgBody(username, createtime, message, json) {
+ var expmsg = JSON.parse(json.replace(/"/g,'"'));
+
+ var type = expmsg[0].type;
+ var content;
+ if (type == 'button') {
+ content = createButton(message, expmsg);
+ } else if (type == 'qlist') {
+ content = createQList(message, expmsg);
+ } else if (type == 'card') {
+ content = createCard(message, expmsg);
+ }
+
+ var box = $('

');
+
+ box.find('.chat-content').append(content);
+
+ output(box, 'chat-block')
+ }
+
function createButton(message, data) {
var element = $('
')
var list = element.find('.button-box');
@@ -434,6 +275,223 @@ html
return element;
}
+ $(document).ready(function () {
+ window.addEventListener('resize', function () {
+ if (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA') {
+ window.setTimeout(function () {
+ document.activeElement.scrollIntoViewIfNeeded()
+ }, 0)
+ }
+ });
+ // 在输入框获取焦点, 键盘弹起后, 真的是一行代码
+
+ $(document).on('submit.form.data-api', '[data-toggle="ajax-form"]', function (e) {
+ var formValue = $(e.target);
+ $(this).ajaxSubmit({
+ url: formValue.attr("action"),
+ success: function (data) {
+
+ },
+ error: function (xhr, type, s) {
+ //notification("",false); //结束
+ }
+ });
+ return false;
+ });
+ });
+
+ style.
+ .msg-btn {
+ border: #4598ee 1px solid;
+ padding: 5px;
+ margin: 5px;
+ min-width: 125px;
+ text-align: center;
+ display: inline-block;
+ background-color: #e6f2ff;
+ cursor: default;
+ }
+
+ .msg-list {
+ color: #4598ee
+ }
+
+ .msg-card {
+ display: inline-block;
+ color: #000000;
+ }
+
+ .msg-crad-right {
+ position: relative;
+ left: 10px;
+ width: 170px;
+ height: 60px;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+
+ .card-box {
+ cursor: default;
+ width: 250px;
+ height: 72px;
+ padding: 6px;
+ line-height: 20px;
+ }
+
+ // kindeditor
+ body.ukefu-im-theme.ukefu-point-text(style='width:100%;overflow:hidden;height:100%;max-height:100%;position: fixed;/* 或者scroll */-webkit-overflow-scrolling: touch;/* 解决ios滑动不流畅问题 */')
+ #header(class="theme" + inviteData.consult_dialog_color)
+ img(src=(inviteData.consult_dialog_logo ? '/res/image.html?id=' + inviteData.consult_dialog_logo : '/images/logo.png'), style='height:50px;padding:10px;')
+ .ukefu-func-tab
+ ul
+ if models.contains("chatbot") && inviteData.ai && inviteData.ai == true && aiid
+ if exchange || exchange == "true"
+ li
+ a(href="/im/index.html?appid=" + appid + "&orgi=" + orgi + (aiid ? '&aiid=' + aiid : '') + "&ai=false" + (client ? '&client=' + client : '') + (type ? '&type=' + type : '') + (skill ? '&skill=' + skill : '') + (agent ? '&agent=' + agent : '') + "&userid=" + userid + "&sessionid=" + sessionid + "&t=" + pugHelper.currentTimeMillis()) 人工客服
+ li.cur
+ a(href="javascript:void(0)") 智能坐席
+ else
+ li.cur
+ a(href="javascript:void(0)") 智能坐席
+ #cooperation.ukefu-cooperation(style='display:none;z-index: 100;background-color: #ffffff;position: fixed;left: 0px;width: 100%;top: 0px;top:0px;height: 100%;')
+ .ukefu-image-canvas#ukefu-image-content(style='margin-top:2px;')
+ img#ukefu_img_ctx(style='max-width: 100%;max-height: 100%;')
+ .drawBoard(style='position: absolute;left: 0;top: 0;margin-top:2px;z-index: 998;')
+ canvas#canvas-borad.brushBorad 你的浏览器不支持 canvas 绘图
+ div(style='position: absolute;bottom: 10px;width: 100%;text-align: center;z-index:10000')
+ button#offcoop-btn(style='border-color:#009688 !important;color:#FFFFFF;display: inline-block;height: 38px;line-height: 38px;padding: 0 18px;background-color: #009688;color: #fff;white-space: nowrap;text-align: center;font-size: 14px;margin-right:10px;border: none;border-radius: 2px;cursor: pointer;opacity: .9;filter: alpha(opacity=90);background-color: #377FED !important;border:1px solid #FFFFFF;', onclick='offCoop();') 退出协作
+ .chat-above#above
+ .clearfix.message.welcome
+ span#welcome-message= inviteData.dialog_message ? inviteData.dialog_message : '欢迎您来咨询!欢迎使用春松客服!如需帮助请联系 info@chatopera.com'
+ for chatMessage in pugHelper.reverse(chatMessageList.content)
+ if chatMessage.userid && userid && chatMessage.calltype && chatMessage.calltype == "呼入"
+ .clearfix.chat-block
+ .chat-right
+ img.user-img(src="/im/img/user.png", alt="")
+ .chat-message
+ label.time= pugHelper.formatDate('yyyy-MM-dd HH:mm:ss', chatMessage.createtime)
+ label.user #{chatMessage.username}
+ .chatting-right
+ i.arrow(class="arrow" + inviteData.consult_dialog_color)
+ .chat-content(class="theme" + inviteData.consult_dialog_color)
+ include ../media/message
+ else
+ .clearfix.chat-block
+ - var createtime = pugHelper.formatDate('yyyy-MM-dd HH:mm:ss', chatMessage.createtime)
+ if chatMessage.expmsg
+ script.
+ try {
+ showExtmsgBody("#{chatMessage.username}", "#{createtime}", "#{chatMessage.message}", "#{chatMessage.expmsg}");
+ } catch (e) {
+ console.log("unexpected result", e)
+ }
+ else
+ .chat-left
+ img.user-img(src=dialog_headimg, alt="")
+ .chat-message
+ label.user= chatMessage.username
+ label.time= pugHelper.formatDate('yyyy-MM-dd HH:mm:ss', chatMessage.createtime)
+ .chatting-left
+ i.arrow
+ .chat-content
+ include ../media/message
+
+ .mobile-chat-bottom#bottom
+ textarea#message(name='content', maxlength=(inviteData.maxwordsnum > 0 ? inviteData.maxwordsnum : 300))
+ .btn-push.clearfix
+ img#facedialog(onclick='return openFaceDialog()', src='/im/img/face.png', style='width:32px;height:32px;')
+ a(href='javascript:void(0)', onclick='sendMessage();return false;')
+ img(src='/im/img/send.png', style='width:32px;height:32px;')
+ #faceindex(style='display:none;height:200px;position: absolute;bottom: 0px;width:100%;overflow-x:auto;')
+ table.ke-table(cellpadding='0', cellspacing='0', border='0', style='min-width:100%;')
+ tbody
+ for row in pugHelper.range(0,4)
+ tr
+ for col in pugHelper.range(0,20)
+ - var emoid=row * 20 + col;
+ td.ke-cell
+ span.ke-img
+ img(src="/im/js/kindeditor/plugins/emoticons/images/" + emoid + ".png", border="0", alt="", onclick="insertImg('" + emoid + "')")
+
+ script.
+ var service_end = false;
+ // 调查问卷
+ var diaShade = document.getElementById('diaShade');
+ var dialogWrap = document.getElementById('dialogWrap');
+ function popup(para) {
+ diaShade.style.display = para;
+ dialogWrap.style.display = para;
+ }
+
+ function chatScorllBottom(box) {
+ var imgdefereds = []; //定义一个操作数组
+ $('#' + box + ' .ukefu-media-image').each(function () { //遍历所有图片,将图片
+ var dfd = $.Deferred(); //定义一个将要完成某个操作的对象
+ $(this).bind('load', function () {
+ dfd.resolve(); //图片加载完成后,表示操作成功
+ });
+ if (this.complete) { //如果图片加载状态为完成,那么也标识操作成功
+ setTimeout(function () {
+ dfd.resolve();
+ }, 1000);
+ }
+ imgdefereds.push(dfd); //将所有操作对象放入数组中
+ })
+ $.when.apply(null, imgdefereds).done(function () { //注册所有操作完成后的执行方法
+ document.getElementById(box).scrollTop = document.getElementById(box).scrollHeight
+ });
+ }
+
+ chatScorllBottom('above')
+ // 参数连接
+ // 参数连接
+ var hostname = location.hostname;
+ var protocol = window.location.protocol.replace(/:/g, '');
+ var username = encodeURIComponent("#{username}");
+ var socket = io(protocol + '://' + hostname + ':#{port}/im/chatbot?userid=#{userid}&orgi=#{orgi}&session=#{sessionid}&appid=#{appid}&osname=!{osname}&browser=!{browser}!{skill ? "&skill=" + skill : ""}!{username ? "&nickname='+username+'" : ""}!{agent ? "&agent=" + agent : ""}!{title ? "&title=" + encodeURIComponent(title) : ""}!{traceid ? "&url=" + url : ""}!{traceid ? "&traceid=" + traceid : ""}!{aiid ? "&aiid=" + aiid : ""}', {transports: ['websocket', 'polling']});
+ socket.on('connect', function () {
+ //service.sendRequestMessage();
+ //output('
'+ new Date().format("yyyy-MM-dd hh:mm:ss") + ' 开始沟通' +'' , 'message callOutConnect-message');
+ })
+
+ socket.on("agentstatus", function (data) {
+ document.getElementById('connect-message').innerHTML = data.message;
+ })
+
+ socket.on("status", function (data) {
+ output('
' + data.message + '', 'message connect-message');
+ if (data.messageType == "end") {
+ service_end = true;
+ //editor.readonly();
+ }
+ if (document.getElementById("agentserviceid")) {
+ document.getElementById("agentserviceid").value = data.agentserviceid;
+ }
+ })
+
+ socket.on('message', function (data) {
+ var chat = document.getElementsByClassName('chatting-left').innerText;
+ data.createtime = dayjs(data.createtime).format('YYYY-MM-DD HH:mm:ss');
+ chat = data.message;
+ if (data.msgtype == "image") {
+ chat = "

";
+ } else if (data.msgtype == "cooperation") {
+ chat = "
您收到一个协作邀请,点击进入协作";
+ } else if (data.msgtype == "action") {
+ //检查访客是否在协作页面上,如果在协作页面上,就开始执行重绘,否则不做处理
+ drawCanvasImage(data.attachmentid);
+ }
+ if (data.calltype == "呼入") {
+ output('

', "chat-block", data.msgtype);
+ } else if (data.calltype == "呼出") {
+ if (data.expmsg) {
+ showExtmsg(data.username, data.createtime, data.message, data.expmsg);
+ } else {
+ output('

', "chat-block", data.msgtype);
+ }
+ }
+ });
+
socket.on('disconnect', function () {
output('
连接坐席失败,在线咨询服务不可用', 'message connect-message');
});
@@ -457,6 +515,7 @@ html
});
}
+
function drawCanvasImage(fileid) {
var canvas = document.getElementById("canvas-borad");
@@ -504,27 +563,7 @@ html
});
}
}
- function output(message, clazz, msgType) {
- if (clazz == "message connect-message") {
- var messages = document.getElementsByClassName("connect-message");
- for (inx = 0; inx < messages.length;) {
- document.getElementById('above').removeChild(messages[inx]);
- inx++;
- }
- }
- var element = $("
");
- element.append(message);
- $('#above').append(element);
- if (msgType && msgType == "image") {
- chatScorllBottom("above")
- } else {
- document.getElementById("above").scrollTop = document.getElementById("above").scrollHeight
- }
- //$("#welcome-message").html(document.getElementById('above').scrollHeight);
- }
- function update(id, message) {
- document.getElementById(id).innerHTML = message;
- }
+
autoTextarea(document.getElementById("message"));// 调用
$('#message').click(function () {
wordinx = getPositionForTextArea(document.getElementById('message'));
diff --git a/public/plugins/chatbot/classes/ChatbotEventSubscription.java b/public/plugins/chatbot/classes/ChatbotEventSubscription.java
index 24f875fc..fbad7eef 100644
--- a/public/plugins/chatbot/classes/ChatbotEventSubscription.java
+++ b/public/plugins/chatbot/classes/ChatbotEventSubscription.java
@@ -20,6 +20,7 @@ import com.chatopera.bot.exception.ChatbotException;
import com.chatopera.bot.sdk.Response;
import com.chatopera.cc.basic.Constants;
import com.chatopera.cc.basic.MainContext;
+import com.chatopera.cc.basic.MainUtils;
import com.chatopera.cc.cache.Cache;
import com.chatopera.cc.model.Chatbot;
import com.chatopera.cc.persistence.repository.AgentUserRepository;
@@ -126,7 +127,9 @@ public class ChatbotEventSubscription {
ChatMessage respHelp = new ChatMessage();
JSONArray respParams = new JSONArray();
if (!StringUtils.equals(MainContext.ChannelType.WEBIM.toString(), c.getChannel())) {
- // 非 WEBIM 情况,比如 Facebook Messenger,使用下面的方法
+ /**
+ * 非 WEBIM 情况,比如 Facebook Messenger,使用下面的方法
+ */
// 如果在更多渠道下,此处可能仅适应于 Messenger,那么宜将检测条件调整为 ChannelType.MESSENGER
if (data.getBoolean("logic_is_fallback")) {
if (!StringUtils.equals(Constants.CHATBOT_HUMAN_FIRST, c.getWorkmode())) {
@@ -219,7 +222,9 @@ public class ChatbotEventSubscription {
}
}
} else {
- // 当前渠道为 WEBIM
+ /**
+ * 当前渠道为 WEBIM
+ */
if (data.getBoolean("logic_is_fallback")) {
// 兜底回复,检查FAQ
JSONArray faqReplies = data.getJSONArray("faq");
@@ -249,22 +254,30 @@ public class ChatbotEventSubscription {
if (MainContext.ChannelType.WEBIM.toString().equals(resp.getChannel())) {
// WEBIM 渠道
if (StringUtils.equals(resp.getMessage(), "{CLEAR} 混合类型消息") || StringUtils.equals(resp.getMessage(), "{CLEAR} 图文消息")) {
+ // 处理多答案
JSONArray params = data.getJSONArray("params");
for (int i = 0; i < params.length(); i++) {
JSONObject item = params.getJSONObject(i);
ChatMessage itemResp = (ChatMessage) resp.clone();
+ itemResp.setId(MainUtils.getUUID());
itemResp.setExpmsg(null);
+
+ // 处理不同答案类型
+ // 数据格式:https://github.com/chatopera/cskefu/issues/468
if (item.getString("type").equals("plain")) {
itemResp.setMessage(item.getString("content"));
chatbotProxy.saveAndPublish(itemResp);
} else if (item.getString("type").equals("card")) {
if (item.has("thumbnail")) {
- item.put("thumbnail", ChatbotConstants.DEFAULT_BOT_PROVIDER + item.getString("thumbnail"));
+ String thumbnailUrl = botServiceProvider + item.getString("thumbnail");
+ item.put("thumbnail", thumbnailUrl);
+ JSONArray expmsg = new JSONArray();
+ expmsg.put(item);
+ itemResp.setExpmsg(expmsg.toString());
+// itemResp.setMsgtype("image");
+ itemResp.setMessage(thumbnailUrl);
+ chatbotProxy.saveAndPublish(itemResp);
}
- JSONArray expmsg = new JSONArray();
- expmsg.put(item);
- itemResp.setExpmsg(expmsg.toString());
- chatbotProxy.saveAndPublish(itemResp);
}
}
} else {