Alexander Koryukin késztetett erre a megvalósításra
És egy megjegyzés az egyik VK-csoporthoz Kirill Kazakovtól:
Igen, egyáltalán nem biztonságos. Inkább írok egy táviratbotot, ami csak aktiváló parancsokat fogad el a fiókomból.
Úgy döntöttem, írok egy ilyen botot.
Tehát az első dolog, hogy hozzon létre egy botot a táviratban.
- A keresésben egy @botfather nevű fiókot találunk
- Kattintson a képernyő alján található Start gombra
- Ezután írjuk neki a parancsot / newbot
Ezután 2 egyszerű kérdésre válaszolunk:
- Az első kérdés a létrehozandó bot neve. MyMikrotikROuter
- A második kérdés a létrehozandó bot beceneve (botra kell végződnie) MikrotikROuter_bot
Válaszul megkapjuk a botunk tokenjét, esetemben ez:
A HTTP API eléréséhez használja ezt a tokent: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Ezután meg kell találnia a robotunkat a név szerinti keresésben @MikrotikROuter_bot és nyomja meg a Start gombot.
Ezt követően meg kell nyitnia a böngészőt, és be kell írnia a következő sort:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Ahol a XXXXXXXXXXXXXXXXXXXXX a robotod tokenje.
Megnyílik az alábbihoz hasonló oldal:
A következő szöveget találjuk rajta:
"chat":{"id":631290,
Tehát minden szükséges információval rendelkezünk a Mikrotik szkriptek írásához, nevezetesen:
Bot token: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Chat azonosító, ahová a következőt kell írnia: 631290
Az ellenőrzéshez átmegyünk a böngészőn:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Meg kell jönnie az eredménynek:
Kényelmünk érdekében azonnal hozzáadunk parancsokat a bothoz:
Névvel rendelkező fiók keresése @botfather
Aztán írunk neki egy parancsot / setcommands
- Meg fogja kérdezni, melyik bot
Mi írunk:
@MikrotikROuter_bot
Parancsok hozzáadása:
- helloworld< — Tesztüzenet az 1. chaten
- itsworking-Tesztüzenet a chaten 2
- wolmypc-ébreszd fel a számítógépemet
Most, ha beírja a "/"-t a csevegésbe, a következőket kell kapnia:
Most térjünk át a MikroTik-re.
A RouterOS-nek van egy konzolsegédprogramja a fájlok ftp-n vagy http / https-en keresztüli másolására, a segédprogram neve fetch, ezt fogjuk használni.
nyissa ki az terminál és írja be:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Felhívjuk figyelmét, hogy a MikroTik-nek szüksége van "» elkerülni a jelet «?' az URL-ben.
Meg kell jönnie az eredménynek:
Most térjünk át a szkriptekre:
Helló Világ
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}
működik
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"
Ne felejtse el megadni a helyes mac- és interfésznevet, valamint a bot-token-t és a chat_id-t.
Most egy kicsit elmagyarázom, mit csinálnak:
A "helloworld" szkript üzenetet küld: "Hello, world!" a bottal folytatott csevegésünkre.
Az "itsworking" szkript üzenetet küld: "Test OK, it's Working!" a bottal folytatott csevegésünkre.
Ezek a szkriptek demonstrációs célokat szolgálnak.
Hozzáadtam a "wolmypc" szkriptet az egyik lehetséges megvalósításhoz.
A szkript végrehajtása után a bot „wol OK”-t ír a csevegésbe.
Valójában bármilyen szkriptet futtathat.
Hozzon létre egy feladatot:
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
Olvasható nézetNem világos, hogy miért, de a működő szkriptből nem közöl globális adatokat, a szkriptet a rendszer indításakor adta hozzá.
A Telegram indítása
: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") ;
Telegram
: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;
}
Ez hogy működik
Töltse le "getUpdates" üzeneteinket 30 másodpercenként, majd elemezze, hogy megtudja update_id (üzenetszám) és szöveg (csapataink) és chat_id . Alapértelmezés szerint a getUpdates 1-100 üzenetet jelenít meg, a kényelem kedvéért a parancs elolvasása után töröljük az üzenetet. A Telegram api azt mondja, hogy az üzenet elolvasásához az üzenet száma + 1 szükséges
/getUpdates?offset=update_id + 1
Mindegyik Mikrotik rb915 RouterOS 6.37.1-en tesztelve
Ha egyszerre több parancsot küld, mindegyik 30 másodperces időközönként sorra kerül végrehajtásra.
PS. Nagyon köszönöm Kirill Kazakovnak az ötletet és Alexander barátomnak a forgatókönyvhöz nyújtott segítségét.
referenciák
upd:
03:11:16
Továbbfejlesztett szkriptek:
A chat_id ellenőrzése hozzáadva
Ha bolondot keresünk, ha valaki ír a botunknak, azt válaszolja neki: „Nem tudok veled beszélni. “, hasonlóképpen válaszol nekünk, ha nem ismeri fel a parancsot.
A parancs végrehajtása után a bot leiratkozik a csevegésről (lásd a wolmypc szkriptet)
UPD
Talált
UPD 08.12.2016
a Telegramban láthatóan kissé megváltoztatták a getUpdate "kimerülését". most a fő szkriptben javítania kell az üzeneteltolást 2-ről 1-re
változások
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Forrás: will.com