汪 晴
(南京航空航天大學(xué),江蘇 南京 211106)
自2012年起,微信公眾號(hào)發(fā)展到今日,生態(tài)環(huán)境與早期已大不相同。國內(nèi)專業(yè)的公眾號(hào)大數(shù)據(jù)服務(wù)商“西瓜數(shù)據(jù)”發(fā)布的《2021年公眾號(hào)半年度生態(tài)趨勢(shì)調(diào)查報(bào)告》指出:當(dāng)前已形成了以公眾號(hào)、視頻號(hào)和小程序三位一體的微信生態(tài),微信公眾號(hào)運(yùn)營者的觀念要不斷轉(zhuǎn)變,通過互動(dòng)反饋機(jī)制來形成新的觀念。
隨著微信影響力的加深和讀者移動(dòng)服務(wù)需求增強(qiáng),微信公眾號(hào)已成為高校圖書館的主流移動(dòng)業(yè)務(wù)平臺(tái)。如何緊跟微信公眾號(hào)發(fā)展趨勢(shì),充分應(yīng)用好微信生態(tài)環(huán)境,本文提出基于微信公眾號(hào)二次開發(fā),以圖書館服務(wù)工單系統(tǒng)開發(fā)為例,探討關(guān)鍵技術(shù),以期為微信公眾號(hào)在圖書館移動(dòng)服務(wù)中的應(yīng)用前景提供實(shí)踐參考。
微信服務(wù)模式分為訂閱型和服務(wù)型,曹慧敏等[1]選取國內(nèi)42所“雙一流”高校圖書館微服務(wù)平臺(tái)調(diào)查發(fā)現(xiàn):42所高校圖書館都開通了微信公眾號(hào),但僅有19所開通了服務(wù)號(hào)。圖書館微信公眾號(hào)普遍為訂閱型,即主要為讀者提供信息推送服務(wù)[2];而服務(wù)型圖書館微信公眾號(hào)主要是通過第三方而非自行研發(fā)的移動(dòng)應(yīng)用,通常是圖書館網(wǎng)站服務(wù)內(nèi)容到移動(dòng)端的遷移:比如OPAC檢索、數(shù)據(jù)庫、電子書、座位預(yù)約、現(xiàn)實(shí)增強(qiáng)等傳統(tǒng)服務(wù)[3]。國外提出‘Micro Library’:包含傳統(tǒng)圖書館資源和服務(wù)所有內(nèi)容[4]。國內(nèi)以超星、匯文等公司為代表的移動(dòng)圖書館迅速普及,但用戶不持續(xù)使用行為逐漸顯現(xiàn)[5]。
隨著微信小程序的推出,結(jié)合各個(gè)圖書館特色的輕量化的小型開發(fā)研究應(yīng)用有較大進(jìn)展:廈門大學(xué)“Lib小助手”[6]通過業(yè)務(wù)操作日常記錄,實(shí)現(xiàn)圖書館日常監(jiān)管工作移動(dòng)化;清華大學(xué)的“清華學(xué)者庫”[7]對(duì)學(xué)者成果進(jìn)行可視化分析展示;山東師范大學(xué)的“排架游戲”[8]對(duì)讀者進(jìn)行培訓(xùn),寓教于樂。便利化、低門檻是小程序應(yīng)用接地氣、得以快速發(fā)展的原因。但小程序在高校圖書館目前占比低[9],且小程序應(yīng)用存在被遺忘率高,用戶黏性差,無法實(shí)時(shí)推送消息等問題。故本文選擇當(dāng)前圖書館主流移動(dòng)服務(wù)平臺(tái)微信公眾號(hào),從微信服務(wù)的基本功能和特點(diǎn)出發(fā),結(jié)合高校圖書館實(shí)際需求和應(yīng)用狀況,探討移動(dòng)圖書館創(chuàng)新服務(wù)模式。
隨著智慧化圖書館建設(shè),圖書館中新型的資源和設(shè)備越來越豐富,需要信息化的手段來自動(dòng)化管理。整個(gè)流程中最關(guān)鍵的就是問題的上報(bào)、處理和反饋,這就需要一套新型的服務(wù)工單系統(tǒng)來盡量自動(dòng)化完成這些關(guān)鍵環(huán)節(jié)。李書欽等[10-11]提出基于微信企業(yè)號(hào)的高校移動(dòng)辦公平臺(tái),但該辦公平臺(tái)體系龐大,無法為讀者提供問題提出和跟蹤處理的服務(wù)平臺(tái)。陳俊杰等[12]提出了基于微信小程序提升管理工作效率,但僅限于內(nèi)部OA,對(duì)于讀者移動(dòng)服務(wù)訴求沒有涉及。
因此,本文提出在微信公眾號(hào)的平臺(tái)之上,實(shí)現(xiàn)實(shí)時(shí)推送的圖書館服務(wù)工單系統(tǒng),用于圖書館服務(wù)任務(wù)傳達(dá),記錄、處理、跟蹤一項(xiàng)工作的完成情況,用來創(chuàng)建、掛起、解決讀者、內(nèi)部工作人員提交的事務(wù)請(qǐng)求。
圖書館服務(wù)工單系統(tǒng)服務(wù)于用戶、處理人員、運(yùn)維人員等角色,由賬號(hào)和鑒權(quán)、前端頁面、運(yùn)維面板、狀態(tài)通知以及數(shù)據(jù)庫和對(duì)象存儲(chǔ)等模塊組成(見圖1)。
圖1 圖書館服務(wù)工單系統(tǒng)架構(gòu)
系統(tǒng)的技術(shù)方案采用B/S架構(gòu),前端使用Vue+Vant組件庫開發(fā),后端使用Go+Jupyter框架開發(fā),數(shù)據(jù)庫選擇MySQL+Gorm,對(duì)象存儲(chǔ)采用騰訊COS。
2.2.1 前端展示模塊
前端展示模塊負(fù)責(zé)向用戶展示數(shù)據(jù),主要包括工單列表頁面和工單詳情頁面兩類。工單列表頁面負(fù)責(zé)展示個(gè)人提交的或者需處理的工單列表,按照時(shí)間等順序排列,方便用戶查看。
在技術(shù)方案中,前端展示模塊采用Vue+Vant框架。Vant是開源的一套輕量、可靠的移動(dòng)端組件庫,具有組件豐富、使用簡(jiǎn)便,運(yùn)行時(shí)性能佳、質(zhì)量高等優(yōu)點(diǎn)。
2.2.2 后端運(yùn)維面板
運(yùn)維面板負(fù)責(zé)給運(yùn)維人員提供運(yùn)維管理和數(shù)據(jù)統(tǒng)計(jì)服務(wù),包括賬號(hào)管理、工單管理和統(tǒng)計(jì)報(bào)表生成。賬號(hào)管理主要負(fù)責(zé)學(xué)校在職人員的信息同步,包括部門架構(gòu)管理、人員信息管理等,以及部分特殊賬號(hào)的人工管理。工單管理主要負(fù)責(zé)部分特殊工單的人工管理。統(tǒng)計(jì)報(bào)表生成能夠根據(jù)時(shí)間、部門、接收人,以及工單的關(guān)閉率、滿意度等多個(gè)維度輸出統(tǒng)計(jì)報(bào)表,便于發(fā)現(xiàn)問題,改進(jìn)工作質(zhì)量。
2.2.3 數(shù)據(jù)庫和對(duì)象存儲(chǔ)
數(shù)據(jù)庫和對(duì)象存儲(chǔ)負(fù)責(zé)保存工單的詳細(xì)信息,包括工單基本信息、工單附件和統(tǒng)計(jì)數(shù)據(jù)。技術(shù)方案中,數(shù)據(jù)庫選型為應(yīng)用最廣泛的MySQL數(shù)據(jù)庫,并選擇Gorm作為ORM庫與數(shù)據(jù)庫交互,其優(yōu)點(diǎn)是使用便捷、性能良好,兼容性好、支持多種數(shù)據(jù)庫。Gorm初始化后,會(huì)自動(dòng)根據(jù)此類型生成MySQL表結(jié)構(gòu)。
此外,因?yàn)楣沃杏姓掌鸵曨l等多媒體信息,需要對(duì)象存儲(chǔ)來管理這些多媒體數(shù)據(jù)。本系統(tǒng)采用騰訊COS對(duì)象存儲(chǔ)的技術(shù)方案,并封裝了對(duì)象存儲(chǔ)的通用接口,便于后續(xù)適配其他對(duì)象存儲(chǔ)的接口,例如Minio、本地磁盤等。
2.3.1 賬號(hào)和鑒權(quán):智能識(shí)別用戶角色
賬號(hào)和鑒權(quán)模塊,與現(xiàn)有圖書館公眾號(hào)使用相同的賬號(hào)認(rèn)證體系,無需二次登錄,并以只讀方式對(duì)接校圖書館內(nèi)部的部門和人員信息,進(jìn)行角色鑒權(quán),確保每個(gè)用戶只能看到角色相關(guān)的數(shù)據(jù)。
在技術(shù)方案中,把鑒權(quán)封裝為一個(gè)通用的中間件函數(shù),在提交、查看或者處理工單時(shí)使用這個(gè)中間件函數(shù)進(jìn)行鑒權(quán)。鑒權(quán)邏輯如下:
(1)先嘗試從Context緩存中獲取,如果成功則返回。
(2)否則再從Cookie中獲取,如果成功,保存到Context緩存中,并返回。
(3)如果從Cookie獲取失敗,最后再通過微信code獲取賬號(hào)信息。微信公眾號(hào)提供了獲取用戶信息的HTTP接口,包括對(duì)AppID和AppSecret的校驗(yàn)、鑒權(quán)等,安全性有相同保障。這里有兩點(diǎn)需要特別注意:AppSecret是應(yīng)用密鑰,涉及此服務(wù)的相關(guān)權(quán)限,安全性要求較高,只能保存在服務(wù)端,不能傳遞到前端瀏覽器,更不能寫死在前端代碼中;所有HTTP參數(shù)都可以通過query參數(shù)形式傳給服務(wù)器,因此需要使用url.QueryEscape進(jìn)行轉(zhuǎn)義。
(4)鑒權(quán)成功后通過ctx.SetCookie設(shè)置到前端瀏覽器中,無需頻繁調(diào)用微信服務(wù)鑒權(quán)。
2.3.2 消息推送:實(shí)時(shí)掌握工單狀態(tài)
圖書館服務(wù)工單系統(tǒng)的使用對(duì)象主要是學(xué)校師生以及圖書館工作人員,一般都會(huì)使用微信做日常聯(lián)絡(luò)工具,狀態(tài)通知模塊負(fù)責(zé)在工單狀態(tài)發(fā)生變化時(shí)實(shí)時(shí)通知到相關(guān)人員。選擇微信公眾號(hào)的模板消息作為技術(shù)方案,具有用戶體驗(yàn)好、使用范圍廣、開發(fā)成本低等優(yōu)勢(shì)。預(yù)定義的模板消息內(nèi)容如下:
標(biāo)題 服務(wù)工單提醒
行業(yè) IT科技 - IT軟件與服務(wù)
詳細(xì)內(nèi)容 {{first.DATA}}
編號(hào):{{keyword1.DATA}}
來自:{{keyword2.DATA}}
摘要:{{keyword3.DATA}}
{{remark.DATA}}
本系統(tǒng)把發(fā)送模板消息封裝為通用的函數(shù)庫,便于后續(xù)復(fù)用:
func WXSendMsg(touser string, data map[string]interface{}) {
b, _ := jsoniter.Marshal(data)
//省略部分加密和編碼內(nèi)容
url := fmt.Sprintf("http://x.nuaa.edu.cn /sendMsg?touser=%v&_time=%v&pushMsgtype=%v&push_enc=%v&pushData=%v", touser, time, type, end, b2)
resp := map[string]interface{}{}
util.HTTPGetJSON(url, &resp)
針對(duì)高校引入實(shí)時(shí)推送服務(wù),筆者提出以下建議:(1)在引入實(shí)時(shí)推送服務(wù)時(shí),需要慎重控制提醒批次。實(shí)時(shí)推送服務(wù)的目的是及時(shí)提醒相關(guān)人員對(duì)變化的狀態(tài)進(jìn)行響應(yīng),如果過度提醒,可能會(huì)適得其反。(2)在使用實(shí)時(shí)推送服務(wù)時(shí),需要謹(jǐn)慎管理推送服務(wù)的應(yīng)用密鑰。應(yīng)用密鑰一般分為AppKey和SecretKey,前者用于標(biāo)識(shí)推送服務(wù)的應(yīng)用信息,后者用于應(yīng)用的身份鑒定。如果密鑰泄露,一方面可能給服務(wù)工單系統(tǒng)帶來安全隱患,另一方面推送服務(wù)會(huì)禁用該應(yīng)用,導(dǎo)致推送功能不可用。
2.3.3 二維碼:隨手記錄故障設(shè)備
對(duì)每個(gè)設(shè)備進(jìn)行編號(hào),并生成唯一的二維碼。在出現(xiàn)故障、用戶提交工單時(shí),可以通過掃描二維碼來記錄具體是哪個(gè)設(shè)備發(fā)生故障,提升故障解決效率。
首先在.wxml寫一個(gè)text組件,通過點(diǎn)擊這個(gè)text來實(shí)現(xiàn)掃碼功能:
其中bindtap是給text綁定的點(diǎn)擊事件;{{scanCode}}給這個(gè)text顯示文本,賦值的數(shù)據(jù)在.js文件的data里初始化。.js內(nèi)容:
Page({
data: {
scanCode: '掃碼',
},
scanCodeEvent: function () {
var that = this;
wx.scanCode({
onlyFromCamera: true,
success(res) {
console.log("掃碼成功:" + JSON.stringify(res))
//掃碼成功后在此處理接下來的邏輯
}
})
},
})
掃碼中有幾個(gè)可配置的參數(shù)注意下:
onlyFromCamera:默認(rèn)是false,允許從相機(jī)和相冊(cè)掃碼;如果設(shè)置為true,則只允許從相機(jī)掃碼;
scanType:['barCode', 'qrCode']數(shù)組類型,這個(gè)字段來設(shè)置掃碼類型;
success:掃碼接口調(diào)用成功的回調(diào)函數(shù);
fail:掃碼接口調(diào)用失敗的回調(diào)函數(shù)。
前端將原始數(shù)據(jù)發(fā)回給服務(wù)端存儲(chǔ),服務(wù)端記錄為故障設(shè)備ID。
2.3.4 GPS:自動(dòng)識(shí)別故障場(chǎng)地
在沒有二維碼的設(shè)備或場(chǎng)所,我們通過GPS信息獲取大概的地理位置,方便運(yùn)維人員定位和分析故障。首先獲取用戶的地理位置,需要在app.json里聲明permission字段,要告訴用戶地理位置的作用是什么:
"permission": {
"scope.userLocation": {
"desc": "您的位置信息將用于工單系統(tǒng)獲取故障位置信息,便于定位故障"
}
}
.js中獲取地理位置的代碼:
wx.getLocation({
type: "wgs84",
success (res) {
}
})
參數(shù)type:wgs84返回gps坐標(biāo),gcj02 返回可用于wx.openLocation的坐標(biāo);前端會(huì)把位置結(jié)果通過接口上報(bào)到服務(wù)端,供運(yùn)維人員定位故障使用。
2.3.5 拍照:真實(shí)還原故障現(xiàn)場(chǎng)
通過二維碼和GPS可以定位故障位置,但是具體的故障信息如果有直觀的照片,就能輕松描述清楚,還原第一現(xiàn)場(chǎng)。
調(diào)用相機(jī),需要首先在.wxml頁面中生命c(diǎn)armera元素:
在.js文件中調(diào)用接口進(jìn)行拍照:
const ctx = wx.createCameraContext()
ctx.takePhoto({
quality: 'high',
success: (res) => {
this.setData({
src: res.tempImagePath
})
}
})
前端拿到照片數(shù)據(jù)后,通過HTTP接口把照片上傳到后端的對(duì)象存儲(chǔ)服務(wù)中,并拿到對(duì)象存儲(chǔ)返回的文件ID,再在提交工單時(shí)把對(duì)象存儲(chǔ)ID關(guān)聯(lián)到工單信息,供運(yùn)維人員分析故障。
圖書館服務(wù)工單系統(tǒng)主要面向用戶、圖書館工作人員、運(yùn)維人員等角色,不同角色看到的內(nèi)容會(huì)有所不同,收到的提醒信息也有所不同,實(shí)現(xiàn)效果如圖2所示。
圖2 待辦工單列表和新工單提醒
圖書館服務(wù)工單系統(tǒng)增加實(shí)時(shí)推送提醒,自上線后各項(xiàng)服務(wù)質(zhì)量提升明顯:平均問題響應(yīng)時(shí)間從46.5小時(shí)降低到5.7小時(shí),平均問題關(guān)閉時(shí)間從75.2小時(shí)降低到18.6小時(shí),年度問題閉環(huán)率從63.90%提升到86.1%。詳細(xì)數(shù)據(jù)如圖3所示。
圖3 圖書館服務(wù)工單系統(tǒng)應(yīng)用效果
本文以圖書館服務(wù)工單系統(tǒng)為例,展現(xiàn)了基于微信公眾平臺(tái)的多個(gè)開發(fā)關(guān)鍵技術(shù)和應(yīng)用場(chǎng)景,以期為其他高校圖書館移動(dòng)服務(wù)建設(shè)拋磚引玉。實(shí)踐證明,充分利用微信公眾號(hào)提供的靈活豐富的API接口,結(jié)合圖書館業(yè)務(wù)需求,能夠?qū)崿F(xiàn)圖書館移動(dòng)服務(wù)創(chuàng)新,提升管理效率,符合智慧化建設(shè)發(fā)展思路。
隨著移動(dòng)技術(shù)的發(fā)展,筆者也將繼續(xù)探索嘗試更多應(yīng)用場(chǎng)景,并充分利用系統(tǒng)積累的數(shù)據(jù),進(jìn)行統(tǒng)計(jì)與分析,填補(bǔ)圖書館資源管理工作統(tǒng)計(jì)數(shù)據(jù)的空白;發(fā)掘圖書館資源建設(shè)中的隱藏問題,為后續(xù)建設(shè)提供數(shù)據(jù)決策依據(jù)。