Telegrameko Mikrotik scripten urruneko aktibazioa

Alexander Koryukinek inplementazio honetara bultzatu ninduen GeXoGeN bere argitalpenarekinOrdenagailua urrutiko piztea doan, SMS gabe eta lainorik gabe, Mikrotik erabiliz".

Eta Kirill Kazakov-en VK taldeetako batean iruzkin bat:

Bai, ez da batere segurua. Nahiago dut nire kontuko aktibazio komandoak soilik onartzen dituen telegram bot bat idatzi.

Horrelako bot bat idaztea erabaki nuen.

Beraz, egin beharreko lehenengo gauza telegram-en bot bat sortzea da.

  • Bilaketan @botfather izeneko kontu bat aurkitzen dugu
  • Egin klik pantailaren behealdean dagoen Hasi botoian
  • Ondoren, komandoa / newbot idazten diogu

Ondoren, 2 galdera erraz erantzungo ditugu:

  • Lehenengo galdera sortu behar den botaren izena da. MyMikrotikROuter
  • Bigarren galdera sortzen ari den botaren ezizena da (botarekin amaitu behar da) MikrotikROuter_bot

Erantzun gisa, gure bot-aren tokena jasoko dugu, nire kasuan hau da:

Erabili token hau HTTP APIra sartzeko: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Telegrameko Mikrotik scripten urruneko aktibazioa
Ondoren, izenaren araberako bilaketan gure bot aurkitu behar duzu @MikrotikROuter_bot eta sakatu Hasi botoia.

Horren ondoren, arakatzailea ireki eta lerro hau idatzi behar duzu:

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

Non XXXXXXXXXXXXXXXXXX zure bot-aren tokena den.

Honen antzeko orrialde bat irekiko da:

Telegrameko Mikrotik scripten urruneko aktibazioa

Ondoko testua aurkituko dugu bertan:

"txat":{"id":631290,

Beraz, Mikrotik-en gidoiak idazteko beharrezko informazio guztia dugu, hau da:

Bot tokena: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Txataren IDa non idatzi behar duen: 631290

Egiaztatzeko, arakatzailetik joan gaitezke:

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

Emaitza lortu beharko litzateke:

Telegrameko Mikrotik scripten urruneko aktibazioa

Gure erosotasunerako, berehala gehituko ditugu komandoak botarentzat:

Izen bat duen kontu bat bilatzea @botfather
Ondoren, agindu bat idazten diogu / setcommands

  • Zein bot galdetuko du

Guk idazten dugu:
@MikrotikROuter_bot

Gehitu komandoak:

  • helloworld< β€” Test mezua txatean 1
  • itsworking-Test Mezua txatean 2
  • wolmypc-esnatu nire ordenagailua

Orain txatean "/" idazten baduzu, lortu beharko zenuke:

Telegrameko Mikrotik scripten urruneko aktibazioa

Orain pasa gaitezen MikroTik-era.

RouterOSek ftp edo http / https bidez fitxategiak kopiatzeko kontsola-erabilgarritasun bat du, erabilgarritasuna fetch deitzen da, hau da, erabiliko duguna.

ireki terminal eta sartu:

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

Kontuan izan MikroTik behar duela "Β» seinaletik ihes egiteko Β«?' URLan.

Emaitza lortu beharko litzateke:

Telegrameko Mikrotik scripten urruneko aktibazioa

Orain joan gaitezen gidoietara:

Kaixo Mundua

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}

bere funtzionamendua

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"

Ez ahaztu mac eta interfazearen izen zuzena zehazteaz, baita bot-tokena eta chat_id ere.

Orain zer egiten duten apur bat azalduko dizuet:

"Helloworld" gidoiak mezu bat bidaltzen du: "Kaixo, mundua!" bot-arekin gure berriketara.
"itsworking" script-ak mezu bat bidaltzen du: "Probatu OK, funtzionatzen ari da!" bot-arekin gure berriketara.
Script hauek erakustaldietarako dira.
"wolmypc" gidoia gehitu dut inplementazio posibleetako bat bezala.
Scripta exekutatzen denean, bot-ak "wol OK" idatziko du txatean.
Izan ere, edozein script exekutatu dezakezu.

Sortu zeregin bat:

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

Ikuspegi irakurgarriaez dago argi zergatik, baina laneko scriptetik ez du datu globalak azaltzen, sistema abiarazten denean scripta gehitu du.
Telegram martxan jartzea

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

Telegrama

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

Nola egiten du lan

Deskargatu gure "getUpdates" mezuak 30 segundoz behin, eta analizatu jakiteko eguneratze_id (mezuaren zenbakia) eta testu (gure taldeak) eta txat_id . Lehenespenez, getUpdates-ek 1 eta 100 mezu bistaratzen ditu, erosotasunerako, komandoa irakurri ondoren, mezua ezabatzen dugu. Telegram apiak dio mezu bat irakurtzeko mezuaren zenbakia + 1 behar duzula

/getUpdates?offset=update_id + 1

Guztiak Mikrotik rb915 RouterOS 6.37.1-n probatu dira
Komando asko aldi berean bidaltzen badituzu, guztiak txandaka exekutatuko dira 30 segundoko tartearekin.

PS Mila esker Kirill Kazakov-i ideiagatik eta nire lagun Alexander gidoietarako laguntzagatik.

Erreferentziak

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

eguneratua:

03:11:16

Script hobetuak:

Txat_id-aren egiaztapena gehitu da
Tontorik dagoen egiaztatuz, norbaitek gure bot-ari idazten badio, erantzungo dio: "Ezin dut zurekin hitz egin. ", era berean erantzungo digu komandoa ezagutzen ez badu.
Komandoa exekutatu ondoren, bot-ak txatean harpidetza kentzen du (ikus wolmypc script-a)

DUP

-rekin aurkitu 7Izugarria7 ~14 mezu baino gehiago dituen fitxategi bat find komandoak ez duela prozesatzen (Mikrotik mugak). Horregatik, aurrerantzean, gidoia luara aldatuko dut, eskerrik asko 7Izugarria7 horretarako, ez nekien lua.

UPD 08.12.2016/XNUMX/XNUMX

Telegramen, itxuraz, apur bat aldatu dute getUpdate-ren "ihesbidea". orain script nagusian mezuaren desplazamendua 2tik 1era zuzendu behar duzu

aldaketak

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

Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π° :

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

Iturria: www.habr.com