網頁客服思路以及QQ截圖貼上到聊天框功能
功能:
1、客服需登入進入客服頁面。使用者無需登入,進入使用者頁面,直接獲取sessionId作為id值。
2、使用者進入頁面並且傳送訊息時,客服才會獲取到該使用者,並在左側列表顯示。
3、點選使用者名稱即可切換聊天物件,正在聊天的使用者,使用者名稱為選中狀態。
4、每條訊息的時間顯示在本條訊息上方(水平居中)。訊息時間間隔不足1分鐘,則此不顯示時間。
5、每次讀取的訊息均為最新訊息。
6、客服未與其正在聊天的使用者傳送新訊息時應有新訊息提示。
7、使用者關閉瀏覽器或長時間無迴應時,將使用者置為下線。
客服介面將清空與下線使用者的聊天視窗,且下線使用者不顯示在左側列表中。
8、使用者長時間無迴應置為下線後,重新整理可繼續線上與客服聊天。
9、傳送:1)輸入框未輸入訊息時,提示“傳送內容不能為空”。
2)未選擇使用者時,提示“請選擇使用者”。
資料庫表:
三張表:客服(user),使用者(customer),聊天記錄(cs_chat_record)。
客服表主要欄位:id,name,password,online,currentPeople;
使用者表主要欄位:id,name,online,headImg;
聊天記錄表主要欄位:id,userId,customerId,userContent,customerContent,time;
主要思路:
1、使用者進入頁面:檢視當前使用者有沒有正在被客服人員接待
①正在被接待:設定使用者為線上狀態(因為重新整理會有下線操作)。
②未被接待:獲取所有線上客服每個人正在接待的使用者人數,並給該使用者分配一個當前接待人數少的客服。
修改此客服正在接待的人數,將使用者新增到使用者表中(設定為線上狀態)。
將使用者和客服均存到session中。
2、客服進入頁面:常規驗證。
4、使用者和客服傳送訊息時,都先將資訊儲存到資料庫。
5、使用者和客服介面,都是一秒重新整理一次獲取最新訊息。
6、客服頁面:當前正在溝通的使用者列表,每秒獲取一次,將不線上的使用者在列表清除。
7、長時間無回覆的使用者置為下線,用到資料庫定時器。
8、使用者關閉瀏覽器置為下線,用到的是window.onbeforeunload方法。
9、新訊息提醒:儲存使用者訊息將使用者頭像設定成有紅點的,獲取訊息時將使用者頭像設定為無紅點的。
QQ截圖在網頁聊天中不能直接貼上,要實現像QQ微信一樣能直接貼上成圖片需要做一些操作
利用paste
事件捕獲貼上事件,clipboardData
獲取剪下板中的內容將檔案用filereader介面讀取出來
function paseImg() { var imgReader = function (item) { var blob = item.getAsFile(), reader = new FileReader(); reader.onloadend = function (e) { //顯示影象 var msg = "<img src='"+e.target.result+"' style='max-width:60%;max-height:250px;'/>"; $('#textarea').append(msg); }; reader.readAsDataURL(blob); }; document.getElementById("textarea").addEventListener("paste",function(e){ var clipboardData = e.clipboardData, i = 0, items, item, types; if (clipboardData) { items = clipboardData.items; if (!items) { return; } item = items[0]; types = clipboardData.types || []; for (; i < types.length; i++) { if (types[i] === 'Files') { item = items[i]; break; } } if (item && item.kind === 'file' && item.type.match(/^image\//i)) { imgReader(item); } } }); } paseImg();