开发模式下图书馆微信公众平台服务的设计与实现
张蓓, 窦天芳, 张成昱, 李洁芳
清华大学图书馆 北京 100084
通讯作者 张蓓 E-mail:zhangbei@lib.tsinghua.edu.cn

作者贡献:

张蓓,窦天芳,张成昱:提出研究思路,设计研究方案;

张蓓:程序开发实现;

窦天芳,李洁芳:采集、整理数据;

张蓓、窦天芳:论文起草;

张蓓、张成昱:最终版本修订。

摘要

【目的】通过设计和开发微信公众平台服务, 扩展清华大学图书馆的服务渠道, 提升读者体验。【应用背景】移动互联网的兴起, 促使微信成为读者关注度较高的平台, 以清华大学为例, 近8成新生使用微信应用。【方法】基于微信公众平台的开发模式, 利用其提供的消息接收和回复接口, 将图书馆热点消息、馆藏书目系统等查询功能嵌入微信应用。【结果】读者在社交网络环境里, 通过指令互动即可便捷地使用到图书馆的服务和资源。【结论】本应用可以丰富图书馆的服务形式, 拉近图书馆与读者的距离。

关键词: 图书馆服务; 微信公众平台; 开发模式; 读者互动
文章编号: 2014-87-91
Design and Implementation of Library WeChat Public Platform Service in Development Mode
Zhang Bei, Dou Tianfang, Zhang Chengyu, Li Jiefang
Tsinghua University Library, Beijing 100084, China
Abstract

[Objective] Extend the service channels of Tsinghua University Library and enhance patron experience by designing and developing WeChat public platform service. [Context] The rise of mobile Internet prompts WeChat to become a platform that gets much patron attention. Take Tsinghua University as an example, nearly 80% of the freshmen are using WeChat. [Methods] This service makes use of the message receiving and sending interfaces provided by WeChat public platform and embeds the functionatlities like library hot news search and OPAC search into the WeChat. [Results] Patrons can conveniently use the library’s services and resources via command interaction in social network environment. [Conclusions] This application can enrich the service forms of the library and make patrons closer to the library.

Keyword: Library service; WeChat public platform; Development mode; Patron interaction
1 引 言

微信作为一款免费的手机即时通讯应用程序, 带来的“微生活”体验正渗透进社会生活的方方面面。由于微信的功能丰富, 比短信、彩信等沟通方式更加灵活和智能, 一经推出就迅速获得用户的青睐[1]。2012年8月, 腾讯公司在微信的基础上新增功能模块——微信公众平台[2]。个人和企业都可以打造微信公众号, 实现和特定群体通过文字、图片、语音进行全方位的沟通与互动。微信公众平台方便快捷的信息传递方式很快被广大用户所接受, 实现了沟通方式的变革。政府、媒体、企业等众多机构纷纷开设微信公众号, 以微信为渠道进行服务推广。

对于高校而言, 移动互联网迅速兴起, 促使智能手机在读者中日渐普及, 微信在校园里的受众人数不断增加[3]。图书馆服务与微信公众平台的有效结合, 定将有益于读者。为扩展服务渠道, 优化信息呈现, 提升读者的应用体验, 清华大学图书馆积极实践, 开通“清华图书馆”(Thu-lib)微信公众号, 启用其开发模式, 将图书馆FAQ、馆藏书目系统查询等服务嵌入微信应用, 丰富了读者与图书馆的互动。本文详细介绍如何在开发模式下实现图书馆微信公众平台服务。

2 设计方案
2.1 设计思路

微信公众平台的基本功能定位在群发推送、自动回复和一对一交流。它支持两种管理模式:编辑模式和开发模式, 两种模式互斥存在。编辑模式提供简单的编辑界面, 无需编程即可实现自动回复、自定义菜单等功能;开发模式则针对具有开发能力的公众号运营者, 提供开发接口, 可以实现更加个性化的服务。

由于微信已经成为读者常用的一款应用, 很多高校图书馆陆续通过微信公众平台进行信息推送和人工咨询服务。而笔者认为应当充分利用读者常来常往的应用环境, 提供更加丰富的图书馆服务, 拉近读者与图书馆的距离。微信公众平台的开发模式为这一想法的实现提供了可能性。开发模式赋予公众号运营者相当高的权限, 决定自动回复消息的处理逻辑和展现形式, 可以作为微信公众平台集成图书馆传统服务的入口, 嵌入图书馆热点消息查询、馆藏书目系统查询等功能。考虑到本馆在移动应用、资源整合等方面的实践经验, 以及实现交互性强、功能丰富的微信服务期望, 本文确立了“基于开发模式实现图书馆微信公众平台服务”的设计思路。

2.2 服务流程及架构

基于上述设计思路, 整个服务架构如图1所示:

图1 清华大学图书馆微信公众平台服务架构

在开发模式下, 图书馆仍然可以通过微信公众平台的消息群发或一对一的方式与读者交流, 但是主要的读者互动是基于自动回复进行的。具体流程为:

(1)管理员启用开发模式, 在微信公众平台中配置消息接口, 接入图书馆开发的微信消息处理模块;

(2)微信用户向微信公众号发送消息指令时, 微信服务器将消息转发至微信公众平台;

(3)微信公众平台根据预先配置的接口, 将消息转发给消息处理模块;

(4)消息处理模块会分析用户发送消息的内容, 按照既定的业务规则生成回复消息并返回给微信公众平台;

(5)微信用户最终接收到回复消息。

消息处理环节的指令解析模块是微信公众平台服务实现的关键。它负责分析用户发送的消息指令并将其转化为对相应服务子模块的功能调用。这一设计模式的优势在于具有良好的可扩展性, 能够根据读者需求, 不断集成新的功能。

3 具体实现
3.1 消息接口配置

消息接口配置是让微信公众号具备图书馆服务功能的首要环节。开通微信公众号后, 登录微信公众平台, 启用“高级功能”菜单中的“开发模式”。接下来, 要登记接口的URL和Token, 实现网址接入。Token用于生成签名, 内容可任意填写;URL则填写图书馆用于消息处理的服务器资源。

信息提交时, 微信服务器向填写的URL发送GET请求。请求包括4个参数:Signature(微信加密签名)、Timestamp(时间戳)、Nonce(随机数)和Echostr(随机字符串)。消息处理服务器将检验Signature, 如果确认请求来自于微信服务器则原样返回Echostr参数内容, 表示接入生效, 反之接入失败。

成功配置接口之后, 所有发送至微信公众号的消息将被转发给所登记的URL, 并由指令解析模块和各个服务子模块完成消息的解析和回复。

3.2 指令解析模块

(1)消息接收

图书馆服务在微信中的呈现方式是通过消息的交互实现。指令解析模块负责解析来自微信服务器的POST请求, 匹配消息类型和指令, 调用具体的服务子模块处理。请求消息的格式为XML, 使用Dom4j解析。以下是请求消息样例:

以下是请求消息样例:

<xml>

<ToUserName><![CDATA[toUser]]></ToUserName>

<FromUserName><![CDATA[fromUser]]></FromUserName>

<CreateTime>1348831860</CreateTime>

<MsgType><![CDATA[text]]></MsgType>

<Content><![CDATA[cs#t:红楼梦]]></Content>

</xml>

其中,<MsgType>字段记录了请求的消息类型Text(文本)。当然, 也可以是Image(图片消息)、Event(事件消息)等其他类型, 相应的XML内容将有所不同[4]。对于该样例, 指令解析模块会提取<Content>字段内容, 并通过以下代码进行指令格式匹配, 确定出该请求是“查询题名为《红楼梦》的图书”;然后执行executeModule函数, 调用相应的服务子模块查询图书。

function executeCommand(cmd){

// 解析指令内容, 确定子模块及调用参数

(module, params)= parseCommand(cmd);

// 执行子模块, 完成指令要求功能

executeModule(module, params);

}

目前, 本馆微信公众平台服务所支持的文本消息指令包括两种:

①关键词指令:例如“新闻”、“文科馆座位”、“help”等;

②复杂功能性指令:例如“cs#t:题名”(按题名查询图书)、“jy#证号, PIN码”(查询个人借阅情况)等。

(2)消息回复

服务子模块接收到消息指令后进行响应和处理, 查询结果会返回给指令解析模块重新封装, 生成特定格式的回复消息XML。目前公众平台支持文本、图文、语音等回复形式。以回复文本消息为例, 输入指令“cs#t: 红楼梦”, 将生成如下的回复消息XML。

<xml>

<MsgType><![CDATA[text]]></MsgType>

<Content><![CDATA[共10本

1.《红楼梦》研究新论...

...

更多:http://innopac.lib.tsinghua.edu.cn/search* chx/Y?SEARCH=t:红楼梦]]></Content>

<FuncFlag>0</FuncFlag>

</xml>

要提升微信用户的应用体验,可以灵活地运用不同的消息回复形式。例如针对图书馆FAQ中的“馆藏布局”指令,生成图文回复消息XML。

<xml>

<MsgType><![CDATA[news]]></MsgType>

<ArticleCount>7</ArticleCount>

<Articles>

<item>

<Title><![CDATA[馆藏布局]]></Title>

<Description><![CDATA[详见:http://lib. tsinghua.edu.cn/about/collection.html]]>

</Description>

<PicUrl><![CDATA[http://lib.tsinghua.edu.cn/about/thumbnails/newbuilding.jpg]]></PicUrl>

<Url><![CDATA[http://lib.tsinghua.edu.cn/about/collection.html]]></Url>

</item>

<item>...</item>

</Articles>

<FuncFlag>1</FuncFlag>

</xml>

返回如图2(a)所示的图文消息,点击其中一项可以查看到具体楼层的布局信息,如图2(b)所示,这样的消息呈现更加生动。

3.3 服务子模块实现

基于开发模式,可以在消息处理环节自由添加处理逻辑,因此服务子模块能够灵活扩展。当然,由于第三方系统的开放程度不一,服务子模块的实现方式也有所不同。图书馆座位管理系统提供完整的功能接口,服务子模块实现时,可以直接调用接口,将座位实况信息封装成微信消息。而基于本馆馆藏书目系统实现的按关键词、题名和作者查询图书,以及查询个人借阅情况的指令操作,没有现成的接口可用,其实现是使用HTMLParser模拟查询操作,解析查询结果页面,获得相关信息。以图书查询为例,程序通过模拟请求以下的图书查询页面,分析其页面结构,获取查询结果中的图书标题后封装成微信消息。

http://innopac.lib.tsinghua.edu.cn/search*chx/Y?SEARCH=t: 红楼梦

除了将微信与图书馆传统服务集成外, 还希望通过微信传播更丰富的图书馆信息。图书馆有书展、培训讲座等动态信息, 如果通过人工维护的方式在微信应用中提供这些信息, 工作量大且难以保证信息的及时同步, 因此本馆充分利用已有的RSS源, 实现了热点消息查询子模块。当用户向微信公众号发送指令(如“新闻”)时, 系统将读取相应的RSS源:

http://lib.tsinghua.edu.cn/dra/rss/announcement

程序解析后将以回复文本消息的形式, 返回包含新闻标题和网址的XML。

<xml>

<MsgType><![CDATA[text]]></MsgType>

<Content><![CDATA[1.清华映像——真人图书馆: 读你千遍也不厌倦

http://lib.tsinghua.edu.cn/dra/news/annoucement/5102

...]]></Content>

<FuncFlag>0</FuncFlag>

</xml>

在RSS源解析过程中, 采用了YQL技术[5], 解决不同版本RSS的兼容问题。以下的YQL查询语句可以返回新闻RSS源中最新的5条记录。

select title, link from rss

where url='http://lib.tsinghua.edu.cn/dra/rss/announcement' limit 5

3.4 消息处理的关注点

微信服务器规定请求的响应时间为5秒, 因此针对微信消息的自动回复必须在5秒之内完成, 否则微信服务器将断开连接, 导致本次消息回复失败。例如查询图书的功能是基于页面分析实现的, 页面的响应时间会受到网络条件等因素的影响而存在不确定性。页面结构过于复杂时, 也会增加页面分析的难度, 造成响应超时。因此, 微信公众号对图书查询指令的响应仅仅提取了图书题名, 并在回复消息XML的字段里给出指向完整查询结果的链接, 读者可根据个人需要自行查看。

当然, 微信公众平台接口对消息的内容大小也有限制, 不超过2048字节。信息过长, 服务会失去响应, 这在生成回复消息时也是需要重视的。以热门学术期刊查询子模块为例, 如发送指令“qk#Nature”到微信公众号, 可以查询到《Nature》最新文章, 如图3所示:

图3 热门学术期刊查询

期刊文章更新较快、内容较多, 回复消息很容易超长。为了确保服务正常, 同时兼顾一次请求返回最多信息, 这里控制了返回期刊文章的数量, 并在消息中附加完整结果集URL, 这样读者就能够查看到更多的结果。

4 结 语

图书馆利用微信公众平台开展服务, 可以轻松融入读者群, 更加便捷地传播图书馆的信息和资源, 同时也便于读者在社交网络环境里利用图书馆。“清华图书馆”(Thu-lib)微信公众号自2013年6月推出以来, 累积关注人数超过2 000人, 交互消息量3 300多次, 并在读者迎新活动中发挥了重要作用。

微信公众平台的开发模式能够轻松地将图书馆已有的服务赋予微信公众号, 具有很强的可扩展性。当然, 公众平台对消息响应时间和内容大小均有限制, 因此应尽量选择逻辑相对简单、回复内容比较简短的服务功能来实现。此外, 还需要注意程序的性能优化, 缩短其响应时间。未来, 本馆将充分利用微信公众平台的开发模式, 继续拓展读者服务, 如开通借阅、图书续借、资源个性化推荐等。

参考文献
1 黄浩波, 何卫华, 叶青. 微信及其在图书馆信息服务中的应用[J]. 图书馆学刊, 2013(1): 62-64.
(Huang Haobo, He Weihua, Ye Qing. WeChat and Its Application in Library Information Services[J]. Journal of Library Science, 2013(1): 62-64. ) [本文引用: 1]
2 百度百科. 微信公众平台 [EB/OL]. [2013-08-01]. http://baike.baidu.com/view/9212662.htm. (Baidu Wikipedia. WeChat Public Platform [EB/OL]. [2013-08-01]. http://baike.baidu.com/view/9212662.htm [本文引用: 1]
3 白浩, 郝晶晶. 微信公众平台在高校教育领域中的应用研究[J]. 中国教育信息化, 2013(2): 78-81.
(Bai Hao, Hao Jingjing. Application and Research of WeChat Public Platform in University Education Area[J]. The Chinese Journal of ICT in Education, 2013(2): 78-81. ) [本文引用: 1]
4 微信公众平台消息接口指南 [EB/OL]. [ 2013-08-17]. 微信公众平台消息接口指南 [EB/OL]. [2013-08-17]. http://mp.weixin.qq.com/wiki/index.php?title=消息接口指南. (Message Interface Guide of WeChat Public Platform [EB/OL]. [2013-08-17]. http://mp.weixin.qq.com/wiki/index.php?title=消息接口指南 [本文引用: 1]
5 Yahoo! Query Language [EB/OL]. [ 2013-08-10]. Yahoo! Query Language [EB/OL]. [2013-08-10]. http://developer.yahoo.com/yql/. [本文引用: 1]