Attivazzjoni mill-bogħod ta 'skripts Mikrotik minn Telegram

Alexander Koryukin imbuttatni għal din l-implimentazzjoni GeXoGeN bil-pubblikazzjoni tiegħuTixgħel mill-bogħod il-kompjuter b'xejn, mingħajr SMS u mingħajr sħab, bl-użu ta 'Mikrotik".

U kumment f'wieħed mill-gruppi VK minn Kirill Kazakov:

Iva, mhu sigur xejn. Nippreferi nikteb bot telegramma li jaċċetta biss kmandi ta 'attivazzjoni mill-kont tiegħi.

Iddeċidejt li nikteb tali bot.

Għalhekk, l-ewwel ħaġa li għandek tagħmel hija li toħloq bot fit-telegramma.

  • Fit-tfittxija nsibu kont bl-isem @botfather
  • Ikklikkja fuq il-buttuna Start fil-qiegħ tal-iskrin
  • Imbagħad niktbuh il-kmand / newbot

Imbagħad inwieġbu 2 mistoqsijiet sempliċi:

  • L-ewwel mistoqsija hija l-isem tal-bot li għandu jinħoloq. MyMikrotikROuter
  • It-tieni mistoqsija hija l-laqam tal-bot li qed jinħoloq (għandu jispiċċa bil-bot) MikrotikROuter_bot

Bi tweġiba, se nirċievu t-token tal-bot tagħna, fil-każ tiegħi huwa:

Uża dan it-token biex taċċessa l-API HTTP: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Attivazzjoni mill-bogħod ta 'skripts Mikrotik minn Telegram
Imbagħad, trid issib il-bot tagħna fit-tfittxija bl-isem @MikrotikROuter_bot u agħfas il-buttuna Start.

Wara dan, trid tiftaħ il-browser u daħħal il-linja li ġejja:

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

Fejn XXXXXXXXXXXXXXXXXX huwa t-token tal-bot tiegħek.

Se tiftaħ paġna simili għal din li ġejja:

Attivazzjoni mill-bogħod ta 'skripts Mikrotik minn Telegram

Insibu t-test li ġej fuqu:

"chat":{"id":631290,

Għalhekk, għandna l-informazzjoni kollha meħtieġa biex niktbu skripts għal Mikrotik, jiġifieri:

Token tal-bot: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Chat ID fejn għandu jikteb: 631290

Biex niċċekkjaw, nistgħu ngħaddu mill-browser:

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

Għandu jikseb ir-riżultat:

Attivazzjoni mill-bogħod ta 'skripts Mikrotik minn Telegram

Għall-konvenjenza tagħna, aħna se nżidu immedjatament kmandi għall-bot:

Sib kont b'isem @botfather
Imbagħad niktbulu kmand / setcommands

  • Huwa se jistaqsi liema bot

Aħna niktbu:
@MikrotikROuter_bot

Żid il-kmandi:

  • helloworld< — Test messaġġ fuq chat 1
  • itsworking-Messaġġ tat-test fuq iċ-chat 2
  • wolmypc-tqum il-PC tiegħi

Issa jekk ittajpja "/" fiċ-chat, għandek tikseb:

Attivazzjoni mill-bogħod ta 'skripts Mikrotik minn Telegram

Issa ejja ngħaddu għal MikroTik.

RouterOS għandu utilità console għall-ikkupjar ta 'fajls permezz ta' ftp jew http / https, l-utilità tissejjaħ fetch, li huwa dak li se nużaw.

Miftuħ terminal u daħħal:

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

Jekk jogħġbok innota li MikroTik jeħtieġ "» biex taħrab is-sinjal «?' fil-URL.

Għandu jikseb ir-riżultat:

Attivazzjoni mill-bogħod ta 'skripts Mikrotik minn Telegram

Issa ejja ngħaddu għall-iskripts:

Hello dinja

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}

il-ħidma tiegħu

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"

Tinsiex tispeċifika l-isem korrett tal-mac u l-interface, kif ukoll bot-token u chat_id.

Issa se nispjega ftit x'jagħmlu:

L-iskrittura "helloworld" tibgħat messaġġ: "Hello, world!" għaċ-chat tagħna mal-bot.
L-iskritt "itsworking" jibgħat messaġġ: "Test OK, qed jaħdem!" għaċ-chat tagħna mal-bot.
Dawn l-iskripts huma għal skopijiet ta’ dimostrazzjoni.
Żidt l-iskrittura "wolmypc" bħala waħda mill-implimentazzjonijiet possibbli.
Mal-eżekuzzjoni tal-iskrittura, il-bot se jikteb "wol OK" fiċ-chat.
Fil-fatt, tista 'tmexxi assolutament kwalunkwe skript.

Oħloq kompitu:

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

Veduta li tista' tinqaramhuwiex ċar għaliex, iżda mill-iskrittura tax-xogħol ma tiżvelax dejta globali, żiedet l-iskrittura meta s-sistema boots.
Istartjar Telegram

: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") ;

Telegramma

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

Kif taħdem din

Niżżel il-messaġġi tagħna "getUpdates" kull 30 sekonda, imbagħad analizza biex issir taf update_id (numru tal-messaġġ) u test (it-timijiet tagħna) u chat_id . B'mod awtomatiku, getUpdates juri minn 1 sa 100 messaġġ, għall-konvenjenza, wara li taqra l-kmand, aħna nħassru l-messaġġ. Telegram api jgħid biex taqra messaġġ għandek bżonn in-numru tal-messaġġ + 1

/getUpdates?offset=update_id + 1

Kollha ttestjati fuq Mikrotik rb915 RouterOS 6.37.1
Jekk tibgħat ħafna kmandi f'daqqa, dawn kollha jiġu esegwiti wara xulxin b'intervall ta '30 sekonda.

PS Grazzi ħafna lil Kirill Kazakov għall-idea u lil ħabib tiegħi Alexander għall-għajnuna fl-iskripts.

referenzi

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

upd:

03:11:16

Skripts imtejba:

Miżjud kontroll għal chat_id
Iċċekkja għal iblah, jekk xi ħadd jikteb lill-bot tagħna, huwa jwieġbu: "Ma nistax nitkellem miegħek. “, bl-istess mod iwieġbuna jekk ma jagħrafx il-kmand.
Wara li tesegwixxi l-kmand, il-bot ineħħi l-abbonament għaċ-chat (ara l-iskrittura wolmypc)

DUP

Misjuba ma 7Stuntman7 li fajl b'aktar 'il fuq minn ~14-il messaġġ m'għadux ipproċessat mill-kmand find (limitazzjonijiet ta' Mikrotik). Għalhekk, fil-futur, se nibdel l-iskrittura għal lua, grazzi 7Stuntman7 għal dan, ma kontx naf dwar lua.

UPD 08.12.2016/XNUMX/XNUMX

f'Telegram, apparentement, biddlu kemmxejn l-"egżost" ta 'getUpdate. issa fl-iskrittura prinċipali trid tikkoreġi l-offset tal-messaġġ minn 2 għal 1

bidliet

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

заменить на :

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

Sors: www.habr.com