О функциях в скриптах
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 164
- Зарегистрирован: 23 июл 2013, 18:47
Ну по сути это функция, и довольно опасная для памяти. Если кто-то сообразит как её переделать для записи в конец без чтения и конканцинации, то вообще будет круто.
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Новая версия функции FuncAS 1.7 от 10.02.2023 г.
Добавлено новое:
- подфункция [$FuncAS->"whatsap"] - для отправки сообщений в WhatsApp через сервис www.callmeBot.com
(сервис платный)
- подфункция [$FuncAS->"smsHW"] - отправка SMS через API модемов Huawey с поддержкой транслитерации
русского языка
Добавлено новое:
- подфункция [$FuncAS->"whatsap"] - для отправки сообщений в WhatsApp через сервис www.callmeBot.com
(сервис платный)
- подфункция [$FuncAS->"smsHW"] - отправка SMS через API модемов Huawey с поддержкой транслитерации
русского языка
Код: Выделить всё
#-------------------------------------------------------------------------------------------------------------
# FuncAS version 1.7 by Sertik (Serkov S.V.) 09/01/2022-09/02/2023
#-------------------------------------------------------------------------------------------------------------
# полностью корректно работает при отправке сообщений на английском языке и/или русском языке с опцией "translite" и с учётом ограничения длины сообщения
# поддерживает спец. символы \$@!#%'()*+,-./:;<=>?[]^_`{|}~
;
# для Телеграмм, API sms.ru и большинства почтовых клиентов (проверено для mail.ru, yandex.ru и gmail.com)
# есть поддержка национального (русского) текста
# для Телеграмм (опционально $1="translite") и отправки SMS через модемы работает транслитерация русских символов в латинские
;
# - на роутере должны быть сконфигурированы /tool sms и /tool e-mail
# - при использовании ключа "telegram" должны быть определены global Emoji (Emoji роутера, по желанию), botID и myChatID)
# - при использовании ключа "wathsapp" должны быть определены global Emoji (по желанию), WhatsAppPhone и WhatsAppApiKey сервиса www.callmeBot;
# - при использовании ключа "smsAPI" должна быть определена global apikey (ключ аккаунта на sms.ru)
# - при использовании ключа "smsLT" должны быть определены global Ladr (адрес Laurent-5G в сети) и Lpass (пароль авторизации модуля)
# - при использовании ключа "smsNP" должны быть определены global NPadr (адрес шлюза Netping в сети), NPuser (login), NPpass (пароль)
# - при использовании ключа "smsHW" параметры для доступа к API Huawey модемов задаются в $0, $1 и $2
# ! выбор номера телефона получателя при всех вариантах отправок sms осуществляется в порядке $1 (из параметра функции) -> $ADMINPHONE (global var) ->
# -> first [/tool sms get allowed-number] по алгоритму "если не указан, то следующий"
# ! номера телефонов указывать в международном формате (+7десятизначный номер) поддерживается отправка sms только по России (+7)
# ! выбор почтового адреса получателя при отправке e-mail осуществляется аналогично в порядке $1 -> $ADMINMAIL (global var)
#
# ! обратить внимание:
# в отличие от обычных функций, которые в $0 хранят своё имя, первый параметр функции массива будет $0 !, второй $1 и т .д....
# вызов функции без ключа [$FuncAS "you mesage"] вызывает последовательную работу всех элементов функции и равноценен [($FuncAS->"all") "you mesage"]
#
# Usage: [($FuncAS->"telegram") "you mesage"]
# [($FuncAS->"whatsap") "you mesage"]
# [($FuncAS->"sms") "you mesage" "phone number"]
# [($FuncAS->"sms") "you mesage" (phone number get from ADMINPHONE or first [/tool sms get allowed-number];
# [($FuncAS->"smsAPI") "you mesage" "phonenumber"]
# [($FuncAS->"smsAPI") "you mesage" (phone number get from ADMINPHONE or or first [/tool sms get allowed-number];
# [($FuncAS->"smsNP") ("привет text H"."\\"."\$"." @!#%'()*+,-./:;<=>?[]^_`{|}~") "+79104797703"]
# [($FuncAS->"smsLT") ("good by world") 2]
# [($FuncAS->"smsHW") address WEB modem API, phone number, "you message"]
# [($FuncAS->"email") "you mesage" "e-mail"]
# [($FuncAS->"email") "you mesage"] (e-mail get from $ADMINMAIL)
# [($FuncAS->"all") "you mesage"] (e-mail get from $ADMINMAIL)
# !!! [$FuncAS "you mesage"] = [($FuncAS->"all") "you mesage"] (execute last key - all functions !)
# see also the examples at the end of the function code !
# defining global users variables:
:global Emoji; # :global Emoji "%E2%9B%BA"
:global botID; # :global botID "botXXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
:global myChatID; #:global myChatID "XXXXXXXXX";
:global ADMINPHONE; #:global ADMINPHONE "+7910777777"
:global ADMINMAIL; # :global ADMINMAIL user@mail.ru
:global Ladr; # :global Ladr 192.168.0.10
:global Lpass; # :global Lpass Laurent5G password
:global NPadr; # :global NPadr 192.168.0.10:8080
:global NPuser; # :global NPuser Sertik
:global NPpass; # :global NPpass NPpassword
:global apikey; # :global apikey ХХХХХХХХ-ХХХХ-ХХХХ-ХХХХ-ХХХХХХХХХХХХ
:global WhatsAppPhone; # :global WhatsAppPhone user phone number
:global WhatsAppApiKey; # :global WhatsApp callmeBot ApiKey
:global FuncAS [:toarray ""]
# function transliteration
# string for transliteration is set in the parametr name "string"
:set ($FuncAS->"translite") do={
# table of the codes of Russian letters Translite
:local rsimv [:toarray {"А"="A"; "Б"="B"; "В"="V"; "Г"="G"; "Д"="D"; "Е"="E"; "Ж"="ZH"; "З"="Z"; "И"="I"; "Й"="J"; "К"="K"; "Л"="L"; "М"="M"; "Н"="N"; "О"="O"; "П"="P"; "Р"="R"; "С"="S"; "Т"="T"; "У"="U"; "Ф"="F"; "Х"="KH"; "Ц"="C"; "Ч"="CH"; "Ш"="SH"; "Щ"="SCH"; "Ъ"="``"; "Ы"="Y`"; "Ь"="`"; "Э"="E`"; "Ю"="JU"; "Я"="YA"; "а"="a"; "б"="b"; "в"="v"; "г"="g"; "д"="d"; "е"="e"; "ж"="zh"; "з"="z"; "и"="i"; "й"="j"; "к"="k"; "л"="l"; "м"="m"; "н"="n"; "о"="o"; "п"="p"; "р"="r"; "с"="s"; "т"="t"; "у"="u"; "ф"="f"; "х"="kh"; "ц"="c"; "ч"="ch"; "ш"="sh"; "щ"="sch"; "ъ"="``"; "ы"="y`"; "ь"="`"; "э"="e`"; "ю"="ju"; "я"="ya"; "Ё"="Yo"; "ё"="yo"; "№"="#"}]
# encoding of the symbols and аssembly line
:local StrTele ""; :local code "";
:for i from=0 to=([:len $string]-1) do={:local keys [:pick $string $i (1+$i)];
:local key ($rsimv->$keys); if ([:len $key]!=0) do={:set $code ($rsimv->$keys);} else={:set $code $keys};
:if (($keys="Ь") and ([:pick $string ($i+1) (2+$i)]="Е")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="ь") and ([:pick $string ($i+1) (2+$i)]="е")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="Ь") and ([:pick $string ($i+1) (2+$i)]="е")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="ь") and ([:pick $string ($i+1) (2+$i)]="Е")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="Ы") and ([:pick $string ($i+1) (2+$i)]="Й")) do={:set $code "I"; :set $i ($i+1)}
:if (($keys="ы") and ([:pick $string ($i+1) (2+$i)]="й")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="ы") and ([:pick $string ($i+1) (2+$i)]="Й")) do={:set $code "i"; :set $i ($i+1)}
:if (($keys="Ы") and ([:pick $string ($i+1) (2+$i)]="й")) do={:set $code "I"; :set $i ($i+1)}
:set $StrTele ("$StrTele"."$code")}
:return $StrTele
}
:set ($FuncAS->"cp1251toutf8") do={
:local cp1251 [:toarray {
"\20";"\01";"\02";"\03";"\04";"\05";"\06";"\07";"\08";"\09";"\0A";"\0B";"\0C";"\0D";"\0E";"\0F";\
"\10";"\11";"\12";"\13";"\14";"\15";"\16";"\17";"\18";"\19";"\1A";"\1B";"\1C";"\1D";"\1E";"\1F";\
"\21";"\22";"\23";"\24";"\25";"\26";"\27";"\28";"\29";"\2A";"\2B";"\2C";"\2D";"\2E";"\2F";"\3A";\
"\3B";"\3C";"\3D";"\3E";"\3F";"\40";"\5B";"\5C";"\5D";"\5E";"\5F";"\60";"\7B";"\7C";"\7D";"\7E";\
"\C0";"\C1";"\C2";"\C3";"\C4";"\C5";"\C6";"\C7";"\C8";"\C9";"\CA";"\CB";"\CC";"\CD";"\CE";"\CF";\
"\D0";"\D1";"\D2";"\D3";"\D4";"\D5";"\D6";"\D7";"\D8";"\D9";"\DA";"\DB";"\DC";"\DD";"\DE";"\DF";\
"\E0";"\E1";"\E2";"\E3";"\E4";"\E5";"\E6";"\E7";"\E8";"\E9";"\EA";"\EB";"\EC";"\ED";"\EE";"\EF";\
"\F0";"\F1";"\F2";"\F3";"\F4";"\F5";"\F6";"\F7";"\F8";"\F9";"\FA";"\FB";"\FC";"\FD";"\FE";"\FF";\
"\A8";"\B8";"\B9"}];
:local utf8 [:toarray {
"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"000A";"0020";"0020";"000D";"0020";"0020";\
"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";"0020";\
"0021";"0022";"0023";"0024";"0025";"0026";"0027";"0028";"0029";"002A";"002B";"002C";"002D";"002E";"002F";"003A";\
"003B";"003C";"003D";"003E";"003F";"0040";"005B";"005C";"005D";"005E";"005F";"0060";"007B";"007C";"007D";"007E";\
"D090";"D091";"D092";"D093";"D094";"D095";"D096";"D097";"D098";"D099";"D09A";"D09B";"D09C";"D09D";"D09E";"D09F";\
"D0A0";"D0A1";"D0A2";"D0A3";"D0A4";"D0A5";"D0A6";"D0A7";"D0A8";"D0A9";"D0AA";"D0AB";"D0AC";"D0AD";"D0AE";"D0AF";\
"D0B0";"D0B1";"D0B2";"D0B3";"D0B4";"D0B5";"D0B6";"D0B7";"D0B8";"D0B9";"D0BA";"D0BB";"D0BC";"D0BD";"D0BE";"D0BF";\
"D180";"D181";"D182";"D183";"D184";"D185";"D186";"D187";"D188";"D189";"D18A";"D18B";"D18C";"D18D";"D18E";"D18F";\
"D001";"D191";"2116"}];
:local convStr "";
:local code "";
:for i from=0 to=([:len $0]-1) do={
:local symb [:pick $0 $i ($i+1)];
:local idx [:find $cp1251 $symb];
:local key ($utf8->$idx);
:if ([:len $key]!=0) do={
:set $code ("%$[:pick ($key) 0 2]%$[:pick ($key) 2 4]");
:if ([pick $code 0 3]="%00") do={:set $code ([:pick $code 3 6])};
} else={:set code ($symb)};
:set $convStr ($convStr.$code);
}
:return ($convStr);
}
# part to Telegram
:set ($FuncAS->"telegram") do={
:if ([:len $0]!=0) do={
:global Emoji
:global botID;
:global myChatID;
:global FuncAS
:if (([:len $botID]=0) or ([:len $myChatID]=0)) do={:log error "ERROR FuncAs telegram chatbotID not found"; :return "ERROR telegram"}
:if ((any $1) && ($1="translite")) do={:set $0 [($FuncAS->"translite") string=$0]}
:set $0 [($FuncAS->"cp1251toutf8") $0]
:log info ""; :log warning "FuncAs start telegram sending ...";
:do {
[/tool fetch url="https://api.telegram.org/$botID/sendmessage\?chat_id=$myChatID&text=$Emoji $0" keep-result=no;]
} on-error={:log error "ERROR FuncAs telegram send"; :return "ERROR telegram"}
:log warning "FuncAs message to telegram send"; :log info "";
:return "done telegram"
} else={:log error "ERROR FuncAs telegram send but no message text"; :return "ERROR telegram" }
}
# part to sms from modem
:set ($FuncAS->"sms") do={
:if ([:len $0]!=0) do={
:local SMSdevice [/tool sms get port];
:local NumPhone
:global ADMINPHONE;
:if ([:len $1]!=0) do={:set NumPhone $1} \
else={
:if ([:len $ADMINPHONE]!=0) do={:set NumPhone $ADMINPHONE} \
else={
:local NumSMS [/tool sms get allowed-number];
:if ([:len $NumSMS]!=0) do={:set NumPhone ($NumSMS->0)} \
else={:log error "ERROR FuncAs sms phone number not found"; :return "ERROR sms"}
}}
# must be performed translite
:global FuncAS
:set $0 [($FuncAS->"translite") string=$0]
:log info ""; :log warning "FuncAS start sms sending to $NumPhone";
:do {
[/tool sms send $SMSdevice phone=$NumPhone message=$0];
} on-error={:log error "ERROR FuncAs sms send"; :return "ERROR sms"}
:log warning "FuncAs sms sent via modem"; :log info "";
:return "done sms"
} else={:log error "ERROR FuncAs sms send but no message text"; :return "ERROR sms" }
}
# part to sms from API sms.ru
# must be configured global variable $apikey for sms.ru user
;
:set ($FuncAS->"smsAPI") do={
:if ([:len $0]!=0) do={
:local SMSanswer;
:global apikey;
:if ([:len $apikey]!=0) do={
:local NumPhone
:global ADMINPHONE;
:if ([:len $1]!=0) do={:set NumPhone $1} \
else={
:if ([:len $ADMINPHONE]!=0) do={:set NumPhone $ADMINPHONE} \
else={
:local NumSMS [/tool sms get allowed-number];
:if ([:len $NumSMS]!=0) do={:set NumPhone ($NumSMS->0)} \
else={:log error "ERROR FuncAs smsAPI phone number not found"; :return "ERROR smsAPI"}
}}
:log info ""; :log warning "FuncAS start smsAPI sending to $NumPhone";
:do {
:set SMSanswer [/tool fetch url=("https://sms.ru/sms/send\?api_id="."$apikey") mode=https http-method=post http-data=("&to="."$NumPhone"."&msg="."$0"."&json=1") as-value output=user];
} on-error={:log error "ERROR FuncAs smsAPI fetch send"; :return "ERROR smsAPI"}
:if (($SMSanswer->"status")="finished") do={
:local ans;
:if ([find ($SMSanswer->"data") "ERROR"]>0) do={:set ans "ERROR smsAPI"; :log error "ERROR FuncAs smsAPI send"; :log info "";} else={:set ans "done smsAPI"; :log warning "FuncAs sms sent via API sms.ru"; :log info "";}
:return $ans;
} else={:log error "ERROR FuncAs smsAPI fetch to sms.ru"; :return "ERROR smsAPI"}
} else={:log error "ERROR FuncAs smsAPI apikey not defined"; :return "ERROR smsAPI"}
} else={:log error "ERROR FuncAs smsAPI send but no message text"; :return "ERROR smsAPI" }
}
# part to sms from Laurent-5G module
# must be configured Ladr, Lpass
:set ($FuncAS->"smsLT") do={
:if ([:len $0]!=0) do={
:local Lanswer;
:global Ladr
:global Lport
:global Lpass
:local Sport
:if (([:len $Ladr]!=0) && ([:len $Lpass]!=0)) do={
:if ([:len $0]!=0) do={
:if ([:len $1]=0) do={:set $1 "1"}
:if ([:len $Lport]=0) do={:set Sport "80";} else={:set Sport $Lport;}
# must be performed translite
:global FuncAS
:set $0 [($FuncAS->"translite") string=$0]
# replacing a space in a line with a sign "+"
# for normal space sending
:local string $0
:local StrTele
:for i from=0 to=([:len $string]-1) do={:local keys [:pick $string $i (1+$i)];
# \2B="+" or you can use \5F ("_")
:if ($keys=" ") do={:set $code "\2B";} else={:set $code $keys};
:set $StrTele ("$StrTele"."$code")}
:set $0 $StrTele;
:log info ""; :log warning "FuncAS start sms from Laurent getway sending to $1 database cell";
:local StrFetchLaurent; :set StrFetchLaurent ("http://"."$Ladr".":"."$Sport"."/cmd.cgi?psw=$Lpass&cmd=SMS,"."SND".","."$1,"."C,"."$0");
do {
:set Lanswer ([/tool fetch url=$StrFetchLaurent mode=http as-value output=user]->"data");
} on-error={: log info ""; :log error ("Call ERROR function <$0> ERROR fetch command");
:local Lanswer "ERROR $0 command ROS <fetch>"; : log info ""; :return $Lanswer}
:if ($Lanswer="#SMS,SND,OK\0D\0A") do={:log warning "FuncAs sms sent via Laurent getway"; :log info ""; :return "done smsLT";} else={
:if ($Lanswer="#ERR,NO_FREE_PLACE\0D\0A") do={:log info ""; :log error ("ERROR function FuncAS smsLT but no free place");
:log info ""; :return "ERROR FuncAS smsLT no free place"}
:if ($Lanswer="#ERR,BAD_PHN\0D\0A") do={:log info ""; :log error ("ERROR function FuncAS smsLT but invalid phone number");
:log info ""; return "ERROR FuncAS smsLT bad phone number"}
:return "ERROR smsLT unknown"}
} else={:log info ""; :log error "ERROR FuncAs smsLT parametrs no defined"; :return "ERROR smsLT"}
} else={:log info ""; :log error "ERROR FuncAS smsLT Ladr or Lpass not defined"; :return "ERROR smsLT"}
}
}
# part to sms from Netping device modem (as getway)
# [$FuncNPsendSMS "you text in utf8" "+7phonenumber"]
# должны быть определены NPadr, NPuser, NPpass
:set ($FuncAS->"smsNP") do={
:if ([:len $0]!=0) do={
:global NPadr; :global NPuser; :global NPpass;
:if (([:len $NPadr]!=0) && ([:len $NPuser]!=0) && ([:len $NPpass]!=0)) do={
:local NPanswer;
:local NumPhone
:global ADMINPHONE;
:if ([:len $1]!=0) do={:set NumPhone $1} \
else={
:if ([:len $ADMINPHONE]!=0) do={:set NumPhone $ADMINPHONE} \
else={
:local NumSMS [/tool sms get allowed-number];
:if ([:len $NumSMS]!=0) do={:set NumPhone ($NumSMS->0)} \
else={:log error "ERROR FuncAs smsNP phone number not found"; :return "ERROR smsAPI"}
}}
:if ([:pick $NumPhone 0 2]="+7") do={
# must be performed translite
:global FuncAS
:set $0 [($FuncAS->"translite") string=$0]
:log info ""; :log warning "FuncAS start sms from Netping getway sending to $NumPhone";
:do {
:set NPanswer [/tool fetch url=("http://"."$NPadr"."/sendsms.cgi\?utf8") mode=http http-method=post http-data=("["."$NumPhone"."]"." "."$0") user=$NPuser password=$NPpass as-value output=user];
} on-error={:log error "ERROR FuncAs smsNP fetch send"; :return "ERROR smsNP"}
:if (($NPanswer->"status")="finished") do={:log warning "FuncAs sms sent via Netping getway"; :log info "";
:set NPanswer ($NPanswer->"data");
:if ([:find $NPanswer "ok"]) do={:return "done smsNP"} else={:return "ERROR smsNP"}
} else={ :return "ERROR smsNP"}
} else={:log error "ERROR FuncAs smsNP invalid phone number format"; :return "ERROR smsNP"}
} else={:log error "ERROR FuncAs smsNP NPadr or NPuser or NPpass not defined"; :return "ERROR smsNP"}
} else={:log error "ERROR FuncAs smsNP send but no message text"; :return "ERROR smsNP" }
}
# part to e-mail
:set ($FuncAS->"email") do={
:if ([:len $0]!=0) do={
:global ADMINMAIL;
:if (([:len $1]=0) && ([:len $ADMINMAIL]=0)) do={:log error "ERROR FuncAs email send E-mail address not found"; :return "ERROR email"}
:if ([:len $1]!=0) do={} else={:set $1 $ADMINMAIL}
:local smtpserv
:do {
:set smtpserv [:resolve [/tool e-mail get address]];} on-error={:log error "ERROR FuncAs email no resolve email server"; :return "ERROR email"}
:local Eaccount [/tool e-mail get user];
:local pass [/tool e-mail get password];
:local Eport [/tool e-mail get port];
:local Etls "yes"; # если не используется установить в "no";
:log info " "; :log warning ("FuncAS start mail sending ... to e-mail: $1");
:do {
# [/tool e-mail send from="<$Eaccount>" to=$1 server=$smtpserv \
# port=$Eport user=$Eaccount password=$pass start-tls=$Etls subject=("from FuncAS Router $[/system identity get name]\r\nMIME-Version: 1.0\r\nContent-Type: text/plain; charset=utf-8") body=$0;];
[/tool e-mail send from="<$Eaccount>" to=$1 server=$smtpserv \
port=$Eport user=$Eaccount password=$pass start-tls=$Etls subject=("from FuncAS Router $[/system identity get name]") body=$0;];
} on-error={:log error "ERROR FuncAs email send"; :return "ERROR email"}
:local sendit 60
:while ($sendit > 0) do={:delay 1s; :set $sendit ($sendit - 1)
:if (([tool e-mail get last-status] = "succeeded") or ([tool e-mail get last-status] = "failed")) do={:set $sendit 0}}
:if ([tool e-mail get last-status] = "succeeded") do={:log warning "FuncAs message to email send"; :log info ""; :return "done email"} \
else={:log error "ERROR FuncAs email send"; :return "ERROR email"}
} else={:log error "ERROR FuncAs email send but no message text"; :return "ERROR email" }
}
# part to sms Huawey modems web API
:set ($FuncAS->"smsHW") do={
:global ADMINPHONE;
:if (([:len $0]>0) and ([:len $1]=0)) do={:set $1 $ADMINPHONE; :set $2 $0; :set $0 "192.168.8.1"}
:if ([:len $2]=0) do={:set $2 "test sms via lte api"}
:if (([:len $1]=0) && ([:len $ADMINPHONE]=0)) do={:log error "ERROR FuncAs smsHW send phone number not found"; :return "ERROR smsHW"}
:if ([:len $1]=0) do={:set $1 $ADMINPHONE}
:if ([:len $0]=0) do={:set $0 "192.168.8.1"}
:global FuncAS
:set $2 [($FuncAS->"translite") string=$2]
# $0 - lte modem ip address
# $1 - sms destination phone number
# $2 - sms text message
:local getBetween do={
# "CuriousKiwi - mikrotik forum"
# This is a basic parser, can be used for XML
# It takes three parameters:
# inputString - The main string
# betweenStart - Text AFTER this point will be returned
# betweenEnd - Text BEFORE this point will be returned
: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;
}
# get SessionID and Token via LTE modem API
:local urlSesTokInfo "http://$0/api/webserver/SesTokInfo";
:local api [/tool fetch $urlSesTokInfo output=user as-value];
:local apiData ($api->"data");
# pars SessionID and Token from API session data
:local apiSessionID [$getBetween inputString=$apiData betweenStart="<SesInfo>" betweenEnd="</SesInfo>"];
:local apiToken [$getBetween inputString=$apiData betweenStart="<TokInfo>" betweenEnd="</TokInfo>"];
# header and data config
: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>$1</Phone></Phones><Sca></Sca><Content>$2</Content><Length>-1</Length><Reserved>1</Reserved><Date>-1</Date></request>";
# send SMS via LTE modem API with fetch
/tool fetch http-method=post output=user \
http-header-field=$apiHead \
url="http://$0/api/sms/send-sms" \
http-data=$sendData;
:return "done smsHw"
}
# part WathsApp from Calmebot
:set ($FuncAS->"whatsap") do={
:if ([:len $0]!=0) do={
:global Emoji
:global WhatsAppPhone; :if ([:len $WhatsAppPhone]=0) do={:log error "ERROR FuncAs whatsapp send phone number not found"; :return "ERROR whatsapp"}
:global WhatsAppApiKey; :if ([:len $WhatsAppApiKey]=0) do={:log error "ERROR FuncAs whatsapp send WhatsAppApiKey not found"; :return "ERROR whatsapp"}
:global FuncAS
:local StrWS [($FuncAS->"cp1251toutf8") $0]
:set StrWS ("$Emoji"."%20"."$[/system identity get name]"."%0A"."$StrWS")
do {/tool fetch url="https://api.callmebot.com/whatsapp.php\?phone=$WhatsAppPhone&text=$StrWS&apikey=$WhatsAppApiKey" keep-result=no; :return "done whatsapp"
} on-error={:log info; :log error "Error function $0 fetch"; :log info ""; :return "Error fetch"}
} else={:log info; log error "Parametrs function $0 mismatch"; :log info ""; :return "Error parametrs mismatch"}
}
# to all channels (a psevdo recursive call is used !)
# must be the last to bypass the $0 <-->$1 effect
:set ($FuncAS->"all") do={
:if ([:len $0]!=0) do={
:global FuncAS;
:global ADMINMAIL;
:local T
:local W
:local E
:local MDsms
:local APIsms
:local LTsms
:local NPsms
:local HWsms
# bypass when calling a function without keys !
:if ([:typeof $0]="lookup") do={:set $0 $1; :if ((any $2) && ($2="translite")) do={:set $1 $2}}
:set T [($FuncAS->"telegram") $0 $1]
:set W [($FuncAS->"whatsap") $0]
:set E [($FuncAS->"email") $0 $ADMINMAIL]
:set MDsms [($FuncAS->"sms") $0]
:set APIsms [($FuncAS->"smsAPI") $0]
:set LTsms [($FuncAS->"smsLT") $0]
:set NPsms [($FuncAS->"smsNP") $0]
:set HWsms [($FuncAS->"smsHW") $0]
:return [:toarray {$T;$W;$E;$MDsms;$APIsms;$LTsms;$NPsms;$HWsms}]
} else={:log error "ERROR FuncAs all but no message text"; :return "ERROR common sending" }
}
# -------------------------------------------------------------------
# examples call:
# -------------------------------------------------------------------
# :log info "ok"
# :global FuncAS
# :log info [($FuncAS->"telegram") ("Router "."$[/system identity get name]"." test function FuncAS to Telegram Hello тест функции FuncAS для Телеграмм")]
# :log info [($FuncAS->"telegram") ("Router "."$[/system identity get name]"." test function FuncAS to Telegram Hello тест функции FuncAS для Телеграмм") "translite"]
# :log info [($FuncAS->"email") ("Router "."$[/system identity get name]"." test FuncAS to e-mail проверка") "user@gmail.com"]
# :log info [($FuncAS->"email") ("Router "."$[/system identity get name]"." test FuncAS to e-mail")]
# :log info [($FuncAS->"sms") ("Router "."$[/system identity get name]"." test function FuncAS test to SMS Привет !")]
# :log info [($FuncAS->"all") ("Router "."$[/system identity get name]"." test function FuncAS all channels")]
# exception support for Telegram
# :log info [($FuncAS->"telegram") ("text H"."\\"."\$"." @!#%'()*+,-./:;<=>?[]^_`{|}~")]
# :log info [($FuncAS->"smsAPI") "Verify for Sertik" "+79107777777"]
# :log info [($FuncAS->"smsAPI")]
# :log info [($FuncAS->"smsAPI") "смс от Микротик to you" "+79657777777"]
# exception transliteration for Telegram and send SMS modem
# :log info [($FuncAS->"smsNP") ("привет text H"."\\"."\$"." @!#%'()*+,-./:;<=>?[]^_`{|}~") "+79657777777"]
# :log info [($FuncAS->"telegram") ("Router "."$[/system identity get name]"." Привет админ ! С новым годом тебя ...") "translite"]
# :log info [$FuncAS "С новым годом !"]
# :log info [$FuncAS "С новым годом !" "translite"]
# :log info [($FuncAS->"smsLT") ("good by world") 2]
# :log info [($FuncAS->"smsLT") ("привет text H"."\\"."\$"." @!#%'()*+,-./:;<=>?[]^_`{|}~") 2]
# :log info [$FuncAS "good by world" sv_user@mail.ru]
# new ! --------------------------------------------------------------------------------------------------------------
# :log info [($FuncAS->"smsHW") 192.168.8.1 "+79104770000" "good by мама"]
# :log info [($FuncAS->"whatsap") "Hello world"]
# ----------------------------------------------------------------------------------------------------------------------
# :log info [($FuncAS->"all") ("good by world до свидания мир") "translite"]
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1
- Зарегистрирован: 08 авг 2023, 12:53
Приветствую! на некоторых модемах huawei не работает конструкция <Date>-1</Date>
у меня заработало так
для прошивок RouterOS v7.10+
для прошивок младше RouterOS v7.10
у меня заработало так
для прошивок RouterOS v7.10+
Код: Выделить всё
: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]
}
Код: Выделить всё
: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];
:local months {"jan"="01";"feb"="02";"mar"="03";"apr"="04";"may"="05";"jun"="06";"jul"="07";"aug"="08";"sep"="09";"oct"=10;"nov"=11;"dec"=12};
:local day [:pick $date 4 6];:local year [:tonum [:pick $date 7 11]];:local month [:pick $date 0 3];:local mm (:$months->$month);
:local newdate "$year-$mm-$day";
# 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>$newdate $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]
}
-
- Сообщения: 4
- Зарегистрирован: 27 ноя 2017, 19:09
Привет, если при запуске скрипта в лог вываливает код самого скрипта - значит ошибка в скрипте?
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Никогда такого не видел. Лог в студию !
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947