基于阿里云短信服务的工单提醒系统设计与实现
2022-08-31张涛
张涛
(国能(北京)商务网络有限公司 北京 100056)
1 问题的提出
国家能源e购网上商城(以下简称商城)是国家能源集团进行物资、工程、服务等项目非招标采购的电力产品专属商城,是基于阿里云技术打造的,包含电力专区、电子超市、询比价、竞价等板块的一体化电子采购平台。商城系统的运维工作主要包括业务技术支持、IT 基础设施管理及集成、网络安全管理等工作。国能(北京)商务网络有限公司(以下简称商务网公司)作为商城建设运维单位,需要满足有序规划和管理软件研发全流程的要求。系统运维部的技术人员组织技术攻关,在开源平台上查找相关资源,最终确定了前端基于reactjs+redux、后端基于php laravel-framework、数据库采用MongoDB 的技术框架,设计实现并建立起了一套高效、稳定的问题需求跟踪工单系统。
本系统是完全自主开发可控的问题需求跟踪系统,本系统自投入使用以来,各类工单正常流转零失误,实现了对各个项目进行过程的精细管理和阶段目标的精密控制。但是同时也发现,由于没有及时的工单系统通知提醒功能,导致部分工单没有被相应负责人及时处理。在信息技术高速发展的当下,移动互联结合智能终端(手机)进行信息传递的方式具有重要的位置。具体的途径有短信通知、APP信息推送、微信、钉钉等多种渠道。目前,使用的短信发送方式主要有两种,短信Modem和网络云接口调用。利用短信Modem硬件发送短信需要外接电源及手机SIM卡,可在终端上通过厂家自带的AT指令或短信操作API实现短信发送。近些年来,国家对短信息服务规定越来越严格,以短信Modem进行短信发送的方式逐渐被淘汰。随着技术发展以及移动运营商短信接口的开放,网络短信接口调用的方式逐渐流行起来,更便于监管的云短信(如阿里云的“短信服务”、腾讯云的“短信SMS”)是现在乃至将来短信发送服务的主要技术途径[1]。
PHP 语言(Hypertext Preprocessor)即“超文本预处理器”,是在服务器端执行的脚本语言,主要应用于网站开发并可嵌入到网页中。PHP同时支持面向对象和面向过程的开发,使用上非常灵活。PHP语法学习了C语言的优点,吸纳Java和Perl等多个语言的特色发展出自己的一套特色语法,并根据它们的长项持续改进提升自己,由于工单系统是后端基于php laravel-framework 开发出来的,系统运维部积极组织技术攻关,用PHP 语言,在原系统功能之上设计实现了基于阿里云短信服务的工单系统通知短信提醒功能。
2 技术路线选型
阿里云为用户提供了实用方便的短信服务的能力,能够支持用户进行快速发送短信验证码、短信通知等功能,能实现三网合一,并与工信部携号转网平台实时互联,保障了短信到达率能够达99%[2]。
阿里云的短信服务API 提供短信发送、发送状态查询、短信批量发送等能力,在阿里云订购了短信服务套餐之后,在该账号下添加签名、模板并通过审核之后,可以调用短信服务API完成短信发送等操作。
发送短信和发送状态查询主要用到的API接口有短信发送(Send SMS)、短信查询(Query Send Details)、短信批量发送(Send Batch SMS)等(其他如短信回执等更复杂的用法见阿里云官方文档),阿里云在Open API开发者门户上为广大程序员提供了PHP、NET 等多种不同编程语言的短信服务SDK。由于本工单系统是由PHP 语言开发完成,故继续采用PHP 语言进行设计和开发。
3 短信提醒系统功能的开发与实现
本系统的数据库采用的是新兴的非关系型数据库MongoDB,MongoDB 是一款开源的基于分布式文件存储的数据库系统。
No SQL 是近年来发展较快的一种云存储数据库类型,与传统数据库不同,No SQL 数据库不需要遵循基本要求,其数据存储方式也更加灵活。其中,MongoDB 是No SQL 中功能最为丰富也是应用最多的数据库之一[3]。与常用的关系型数据库不同的是,MongoDB 将数据存储为一个文档,数据结构由键值对组成[4]。MongoDB 集群包括分片、mongos、config server、clients 等部分。分片是基于副本集的,副本集则是基于一组mongod 而构成的,mongod 中的数据是一样的,当活跃节点失效时,剩下的节点重新推出活跃节点,新的活跃节点又开始提供服务,从而提高可用性[5-6]。如果在PHP 中使用MongoDB,必须使用MongoDB PHP 驱动。需要打开php.ini 文件,添加extension=mongodb.so 配置。在使用其SDK 开发包进行开发之前,还需要运行以下命令进行SDK安装:
composerrequirealibabacloud/dysmsapi-20170525 2.0.9
PHP查找读取MongoDB数据库数据的步骤如下:
首先,连接到自己的mongodb;然后,选择一个数据库;接着选择一个集合;最后读取我们想要的数据,主要代码部分如下:
研究设计一个定时任务,通过编写代码实现上述查询方法,每当我们查询到某一用户名下的工单增加一条,就发送一条短信进行提醒。
(1)用购买阿里云短信服务的阿里云账号创建签名,记住签名名称,后面代码配置中需要。
(2)需要创建短信模板,记住模板CODE,后面代码配置中需要格式如下:
变量格式:${name};
例如,尊敬的${name},您有一个新的工单,请及时处理。
(3)生成AccessKey ID 和Access Key Secret,记住这两个参数值,后面代码配置中需要。
(4)下载SDK及DEMO,解压后得到文件夹aliyundysms-php-sdk
(5)将文件夹aliyun-dysms-php-sdk 复制到项目中,根据框架不同,引入到正确的位置。
(6)修改SmsDemo.php文件中内容,主要修改自己的AccessKeyId和AccessKeySecret。主要代码段如下:
(7)修改SmsDemo.php/sendSms 中内容,主要是填入自己的电话号码、短信签名、模板ID,主要代码段如下:
(8)在自己的程序中调用sendSms()方法,需要注意先引入该方法所在的类文件。
程序设计完成后,测试发送工单提醒短信,新增一条工单则给相应负责人发送一条短信,通过阿里云短信服务发送短信成功。
需要注意的是,包括阿里云在内的网络短信服务商通常规定对同一个手机号码发送短信通知的条数有限制,如阿里云短信服务就是每天最多能够发送50条。如果发送的中英文字符数超过限额后也会提示业务限流,单条短信中英文字符数也往往有一定的上限,一般是每条500 多中英文字符数,超过最大限额的话会导致发送失败。
4 结语
基于阿里云短信服务的工单信息提醒系统设计完成后,实现了新建工单的实时提醒,极大地提高了工单的实时响应速度,为商城的各个项目的精细管理提供了可靠的技术保障,而且极大地方便了系统扩展,可以根据需求扩展应用到除工单系统之外的管理类项目系统,提供实时提醒功能。本系统摒弃了淘汰的短信机,采用阿里云短信服务进行短信发送,这种通过网络云短信服务接口调用的方式是将来短信发送的趋势,在信息推送方面具有较高的推广价值。但是短信本身的特点导致其无法携带图文等丰富信息,将来可考虑在智能终端上采用如微信、钉钉等APP的方式,提高综合信息的发送效率。