Alexander Koryukin ýtti mér að þessari útfærslu
Og athugasemd í einum af VK hópunum eftir Kirill Kazakov:
Já, það er alls ekki öruggt. Ég myndi frekar skrifa símskeyti sem tekur aðeins við virkjunarskipunum frá reikningnum mínum.
Ég ákvað að skrifa svona bot.
Svo það fyrsta sem þarf að gera er að búa til vélmenni í símskeyti.
- Við finnum í leitinni reikning sem heitir @botfather
- Smelltu á Start hnappinn neðst á skjánum
- Síðan skrifum við honum skipunina / newbot
Síðan svörum við 2 einföldum spurningum:
- Fyrsta spurningin er nafn vélmennisins sem á að búa til. MyMikrotikROuter
- Önnur spurningin er gælunafn botnsins sem verið er að búa til (ætti að enda á láni) MikrotikROuter_bot
Til að bregðast við munum við fá táknið á botni okkar, í mínu tilfelli er það:
Notaðu þennan tákn til að fá aðgang að HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Þá þarftu að finna vélmenni okkar í leitinni eftir nafni @MikrotikROuter_bot og ýttu á Start hnappinn.
Eftir það þarftu að opna vafrann og slá inn eftirfarandi línu:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Þar sem XXXXXXXXXXXXXXXXXX er auðkenni lánmanns þíns.
Síðan opnast svipað og eftirfarandi:
Við finnum eftirfarandi texta á því:
"spjall":{"id":631290,
Þannig að við höfum allar nauðsynlegar upplýsingar til að skrifa handrit fyrir Mikrotik, þ.e.
Bot tákn: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Spjallauðkenni þar sem hann ætti að skrifa: 631290
Til að athuga getum við farið í gegnum vafrann:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Ætti að fá niðurstöðuna:
Til hægðarauka munum við strax bæta við skipunum fyrir botmanninn:
Að finna reikning með nafni @botfaðir
Svo skrifum við honum skipun / setcommands
- Hann mun spyrja hvaða bot
Við skrifum:
@MikrotikROuter_bot
Bæta við skipunum:
- helloworld< — Próf skilaboð á spjalli 1
- itsworking-Prufuskilaboð á spjalli 2
- wolmypc-vakaðu tölvuna mína
Nú ef þú skrifar "/" í spjallinu ættirðu að fá:
Nú skulum við halda áfram í MikroTik.
RouterOS er með console tól til að afrita skrár í gegnum ftp eða http / https, tólið heitir fetch, sem er það sem við munum nota.
Opið flugstöðinni og sláðu inn:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Vinsamlegast athugaðu að MikroTik þarf "» til að flýja skilti «?' í vefslóðinni.
Ætti að fá niðurstöðuna:
Nú skulum við halda áfram að handritum:
Halló heimur
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}
þess að vinna
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"
Ekki gleyma að tilgreina rétt Mac og viðmótsheiti, svo og bot-token og chat_id.
Nú mun ég útskýra aðeins hvað þeir gera:
"helloworld" handritið sendir skilaboð: "Halló, heimur!" í spjallið okkar við botninn.
"Itsworking" forskriftin sendir skilaboð: "Prófið í lagi, það virkar!" í spjallið okkar við botninn.
Þessi handrit eru til sýnikennslu.
Ég bætti við "wolmypc" forskriftinni sem einni af mögulegum útfærslum.
Þegar handritið er keyrt mun vélmenni skrifa „wol OK“ í spjallið.
Reyndar geturðu keyrt nákvæmlega hvaða forskrift sem er.
Búðu til verkefni:
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
Lesanlegt útsýniþað er ekki ljóst hvers vegna, en frá vinnuhandritinu birtir það ekki alþjóðleg gögn, bætti handritinu við þegar kerfið ræsir.
Telegram gangsetning
: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;
}
Hvernig virkar þetta
Sæktu „getUpdates“ skilaboðin okkar á 30 sekúndna fresti og skiptu síðan til að komast að því update_id (skilaboðanúmer) og texta (lið okkar) og spjall_id . Sjálfgefið, getUpdates birtir frá 1 til 100 skilaboð, til þæginda, eftir að hafa lesið skipunina, eyðum við skilaboðunum. Telegram api segir að til að lesa skilaboð þarftu skilaboðanúmerið + 1
/getUpdates?offset=update_id + 1
Allt prófað á Mikrotik rb915 RouterOS 6.37.1
Ef þú sendir margar skipanir í einu verða þær allar framkvæmdar til skiptis með 30 sekúndna millibili.
PS Kærar þakkir til Kirill Kazakov fyrir hugmyndina og vinur minn Alexander fyrir aðstoð við handritin.
tilvísanir
uppfærsla:
03:11:16
Bætt handrit:
Bætti við ávísun fyrir chat_id
Til að athuga hvort einhver sé fífl, ef einhver skrifar til botnsins okkar, mun hann svara honum: „Ég get ekki talað við þig. “, mun á sama hátt svara okkur ef það þekkir ekki skipunina.
Eftir að skipunin hefur verið framkvæmt hættir botninn áskrift að spjallinu (sjá wolmypc forskrift)
DUP
Fannst með
UPD 08.12.2016/XNUMX/XNUMX
í Telegram, greinilega, breyttu þeir aðeins „útblástur“ á getUpdate. núna í aðalforritinu þarftu að leiðrétta færsluna frá 2 í 1
breytingar
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Heimild: www.habr.com