概述
可以把GSM调制解调器连接到RouterOS设备上,用它来发送和接收短信。RouterOS将这种调制解调器列为串口,出现在 /port print列表中。GSM标准定义了发送SMS信息的AT命令,并定义了这些命令中信息的编码方式。
高级工具包提供了命令/tool sms send,使用标准的GSM AT命令来发送短信。
发送
/tool sms send
例子
为ppp接口发送命令:
/tool sms send usb3 "20000000" \ message="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#\$%^&*(){}[]\"'~"
对于LTE接口,在端口栏中使用LTE接口名称:
/tool sms send lte1 "20000000" \ message="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#\$%^&*(){}[]\"'~"
| 参数 | 说明 |
|---|---|
| port (string) | GSM调制解调器所连接的 /port 列表中的端口名称。 |
| phone-number (string) | 接收方电话号码。允许的字符是 "0123456789*#abc"。如果第一个字符是 "+",则电话号码类型被设置为 国际,否则被设置为_未知_。 |
| channel (integer) | 发送时使用哪个调制解调器频道。 |
| message (string) | 信息内容。它使用GSM 7编码(目前不支持UCS2),所以消息长度限制在160个字符(字符^{}\[]~ |
| smsc (string) | |
| type (string) | 如果设置为 class-0,则发送0类短信。它会立即显示,而不存储在手机中。 |
USSD信息
USSD(非结构化补充服务数据)信息可用于与移动网络供应商沟通,以接收额外的信息,启用额外的服务或向预付卡添加资金。USSD信息可以通过使用AT命令来处理(命令可能不同,甚至可能在某些调制解调器上被阻止)。
必须激活3G或GSM网络模式才能使用这一功能,因为仅在LTE模式下不支持这一功能(R11e-LTE 调制解调器自动切换到3G模式来发送USSD消息)。
PDU(协议数据单元)消息及其解密版本会在LTE调试日志中打印出来。
示例
检查LTE调试日志是否激活:
/system logging print
Flags: X - disabled, I - invalid, * - default
# TOPICS ACTION PREFIX
0 * info memory
1 * error memory
2 * warning memory
3 * critical echo
如果没有日志条目,则运行命令来添加:
/system logging add topics=lte,!raw
/system logging print
Flags: X - disabled, I - invalid, * - default
# TOPICS ACTION PREFIX
0 * info memory
1 * error memory
2 * warning memory
3 * critical echo
4 lte,!raw memory
要从*245#接收账户状态
/interface lte at-chat lte1 input="AT+CUSD=1,\"*245#\",15"
output: OK
/log print
11:51:20 lte,async lte1: sent AT+CUSD=1,"*245#",15
11:51:20 lte,async lte1: rcvd OK
11:51:23 lte,async,event +CUSD: 0,"EBB79B1E0685E9ECF4BADE9E03", 0
11:51:23 gsm,info USSD: konta atlikums
接收
从v3.24开始,RouterOS也支持接收短信,并且可以执行脚本,甚至回复发件人。
在路由器可以接收短信之前,需要在一般的 /tool sms 菜单中进行相关配置。以下是可配置的参数:
| 参数 | 说明 |
|---|---|
| allowed-number (string; Default: "") | 允许运行命令的发送者号码,必须指定国家代码,如:+371XXXXXXX。 |
| channel (integer; Default: 0) | 接收时使用哪个调制解调器频道。 |
| keep-max-sms (integer; Default: 0) | 将保存的最大信息数量。如果设置的这个数字大于SIM卡支持的数字,新的信息将不会接收 从RouterOS v6.44.6开始被 自动擦除 参数所取代。 |
| auto-erase (yes | no; Default: no) | 自动读取SIM卡存储大小。当 auto-erase=no时,如果存储空间已满,将不会收到新的短信。设置 auto-erase=yes,可以自动删除收到的最旧短信,为新短信释放空间。从6.44.6版本开始可用。 |
| port (string; Default: (unknown)) | 调制解调器端口(调制解调器只能由一个进程使用 "/port> print" ) |
| receive-enabled (yes | no; Default: no) | 必须打开才能接收信息。 |
| secret (string; Default: "") | 秘密密码,必须打开。 |
Basic Example configuration to be able to view received messages:
/tool sms set receive-enabled=yes port=lte1
/tool/sms/print
status: running
receive-enabled: yes
port: lte1
channel: 0
secret:
allowed-number:
auto-erase: no
sim-pin:
last-ussd:
Inbox
/tool sms inbox
如果启用了阅读器,会在这个子菜单中看到收到的信息:
只读属性:
| 属性 | 描述 |
|---|---|
| phone (string) | 发送者的电话号码。 |
| message (string) | 信息主体 |
| timestamp (time) | 收到信息的时间。它是运营商发送的时间,而不是路由器的本地时间。 |
| type (string) | 消息类型 |
语法
:cmd SECRET script NAME [[ VAR[=VAL] ] ... ]
SECRET - 密码
NAME - 脚本的名称,可在"/system script "中找到。
VAR - 传递给脚本的变量(以VAR或VAR=value的形式传递),用空格分隔。
其他需要记住的事情:
如果有必要,参数可以放在引号中 "VAR"="VAL"
不支持值的转义(VAR="")
不支持组合短信,每条短信都会被单独处理
不支持16位的unicode信息
短信是用标准的GSM7字母解码的,所以你不能用其他编码发送,否则会被错误地解码
例子
错误:
:cmd script mans_skripts
:cmd slepens script mans skripts
:cmd slepens script mans_skripts var=
:cmd slepens script mans_skripts var= a
:cmd slepens script mans_skripts var=a a
正确:
:cmd slepens script mans_skripts
:cmd slepens script "mans skripts"
:cmd slepens script mans_skripts var
:cmd slepens script mans_skripts var=a
:cmd slepens script mans_skripts var="a a"
调试
/tool sms send 命令正在记录写入和读取的数据。它用标签 gsm,debug,write 和 gsm,debug,read 来记录,更多信息见系统日志。
实施细节
使用 AT+CMGS 和 AT+CMGF 命令。端口在命令执行期间被获取,不能被其他RouterOS组件同时使用。信息发送过程可能需要很长的时间,在最初的AT命令交换过程中,一分钟后和两秒钟后就会超时。