Funktionskonverter zum Senden von Nachrichten in russischer Sprache an Telegramm von Mikrotik RouterOS

Messenger Telegram ist äußerst praktisch, um über den Betrieb von IT-Geräten zu benachrichtigen, die von Systemadministratoren aktiv verwendet werden. Beliebte WhatsApp- und Viber-APIs unterstützen, verfügen jedoch nicht über eine integrierte Technologie zum Erstellen eigener Bots.



RouterOS der bekannten Firma Mikrotik erlaubt es nicht, Nachrichten in russischer Sprache mit regulären Mitteln an Telegram zu senden. Russische Zeichen können in Nachrichten angemessen angezeigt werden, wenn sie in UTF-8-Codierung gesendet werden. Nun, die Codes sind bekannt, warum nicht einen Transcoder schreiben?



Um die Aufgabe zu vereinfachen, habe ich keine Konvertierungsalgorithmen verwendet, sondern ein Schlüsselarray erstellt, das in Form von Schlüsseln die russischen Zeichen selbst in Zeichenfolgen- und Großbuchstabenlayouts und die entsprechenden Werte enthält - die Codes dieser Zeichen in UTF-8.



Dieses Datenarray kann auch für andere Aufgaben nützlich sein:



Schlüsselarray von Zeichen des russischen Alphabets und die Werte ihrer Codes in UTF8
#  table of the codes of Russian letters UTF8
:local rsimv [:toarray {""="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"}]






Jetzt schreiben wir direkt den String Converter selbst.

Bei der Eingabe muss die Variable $ string eine Zeichenfolge enthalten, die russischen oder gemischten russisch-englischen Text enthält. Die Ausgabe ist eine gesammelte Zeichenfolge, die zum Senden an ein Telegramm bereit ist. Gleichzeitig werden lateinisch-afavitische Zeichen und Satzzeichen nicht neu codiert, da sie normalerweise in den Messenger-Chats angezeigt werden. Anstelle von russischen Zeichen werden ihre Gegenstücke in UTF-8-Codes in die Zeichenfolge eingefügt, die durch "%" -Zeichen getrennt sind und von Telegram zur Anzeige codierter Zeichen verwendet werden.



# 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 ("%"."$[:pick ($rsimv->$keys) 0 2]"."%"."$[:pick ($rsimv->$keys) 2 4]");} else={:set $code $keys}; :set $StrTele ("$StrTele"."$code")}




Lassen Sie uns all dies in die FuncStrToTele-Funktion umwandeln, damit Sie es von jedem Ihrer Skripte in RouterOs Mikrotik aus aufrufen können. Sie können es auch in DUDe verwenden. Hier ist der vollständige Code (Sie können RouterOS Mikrotik in das Repository Ihrer Skripte einfügen und das Skript ausführen, um die Funktion in der Skriptumgebung / system zu platzieren):



Mixed String Converter Funktion
# Function Converter of Russian characters for sending in Telegram

# by Sertik 09/09/2020

# usage [$FuncStrToTele « String .,!+»]



:global FuncStrToTele do={

:local string; :set $string $1;



# table of the codes of Russian letters UTF8

:local rsimv [:toarray {«»=«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»; "№"=«0023»}]



# 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 ("%"."$[:pick ($rsimv->$keys) 0 2]"."%"."$[:pick ($rsimv->$keys) 2 4]");} else={:set $code $keys}; :set $StrTele ("$StrTele"."$code")}



:return $StrTele;

}





Wie Sie dem Kommentar entnehmen können, ist der einzige Parameter der Funktion die Eingabezeichenfolge. Die Funktion gibt die generierte Zeichenfolge zurück, die an die Variable $ string gesendet werden soll.



Vergessen Sie in unseren Skripten nicht, eine zuvor definierte Funktion zu deklarieren, die aufgerufen werden soll:



:global FuncStrToTele
[$FuncStrToTele ", user !"]




Um eine Nachricht zu senden, müssen Sie Ihren Bot in Telegram erstellen, dessen API BOTToken und Chat-ID herausfinden. Anweisungen zum Erstellen von Bots und zum Abrufen von IDs wurden mehrmals veröffentlicht. Sie können sich beispielsweise die folgenden Links ansehen:





Wir senden unsere Testnachricht an den Bot-Chat:



:local botID "botXXXXXXXXX:XXXXXXXXXXXXXXXXXXXXXXXXX" ;
:local myChatID "YYYYYY" ;
:global FuncStrToTele;
:local string [$FuncStrToTele "  Sertik !  - Russian alfabit  Telegramm"]
:tool fetch url=("https://api.telegram.org/$botID/sendmes ... xt=$string") keep-result=no


Überprüfen Sie, ob es für mich gut funktioniert. Jetzt können Sie ganz einfach Nachrichten in russischer Sprache an Telegram senden! Kommentare und Ergänzungen sind willkommen.



Es ist wahrscheinlich ratsam, das Senden eines Zeilenvorschub-Zeichencodes hinzuzufügen. Dies ist nicht schwierig.



All Articles