GSM MODEM的基本用法-收发短信篇

时间:2024-04-13 16:07:13

第五步、通过绘声绘彩编辑短信并发送
编辑模板短信
点击“工具栏”的“新建信息”----》文字短信----》确定,输入短信内容之后,点击确定。
添加电话号码
在右侧空白处右击,选择“插入收件人号码”,或者点击菜单栏的“导入号码”,或者点击“菜单栏”旁边的三角选择“插入收件人号码”,在弹出的对话框中输入电话号码之后确定,右侧就会出现一个短信列队,刚刚添加的短信显示正在发送。
至于其他的,像导入电话号码、编辑彩信什么的,大家有空自己研究吧。

 

第六步、通过读取数据库短信信息发送短信
发短信用到的数据库是mbssendmsg(表名大小写无所谓),结构和字段信息帮助文档中有,我这里就不一一列出来了,只说几个有用的:
插入数据的SQL,我这里贴一个我本地的例子吧:

insert into MBSSendMsg(Sender,Recipient,MsgLevel,MsgType,Subject,URLs,MMSInfo,MsgStatus,MsgSize,RequestTime,SendStyle,SendTime,SendOutTime,DeliverTime,ScreenHeight,ScreenWidth,ComPort,MsgID,RefID,ExtendInfo,Comments,SMSSendID)values('1','10086',0,1,'测试数据','','',0,8,now(),0,'','','',200,140,1,NULL,'','','','80'),('1','10010',0,1,'测试数据','','',0,8,now(),0,'','','',200,140,1,NULL,'','','','80')

字段比较多,看起来有点费劲(写的时候也费老大劲了)。这个SQL一次性添加了两条数据。 下面给它拆一下,这样子就知道哪个字段对应于哪个值了。

insert into MBSSendMsg(Sender,Recipient,MsgLevel,MsgType,Subject,URLs,MMSInfo,MsgStatus,MsgSize,RequestTime,SendStyle,SendTime,SendOutTime,DeliverTime,ScreenHeight,ScreenWidth,ComPort,MsgID,RefID,ExtendInfo,Comments,SMSSendID)values('Sender:1','Recipient:10086', MsgLevel :0, MsgType :1,' Subject:测试数据',' URLs :空',' MMSInfo :空', MsgStatus :0, MsgSize :8, RequestTime :now(),SendStyle :0,' SendTime :空',' SendOutTime :空',' DeliverTime :', ScreenHeight :200, ScreenWidth :140, ComPort :1, MsgID :NULL,' RefID :空',' ExtendInfo :空',' Comments :空',' SMSSendID :80')

先说一下其中有用的几个字段:
Sender:发送人号码,可以不填,也可以用来记录一些有用的信息,我这里就用来存有用信息了。
Recipient:接收人号码,必须填。
MsgLevel:短信级别,0:普通发送,1:优先发送
MsgType:短信类型,1-短信
Subject:短信内容或者彩信标题
MsgStatus:发送状态,- 3:不符合规范;-2:未收到送达回执信息;-1:发送失败;0:请求发送;1:发送处理中;2:发送成功;3:信息已送达。我这里是0,请求发送。
MsgSize:信息大小(Bytes)
RequestTime:请求时间,我这里是当前时间
SendStyle:发送类型,0:即时发送 1:定时发送。我这里即时发送。
SendOutTime帮助文档解释:服务器提交时间,个人理解:短信发送成功的时间。不需要我们维护。短信发送成功之后GSM MODEM会自动修改这个字段,这样我们就知道这条短信什么时候发送成功了
RefID:帮助文档解释:参考ID。这个字段也不需要我们维护,发送成功之后会自动返回一个数字类型的数据。据说GSM MODEM在发送短信时会借助一下Access,可能这个RefID是Access某个表中的主键序号。(纯属个人猜测,有时间求证一下)

 

再说几个关键性或者有误导性的字段
误导性

ComPort:帮助文档说的是发送端口号,我的第一感觉就是:这个端口号就是发送短信时用的端口号,若用COM1这里就写1若用COM3这里就写3,若我这里的端口号跟实际发送的端口号对应不上就会发送失败。而实际上这个端口号是不需要我们维护的,绘声绘彩中设置了通道,发送这条短信时用的通道是哪个端口这个数据就是那个端口号。如:通道用的COM3发送短信成功后这个字段就会被自动修改成3,用的COM8成功后就会被修改成8。与我们自己写的1/2/3/4没有半毛钱关系。

 

关键性
MsgID:帮助文档解释:信息ID。不懂什么意思,但是这个字段必须有,要是没有,MsgStatus就会直接变成-3,也就是不符合规范,短信自然就发送不了啦。我这里的设置是将这个值与主键序号设置成相同的,且必须在发送短信之前设置(数据被写入到mbssendmsg表到GSM MODEM发送短信有一定的时间差)。如此之后,就能正常发送啦。
即时的将一个主键序号赋值给另一个值,经常能想到的首先是触发器。
以下是SQL Server版本的触发器方法:
update MBSSendMsg set MsgID=inserted.IdxNo from  inserted where MBSSendMsg.IdxNo=inserted.IdxNo;

mySQL:
update mbssendmsg set MsgID=NEW.IdxNo where mbssendmsg.IdxNo=NEW.IdxNo;
但是MySQL是不允许这样子的,一旦这样子定义会报错:
Can't update table 'mbssendmsg' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.
原因是:在一张表中的触发器,不能直接对同一张表执行 增加,删除,修改操作,防止造成死循环
因为我是用java代码直接insert的,所以我在insert之后,又update了一下
update MBSSendMsg set MsgID=IdxNo,MsgStatus=0 where MsgID is null;
(将MsgStatus设置成0是避免先前的MsgID没有数据导致MsgStatus变成了-3而不再发送,变成0请求发送)。

 

SMSSendID:这个字段GSM MODEM的系统表中是没有的,是我这里根据需要添加的。群发消息自然是只编辑一条,然后将这一条拆成多条分别发送,等发送完成后还需要更新这一条消息的发送状态和发送时间,此时SMSSendID就很有必要了。
打个比方:
我编辑了一条群发的消息,记录在table1里边,主键序号为111,它被拆成了3条短信,存到了mbssendmsg表中,它们的SMSSendID都是111。等到这3条短信一条发送成功了,它会通过SMSSendID找到table1中的那条信息,然后更新状态和发送时间。(考虑到“三条短信除了收件人不同其他都相同发送时也不会出太大娄子”的情况,其他乱七八糟的考虑自动忽略)。这个功能用触发器就可以搞定。无论是SQL Server还是MySQL,都可以(更新的是其他表不是mbssendmsg表本身,所以可以修改)。

以上是将正确的数据添加到mbssendmsg表中,但是到这里GSM MODEM还不能发送短信,还需要点一下绘声绘彩界面中菜单栏“操作”----》“开/关中转服务”,可是试用版本这个功能也是不能用的,得注册后才能用

 

以下说说注册
安装绘声绘彩之后,进入菜单栏的“帮助”----》注册,然后就会弹出如下的框:
GSM MODEM的基本用法-收发短信篇
把硬件码拷贝出来,发给厂商。
厂商名称:北京人大金仓信息技术有限公司
厂商连接:http://www.smsalert.cn/DOCC/product_dxw.htm
厂商联系方式链接:www.smsalert.cn/DOCC/yd_tech.htm
(大家也可以去网上搜这个厂商)
之后厂商会发回一个dat文件,将这个文件拷贝到绘声绘彩的安装目录下(与VividMMS.exe同级),重启绘声绘彩就注册完成了。


之后,再点击“开/关中转服务”,就能发送mbssendmsg表中的数据啦

 

第七步、收件箱
用的表:mbsrecmsg
其实这个表也不需要我们维护,只要我们数据库里边的表名(大小写无所谓)和字段与要求的一致即可。这样子当GSM MODEM收到短信时它会自动往mbsrecmsg表中写,我们只需要查看就成啦。(这个还是挺不错的)
注意点:表名和字段信息必须高度一致,一旦有些微不一致都收不到消息

基本功能就写到这里啦,其他的功能大家去碰吧,祝好运!