Aktivasi jarak jauh skrip Mikrotik saka Telegram

Alexander Koryukin nyurung aku kanggo implementasine iki GeXoGeN karo publikasiRemote ngaktifake komputer kanthi gratis, tanpa SMS lan tanpa awan, nggunakake Mikrotik".

Lan komentar ing salah sawijining grup VK dening Kirill Kazakov:

Ya, ora aman. Aku luwih seneng nulis bot telegram sing mung nampa perintah aktivasi saka akunku.

Aku mutusaké kanggo nulis bot kuwi.

Dadi, sing kudu ditindakake yaiku nggawe bot ing telegram.

  • Kita nemokake ing panelusuran akun sing jenenge @botfather
  • Klik ing tombol Start ing sisih ngisor layar
  • Banjur kita nulis marang printah / newbot

Banjur kita mangsuli 2 pitakonan prasaja:

  • Pitakonan pisanan yaiku jeneng bot sing bakal digawe. MyMikrotikROuter
  • Pitakonan kapindho yaiku jeneng julukan bot sing digawe (kudu dipungkasi karo bot) MikrotikROuter_bot

Kanggo nanggepi, kita bakal nampa token bot kita, ing kasusku yaiku:

Gunakake token iki kanggo ngakses HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Aktivasi jarak jauh skrip Mikrotik saka Telegram
Banjur, sampeyan kudu nemokake bot kita ing panelusuran kanthi jeneng @MikrotikROuter_bot banjur pencet tombol Mulai.

Sawise iku, sampeyan kudu mbukak browser lan ketik baris ing ngisor iki:

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

Ngendi XXXXXXXXXXXXXXXXXX minangka token bot sampeyan.

Kaca sing padha karo ing ngisor iki bakal mbukak:

Aktivasi jarak jauh skrip Mikrotik saka Telegram

Kita nemokake teks ing ngisor iki:

"chat":{"id":631290,

Dadi, kita duwe kabeh informasi sing dibutuhake kanggo nulis skrip Mikrotik, yaiku:

Token bot: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

ID chat ing ngendi dheweke kudu nulis: 631290

Kanggo mriksa, kita bisa mbukak browser:

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

Mesthi entuk asil:

Aktivasi jarak jauh skrip Mikrotik saka Telegram

Kanggo penak, kita bakal langsung nambah perintah kanggo bot:

Nemokake akun kanthi jeneng @bapak
Banjur kita nulis dhawuh marang dheweke / setcommands

  • Dheweke bakal takon bot apa

Kita nulis:
@MikrotikROuter_bot

Tambah perintah:

  • helloworld< — Pesen tes ing obrolan 1
  • sing bisa digunakake-Pesen Tes ing obrolan 2
  • wolmypc-tangi PCku

Saiki yen sampeyan ngetik "/" ing obrolan, sampeyan kudu entuk:

Aktivasi jarak jauh skrip Mikrotik saka Telegram

Saiki ayo pindhah menyang MikroTik.

RouterOS nduweni sarana konsol kanggo nyalin file liwat ftp utawa http / https, sarana kasebut diarani fetch, yaiku sing bakal digunakake.

Mbukak terminal lan ketik:

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

Elinga yen MikroTik butuh ""kanggo uwal saka tandha"?'ing URL.

Mesthi entuk asil:

Aktivasi jarak jauh skrip Mikrotik saka Telegram

Saiki ayo pindhah menyang skrip:

jancok

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}

kerjane

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"

Aja lali kanggo nemtokake jeneng mac lan antarmuka sing bener, uga bot-token lan chat_id.

Saiki aku bakal nerangake sethithik apa sing ditindakake:

Skrip "helloworld" ngirim pesen: "Halo, donya!" menyang obrolan kita karo bot.
Skrip "berfungsi" ngirim pesen: "Tes OK, Kerjane!" menyang obrolan kita karo bot.
Skrip iki kanggo tujuan demonstrasi.
Aku nambahake "wolmypc" script minangka salah siji saka implementasine bisa.
Sawise eksekusi skrip, bot bakal nulis "wol OK" ing obrolan.
Nyatane, sampeyan bisa mbukak script apa wae.

Nggawe tugas:

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

Tampilan sing bisa diwacaiku ora cetha kok, nanging saka script digunakake ora mbukak data global, ditambahaké script nalika sistem boots.
Telegram wiwitan

: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; 
} 

Carane ora karya iki

Download pesen "getUpdates" saben 30 detik, banjur parse kanggo ngerteni nganyari_id (nomer pesen) lan teks (tim kita) lan chat_id . Kanthi gawan, getUpdates nampilake saka 1 nganti 100 pesen, kanggo penak, sawise maca printah kasebut, kita mbusak pesen kasebut. Telegram api ujar manawa maca pesen sampeyan butuh nomer pesen + 1

/getUpdates?offset=update_id + 1

Kabeh dites ing Mikrotik rb915 RouterOS 6.37.1
Yen sampeyan ngirim akeh prentah bebarengan, kabeh bakal dieksekusi kanthi interval 30 detik.

PS Many thanks kanggo Kirill Kazakov kanggo idea lan kanca Alexander kanggo bantuan karo Tulisan.

referensi

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

upd:

03:11:16

Skrip sing luwih apik:

Ditambahake mriksa kanggo chat_id
Priksa wong bodho, yen ana sing nulis ing bot kita, dheweke bakal mangsuli: "Aku ora bisa ngomong karo sampeyan. ", padha bakal mangsuli kita yen ora ngenali printah.
Sawise nglakokake perintah kasebut, bot kasebut mandheg langganan obrolan (pirsani skrip wolmypc)

DUP

Ditemokake karo 7Stuntman7 sing file karo ndhuwur ~ 14 pesen ora diproses maneh dening printah golek (watesan Microtik). Pramila ing salajengipun kula badhe ngewahi naskah dados lua, matur nuwun 7Stuntman7 kanggo iki, aku ora ngerti bab lua.

UPD 08.12.2016/XNUMX/XNUMX

ing Telegram, ketoke, padha rada ngganti "knalpot" getUpdate. saiki ing skrip utama sampeyan kudu mbenerake offset pesen saka 2 dadi 1

ganti

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

заменить на :

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

Source: www.habr.com