Fernaktivéierung vu Mikrotik Skripte vum Telegram

Den Alexander Koryukin huet mech op dës Ëmsetzung gedréckt GeXoGeN mat senger VerëffentlechungFernschalten de Computer gratis, ouni SMS an ouni Wolleken, mat Mikrotik".

An e Kommentar an enger vun de VK Gruppen vum Kirill Kazakov:

Jo, et ass guer net sécher. Ech géif léiwer en Telegram Bot schreiwen, deen nëmmen Aktivéierungsbefehle vu mengem Kont akzeptéiert.

Ech hu beschloss esou e Bot ze schreiwen.

Also, déi éischt Saach ze maachen ass e Bot am Telegram ze kreéieren.

  • Mir fannen an der Sich e Kont mam Numm @botfather
  • Klickt op de Start Knäppchen um Enn vum Écran
  • Da schreiwen mir him de Kommando / Newbot

Dann beäntweren mir 2 einfach Froen:

  • Déi éischt Fro ass den Numm vum Bot deen erstallt gëtt. MyMikrotikROuter
  • Déi zweet Fro ass de Spëtznumm vum Bot deen erstallt gëtt (soll mam Bot ophalen) MikrotikROuter_bot

Als Äntwert kréie mir den Token vun eisem Bot, a mengem Fall ass et:

Benotzt dësen Token fir Zougang zu den HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Fernaktivéierung vu Mikrotik Skripte vum Telegram
Da musst Dir eise Bot an der Sich nom Numm fannen @MikrotikROuter_bot an dréckt op de Start Knäppchen.

Duerno musst Dir de Browser opmaachen an déi folgend Linn aginn:

 https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates

Wou XXXXXXXXXXXXXXXXXX Ärem Bot säin Token ass.

Eng Säit ähnlech wéi déi folgend wäert opmaachen:

Fernaktivéierung vu Mikrotik Skripte vum Telegram

Mir fanne folgenden Text drop:

"chat":{"id":631290,

Also, mir hunn all déi néideg Informatioune fir Skripte fir Mikrotik ze schreiwen, nämlech:

Bot Token: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Chat ID wou hie soll schreiwen: 631290

Fir ze kontrolléieren, kënne mir duerch de Browser goen:

https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test

Sollt d'Resultat kréien:

Fernaktivéierung vu Mikrotik Skripte vum Telegram

Fir eis Kamoudheet wäerte mir direkt Kommandoe fir de Bot addéieren:

Fannt e Kont mat engem Numm @botpather
Da schreiwen mir him e Kommando / Setkommandoen

  • Hie wäert froen wat Bot

Mir schreiwen:
@MikrotikROuter_bot

Füügt Kommandoen:

  • helloworld< — Testmeldung am Chat 1
  • itsworking-Test Message am Chat 2
  • wolmypc-erwächen mäi PC

Elo wann Dir "/" am Chat schreift, sollt Dir kréien:

Fernaktivéierung vu Mikrotik Skripte vum Telegram

Loosst eis elo op MikroTik goen.

RouterOS huet e Konsol-Utility fir Dateien iwwer ftp oder http / https ze kopéieren, d'Utility gëtt fetch genannt, dat ass wat mir benotzen.

Mir maachen op Uschloss a gitt an:

/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no

Notéiert w.e.g. datt MikroTik brauch "» aus dem Schëld entkommen «?' an der URL.

Sollt d'Resultat kréien:

Fernaktivéierung vu Mikrotik Skripte vum Telegram

Loosst eis elo op Skripte weidergoen:

Moien Welt

system script add name="helloworld" policy=read source={/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=Hello,world! " keep-result=no}

seng Aarbecht

system script add name="itsworking" policy=read source={/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=Test OK, it's Working " keep-result=no}

wolmypc

system script add name="wolmypc" policy=read source="/tool wol mac=XX:XX:XX:XX:XX:XX interface=ifnamer
    n/tool fetch url="https://api.telegram.org/boXXXXXXXXXXXXXXXXXXX?chat_id=631290&text=wol OK" keep-resul
    t=no"

Vergiesst net de richtege Mac an den Interface Numm ze spezifizéieren, souwéi Bot-Token an Chat_id.

Elo wäert ech e bëssen erklären wat se maachen:

De Skript "Helloworld" schéckt e Message: "Hallo, Welt!" zu eisem Chat mam Bot.
De Skript "itsworking" schéckt e Message: "Test OK, et funktionnéiert!" zu eisem Chat mam Bot.
Dës Scripte si fir Demonstratiounszwecker.
Ech hunn de "wolmypc" Skript als eng vun de méiglechen Implementatiounen bäigefüügt.
Beim Ausféierung vum Skript schreift de Bot "wol OK" an den Chat.
Tatsächlech kënnt Dir absolut all Skript lafen.

Erstellt eng Aufgab:

Telegram.src

/system scheduler
add interval=30s name=Telegram on-event=":tool fetch url=("https://api.telegr
    am.org/".$botID."/getUpdates") ;r
    n:global content [/file get [/file find name=getUpdates] contents] ;r
    n:global startLoc 0;r
    n:global endLoc 0;r
    nr
    n:if ( [/file get [/file find name=getUpdates] size] > 50 ) do={r
    nr
    n:set startLoc  [:find $content "update_id" $lastEnd ] ;r
    n:set startLoc ( $startLoc + 11 ) ;r
    n:local endLoc [:find $content "," $startLoc] ;r
    n:local messageId ([:pick $content $startLoc $endLoc] + (1));r
    n:put [$messageId] ;r
    n:#log info message="updateID $messageId" ;r
    nr
    n:set startLoc  [:find $content "text" $lastEnd ] ;r
    n:set startLoc ( $startLoc  + 7 ) ;r
    n:local endLoc [:find $content "," ($startLoc)] ;r
    n:set endLoc ( $endLoc - 1 ) ;r
    n:local message [:pick $content ($startLoc + 2) $endLoc] ;r
    n:put [$message] ;r
    n:#log info message="message $message ";r
    nr
    n:set startLoc  [:find $content "chat" $lastEnd ] ;r
    n:set startLoc ( $startLoc + 12 ) ;r
    n:local endLoc [:find $content "," $startLoc] ;r
    n:local chatId ([:pick $content $startLoc $endLoc]);r
    n:put [$chatId] ;r
    n:#log info message="chatID $chatId ";r
    nr
    n:if (($chatId = $myChatID) and (:put [/system script find name=$messa
    ge] != "")) do={r
    n:system script run $message} else={:tool fetch url=("https://api.teleg
    ram.org/".$botID."/sendmessage?chat_id=".$chatId."&text=I can't t
    alk with you. ") keep-result=no} ;r
    n:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates?
    offset=$messageId") keep-result=no; r
    n} r
    n" policy=
    ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon 
    start-date=nov/02/2010 start-time=00:00:00
	
add name=Telegram-startup on-event=":delay 5r
    n:global botID "botXXXXXXXXXXXXXXXXXX" ;r
    n:global myChatID "631290" ;r
    n:global startLoc 0;r
    n:global endLoc 0;r
    n:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates") 
    ;" policy=
    ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon 
    start-time=startup

Liesbar Vueet ass net kloer firwat, awer aus dem schaffende Skript gëtt et keng global Donnéeën, huet de Skript bäigefüügt wann de System boot.
Telegram Startup

:delay 5
:global botID "botXXXXXXXXXXXXXXXXXX" ;   token bot
:global myChatID "xxxxxx" ;                               chat_id
:global startLoc 0;
:global endLoc 0;
:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates") ;

Hëllefe profitéieren

:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates") ;
:global content [/file get [/file find name=getUpdates] contents] ;
:global startLoc 0;
:global endLoc 0;

:if ( [/file get [/file find name=getUpdates] size] > 50 ) do={

:set startLoc  [:find $content "update_id" $lastEnd ] ;
:set startLoc ( $startLoc + 11 ) ;
:local endLoc [:find $content "," $startLoc] ;
:local messageId ([:pick $content $startLoc $endLoc] + (1));
:put [$messageId] ;
#:log info message="updateID $messageId" ;

:set startLoc  [:find $content "text" $lastEnd ] ;
:set startLoc ( $startLoc  + 7 ) ;
:local endLoc [:find $content "," ($startLoc)] ;
:set endLoc ( $endLoc - 1 ) ;
:local message [:pick $content ($startLoc + 2) $endLoc] ;
:put [$message] ;
#:log info message="message $message ";

:set startLoc  [:find $content "chat" $lastEnd ] ;
:set startLoc ( $startLoc + 12 ) ;
:local endLoc [:find $content "," $startLoc] ;
:local chatId ([:pick $content $startLoc $endLoc]);
:put [$chatId] ;
#:log info message="chatID $chatId ";

:if (($chatId = $myChatID) and (:put [/system script find name=$message] != "")) do={
:system script run $message} else={:tool fetch url=("https://api.telegram.org/".$botID."/sendmessage?chat_id=".$chatId."&text=I can't talk with you. ") keep-result=no} ;
:tool fetch url=("https://api.telegram.org/".$botID."/getUpdates?offset=$messageId") keep-result=no; 
} 

Wéi heescht dat Aarbecht

Luet eis "getUpdates" Messagen all 30 Sekonnen erof, parse dann fir erauszefannen update_id (Message Zuel) an Text (eis Equipen) an chat_id . Par défaut gëtt getUpdates vun 1 bis 100 Messagen ugewisen, fir d'Bequemlechkeet, nodeems mir de Kommando gelies hunn, läschen mir de Message. Telegram API seet fir e Message ze liesen Dir braucht d'Botschaftsnummer + 1

/getUpdates?offset=update_id + 1

All getest op Mikrotik rb915 RouterOS 6.37.1
Wann Dir vill Befehle gläichzäiteg schéckt, ginn se all am Tour mat engem Intervall vun 30 Sekonnen ausgefouert.

PS Vill Merci un de Kirill Kazakov fir d'Iddi a mäi Frënd Alexander fir d'Hëllef mat de Skripten.

Referenze

habrahabr.ru/post/313794
1spla.ru/index.php/blog/telegram_bot_for_mikrotik
core.telegram.org/bots/api
wiki.mikrotik.com/wiki/Manual: Schrëft

upd:

03:11:16

Verbesserte Skripte:

Scheck fir chat_id bäigefüügt
Iwwerpréift no engem Narr, wann een un eise Bot schreift, äntwert hien him: "Ech kann net mat Iech schwätzen. ", wäert eis ähnlech äntweren wann et de Kommando net erkennt.
Nodeems de Kommando ausgefouert gouf, schreift de Bot de Chat of (kuckt wolmypc Skript)

DUP

Fonnt mat 7 Stuntman7 datt e Fichier mat iwwer ~14 Messagen net méi vum Find Kommando veraarbecht gëtt (Mikrotik Aschränkungen). Dofir wäert ech an Zukunft de Skript op lua änneren, merci 7 Stuntman7 fir dës, Ech wosst net iwwer lua.

UPD 08.12.2016/XNUMX/XNUMX

am Telegram, anscheinend, hu se den "Auspuff" vun getUpdate liicht geännert. elo am Haaptskript musst Dir de Message Offset vun 2 op 1 korrigéieren

änneren

:local message [:pick $content ($startLoc + 2) $endLoc] ;

заменить на :

:local message [:pick $content ($startLoc + 1) $endLoc] ;

Source: will.com