自从2012年8月华中科技大学推出首个国内高校官方微信后,越来越多的高校已陆续开通了微信公共账号。其中,除部分高校开发了专门的微信平台系统外,大部分高校都还停留在使用“关键词自动回复”的简单交互层面,即在微信提供的管理后台中设置多种关键词及其对应的回复内容,一旦用户输入了某个关键词,则返回其对应的预设内容。关键词自动回复能够实现一些初级的匹配功能,但无法实时查询和返回高校各个业务系统中的数据信息,也无法实现上下文交互,更无法深入使用微信公共平台提供的各种自定义功能。
本文梳理了当前高校微信公共平台的各种功能,以华东师范大学现有信息化应用系统作为数据基础,通过使用CodeIgniter敏捷开源框架开发富有交互性的微信公共平台,分析和阐述了平台关键功能实现过程中存在的问题,并提出相应的技术解决方案。
微信公共平台运行机制
微信公共平台的通讯路线可简单归纳为“用户-微信服务器-平台服务器-微信服务器-用户”,我们可以将每一次通讯视为一次交互过程,如图1所示。用户是交互过程的发起人,通过在微信程序中向公共账号发送消息来启动交互。微信服务器是交互的信息中转站,消息被直接发送至微信服务器,服务器再根据该公共账号所设置的模式类型来确定消息的处理方式。当该账号为简单的编辑模式时,微信将通过诸如关键词回复等功能对消息进行匹配,直接将匹配结果返回给用户。而当账号设置为开发模式时,微信服务器将把用户发送的消息以XML数据的形式发送至公共账号预设的接口,即平台服务器。平台服务器是交互的信息处理方,其核心是由公共账号管理者自主搭建的Web应用程序。平台服务器在接收到来自微信服务器的数据后,根据数据中包含的消息类型和关键词内容准备相应的回调格式和信息,并按照微信规定的消息格式返回响应数据。微信服务器在收到该响应数据后,再将其中的内容信息以规定的格式发送给用户,完成整个交互过程。微信公共平台开发的主要任务即搭建其中的平台服务器,创建Web应用程序来处理所有的信息请求任务,向微信服务器返回相应的数据内容。
图1 微信公共平台通讯机制
微信公共平台的接口主要包含三大类。一类是接收用户消息接口,其中包含文本信息、图片信息、地理位置信息、链接信息等类型,平台服务器通过这些接口从微信服务器推送的数据中获取相应内容。另一类是回复用户消息接口,其中包含文本信息、图文信息和音乐信息等类型,平台服务器将根据回复消息的格式,选择相应的接口向微信服务器回调数据。第三类为事件推送接口,包含了用户的关注和取消关注两类事件接口,用于平台服务器向新近关注用户发送欢迎消息。
基于微信公共平台简洁的运行机制,我们选择了轻量化的CodeIgniter框架来作为平台的开发工具。CodeIgniter框架的优点是架构简单、配置灵活,拥有出色的运行性能,且其运营成本低、开发周期短,特别适合于高校自主开发微信平台。
基于CodeIgniter框架的平台设计
1. 设计模式
CodeIgniter框架是基于“模型-视图-控制器”的MVC模式的,我们在微信公共平台开发中也遵循了这一设计模式,以实现逻辑和表现层面的分离。其中,模型(Model)代表了数据结构,在本平台中主要表现为一个模型类,实现平台数据的读取、插入、更新、删除等功能。视图(View)代表了展示给用户的信息,即平台中展示给用户的各种网页,包含了用户授权的相关页面模板。控制器 (Controller) 是模型、视图和其他资源之间的中介,在本平台中主要用于调度各种数据,创建消息处理流程。由于微信平台不需要过多向用户展示网页,其数据也基本来自其他信息化系统的接口,因此本框架中的模型和视图类型都较为简单。平台的核心在于控制器,其主要功能都由控制器完成,其中包括消息的接收、判断、处理和回调等。
此外,平台将一些核心的功能类和常用函数抽离出来,分别创建对应的装载类(Libraries)和辅助函数类(Helpers),在运用时按需加载,以简化控制器中的功能代码,提高系统运行效率。在装载类中包含了网页HTML标签内容的采集、正则解析,以及模板解析等复杂的功能类库。在辅助函数中则包含了各种单独的函数,包括各种数据接口的连接、时间日期处理、敏感词过滤、单位换算等。
2. 数据库设计
平台采用MySQL数据库。该库中主要的数据有三种,分别是用户(User)、规则(Rule)和消息(Message)。User表中储存了每个微信用户的用户号(OpenId),以及上一次操作的状态记录、学号和工号信息等,用于实现用户的上下文交互,使用各种校内信息系统的授权功能。Message表中储存了用户向微信公共账号发送的所有消息,是平台消息的历史存档。Rule表中包含了管理员预设的消息响应规则,是平台消息处理流程的具体依据。
除以上三种数据外,数据库中还包含了实现各种平台功能所需的配置数据。如为“背单词”功能创建Dictionary表,以储存四六级单词数据;为“自动聊天”功能创建Talk表,以储存各种对话规则;为“自习教室查询”功能创建Classroom表,以储存常用的自习教室列表等。
特别声明:本站注明稿件来源为其他媒体的文/图等稿件均为转载稿,本站转载出于非商业性的教育和科研之目的,并不意味着赞同其观点或证实其内容的真实性。如转载稿涉及版权等问题,请作者在两周内速来电或来函联系。