Привет! Этот скрипт отправляет SMS через API USB LTE модема Huawei с помощью tool/fetch (тестировалось на E3372). Надеюсь, будет полезен.
github:
:global sendSMS do={
# Отправка SMS через API LTE модема Huawei (тестировалось на E3372)
# глобальные переменные:
# lteIP - IP-адрес LTE модема (для API)
# phone - номер телефона получателя SMS
# sms - текст SMS
# пример использования
# :global sendSMS
# :put [$sendSMS lteIP="192.168.8.1" phone="+35912345678" sms="тестовое сообщение через LTE API"]
#
:local getBetween do={
# "CuriousKiwi - форум Mikrotik"
# Простой парсер, можно использовать для XML
# Принимает три параметра:
# inputString - исходная строка
# betweenStart - текст ПОСЛЕ которого надо взять данные
# betweenEnd - текст ДО которого надо взять данные
:local posStart 0;
:if ([:len $betweenStart] > 0) do={
:set posStart [:find $inputString $betweenStart]
:if ([:len $posStart] = 0) do={
:set posStart 0
} else={
:set posStart ($posStart + [:len $betweenStart])
}
}
:local posEnd 9999;
:if ([:len $betweenEnd] > 0) do={
:set posEnd [:find $inputString $betweenEnd];
:if ([:len $posEnd] = 0) do={ :set posEnd 9999 }
}
:local result [:pick $inputString $posStart $posEnd];
:return $result;
}
# Получаем SessionID и Token через API LTE модема
:local urlSesTokInfo "http://$lteIP/api/webserver/SesTokInfo";
:local api [/tool fetch $urlSesTokInfo output=user as-value];
:local apiData ($api->"data");
# Парсим SessionID и Token из данных сессии API
:local apiSessionID [$getBetween inputString=$apiData betweenStart="<SesInfo>" betweenEnd="</SesInfo>"];
:local apiToken [$getBetween inputString=$apiData betweenStart="<TokInfo>" betweenEnd="</TokInfo>"];
# Формируем заголовки и данные запроса
:local apiHead "Content-Type:application/x-www-form-urlencoded,Cookie: $apiSessionID,__RequestVerificationToken:$apiToken";
:local sendData "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><Index>-1</Index><Phones><Phone>$phone</Phone></Phones><Sca></Sca><C ontent>$sms</Content><Length>-1</Length><Reserved>1</Reserved><Date>-1</Date></request>";
# Отправляем SMS через API LTE модема с помощью fetch
/tool fetch http-method=post output=user \
http-header-field=$apiHead \
url="http://$lteIP/api/sms/send-sms" \
http-data=$sendData;
}
github:
:global sendSMS do={
# Отправка SMS через API LTE модема Huawei (тестировалось на E3372)
# глобальные переменные:
# lteIP - IP-адрес LTE модема (для API)
# phone - номер телефона получателя SMS
# sms - текст SMS
# пример использования
# :global sendSMS
# :put [$sendSMS lteIP="192.168.8.1" phone="+35912345678" sms="тестовое сообщение через LTE API"]
#
:local getBetween do={
# "CuriousKiwi - форум Mikrotik"
# Простой парсер, можно использовать для XML
# Принимает три параметра:
# inputString - исходная строка
# betweenStart - текст ПОСЛЕ которого надо взять данные
# betweenEnd - текст ДО которого надо взять данные
:local posStart 0;
:if ([:len $betweenStart] > 0) do={
:set posStart [:find $inputString $betweenStart]
:if ([:len $posStart] = 0) do={
:set posStart 0
} else={
:set posStart ($posStart + [:len $betweenStart])
}
}
:local posEnd 9999;
:if ([:len $betweenEnd] > 0) do={
:set posEnd [:find $inputString $betweenEnd];
:if ([:len $posEnd] = 0) do={ :set posEnd 9999 }
}
:local result [:pick $inputString $posStart $posEnd];
:return $result;
}
# Получаем SessionID и Token через API LTE модема
:local urlSesTokInfo "http://$lteIP/api/webserver/SesTokInfo";
:local api [/tool fetch $urlSesTokInfo output=user as-value];
:local apiData ($api->"data");
# Парсим SessionID и Token из данных сессии API
:local apiSessionID [$getBetween inputString=$apiData betweenStart="<SesInfo>" betweenEnd="</SesInfo>"];
:local apiToken [$getBetween inputString=$apiData betweenStart="<TokInfo>" betweenEnd="</TokInfo>"];
# Формируем заголовки и данные запроса
:local apiHead "Content-Type:application/x-www-form-urlencoded,Cookie: $apiSessionID,__RequestVerificationToken:$apiToken";
:local sendData "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><Index>-1</Index><Phones><Phone>$phone</Phone></Phones><Sca></Sca><C
# Отправляем SMS через API LTE модема с помощью fetch
/tool fetch http-method=post output=user \
http-header-field=$apiHead \
url="http://$lteIP/api/sms/send-sms" \
http-data=$sendData;
}
