:global sendSMS do={
# Example:
# :put [$sendSMS lteIP="192.168.8.1" phone="+34XXXXXXXXX" sms="test sms via lte api"]
:local lteIP "192.168.8.1"
:global tokenParser
# get SessionID and Token via LTE modem API
:local urlSesTokInfo "http://$lteIP/api/webserver/SesTokInfo"
:local api [/tool fetch $urlSesTokInfo output=user as-value]
:local apiData ($api->"data")
# parse SessionID and Token from API session data
:local apiSessionID [($tokenParser->"getTag") source=$apiData tag="SesInfo"]
:local apiToken [($tokenParser->"getTag") source=$apiData tag="TokInfo"]
# header and data config
:local apiHead "Content-Type:text/xml,Cookie: $apiSessionID,__RequestVerificationToken:$apiToken"
:local sendData "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><Index>-1</Index><Phones><Phone>$phone</Phone></Phones><Sca></Sca><Content>$sms</Content><Length>-1</Length><Reserved>1</Reserved><Date>-1</Date></request>"
# send SMS via LTE modem API with fetch
:return [/tool fetch http-method=post http-header-field=$apiHead url="http://$lteIP/api/sms/send-sms" http-data=$sendData output=user as-value]
}
[admin@MikroTik] > :put [$sendSMS lteIP=“192.168.8.1” phone=“+34XXXXXXXXX” sms=“test sms via lte api”]
data=<?xml version="1.0" encoding="UTF-8"?>
OK
;downloaded=0;status=finished @MIG85
:global sendSMS do={
# Example:
# :put [$sendSMS lteIP="192.168.8.1" phone="+34XXXXXXXXX" sms="test sms via lte api"]
:local lteIP "192.168.8.1"
:global tokenParser
# get SessionID and Token via LTE modem API
:local urlSesTokInfo "http://$lteIP/api/webserver/SesTokInfo"
:local api [/tool fetch $urlSesTokInfo output=user as-value]
:local apiData ($api->"data")
# parse SessionID and Token from API session data
:local apiSessionID [($tokenParser->"getTag") source=$apiData tag="SesInfo"]
:local apiToken [($tokenParser->"getTag") source=$apiData tag="TokInfo"]
:local time;
:set time [/system clock get time];
:local date [/system clock get date];
# header and data config
:local apiHead "Content-Type:text/xml,Cookie: $apiSessionID,__RequestVerificationToken:$apiToken"
:global sendData "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><Index>-1</Index><Phones><Phone>$phone</Phone></Phones><Sca></Sca><Content>$sms</Content><Length>-1</Length><Reserved>1</Reserved><Date>$date $time</Date></request>"
# send SMS via LTE modem API with fetch
:return [/tool fetch http-method=post http-header-field=$apiHead url="http://$lteIP/api/sms/send-sms" http-data=$sendData output=user as-value]
}
[admin@MikroTik] > :put [$sendSMS2 lteIP=“192.168.8.1” phone=“+34XXXXXXXXX” sms=“test sms via lte api2”]
data=<?xml version="1.0" encoding="UTF-8"?>
OK
;downloaded=0;status=finished
My USB modem model is Huawei E3372h-320, I have not tested it on other models. If you follow the above instructions it should work.
According to error code 100005 it corresponds to “ERROR_FORMAT_ERROR”.
Also, the date format you have is the one before v7.10 (aug/09/2023). I would try a version >=v7.10 where the date comes with the international ISO 8601 format (2023-08-09) which matches the date format of the Huawei modem.
What exact model is your modem? It has only worked on my model E3372h-320, on Huawei B311s-220 and E8372h-155 this method has not worked.
# Message received in the Inbox
<?xml version="1.0" encoding="UTF-8"?>
<response>
<Count>1</Count>
<Messages>
<Message>
<Smstat>0</Smstat>
<Index>40000</Index>
<Phone>+34XXXXXXXXX</Phone>
<Content>Lorem ipsum dolor sit amet, consectetur adipiscing elit</Content>
<Date>2023-02-08 16:44:19</Date> <== ORIGINAL ISO FORMAT
<Sca></Sca>
<SaveType>0</SaveType>
<Priority>0</Priority>
<SmsType>1</SmsType>
</Message>
</Messages>
</response>