Alexander Koryukin ez ji bo vê pêkanînê dehf kir
Û şîroveyek di yek ji komên VK de ji hêla Kirill Kazakov ve:
Erê, ew qet ne ewle ye. Ez tercîh dikim botek telegramê binivîsim ku tenê fermanên çalakkirinê ji hesabê min qebûl dike.
Min biryar da ku botek weha binivîsim.
Ji ber vê yekê, yekem tiştê ku divê hûn bikin ev e ku di telegramê de botek çêbikin.
- Em di lêgerînê de hesabek bi navê @botfather dibînin
- Bişkojka Destpêkê ya li binê ekranê bikirtînin
- Dûv re em fermana /newbot jê re dinivîsin
Paşê em bersiva 2 pirsên hêsan didin:
- Pirsa yekem navê bota ku tê çêkirin e MyMikrotikROuter
- Pirsa duyemîn paşnavê bota ku tê afirandin e (divê bi botê biqede) MikrotikROuter_bot
Di bersivê de, em ê nîşana bota xwe bistînin, di doza min de ev e:
Vê nîşanê bikar bînin ku hûn bigihîjin HTTP API: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Dûv re, hûn hewce ne ku di nav lêgerînê de bota me bibînin @MikrotikROuter_bot û bişkojka Destpêkê bikirtînin.
Piştî vê yekê, hûn hewce ne ku geroka xwe vekin û rêza jêrîn têkevin:
https://api.telegram.org/botXXXXXXXXXXXXXXXXXX/getUpdates
Li ku derê XXXXXXXXXXXXXXXXXXX nîşana bota we ye.
Rûpelek mîna ya jêrîn dê vebe:
Em li ser wê nivîsa jêrîn dibînin:
"chat":{"id":631290,
Ji ber vê yekê, me hemî agahdariya pêwîst ji bo nivîsandina nivîsarên ji bo Mikrotik heye, bi navê:
Nîşana botê: 265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4
Nasnameya Chat ku divê ew binivîsîne: 631290
Ji bo kontrolkirinê, em dikarin bi gerokê re biçin:
https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test
Divê hûn encamê bistînin:
Ji bo rehetiya me, em tavilê fermanan ji bo botê zêde bikin:
Dîtina hesabek bi navê @botfather
Paşê em jê re fermanek dinivîsin / setcommands
- Ew ê bipirse kîjan bot
Em dinivîsin:
@MikrotikROuter_bot
Zêdekirina fermanan:
- helloworld< — Peyama ceribandinê li ser chat 1
- dixebite - Peyama Testê li ser chat 2
- wolmypc - PC-ya min hişyar bike
Naha heke hûn di chatê de "/" binivîsin, divê hûn bistînin:
Naha em werin ser MikroTik.
RouterOS ji bo kopîkirina pelan bi ftp an http/https ve amûrek konsolê heye, jê re fetch tê gotin, ya ku em ê bikar bînin ev e.
Vekirî termînal û têkevin:
/tool fetch url="https://api.telegram.org/bot265373548:AAFyGCqJCei9mvcxvXOWBfnjSt1p3sX1XH4/sendmessage?chat_id=631290&text=test " keep-result=no
Ji kerema xwe not bikin ku MikroTik hewce dike ""ji nîşanê revîn"?" di URL-ê de.
Divê hûn encamê bistînin:
Naha em biçin ser senaryoyan:
silav dinyayê
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}
karê xwe dike
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"
Ji bîr nekin ku navê mac û navrûyê rast, û hem jî bot-token û chat_id diyar bikin.
Niha ez ê hinekî rave bikim ka ew çi dikin:
Nivîsara "helloworld" peyamê dişîne: "Silav, cîhan!" sohbeta me ya bi botê re.
Skrîpta "itsworking" peyamê dişîne: "Têk test bike, ew dixebite!" sohbeta me ya bi botê re.
Ev senaryo ji bo nîşandana xebatê ne.
Min skrîpta "wolmypc" wekî yek ji pêkanînên gengaz lê zêde kir.
Dema ku senaryo qediya, bot dê li ser chatê "wol OK" binivîse.
Bi rastî, hûn dikarin bi tevahî her skrîptê bimeşînin.
Karûbarek çêbikin:
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
Dîtina xwendinêNe diyar e çima, lê ew daneyên gerdûnî ji skrîpta xebatê ranagihîne, dema ku pergalê dest pê dike skrîpt hate zêdekirin.
Telegram-destpêk
: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") ;
Têlxiram
: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;
}
Çawa ev karê
Em her 30 saniyeyan carekê peyamên xwe yên "getUpdates" dakêşin, dûv re wan parsek dikin da ku fêr bibin update_id (hejmara peyamê) û nivîstok (tîmên me) û chat_id . Ji hêla xwerû, getUpdates ji bo rehetiyê ji 1 heta 100 peyaman nîşan dide, piştî xwendina fermanê, peyam tê jêbirin. api ya Telegram dibêje ku ji bo xwendina peyamekê hûn hewceyê jimareya peyamê + 1 in
/getUpdates?offset=update_id + 1
Her tişt li ser Mikrotik rb915 RouterOS 6.37.1 ceribandin
Ger hûn di yek carê de gelek fermanan bişînin, ew ê hemî yek bi yek bi navberek 30 saniyeyî bêne darve kirin.
PS Gelek spas ji Kirill Kazakov re ji bo ramanê û ji hevalê min Alexander re ji bo alîkariya wî ya bi senaryoyan.
references
nûkirin:
03:11:16
Nivîsarên çêtir:
Ji bo chat_id kontrol zêde kirin
Bêaqil kontrol bikin, ger kesek ji bota me re binivîsîne, ew ê bersivê bide wî: "Ez nikarim bi te re biaxivim." “, ger fermanê nas neke dê bi heman awayî bersiva me bide.
Piştî pêkanîna fermanê, bot ji sohbetê vediqete (li skrîpta wolmypc binêre)
DUP
Bi dîtin
UPD 08.12.2016/XNUMX/XNUMX
Telegram xuya ye ku getUpdate "exhaust" hinekî guhert. Naha di skrîpta bingehîn de hûn hewce ne ku ji 2 ber 1 veqetandina peyamê rast bikin
guhertin
:local message [:pick $content ($startLoc + 2) $endLoc] ;
заменить на :
:local message [:pick $content ($startLoc + 1) $endLoc] ;
Source: www.habr.com