前段时间为用户提供VPN 和SSH 服务,消息的都是通过电子邮件发送的。没有短信的快捷和实时性,决定搭建自己的短信平台。
在此之前我也用过其他服务商提供的短信平台,都有各种各样的问题。
其中短信平台存在的问题:
1、发送短信有时段限制,有些短信通道只能在 上午8点 到晚上8点发送,如果遇到夜间的紧急时间需要发送短信就无能为力了,比如服务器当机、MSSQL数据库日志满了、系统盘空间不足。 在Linux 下磁盘空间不足会照成MySQL启动失败。
2、通过通道发送短信限制十分严格,相对于个人手机,进行关键词屏蔽非常厉害, 比如 “发票”、“还钱”、“你妈”有些常用词都不能发。 句子里包含关键词都发送失败, “我中午去打印手机话费发票”、“听说你妈住院了,现在身体好吗?”, 通过个人手机限制的就不严格。
3、通道拥挤的情况,因为这些通道一般都是提供批量发送广告的, 一次发送1万条,10万条都很正常。 如果这个时候你发送短信,只能排在消息队列的最后。 通常延时20分钟到4小时。
4、通道设备故障,因为各种情况照成的消息队列内的短信丢失。 你调用API接口发送短信,短信状态时成功的,由于平台的故障照成短信没有发送成功,而且你得不到错误的状态,费用照扣。
5、扣量,各个短信平台情况不一样, 价格比较低的扣量比较严重, 比如你群发 10万条, 前 5000条100%发送, 5000 -1万条 发送 95%, 1万-2万条 发送 90%, 到10万条的时候55% 甚至更低。
发送短信一般有2种方法, 一种是通过短信通道发送, 还有就是自己购买设备发送短信。
申请单独的短信通道要求比较高,一般在10-30万费用,比较大型的公司才会申请,比如银行、证劵等, 发送的号码都是95555 ,96000等, 还有就是106557**** 这样的通道。 申请的费用较少,一般几千元就可以申请到。 通道提供商业一般提供2种接口, 一种是API接口,通过API发送短信,比如http://www.pipc.net/sms/send.aspx?id=130130****&msg=测试短信 ,还有一种数据库接口,你可以连接到数据库直接把消息插入相关的表中。
个人如果出于研究的目的,可以使用手机最为短信发送设备。 只要支持串口,AT指令就可以了。
首先要准备短信发送设备,为此测试过很多手机。 MTK *联发科技 芯片非常不稳定,经常发送几条短信以后就没有响应了,完全靠运气。
越是老手机越稳定,比如西门子的3508 系列,我在2000年时候买的西门子3508i 手机连接线是COM口的,发送短信非常稳定。
测试过的设备,来个合影。
西门子3508的机器稳定性非常好,来张特写。
后来因为3508的电池不行了,因为比较老买不到电池,充电器和数据线用的同一个接口不能同时使用, 以后可以改造一下,增加供电线路可以继续使用。
图中第2和3都是NOKIA的了, 安装好PC套件,虚拟串口为COM5,驱动不稳定有时候连接不上。
图中第4和5都是国产小品牌,一个是友利通 还有一个不清楚牌子,他们使用的都是MTK方案。 USB转串口芯片是MT6227驱动,比较头痛的是 USB转换芯片不稳定经常发送成功几条短信以后就没有响应了,这个时候关闭串口,重新初始化串口连接也不行。 必须把USB数据线拔掉重新插才可以,一直没有好的解决方案。
接下来就是本文的主角GSM MODEM ,采用的是法国WAVECOM公司的工业级芯片。 来张特写
这里使用的操作系统是CentOS 5.5 ,
查看USB设备 cat /proc/bus/usb/devices
能够看到这样一项: USB-Serial Controller
中间是USB鼠标 USB Optical Mouse
下面是设备, USB转串口控制器
我们通过lsusb命令查看USB设备
lspci工具可以显示所有PCI总线信息,并列出与它们相连的硬件设备。Lspci对于集成声卡和显卡的X86主板尤其有用,因为它可以识别使用在主板PCI电路中的确切芯片。
lsusb工具可提供USB总线和连接设备的同类信息。
[root@host dev]# lsusb
Bus 004 Device 001: ID 0000:0000
Bus 003 Device 004: ID 067b:2303 Prolific Technology, Inc. PL2303 Serial Port
Bus 003 Device 001: ID 0000:0000
Bus 003 Device 002: ID 192f:0616 Avago Technologies, Pte.
Bus 001 Device 001: ID 0000:0000
Bus 002 Device 001: ID 0000:0000
Bus 005 Device 001: ID 0000:0000
[root@host dev]#
这里用的 是PL2303 转换芯片,非常稳定。
我们在Windows里都是用超级终端访问COM接口, 在LINUX下怎么查看呢?
我们可以直接查看 /dev 里设备, 一般ttyUSB 开头的, 我们可以用命令 ls /dev/tty* 查看。
接下来就是测试连接到串口的连接是否正常, 输入minicom -s ,minicom 相当于windows里的超级终端, -s 参数是配置。
这里选择 Serial Port setup,配置串口
这里按A配置我们刚才查到的设备 ttyUSB0 , 按E配置波特率为9600 ,波特率越小传输的信号越稳定。这里数据线很短就无所谓了。
配置好以后 我们可以输入minicom连接设备, 下面是连接成功的图, 输入at 设备可以响应OK, 输入 AT+IPR?指令 查询设备的波特率。
端口配置好以后, 我们可以安装软件了。
这里我们安装 gnokii, 下载 gnokii-0.6.29.tar.bz2 程序,
wget http://linuxfile.pipc.net/file/gnokii/gnokii-0.6.29.tar.bz2
编译出现错误 : configure: error: Your intltool is too old. You need intltool 0.35.0 or later. 需要安装高版本的,这里我们下载4.0版本的编译
wget http://linuxfile.pipc.net/file/gnokii/intltool-0.40.6.tar.gz 你也可以到官方下载 http://ftp.acc.umu.se/pub/gnome/sources/intltool/0.40/
tar zxvf intltool-0.40.6.tar.gz
然后编译intltool 成功以后,再次编译 gnokii 。
编译成功后, 在/ect 下建立 gnokiirc 文件, 可以直接从
/usr/local/share/doc/gnokii/sample/gnokiirc 这个文件复制, 直接修改一下参数就可以了。
你也可以直接下载配置好的, 这里是我配置成功的配置文件 http://linuxfile.pipc.net/file/gnokii/gnokiirc
修改部分文件
[global]
port = /dev/ttyUSB0 #这个很重要,端口设备一定要填写正确
model = AT #这里是使用AT指令
##同时需要注释掉mode = 6510 #如果不是用诺基亚手机发送短信就把这个注释掉
serial_baudrate = 9600 #这个非常重要设备的波特率一定要设置正确
use_locking = no ; #发送短信有程序控制, 不能同时发送。 这里写NO实解决其他问题
#### use_locking
通过指令发送短信:
echo "短信内容" | gnokii --sendsms 手机号码
echo -n "老婆老婆我爱你,就像老鼠爱大米" |/usr/local/bin/gnokii --sendsms 130130*****
一般 2-5秒发送一条短信比较合适,可以使用C语言的system函数可以调用gnokii的命令来实现短信收发删,C语言,PHP,JAVA 进行二次开发比较容易。
作者:方贤钟 网站: http://www.pipc.net/ E-mail: fangxianzhong@163.com
这里我们还有图形界面的程序, 因为服务器没有开远程桌面, 直接用相机照的。