Page tree


It is possible to connect a GSM modem to the RouterOS device and use it to send and receive SMS messages. RouterOS lists such modem as a serial port that appears in the port listing. GSM standard defines AT commands for sending SMS messages and defines how messages should be encoded in these commands.

'advanced-tools' package provides a command '/tool sms send' that uses standard GSM AT commands to send SMS.

Sub-menu: /tool sms

Package: advanced-tools


Command: /tool sms send


Sending command for ppp interface:

/tool sms send usb3 "20000000" \

For LTE interface use LTE interface name in the port field:

/tool sms send lte1 "20000000" \

Send command takes the following parameters:

port (string)Name of the port from /port list that the GSM modem is attached to.
phone-number (string)Recipient phone number. Allowed character is "0123456789*#abc". If the first character is "+" then the phone number type is set to international, otherwise, it is set to unknown.
channel1 (integer)Which modem channel to use for sending.
message (string)Message contents. It is encoded using GSM 7 encoding (UCS2 currently is not supported), so message length is limited to 160 characters.
smsc (string)
type (string)If set to class-0, then send class 0 SMS message. It is displayed immediately and not stored on the phone.


Since V3.23 there is one port per modem, and modem has channels used for commands and data. Channels have numbers 0,1,2, etc. Some modems may have just two channels, some have more. The SMS tool has channel support since v3.28

USSD messages

USSD (Unstructured Supplementary Service Data) messages can be used to communicate with the mobile network providers to receive additional information, enabling additional services or adding funds to prepaid cards. USSD messages can be processed by using AT commands (commands can differ or even may be blocked on some modems).

3G or GSM network modes must be activated to use this functionality, as it's not supported under LTE only mode (R11e-LTE modem auto switches to 3G mode to send out USSD message).

PDU (Protocol Data Unit) message and its decrypted version are printed under LTE debug logging.


Check if LTE debug logging is active:

/system logging print
Flags: X - disabled, I - invalid, * - default 
 #    TOPICS                                  ACTION                                  PREFIX    
 0  * info                                    memory                                            
 1  * error                                   memory                                            
 2  * warning                                 memory                                            
 3  * critical                                echo                                          

If there is no logging entry add it by running this command:

/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                                                     

To receive account status from *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


Since v3.24 RouterOS also supports receiving of SMS messages, and can execute scripts, and even respond to the sender.

Before the router can receive SMS, the relevant configuration is required in the general /tool sms menu. Following parameters are configurable:

allowed-number (string; Default: "")Sender number that will be allowed to run commands, must specify country code ie. +371XXXXXXX
channel (integer; Default: 0)Which modem channel to use for receiving.
keep-max-sms (integer; Default: 0)A Maximum number of messages that will be saved. If you set this bigger than SIM supports, new messages will not be received!'
port (string; Default: (unknown))Modem port (modem can be used only by one process "/port> print" )
receive-enabled (yes | no; Default: no)Must be turned on to receive messages
secret (string; Default: "")The secret password, mandatory


Sub-menu: /tool sms inbox

If you have enabled the reader, you will see incoming messages in this submenu.

Read-only properties:

phone (string)Senders phone number.
message (string)Message body
timestamp (time)A Time when the message was received. It is the time sent by the operator, not the router's local time.
type (string)Message type


:cmd SECRET script NAME [[ VAR[=VAL] ] ... ]
  • SECRET - The password.
  • NAME - Name of the script that's available in "/system script".
  • VAR - Variables that will be passed to the script (can be passed as VAR or as VAR=value), separated by spaces.

Other things to remember:

  • *Parameters can be put into quotes "VAR"="VAL" if necessary.
  • *Escaping of values is not supported (VAR="\"").
  • *Combined SMS is not supported, every SMS will be treated separately
  • * 16Bit Unicode messages are not supported
  • * SMS is decoded with the standard GSM7 alphabet, so you can't send in other encodings, otherwise, it will be decoded incorrectly



:cmd script my_script
:cmd slepens script my script
:cmd slepens script my_script var=
:cmd slepens script my_script var= a
:cmd slepens script my_script var=a a


:cmd slepens script my_script
:cmd slepens script "my script"
:cmd slepens script my_script var
:cmd slepens script my_script var=a
:cmd slepens script my_script var="a a" 


/tool sms send command is logging data that is written and read. It is logged with tags gsm, debug, write and gsm, debug, read For more information see System Log.

Implementation details

AT+CMGS and AT+CMGF commands are used. Port is acquired for the duration of the command and cannot be used concurrently by another RouterOS component. Message sending process can take a long time, it times out after a minute and after two seconds during initial AT command exchange.

  • No labels