Convertisseur de fonctions pour l'envoi de messages en russe vers un télégramme à partir de Mikrotik RouterOS

Messenger Telegram est extrêmement pratique pour notifier le fonctionnement de l'équipement informatique, qui est activement utilisé par les administrateurs système. Les API populaires WhatsApp et Viber prennent en charge les API, mais elles ne disposent pas de technologie intégrée pour créer leurs propres robots.



RouterOS de la société bien connue Mikrotik ne permet pas d'envoyer des messages en russe à Telegram par des moyens réguliers. Les caractères russes peuvent être correctement affichés dans les messages s'ils sont envoyés en codage UTF-8. Bon, les codes sont connus, pourquoi ne pas écrire un transcodeur?



Pour simplifier la tâche, je n'ai pas utilisé d'algorithmes de conversion, mais j'ai créé un tableau de clés contenant des caractères russes eux-mêmes sous la forme de clés dans des dispositions de chaînes et de majuscules, et dans les valeurs correspondantes - les codes de ces caractères en UTF-8.



Ce tableau de données peut être utile pour d'autres tâches:



Tableau clé de caractères de l'alphabet russe et valeurs de leurs codes en 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"}]






Maintenant, nous écrivons directement le convertisseur de chaîne lui-même.

La variable $ string doit contenir une chaîne contenant du texte russe ou mixte russe-anglais en entrée. La sortie est une chaîne collectée, prête à être envoyée à un télégramme. Dans le même temps, les caractères afavite latins et les signes de ponctuation ne sont pas recodés, car ils sont normalement affichés dans les chats de messagerie. Au lieu des caractères russes, leurs équivalents en codes UTF-8 sont insérés dans la chaîne, séparés par des signes «%», utilisés par Telegram pour afficher les caractères codés.



# 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")}




Formulons tout cela dans la fonction FuncStrToTele afin que vous puissiez l'appeler à partir de n'importe lequel de vos scripts dans RouterOs Mikrotik. Vous pouvez également l'utiliser dans DUDe. Voici son code complet (vous pouvez insérer RouterOS Mikrotik dans le référentiel de vos scripts et exécuter le script pour placer la fonction dans l'environnement de script / system):



Fonction de conversion de chaînes mixtes
# 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;

}





Comme vous pouvez le voir dans le commentaire, le seul paramètre de la fonction est la chaîne d'entrée de caractères, la fonction renvoie la chaîne générée à envoyer à la variable $ string



Dans nos scripts, n'oubliez pas de déclarer une fonction précédemment définie à appeler:



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




Pour envoyer un message, vous devez créer votre bot dans Telegram, découvrir son API BOTToken et son identifiant de chat. Des instructions pour créer des bots et obtenir des identifiants ont été publiées à plusieurs reprises. Par exemple, vous pouvez consulter les liens suivants:





Nous envoyons notre message de test au chat bot:



: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


Vérifiez que cela fonctionne bien pour moi. Maintenant, vous pouvez facilement envoyer des messages en russe à Telegram! Les commentaires et ajouts sont les bienvenus.



Il est probablement conseillé d'ajouter l'envoi d'un code de caractère de saut de ligne, ce n'est pas difficile à faire.



All Articles