Uanzishaji wa mbali wa hati za Mikrotik kutoka kwa Telegramu

Alexander Koryukin alinisukuma kwa utekelezaji huu GeXoGen na uchapishaji wakeKuwasha kwa mbali kwa kompyuta bila malipo, bila SMS na bila mawingu, kwa kutumia Mikrotik".

Na maoni katika moja ya vikundi vya VK na Kirill Kazakov:

Ndio, sio salama hata kidogo. Ningependa kuandika bot ya telegram ambayo inakubali tu amri za kuwezesha kutoka kwa akaunti yangu.

Niliamua kuandika bot kama hiyo.

Kwa hiyo, jambo la kwanza la kufanya ni kuunda bot katika telegram.

  • Tunapata katika utafutaji akaunti inayoitwa @botfather
  • Bonyeza kitufe cha Anza chini ya skrini
  • Kisha tunamwandikia amri / newbot

Kisha tunajibu maswali 2 rahisi:

  • Swali la kwanza ni jina la bot litakaloundwa. MyMikrotikROuter
  • Swali la pili ni jina la utani la bot inayoundwa (inapaswa kuisha na bot) MikrotikROuter_bot

Kwa kujibu, tutapokea ishara ya bot yetu, kwa upande wangu ni:

Tumia ishara hii kufikia API ya HTTP: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Uanzishaji wa mbali wa hati za Mikrotik kutoka kwa Telegramu
Kisha, unahitaji kupata bot yetu katika utafutaji kwa jina @MikrotikROuter_bot na bonyeza kitufe cha Anza.

Baada ya hayo, unahitaji kufungua kivinjari na uingize mstari ufuatao:

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

Ambapo XXXXXXXXXXXXXXXXXX ni tokeni ya kijibu chako.

Ukurasa unaofanana na ufuatao utafunguliwa:

Uanzishaji wa mbali wa hati za Mikrotik kutoka kwa Telegramu

Tunapata maandishi yafuatayo juu yake:

"chat":{"id":631290,

Kwa hivyo, tunayo habari yote muhimu ya kuandika maandishi ya Mikrotik, ambayo ni:

Tokeni ya kijibu: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4

Kitambulisho cha gumzo ambapo anapaswa kuandika: 631290

Ili kuangalia, tunaweza kupitia kivinjari:

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

Inapaswa kupata matokeo:

Uanzishaji wa mbali wa hati za Mikrotik kutoka kwa Telegramu

Kwa urahisi wetu, tutaongeza mara moja amri za bot:

Kutafuta akaunti yenye jina @baba mdogo
Kisha tunamwandikia amri / amri

  • Atauliza bot gani

Tunaandika:
@MikrotikROuter_bot

Ongeza amri:

  • helloworld< - Ujumbe wa jaribio kwenye gumzo 1
  • Ujumbe wa Mtihani wa itsworking kwenye gumzo 2
  • wolmypc-wake PC yangu

Sasa ukiandika "/" kwenye gumzo, unapaswa kupata:

Uanzishaji wa mbali wa hati za Mikrotik kutoka kwa Telegramu

Sasa hebu tuendelee kwenye MikroTik.

RouterOS ina matumizi ya koni ya kunakili faili kupitia ftp au http / https, matumizi inaitwa kuchota, ambayo ndio tutatumia.

Fungua terminal na kuingia:

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

Tafadhali kumbuka kuwa MikroTik inahitaji "Β»kuepuka ishara Β«?' kwenye URL.

Inapaswa kupata matokeo:

Uanzishaji wa mbali wa hati za Mikrotik kutoka kwa Telegramu

Sasa wacha tuendelee kwenye maandishi:

Salamu, Dunia

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}

inafanya kazi

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"

Usisahau kutaja jina sahihi la mac na kiolesura, pamoja na ishara ya bot na chat_id.

Sasa nitaelezea kidogo wanachofanya:

Hati ya "helloworld" inatuma ujumbe: "Habari, ulimwengu!" kwa gumzo letu na roboti.
Hati ya "inafanya kazi" inatuma ujumbe: "Jaribu Sawa, Inafanya Kazi!" kwa gumzo letu na roboti.
Hati hizi ni kwa madhumuni ya maonyesho.
Niliongeza hati ya "wolmypc" kama moja ya utekelezaji unaowezekana.
Baada ya utekelezaji wa hati, bot itaandika "wol OK" kwenye gumzo.
Kwa kweli, unaweza kuendesha hati yoyote kabisa.

Unda jukumu:

Telegramu.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

Mwonekano Unaosomekahaijulikani ni kwa nini, lakini kutoka kwa hati inayofanya kazi haifichui data ya kimataifa, iliongeza hati wakati mfumo unapoanza.
Uanzishaji wa Telegraph

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

Jinsi gani kazi hii

Pakua ujumbe wetu wa "getUpdates" kila baada ya sekunde 30, kisha uchanganue ili kujua kitambulisho_cha_sasisho (nambari ya ujumbe) na Nakala (timu zetu) na kitambulisho_cha_chat . Kwa chaguo-msingi, getUpdates huonyesha kutoka kwa ujumbe 1 hadi 100, kwa urahisi, baada ya kusoma amri, tunafuta ujumbe. Telegram api inasema ili kusoma ujumbe unahitaji nambari ya ujumbe + 1

/getUpdates?offset=update_id + 1

Zote zilijaribiwa kwenye Mikrotik rb915 RouterOS 6.37.1
Ukituma amri nyingi mara moja, zote zitatekelezwa kwa zamu na muda wa sekunde 30.

PS Shukrani nyingi kwa Kirill Kazakov kwa wazo na rafiki yangu Alexander kwa msaada wa maandishi.

marejeo

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

sasisha:

03:11:16

Maandishi yaliyoboreshwa:

Imeongeza hundi ya chat_id
Kuangalia mpumbavu, ikiwa mtu anaandika kwa bot yetu, atamjibu: "Siwezi kuzungumza na wewe. ", itatujibu vile vile ikiwa haitambui amri.
Baada ya kutekeleza amri, kijibu hujiondoa kwenye gumzo (tazama hati ya wolmypc)

DUP

Imepatikana na 7Mtukutu7 kwamba faili iliyo na jumbe zaidi ya ~ 14 haishughulikiwi tena na find amri (mipaka ya Mikrotik). Kwa hivyo, katika siku zijazo, nitabadilisha maandishi kuwa lua, asante 7Mtukutu7 kwa hili, sikujua kuhusu lua.

UPD 08.12.2016/XNUMX/XNUMX

katika Telegraph, inaonekana, walibadilisha kidogo "kutolea nje" kwa GetUpdate. sasa kwenye hati kuu unahitaji kusahihisha urekebishaji wa ujumbe kutoka 2 hadi 1

mabadiliko

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

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

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

Chanzo: mapenzi.com